OrderRepository.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Hotline.Identity.Roles;
  7. using Hotline.Orders;
  8. using Hotline.Repository.SqlSugar.DataPermissions;
  9. using Hotline.Repository.SqlSugar.Extensions;
  10. using Hotline.Settings;
  11. using Hotline.Settings.TimeLimits;
  12. using Hotline.Share.Consts;
  13. using Hotline.Share.Dtos.Order;
  14. using Hotline.Share.Enums.Order;
  15. using SqlSugar;
  16. using XF.Domain.Dependency;
  17. using XF.Domain.Exceptions;
  18. using XF.Domain.Repository;
  19. namespace Hotline.Repository.SqlSugar.Orders
  20. {
  21. public class OrderRepository : BaseRepositoryWorkflow<Order>, IOrderRepository, IScopeDependency
  22. {
  23. private readonly IDataPermissionFilterBuilder _dataPermissionFilterBuilder;
  24. private readonly ITimeLimitDomainService _timeLimitDomainService;
  25. public OrderRepository(ISugarUnitOfWork<HotlineDbContext> uow,
  26. IDataPermissionFilterBuilder dataPermissionFilterBuilder,
  27. ITimeLimitDomainService timeLimitDomainService
  28. ) : base(uow, dataPermissionFilterBuilder)
  29. {
  30. _dataPermissionFilterBuilder = dataPermissionFilterBuilder;
  31. _timeLimitDomainService = timeLimitDomainService;
  32. }
  33. public async Task<string> AddOrderNavAsync(Order order, CancellationToken cancellationToken)
  34. {
  35. if (order.OrderType == EOrderType.MarketSupervisionBy12315)
  36. {
  37. //弥补AddNav方法没有自动指派到创建人
  38. order.AssignToCreator(_dataPermissionFilterBuilder.DataPermissionManager);
  39. if (order.AcceptTypeCode == AcceptTypeConst.TouSu)
  40. {
  41. order.OrderComplain.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager);
  42. await AddNav(order).Include(d => d.OrderComplain).ExecuteCommandAsync();
  43. }
  44. else if (order.AcceptTypeCode == AcceptTypeConst.JuBao)
  45. {
  46. order.OrderReport.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager);
  47. await AddNav(order).Include(d => d.OrderReport).ExecuteCommandAsync();
  48. }
  49. else
  50. {
  51. throw UserFriendlyException.SameMessage("12315工单不支持该受理类型");
  52. }
  53. }
  54. else
  55. {
  56. await AddAsync(order, cancellationToken);
  57. }
  58. return order.Id;
  59. }
  60. public async Task UpdateOrderNavAsync(Order order, CancellationToken cancellationToken)
  61. {
  62. await UpdateAsync(order, cancellationToken);
  63. if (order.OrderType == EOrderType.MarketSupervisionBy12315)
  64. {
  65. if (order.AcceptTypeCode == AcceptTypeConst.TouSu)
  66. {
  67. await Db.Insertable<OrderComplain>(order.OrderComplain).ExecuteCommandAsync();
  68. }
  69. else if (order.AcceptTypeCode == AcceptTypeConst.JuBao)
  70. {
  71. await Db.Insertable<OrderReport>(order.OrderReport).ExecuteCommandAsync();
  72. }
  73. else
  74. {
  75. throw UserFriendlyException.SameMessage("12315工单不支持该受理类型");
  76. }
  77. }
  78. }
  79. public async Task RemoveOrderComplainAsync(OrderComplain orderComplain, CancellationToken cancellationToken)
  80. {
  81. await Db.Deleteable(orderComplain).ExecuteCommandAsync();
  82. }
  83. public async Task RemoveOrderReportAsync(OrderReport orderReport, CancellationToken cancellationToken)
  84. {
  85. await Db.Deleteable(orderReport).ExecuteCommandAsync();
  86. }
  87. /// <summary>
  88. /// 即将超期列表
  89. /// </summary>
  90. /// <param name="dto"></param>
  91. /// <param name="AboutToExpireNum"></param>
  92. /// <param name="cancellationToken"></param>
  93. /// <returns></returns>
  94. public async Task<List<AboutToExpireDto>> GetAboutToExpireAsync(AboutToExpireListDto dto,int AboutToExpireNum, CancellationToken cancellationToken)
  95. {
  96. DateTime stTime = _timeLimitDomainService.WorkDay(DateTime.Now);
  97. var oders = await Db.Queryable<Order>()
  98. .WhereIF(dto.IsProvince.HasValue, x => x.IsProvince == dto.IsProvince)
  99. .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No == dto.No)
  100. .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
  101. .Where(x=> x.ExpiredTime != null && stTime <= x.ExpiredTime.Value)
  102. .Where(x => x.ExpiredTime != null && (x.ExpiredTime.Value - stTime).TotalHours <= AboutToExpireNum)
  103. .Where(x=>x.Status== EOrderStatus.Handling || x.Status == EOrderStatus.Countersigning)
  104. .Select(x => new AboutToExpireDto()
  105. {
  106. IntervalText = _timeLimitDomainService.CalcTimeInterval(stTime, x.ExpiredTime!.Value, false)
  107. }, true).ToListAsync();
  108. return oders;
  109. }
  110. /// <summary>
  111. /// 已超期列表
  112. /// </summary>
  113. /// <param name="dto"></param>
  114. /// <param name="cancellationToken"></param>
  115. /// <returns></returns>
  116. public async Task<List<AboutToExpireDto>> GetToExpireAsync(AboutToExpireListDto dto, CancellationToken cancellationToken)
  117. {
  118. DateTime stTime = _timeLimitDomainService.WorkDay(DateTime.Now);
  119. var oders = await Db.Queryable<Order>()
  120. .WhereIF(dto.IsProvince.HasValue, x => x.IsProvince == dto.IsProvince)
  121. .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No == dto.No)
  122. .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
  123. .Where(x => x.ExpiredTime != null && stTime > x.ExpiredTime.Value)
  124. .Where(x => x.Status != EOrderStatus.Handling && x.Status != EOrderStatus.Countersigning)
  125. .Select(x => new AboutToExpireDto()
  126. {
  127. IntervalText = _timeLimitDomainService.CalcTimeInterval(stTime, x.ExpiredTime!.Value, false)
  128. }, true).ToListAsync();
  129. return oders;
  130. }
  131. /// <summary>
  132. /// 工单词库批量删除
  133. /// </summary>
  134. /// <param name="ids"></param>
  135. /// <param name="cancellationToken"></param>
  136. /// <returns></returns>
  137. public async Task RemoveOrderWrodBatchAsync(List<string> ids, CancellationToken cancellationToken) {
  138. await Db.Deleteable<OrderWord>().In(x=>x.Id,ids).ExecuteCommandAsync(cancellationToken);
  139. }
  140. /// <summary>
  141. /// 工单观察批量删除
  142. /// </summary>
  143. /// <param name="ids"></param>
  144. /// <param name="cancellationToken"></param>
  145. /// <returns></returns>
  146. public async Task RemoveOrderObserveBatchAsync(List<string> ids, CancellationToken cancellationToken)
  147. {
  148. await Db.Deleteable<OrderObserve>().In(x => x.Id, ids).ExecuteCommandAsync(cancellationToken);
  149. }
  150. }
  151. }