ExamSampleStudentService.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using YBEE.EQM.Core;
  2. using System.Linq.Dynamic.Core;
  3. namespace YBEE.EQM.Application;
  4. /// <summary>
  5. /// 监测抽样学生管理服务
  6. /// </summary>
  7. public class ExamSampleStudentService(IRepository<ExamSampleStudent> rep) : IExamSampleStudentService, ITransient
  8. {
  9. /// <summary>
  10. /// 分页查询抽样学生信息
  11. /// </summary>
  12. /// <param name="input"></param>
  13. /// <returns></returns>
  14. public async Task<PageResult<ExamSampleStudentOutput>> QueryPageList(ExamSampleStudentPageInput input)
  15. {
  16. // 抽样方案
  17. var examSample = await rep.Change<ExamSample>().DetachedEntities
  18. .FirstOrDefaultAsync(t => t.Id == input.ExamSampleId &&
  19. t.ExamPlan.IsFixedExamSample == true &&
  20. t.Status == ExamSampleStatus.SUCCESSFUL &&
  21. t.IsSelected == true
  22. ) ?? throw Oops.Oh(ErrorCode.E2001);
  23. var name = !string.IsNullOrEmpty(input.Name?.Trim());
  24. var idNumber = !string.IsNullOrEmpty(input.IdNumber?.Trim());
  25. var examNumber = !string.IsNullOrEmpty(input.ExamNumber?.Trim());
  26. var ret = await rep.DetachedEntities.Where(t => t.ExamSampleId == examSample.Id && t.ExamStudent.SysOrgId == CurrentSysUserInfo.SysOrgId)
  27. .Where((name, u => EF.Functions.Like(u.ExamStudent.Name, $"%{input.Name.Trim()}%")))
  28. .Where((idNumber, u => EF.Functions.Like(u.ExamStudent.IdNumber, $"%{input.IdNumber.Trim()}%")))
  29. .Where((examNumber, u => EF.Functions.Like(u.ExamNumber, $"%{input.ExamNumber.Trim()}%")))
  30. .Where(input.ExamSampleType.HasValue, t => t.ExamSampleType == input.ExamSampleType)
  31. .Where(input.CertificateType.HasValue, t => t.ExamStudent.CertificateType == input.CertificateType)
  32. .Where(input.GradeId.HasValue, t => t.ExamStudent.GradeId == input.GradeId)
  33. .Where(input.ClassNumber.HasValue, t => t.ExamStudent.ClassNumber == input.ClassNumber)
  34. .Where(input.SysOrgBranchId.HasValue, t => t.ExamStudent.SysOrgBranchId == input.SysOrgBranchId)
  35. .ProjectToType<ExamSampleStudentOutput>()
  36. .OrderBy(t => t.ExamStudent.SysOrgBranchId).ThenBy(t => t.ExamStudent.GradeId).ThenBy(t => t.ExamSampleType).ThenBy(t => t.Sequence)
  37. .ToADPagedListAsync(input.PageIndex, input.PageSize);
  38. return ret;
  39. }
  40. /// <summary>
  41. /// 根据监测号查询已发布监测方案中当前机构下学生信息
  42. /// </summary>
  43. /// <param name="examPlanId">监测计划ID</param>
  44. /// <param name="examNumber">监测号</param>
  45. /// <returns></returns>
  46. public async Task<ExamSampleStudentOutput> GetByExamNumber(int examPlanId, string examNumber)
  47. {
  48. var item = await rep.DetachedEntities.Include(t => t.ExamStudent)
  49. .FirstOrDefaultAsync(t => t.ExamStudent.ExamPlanId == examPlanId &&
  50. t.ExamStudent.SysOrgId == CurrentSysUserInfo.SysOrgId &&
  51. t.ExamSample.IsSelected == true &&
  52. t.ExamNumber == examNumber);
  53. return item.Adapt<ExamSampleStudentOutput>();
  54. }
  55. /// <summary>
  56. /// 查询监测学生信息
  57. /// </summary>
  58. /// <param name="input"></param>
  59. /// <returns></returns>
  60. public async Task<ExamSampleStudentOutput> QueryExamSampleStudent(QueryExamSampleStudentInput input)
  61. {
  62. var item = await rep.DetachedEntities.Include(t => t.ExamStudent)
  63. .FirstOrDefaultAsync(t => t.ExamStudent.ExamPlanId == input.ExamPlanId &&
  64. t.ExamStudent.SysOrgId == CurrentSysUserInfo.SysOrgId &&
  65. t.ExamStudent.SysOrgBranchId == input.SysOrgBranchId &&
  66. t.ExamSample.IsSelected == true &&
  67. t.ExamStudent.ExamGradeId == input.ExamGradeId &&
  68. t.ExamStudent.ClassNumber == input.ClassNumber &&
  69. t.ExamNumber == input.ExamNumber);
  70. return item.Adapt<ExamSampleStudentOutput>();
  71. }
  72. /// <summary>
  73. /// 中心查询抽样名单
  74. /// </summary>
  75. /// <param name="input"></param>
  76. /// <returns></returns>
  77. public async Task<PageResult<ExamSampleStudentOrgOutput>> QueryCenterPageList(ExamSampleStudentPageInput input)
  78. {
  79. var name = !string.IsNullOrEmpty(input.Name?.Trim());
  80. var idNumber = !string.IsNullOrEmpty(input.IdNumber?.Trim());
  81. var examNumber = !string.IsNullOrEmpty(input.ExamNumber?.Trim());
  82. var query = rep.DetachedEntities.Where(t => t.ExamSampleId == input.ExamSampleId)
  83. .Where((name, u => EF.Functions.Like(u.ExamStudent.Name, $"%{input.Name.Trim()}%")))
  84. .Where((idNumber, u => EF.Functions.Like(u.ExamStudent.IdNumber, $"%{input.IdNumber.Trim()}%")))
  85. .Where((examNumber, u => EF.Functions.Like(u.ExamNumber, $"%{input.ExamNumber.Trim()}%")))
  86. .Where(input.ExamSampleType.HasValue, t => t.ExamSampleType == input.ExamSampleType)
  87. .Where(input.CertificateType.HasValue, t => t.ExamStudent.CertificateType == input.CertificateType)
  88. .Where(input.GradeId.HasValue, t => t.ExamStudent.GradeId == input.GradeId)
  89. .Where(input.ClassNumber.HasValue, t => t.ExamStudent.ClassNumber == input.ClassNumber)
  90. .Where(input.SysOrgId.HasValue, t => t.ExamStudent.SysOrgId == input.SysOrgId)
  91. .Where(input.SysOrgBranchId.HasValue, t => t.ExamStudent.SysOrgBranchId == input.SysOrgBranchId)
  92. .OrderBy(t => t.ExamStudent.SysOrgId).ThenBy(t => t.ExamStudent.SysOrgBranchId).ThenBy(t => t.ExamStudent.GradeId);
  93. for (int i = 0; i < input.SortOrders.Count; i++)
  94. {
  95. query = query.ThenBy(input.SortOrders[i]);
  96. }
  97. var ret = await query.ProjectToType<ExamSampleStudentOrgOutput>().ToADPagedListAsync(input.PageIndex, input.PageSize);
  98. return ret;
  99. }
  100. }