ExamOrgService.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using Furion.DatabaseAccessor.Extensions;
  2. using YBEE.EQM.Core;
  3. namespace YBEE.EQM.Application;
  4. /// <summary>
  5. /// 被监测机构管理服务
  6. /// </summary>
  7. public class ExamOrgService(IRepository<ExamOrg> rep) : IExamOrgService, ITransient
  8. {
  9. /// <summary>
  10. /// 添加机构
  11. /// </summary>
  12. /// <param name="input"></param>
  13. /// <returns></returns>
  14. public async Task AddList(AddExamOrgListInput input)
  15. {
  16. var existsOrgIdList = await rep.Where(t => t.ExamPlanId == input.ExamPlanId).Select(t => t.SysOrgId).ToListAsync();
  17. var addOrgIdList = from t in input.SysOrgIdList where !(from rid in existsOrgIdList select rid).Contains(t) select t;
  18. var roles = addOrgIdList.Select(u => new ExamOrg
  19. {
  20. ExamPlanId = input.ExamPlanId,
  21. SysOrgId = u,
  22. }).ToList();
  23. await rep.InsertAsync(roles);
  24. }
  25. /// <summary>
  26. /// 移出机构
  27. /// </summary>
  28. /// <param name="input"></param>
  29. /// <returns></returns>
  30. public async Task Remove(DelExamOrgInput input)
  31. {
  32. var roleUsers = await rep.Where(t => input.IdList.Contains(t.Id)).ToListAsync();
  33. await rep.DeleteAsync(roleUsers);
  34. }
  35. /// <summary>
  36. /// 切换机构是否参与区统一监测
  37. /// </summary>
  38. /// <param name="input"></param>
  39. /// <returns></returns>
  40. public async Task SwitchRequiredSample(SwitchExamOrgRequiredSampleInput input)
  41. {
  42. var item = await rep.FirstOrDefaultAsync(t => t.Id == input.Id) ?? throw Oops.Oh(ErrorCode.E2001);
  43. item.IsRequiredExam = input.IsRequiredExam;
  44. await item.UpdateIncludeAsync(new[] { nameof(item.IsRequiredExam) });
  45. }
  46. /// <summary>
  47. /// 根据监测计划ID获取监测机构列表
  48. /// </summary>
  49. /// <param name="examPlanId"></param>
  50. /// <returns></returns>
  51. public async Task<List<ExamOrgOutput>> GetListByExamPlanId(int examPlanId)
  52. {
  53. var items = await rep.DetachedEntities.Where(t => t.ExamPlanId == examPlanId).ProjectToType<ExamOrgOutput>().ToListAsync();
  54. var odrs = await rep.Change<ExamOrgDataReport>().Where(t => t.ExamOrg.ExamPlanId == examPlanId).ToListAsync();
  55. foreach (var item in items)
  56. {
  57. item.DataReports = odrs.Where(t => t.ExamOrgId == item.Id).ToDictionary(t => (short)t.Type, u => u.Status);
  58. }
  59. return items;
  60. }
  61. /// <summary>
  62. /// 根据监测计划ID获取监测机构简要列表
  63. /// </summary>
  64. /// <param name="examPlanId"></param>
  65. /// <returns></returns>
  66. public async Task<List<ExamOrgLiteOutput>> GetLiteListByExamPlanId(int examPlanId)
  67. {
  68. var items = await rep.DetachedEntities.Where(t => t.ExamPlanId == examPlanId).ProjectToType<ExamOrgLiteOutput>().ToListAsync();
  69. return items;
  70. }
  71. /// <summary>
  72. /// 分页查询监测机构列表
  73. /// </summary>
  74. /// <param name="input"></param>
  75. /// <returns></returns>
  76. public async Task<PageResult<ExamOrgOutput>> QueryPageList(ExamOrgPageInput input)
  77. {
  78. var orgName = !string.IsNullOrEmpty(input.OrgName?.Trim());
  79. var ret = await rep.DetachedEntities.Where(t => t.ExamPlanId == input.ExamPlanId)
  80. .Where((orgName, u => EF.Functions.Like(u.SysOrg.FullName, $"%{input.OrgName.Trim()}%")))
  81. .ProjectToType<ExamOrgOutput>()
  82. .ToADPagedListAsync(input.PageIndex, input.PageSize);
  83. var odrs = await rep.Change<ExamOrgDataReport>().Where(t => t.ExamOrg.ExamPlanId == input.ExamPlanId).ProjectToType<ExamOrgDataReportOutput>().ToListAsync();
  84. foreach (var item in ret.Items)
  85. {
  86. item.DataReportList = odrs.Where(t => t.ExamOrgId == item.Id).ToList();
  87. item.DataReports = item.DataReportList.ToDictionary(t => (short)t.Type, u => u.Status);
  88. }
  89. return ret;
  90. }
  91. /// <summary>
  92. /// 分页查询未加入的机构
  93. /// </summary>
  94. /// <param name="input"></param>
  95. /// <returns></returns>
  96. public async Task<PageResult<SysOrgLiteOutput>> QueryNotInSysOrgPageList(ExamOrgNotInPageInput input)
  97. {
  98. var code = !string.IsNullOrEmpty(input.Code?.Trim());
  99. var name = !string.IsNullOrEmpty(input.Name?.Trim());
  100. var examPlan = await rep.Change<ExamPlan>().DetachedEntities.FirstOrDefaultAsync(t => t.Id == input.ExamPlanId);
  101. var inOrgIds = await rep.DetachedEntities.Where(t => t.ExamPlanId == input.ExamPlanId).Select(t => t.SysOrgId).ToListAsync();
  102. var ret = await rep.Change<SysOrg>().DetachedEntities
  103. .Where((code, u => EF.Functions.Like(u.Code, $"%{input.Code.Trim()}%")))
  104. .Where((name, u => EF.Functions.Like(u.FullName, $"%{input.Name.Trim()}%")))
  105. .Where(input.UrbanRuralType.HasValue, t => t.UrbanRuralType == input.UrbanRuralType)
  106. .Where(input.Status.HasValue, t => t.Status == input.Status)
  107. .Where(t => t.OrgType == OrgType.SCHOOL && t.EducationStage == examPlan.EducationStage && t.UrbanRuralType != UrbanRuralType.NONE && !inOrgIds.Contains(t.Id))
  108. .ProjectToType<SysOrgLiteOutput>()
  109. .ToADPagedListAsync(input.PageIndex, input.PageSize);
  110. return ret;
  111. }
  112. /// <summary>
  113. /// 分页查询机构监测计划列表
  114. /// </summary>
  115. /// <param name="input"></param>
  116. /// <returns></returns>
  117. public async Task<PageResult<ExamPlanOutput>> QueryExamPlanPageList(ExamPlanPageInput input)
  118. {
  119. var name = !string.IsNullOrEmpty(input.Name?.Trim());
  120. var searchBeginTime = !string.IsNullOrEmpty(input.SearchBeginTime?.Trim());
  121. var searchEndTime = !string.IsNullOrEmpty(input.SearchEndTime?.Trim());
  122. var ret = await rep.DetachedEntities
  123. .Where(t => t.SysOrgId == CurrentSysUserInfo.SysOrgId && (t.ExamPlan.Status == ExamStatus.ACTIVE || t.ExamPlan.Status == ExamStatus.STOPPED) && t.ExamPlan.IsDeleted == false)
  124. .Where((name, u => EF.Functions.Like(u.ExamPlan.Name, $"%{input.Name.Trim()}%") || EF.Functions.Like(u.ExamPlan.FullName, $"%{input.Name.Trim()}%") || EF.Functions.Like(u.ExamPlan.ShortName, $"%{input.Name.Trim()}%")))
  125. .Where(input.EducationStage.HasValue, t => t.ExamPlan.EducationStage == input.EducationStage)
  126. //.Where(input.ExamPeriodType.HasValue, t => t.ExamPlan.ExamPeriodType == input.ExamPeriodType)
  127. //.Where(input.ExamType.HasValue, t => t.ExamPlan.ExamType == input.ExamType)
  128. .Where(input.SemesterId.HasValue, t => t.ExamPlan.SemesterId == input.SemesterId)
  129. .Where(t => (t.ExamPlan.Status == ExamStatus.ACTIVE || t.ExamPlan.Status == ExamStatus.STOPPED) && (!input.Status.HasValue || input.Status.HasValue && t.ExamPlan.Status == input.Status))
  130. .Where((searchBeginTime, u => u.ExamPlan.CreateTime >= DateTime.Parse(input.SearchBeginTime)))
  131. .Where((searchEndTime, u => u.ExamPlan.CreateTime <= DateTime.Parse(input.SearchEndTime)))
  132. .OrderByDescending(t => t.ExamPlanId)
  133. .Select(t => t.ExamPlan)
  134. .ProjectToType<ExamPlanOutput>()
  135. .ToADPagedListAsync(input.PageIndex, input.PageSize);
  136. return ret;
  137. }
  138. }