RedPackAuditApplication.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. using Abp.Extensions;
  2. using Hotline.Settings;
  3. using Hotline.Share.Enums.Snapshot;
  4. using Hotline.Snapshot;
  5. using Microsoft.Extensions.DependencyInjection;
  6. using SnapshotWinFormsApp.Application.Dtos;
  7. using SnapshotWinFormsApp.Application.Interfaces;
  8. using SnapshotWinFormsApp.Entities.NewHotline;
  9. using SnapshotWinFormsApp.Entities.OldHotline;
  10. using SnapshotWinFormsApp.Repository;
  11. using SnapshotWinFormsApp.Repository.Enum;
  12. using SnapshotWinFormsApp.Repository.Interfaces;
  13. using SnapshotWinFormsApp.Tools;
  14. using SqlSugar;
  15. using SqlSugar.Extensions;
  16. using System.ComponentModel;
  17. namespace SnapshotWinFormsApp.Application;
  18. [Description("市民红包审核发放记录")]
  19. public class RedPackAuditApplication : ImportApplicationBase<Flow04_ExpandClapEntity, RedPackAudit, RedPackAuditRecordDto>, IImportApplication
  20. {
  21. private readonly ISourceRepository<Flow04_ExpandClapEntity> _flow04ExpandClapRepository;
  22. private readonly ISelectRepository<User> _userRepo;
  23. private readonly List<User> Users;
  24. private readonly IList<SystemOrganize> Organizers;
  25. private readonly IList<SelectOrderNo> Orders;
  26. private readonly ITargetRepository<RedPackRecord> _redPackRecordRepository;
  27. private IList<ThirdAccount> ThirdAccounts;
  28. private readonly ITargetRepository<SnapshotPointsRecord> _pointsRecordRepository;
  29. private readonly SnapshotUserInfoApplication _snapshotUserInfoApplication;
  30. private readonly IList<SelectOrderNo> OrderNos;
  31. public RedPackAuditApplication(CreateInstanceInDto inDto) : base(inDto)
  32. {
  33. _userRepo = new SelectRepository<User>(inDto);
  34. Users = _userRepo.Queryable().ToList();
  35. _flow04ExpandClapRepository = new SourceRepository<Flow04_ExpandClapEntity>(inDto);
  36. Organizers = new SelectRepository<SystemOrganize>(inDto).Queryable().ToList();
  37. Orders = new SelectRepository<SelectOrderNo>(inDto)
  38. .Queryable()
  39. .Where(m => m.CreationTime >= inDto.StartTime && m.CreationTime <= inDto.EndTime)
  40. .ToList();
  41. _redPackRecordRepository = new TargetRepository<RedPackRecord>(inDto);
  42. ThirdAccounts = new TargetRepository<ThirdAccount>(inDto).Queryable().ToList();
  43. _pointsRecordRepository = new TargetRepository<SnapshotPointsRecord>(inDto);
  44. _snapshotUserInfoApplication = new SnapshotUserInfoApplication(inDto);
  45. OrderNos = new SelectRepository<SelectOrderNo>(inDto).Queryable()
  46. .Where(m => m.CreationTime >= inDto.StartTime && m.CreationTime <= inDto.EndTime)
  47. .ToList();
  48. }
  49. public override async Task<RedPackAudit> GetTargetAsync(RedPackAuditRecordDto source, CancellationToken token)
  50. {
  51. var audit = new RedPackAudit();
  52. audit.InitId();
  53. audit.OldId = source.Id;
  54. audit.Status = source.FEC_AuditFlag == null ? ERedPackAuditStatus.Pending
  55. : source.FEC_AuditFlag == "1" ? ERedPackAuditStatus.Agree : ERedPackAuditStatus.Refuse;
  56. audit.AuditRemark = source.FEC_AuditOpinion;
  57. audit.IsSend = source.FEC_ISRedEnvelopes.Trim() == "2";
  58. audit.AcutalAmount = 0;
  59. if (source.FER_Money != 0)
  60. {
  61. audit.AcutalAmount = source.FER_Money;
  62. }
  63. audit.ApprovedAmount = source.FEC_Money;
  64. audit.ShouldAmount = source.FEC_Money;
  65. audit.AuditOrgId = Organizers.FirstOrDefault(m => m.oldBmid.ToString() == source.FEC_AuditBMID)?.Id;
  66. audit.AuditOrgName = source.FEC_AuditBMName;
  67. audit.AuditId = Users.FirstOrDefault(m => m.OldUserId.ToString() == source.FEC_AuditUserID)?.Id;
  68. audit.AuditName = source.FEC_AuditUserName;
  69. audit.AuditTime = source.FEC_AuditTime.ObjToDate();
  70. var order = Orders.FirstOrDefault(m => m.No == source.FSH_Code.Trim());
  71. if (order == null)
  72. {
  73. Logs.Err($"审核缺少工单数据. OldAuditId: {source.Id}, No: {source.FSH_Code}");
  74. return null;
  75. }
  76. audit.OrderId = order.Id;
  77. audit.PhoneNumber = source.FSH_LinkTel;
  78. return audit;
  79. }
  80. public override async Task InsertAfterAsync(Action<string> log, RedPackAuditRecordDto item, RedPackAudit target, bool isEnd, CancellationToken token)
  81. {
  82. await InsertRecordAsync(log, item, target, isEnd, token);
  83. await InsertPointsAsync(log, item, target, isEnd, token);
  84. }
  85. public override async Task SubmitBluk()
  86. {
  87. _redPackRecordRepository.SubmitBluk();
  88. _pointsRecordRepository.SubmitBluk();
  89. }
  90. public async Task InsertPointsAsync(Action<string> log, RedPackAuditRecordDto item, RedPackAudit target, bool isEnd, CancellationToken token)
  91. {
  92. if (item.FSH_AddDate.ObjToDate() <= new DateTime(2024, 12, 31, 23, 59, 59)) return;
  93. if (item.FSH_IndustryName != "安全隐患" && item.FSH_IndustryName != "电气焊作业申报") return;
  94. if (item.FEC_AuditFlag != "1") return;
  95. var points = new SnapshotPointsRecord
  96. {
  97. UserId = await GetUserIdByOpenIdAsync(log, item.WFAT_WXOpenid, token),
  98. Source = EPointsSource.Audit,
  99. Points = 5,
  100. Direction = EPointsDirection.In,
  101. OrderId = target.Id,
  102. CreationTime = item.FSH_AddDate.ObjToDate()
  103. };
  104. var orderId = OrderNos.FirstOrDefault(m => m.No == item.FSH_Code.Trim());
  105. if (orderId == null)
  106. {
  107. throw new Exception("工单不存在");
  108. }
  109. points.OrderId = orderId.Id;
  110. if (points.UserId.IsNullOrEmpty())
  111. {
  112. var id = await GetUserIdByOpenIdAsync(log, item.WFAT_WXOpenid, token);
  113. return;
  114. }
  115. points.OldId = item.Id;
  116. _pointsRecordRepository.InsertBulk(points, isEnd);
  117. }
  118. public override async Task EndTaskAsync(Action<string> log, CancellationToken token)
  119. {
  120. _pointsRecordRepository.SubmitBluk();
  121. }
  122. public async Task InsertRecordAsync(Action<string> log, RedPackAuditRecordDto item, RedPackAudit target, bool isEnd, CancellationToken token)
  123. {
  124. var record = new RedPackRecord();
  125. record.InitId();
  126. record.Id = item.Id;
  127. record.OrderId = target.OrderId;
  128. record.RedPackAuditId = target.Id;
  129. record.Amount = item.FER_Money;
  130. record.PeopleType = EReadPackUserType.Citizen;
  131. record.Name = item.FSH_LinkName;
  132. record.PhoneNumber = item.FER_Tel;
  133. record.WXOpenId = item.FER_openid;
  134. record.PickupStatus = ERedPackPickupStatus.Unreceived;
  135. if (item.FEC_ISRedEnvelopes == "2")
  136. {
  137. record.DistributionState = EReadPackSendStatus.Successful;
  138. record.PickupStatus = ERedPackPickupStatus.Received;
  139. }
  140. if (item.FEC_ClapType == "2")
  141. {
  142. record.FailCase = ERedPackPickupFailCase.Excuse;
  143. record.DistributionState = EReadPackSendStatus.Fail;
  144. record.PickupStatus = ERedPackPickupStatus.Excuse;
  145. record.Remark = "婉拒红包";
  146. }
  147. if (item.FEC_ClapType == "1")
  148. {
  149. record.FailCase = ERedPackPickupFailCase.NotContact;
  150. record.DistributionState = EReadPackSendStatus.Fail;
  151. record.Remark = "无法联系";
  152. }
  153. record.Remark = item.FER_Remarks;
  154. record.No = item.FSH_Code.Trim();
  155. _redPackRecordRepository.InsertBulk(record, isEnd);
  156. }
  157. public override ISugarQueryable<RedPackAuditRecordDto> GetSourceList(string key = "")
  158. {
  159. var query = _flow04ExpandClapRepository.Queryable()
  160. .LeftJoin<Flow03_Search>((m, order) => m.FEC_FlowID == order.Id)
  161. .LeftJoin<Flow04_ExpandRed_SMEntity>((m , order, record) => m.FEC_FlowID == record.FER_FlowID)
  162. .LeftJoin<Web09_FlowAcceptEntity>((m, order, record, user) => user.WFAT_SyncFlowID == order.Id)
  163. .Where((m, order) => m.FEC_AuditFlag_wgy != "1" && SqlFunc.ToDate(order.FSH_AddDate) >= _instance.StartTime && SqlFunc.ToDate(order.FSH_AddDate) <= _instance.EndTime)
  164. .Select((m, order, record, user) => new RedPackAuditRecordDto
  165. {
  166. FSH_AddDate = SqlFunc.ToDate(order.FSH_AddDate),
  167. FSH_Code = order.FSH_Code.Trim(),
  168. FSH_LinkTel = order.FSH_LinkTel,
  169. FSH_LinkName = order.FSH_LinkName
  170. }, true);
  171. var sql = query.ToSqlString();
  172. return query;
  173. }
  174. public async Task<string> GetUserIdByOpenIdAsync(Action<string> log, string openId, CancellationToken token)
  175. {
  176. if (openId.IsNullOrEmpty()) return null;
  177. var user = ThirdAccounts.FirstOrDefault(m => m.OpenId == openId);
  178. if (user != null) return user.ExternalId;
  179. var newThirdAccounts = await _snapshotUserInfoApplication.InsertByOpenIdAsync(log, openId, token);
  180. foreach (var item in newThirdAccounts)
  181. {
  182. ThirdAccounts.Add(item);
  183. }
  184. user = ThirdAccounts.FirstOrDefault(m => m.OpenId == openId);
  185. if (user != null) return user.ExternalId;
  186. throw new Exception($"未找到用户: {openId}");
  187. }
  188. }