| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using YBEE.EQM.Core;
- using System.Linq.Dynamic.Core;
- namespace YBEE.EQM.Application;
- /// <summary>
- /// 监测抽样学生管理服务
- /// </summary>
- public class ExamSampleStudentService(IRepository<ExamSampleStudent> rep) : IExamSampleStudentService, ITransient
- {
- /// <summary>
- /// 分页查询抽样学生信息
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public async Task<PageResult<ExamSampleStudentOutput>> QueryPageList(ExamSampleStudentPageInput input)
- {
- // 抽样方案
- var examSample = await rep.Change<ExamSample>().DetachedEntities
- .FirstOrDefaultAsync(t => t.Id == input.ExamSampleId &&
- t.ExamPlan.IsFixedExamSample == true &&
- t.Status == ExamSampleStatus.SUCCESSFUL &&
- t.IsSelected == true
- ) ?? throw Oops.Oh(ErrorCode.E2001);
- var name = !string.IsNullOrEmpty(input.Name?.Trim());
- var idNumber = !string.IsNullOrEmpty(input.IdNumber?.Trim());
- var examNumber = !string.IsNullOrEmpty(input.ExamNumber?.Trim());
- var ret = await rep.DetachedEntities.Where(t => t.ExamSampleId == examSample.Id && t.ExamStudent.SysOrgId == CurrentSysUserInfo.SysOrgId)
- .Where((name, u => EF.Functions.Like(u.ExamStudent.Name, $"%{input.Name.Trim()}%")))
- .Where((idNumber, u => EF.Functions.Like(u.ExamStudent.IdNumber, $"%{input.IdNumber.Trim()}%")))
- .Where((examNumber, u => EF.Functions.Like(u.ExamNumber, $"%{input.ExamNumber.Trim()}%")))
- .Where(input.ExamSampleType.HasValue, t => t.ExamSampleType == input.ExamSampleType)
- .Where(input.CertificateType.HasValue, t => t.ExamStudent.CertificateType == input.CertificateType)
- .Where(input.GradeId.HasValue, t => t.ExamStudent.GradeId == input.GradeId)
- .Where(input.ClassNumber.HasValue, t => t.ExamStudent.ClassNumber == input.ClassNumber)
- .Where(input.SysOrgBranchId.HasValue, t => t.ExamStudent.SysOrgBranchId == input.SysOrgBranchId)
- .ProjectToType<ExamSampleStudentOutput>()
- .OrderBy(t => t.ExamStudent.SysOrgBranchId).ThenBy(t => t.ExamStudent.GradeId).ThenBy(t => t.ExamSampleType).ThenBy(t => t.Sequence)
- .ToADPagedListAsync(input.PageIndex, input.PageSize);
- return ret;
- }
- /// <summary>
- /// 根据监测号查询已发布监测方案中当前机构下学生信息
- /// </summary>
- /// <param name="examPlanId">监测计划ID</param>
- /// <param name="examNumber">监测号</param>
- /// <returns></returns>
- public async Task<ExamSampleStudentOutput> GetByExamNumber(int examPlanId, string examNumber)
- {
- var item = await rep.DetachedEntities.Include(t => t.ExamStudent)
- .FirstOrDefaultAsync(t => t.ExamStudent.ExamPlanId == examPlanId &&
- t.ExamStudent.SysOrgId == CurrentSysUserInfo.SysOrgId &&
- t.ExamSample.IsSelected == true &&
- t.ExamNumber == examNumber);
- return item.Adapt<ExamSampleStudentOutput>();
- }
- /// <summary>
- /// 查询监测学生信息
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public async Task<ExamSampleStudentOutput> QueryExamSampleStudent(QueryExamSampleStudentInput input)
- {
- var item = await rep.DetachedEntities.Include(t => t.ExamStudent)
- .FirstOrDefaultAsync(t => t.ExamStudent.ExamPlanId == input.ExamPlanId &&
- t.ExamStudent.SysOrgId == CurrentSysUserInfo.SysOrgId &&
- t.ExamStudent.SysOrgBranchId == input.SysOrgBranchId &&
- t.ExamSample.IsSelected == true &&
- t.ExamStudent.ExamGradeId == input.ExamGradeId &&
- t.ExamStudent.ClassNumber == input.ClassNumber &&
- t.ExamNumber == input.ExamNumber);
- return item.Adapt<ExamSampleStudentOutput>();
- }
- /// <summary>
- /// 中心查询抽样名单
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public async Task<PageResult<ExamSampleStudentOrgOutput>> QueryCenterPageList(ExamSampleStudentPageInput input)
- {
- var name = !string.IsNullOrEmpty(input.Name?.Trim());
- var idNumber = !string.IsNullOrEmpty(input.IdNumber?.Trim());
- var examNumber = !string.IsNullOrEmpty(input.ExamNumber?.Trim());
- var query = rep.DetachedEntities.Where(t => t.ExamSampleId == input.ExamSampleId)
- .Where((name, u => EF.Functions.Like(u.ExamStudent.Name, $"%{input.Name.Trim()}%")))
- .Where((idNumber, u => EF.Functions.Like(u.ExamStudent.IdNumber, $"%{input.IdNumber.Trim()}%")))
- .Where((examNumber, u => EF.Functions.Like(u.ExamNumber, $"%{input.ExamNumber.Trim()}%")))
- .Where(input.ExamSampleType.HasValue, t => t.ExamSampleType == input.ExamSampleType)
- .Where(input.CertificateType.HasValue, t => t.ExamStudent.CertificateType == input.CertificateType)
- .Where(input.GradeId.HasValue, t => t.ExamStudent.GradeId == input.GradeId)
- .Where(input.ClassNumber.HasValue, t => t.ExamStudent.ClassNumber == input.ClassNumber)
- .Where(input.SysOrgId.HasValue, t => t.ExamStudent.SysOrgId == input.SysOrgId)
- .Where(input.SysOrgBranchId.HasValue, t => t.ExamStudent.SysOrgBranchId == input.SysOrgBranchId)
- .OrderBy(t => t.ExamStudent.SysOrgId).ThenBy(t => t.ExamStudent.SysOrgBranchId).ThenBy(t => t.ExamStudent.GradeId);
- for (int i = 0; i < input.SortOrders.Count; i++)
- {
- query = query.ThenBy(input.SortOrders[i]);
- }
- var ret = await query.ProjectToType<ExamSampleStudentOrgOutput>().ToADPagedListAsync(input.PageIndex, input.PageSize);
- return ret;
- }
- }
|