ExamOrgResultService.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using Furion.DatabaseAccessor.Extensions;
  2. using Microsoft.AspNetCore.Http;
  3. using Microsoft.Extensions.Options;
  4. using YBEE.EQM.Core;
  5. namespace YBEE.EQM.Application;
  6. /// <summary>
  7. /// 监测机构反馈结果管理服务
  8. /// </summary>
  9. public class ExamOrgResultService(IRepository<ExamOrgResult> rep, IOptions<EqmSiteOptions> options, IHttpContextAccessor httpContextAccessor) : IExamOrgResultService, ITransient
  10. {
  11. private readonly EqmSiteOptions _eqmSiteOptions = options.Value;
  12. /// <summary>
  13. /// 添加结果文件
  14. /// </summary>
  15. /// <param name="input"></param>
  16. /// <returns></returns>
  17. public async Task Add(AddExamOrgResultInput input)
  18. {
  19. var item = input.Adapt<ExamOrgResult>();
  20. await item.InsertNowAsync();
  21. }
  22. /// <summary>
  23. /// 删除文件
  24. /// </summary>
  25. /// <param name="input"></param>
  26. /// <returns></returns>
  27. public async Task Del(BaseId input)
  28. {
  29. var item = await rep.FirstOrDefaultAsync(t => t.Id == input.Id) ?? throw Oops.Oh(ErrorCode.E2001);
  30. var fpath = Path.Combine(_eqmSiteOptions.ExamResultRoot, item.FilePath);
  31. if (File.Exists(fpath))
  32. {
  33. File.Delete(fpath);
  34. }
  35. await item.DeleteAsync();
  36. }
  37. /// <summary>
  38. /// 保存下载记录
  39. /// </summary>
  40. /// <param name="id"></param>
  41. /// <returns></returns>
  42. public async Task SaveDownloadRecord(int id)
  43. {
  44. var httpContext = httpContextAccessor.HttpContext;
  45. ExamOrgResultDownload item = new()
  46. {
  47. ExamOrgResultId = id,
  48. SysUserId = CurrentSysUserInfo.SysUserId,
  49. Account = CurrentSysUserInfo.Account,
  50. Ip = httpContext.GetRequestIPv4(),
  51. DownloadTime = DateTime.Now,
  52. };
  53. await rep.Change<ExamOrgResultDownload>().InsertNowAsync(item);
  54. }
  55. /// <summary>
  56. /// 获取ID获取监测机构反馈文件信息
  57. /// </summary>
  58. /// <param name="id"></param>
  59. /// <returns></returns>
  60. public async Task<ExamOrgResultOutput> GetById(int id)
  61. {
  62. var item = await rep.DetachedEntities.FirstOrDefaultAsync(t => t.Id == id) ?? throw Oops.Oh(ErrorCode.E2001);
  63. return item.Adapt<ExamOrgResultOutput>();
  64. }
  65. /// <summary>
  66. /// 根据监测计划获取机构反馈文件列表
  67. /// </summary>
  68. /// <param name="examPlanId"></param>
  69. /// <returns></returns>
  70. public async Task<List<ExamDataPublishOrgResultOutput>> GetByExamPlanId(int examPlanId)
  71. {
  72. var pubItems = await rep.Change<ExamDataPublish>().DetachedEntities
  73. .Where(t => t.ExamPlanId == examPlanId && t.Status == PublishStatus.PUBLISHED)
  74. .ProjectToType<ExamDataPublishOrgResultOutput>()
  75. .ToListAsync();
  76. foreach (var pubItem in pubItems)
  77. {
  78. if (pubItem.Status == PublishStatus.PUBLISHED)
  79. {
  80. var items = await rep.DetachedEntities.Where(t => t.SysOrgId == CurrentSysUserInfo.SysOrgId && t.ExamPlanId == examPlanId && t.ExamDataPublishId == pubItem.Id).ProjectToType<ExamOrgResultOutput>().ToListAsync();
  81. pubItem.ExamOrgResultList = items;
  82. }
  83. }
  84. return pubItems;
  85. }
  86. /// <summary>
  87. /// 根据发布内容ID获取机构文件列表
  88. /// </summary>
  89. /// <param name="publishId"></param>
  90. /// <returns></returns>
  91. public async Task<List<ExamOrgResultOutput>> GetByPublishId(int publishId)
  92. {
  93. var pub = await rep.Change<ExamDataPublish>().FirstOrDefaultAsync(t => t.Id == publishId) ?? throw Oops.Oh(ErrorCode.E2001);
  94. var items = await rep.DetachedEntities.Where(t => t.ExamDataPublishId == publishId).ProjectToType<ExamOrgResultOutput>().OrderBy(t => t.SysOrgId).ToListAsync();
  95. var norgs = await (from o in rep.Change<ExamOrg>().AsQueryable()
  96. where o.ExamPlanId == pub.ExamPlanId && !(from r in items select r.ExamOrgId).Contains(o.Id)
  97. select o).ProjectToType<ExamOrgOutput>().ToListAsync();
  98. int maxId = 1;
  99. if (items.Count != 0)
  100. {
  101. maxId = items.Max(t => t.Id) + 1;
  102. }
  103. items.AddRange(norgs.Select(t => new ExamOrgResultOutput()
  104. {
  105. Id = maxId++,
  106. ExamDataPublishId = publishId,
  107. ExamOrgId = t.Id,
  108. ExamOrg = t,
  109. }));
  110. return items;
  111. }
  112. }