RedPackApplicationTest.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. using Hotline.Api.Controllers;
  2. using Hotline.Application.Snapshot.Contracts;
  3. using Hotline.Caching.Interfaces;
  4. using Hotline.Identity.Accounts;
  5. using Hotline.Identity.Roles;
  6. using Hotline.Repository.SqlSugar.Snapshot;
  7. using Hotline.Settings;
  8. using Hotline.Share.Dtos;
  9. using Hotline.Share.Dtos.Snapshot;
  10. using Hotline.Share.Enums.Snapshot;
  11. using Hotline.Share.Tools;
  12. using Hotline.Snapshot.IRepository;
  13. using Hotline.Tests.Mock;
  14. using Hotline.ThirdAccountDomainServices;
  15. using Hotline.ThirdAccountDomainServices.Interfaces;
  16. using Hotline.Users;
  17. using Microsoft.AspNetCore.Http;
  18. using Microsoft.Extensions.DependencyInjection;
  19. using Shouldly;
  20. using SqlSugar;
  21. using System;
  22. using System.Collections.Generic;
  23. using System.Linq;
  24. using System.Text;
  25. using System.Threading.Tasks;
  26. using XF.Domain.Cache;
  27. using XF.Domain.Repository;
  28. namespace Hotline.Tests.Application;
  29. public class RedPackApplicationTest : TestBase
  30. {
  31. private readonly IRedPackApplication _redPackApplication;
  32. private readonly IRedPackRecordRepository _redPackRecordRepository;
  33. private readonly OrderServiceMock _orderServiceMock;
  34. private readonly ISystemDicDataCacheManager _systemDicDataCacheManager;
  35. private readonly IIndustryRepository _industryRepository;
  36. private readonly ISpecialRedPackAuditRepository _specialRedPackAuditRepository;
  37. private readonly ISnapshotPointsRecordRepository _pointsRecordRepository;
  38. public RedPackApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService, IThirdAccountRepository thirdAccountRepository, IRedPackApplication redPackApplication, IRedPackRecordRepository redPackRecordRepository, ITypedCache<SystemSetting> cacheSettingData, OrderServiceMock orderServiceMock, ISystemDicDataCacheManager systemDicDataCacheManager, IIndustryRepository industryRepository, ISpecialRedPackAuditRepository specialRedPackAuditRepository, ThirdAccounSupplierFactory thirdAccountDomainFactory, ISnapshotPointsRecordRepository pointsRecordRepository, IServiceProvider serviceProvider) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdIdentiyService, thirdAccountRepository, cacheSettingData, thirdAccountDomainFactory, serviceProvider)
  39. {
  40. _redPackApplication = redPackApplication;
  41. _redPackRecordRepository = redPackRecordRepository;
  42. _orderServiceMock = orderServiceMock;
  43. _systemDicDataCacheManager = systemDicDataCacheManager;
  44. _industryRepository = industryRepository;
  45. _specialRedPackAuditRepository = specialRedPackAuditRepository;
  46. _pointsRecordRepository = pointsRecordRepository;
  47. }
  48. /// <summary>
  49. /// 获取特殊红包集合
  50. /// </summary>
  51. /// <returns></returns>
  52. [Fact]
  53. public async Task GetRedPackSpecialAuditItems_Test()
  54. {
  55. var dhzy = _systemDicDataCacheManager.OrderTag.Where(m => m.DicDataName == "动火作业").FirstOrDefault();
  56. dhzy.ShouldNotBeNull("SysDicTypeConsts.OrderTag 缺少动作火作业基础信息");
  57. SetZuoXi();
  58. var industryItems = await _industryRepository.Queryable().Where(m => m.Name == "安全隐患").Select(d => new { d.Id, d.Name, }).ToListAsync();
  59. var industry = industryItems.First();
  60. var order = _orderServiceMock.CreateOrder(industryId: industry.Id, industryName: industry.Name, tags: [dhzy.Id])
  61. .StepHandle(async order =>
  62. {
  63. SetSettingCache(SettingConstants.OvertimeBack, "0.00027778");
  64. })
  65. .办理到网格员(SetZuoXi)
  66. .StepHandle(async order =>
  67. {
  68. Thread.Sleep(5 * 1000);
  69. SetSettingCache(SettingConstants.OvertimeBack, "4");
  70. })
  71. .办理到派单员(Set班长)
  72. .办理到一级部门(SetPaiDanYuan)
  73. .办理到归档(Set一级部门)
  74. .发布工单(SetZuoXi, _systemDicDataCacheManager.SnapshotOrderLabel.Where(m => m.DicDataValue == "bss").Select(m => new Kv(m.DicDataName, m.DicDataName)).ToList())
  75. .部门审核市民红包(Set应急管理局)
  76. .StepHandle(async order =>
  77. {
  78. var items = await _redPackApplication.GetRedPackSpecialAuditItems(new SnapshotOrderAuditItemsInDto(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0)).ToListAsync();
  79. items.Where(m => m.No == order.No).Count().ShouldBe(1);
  80. items = await _redPackApplication.GetRedPackSpecialAuditItems(new SnapshotOrderAuditItemsInDto(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, -1)).ToListAsync();
  81. items.Where(m => m.No == order.No).Count().ShouldBe(1);
  82. items = await _redPackApplication.GetRedPackSpecialAuditItems(new SnapshotOrderAuditItemsInDto(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1)).ToListAsync();
  83. items.Where(m => m.No == order.No).Count().ShouldBe(0, "审批同意不应该存在数据");
  84. items = await _redPackApplication.GetRedPackSpecialAuditItems(new SnapshotOrderAuditItemsInDto(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 2)).ToListAsync();
  85. items.Where(m => m.No == order.No).Count().ShouldBe(0);
  86. })
  87. .部门审核特殊红包(Set应急管理局, 29)
  88. .StepHandle(async order =>
  89. {
  90. var special = await _specialRedPackAuditRepository.Queryable().Where(m => m.OrderId == order.Id).FirstAsync();
  91. special.ApprovedAmount.ShouldBe(29);
  92. special.Status.ShouldBe(ERedPackAuditStatus.Agree);
  93. special.AuditRemark.ShouldBe("红包审核通过");
  94. var redPackAudit = await _redPackApplication.GetRedPackSpecialAuditBaseDataAsync(order.Id);
  95. redPackAudit.AuditDetail.AuditId.ShouldNotBeNull();
  96. redPackAudit.AuditDetail.AuditName.ShouldNotBeNull();
  97. redPackAudit.AuditDetail.AuditOrgId.ShouldNotBeNull();
  98. redPackAudit.AuditDetail.AuditOrgName.ShouldNotBeNull();
  99. redPackAudit.AuditDetail.AuditRemark.ShouldNotBeNull("审核意见不能为空");
  100. redPackAudit.AuditDetail.AuditRemark.ShouldBe("红包审核通过");
  101. var items = await _redPackApplication.GetRedPackSpecialAuditItems(new SnapshotOrderAuditItemsInDto(order.No, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1)).FirstAsync();
  102. items.ApprovedAmount.ShouldBe(29);
  103. })
  104. .GetCreateResult();
  105. order.Id.ShouldNotBeNull();
  106. }
  107. /// <summary>
  108. /// 获取审核集合
  109. /// 获取审核短信模板
  110. /// 审核通过
  111. /// 获取红包记录
  112. /// </summary>
  113. /// <returns></returns>
  114. //[Fact]
  115. public async Task AuditRedPackAudit_Test()
  116. {
  117. var items = await _redPackApplication.GetRedPackAuditItems(new SnapshotOrderAuditItemsInDto(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0)).ToListAsync();
  118. var audit = items.First();
  119. var smsTemplate = await _redPackApplication.GetRedPackAuditSMSTemplateAsync(new GetRedPackAuditSMSTemplateInDto(audit.OrderId, ESnapshotSMSStatus.Agree));
  120. var inDto = new UpdateRedPackAuditInDto
  121. {
  122. Status = ESnapshotSMSStatus.Agree,
  123. Opinion = "单元测试" + DateTime.Now.ToShortDateString(),
  124. SMSTemplateId = smsTemplate.First().Id,
  125. IsSendSms = true,
  126. RedPackAuditId = audit.Id,
  127. };
  128. await _redPackApplication.AuditRedPackAuditAsync(inDto, CancellationToken.None);
  129. var pointRecord = await _pointsRecordRepository.GetByOrderIdAsync(audit.OrderId, CancellationToken.None);
  130. pointRecord.Where(m => m.Source == EPointsSource.Audit).Count().ShouldBe(1);
  131. var suInDto = new UpdateRedPackRecordInDto
  132. {
  133. RedPackAuditId = audit.Id,
  134. Name = "单元测试Name",
  135. BankCardNo = "单元测试银行号",
  136. OpenBank = "单元测试开户行",
  137. ReplenishAmount = 100.01,
  138. ReplenishTime = DateTime.Now,
  139. ReplenishRemark = "单元测试补发备注",
  140. IsSendSMS = false,
  141. ReplenishType = "%15",
  142. ReplenishTypeId = "1",
  143. };
  144. await _redPackApplication.UpdateRedPackRecordAsync(suInDto);
  145. items = await _redPackApplication.GetRedPackAuditItems(new SnapshotOrderAuditItemsInDto(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1)).ToListAsync();
  146. items.Any(m => m.Id == audit.Id).ShouldBeTrue();
  147. var record = await _redPackRecordRepository.Queryable()
  148. .Where(m => m.OrderId == audit.OrderId)
  149. .FirstAsync();
  150. record.ShouldNotBeNull();
  151. var recordItems = await _redPackApplication.GetRedPackRecordItems(new SnapshotRedPackRecordItemsInDto { Status =2}).ToListAsync();
  152. recordItems.Count.ShouldNotBe(0);
  153. var redPackRecord = recordItems.First();
  154. var redPackRecordEntity = await _redPackRecordRepository.GetAsync(redPackRecord.Id);
  155. redPackRecordEntity.PickupStatus = ERedPackPickupStatus.Received;
  156. redPackRecordEntity.DistributionState = EReadPackSendStatus.Successful;
  157. redPackRecordEntity.ReceiveTime = DateTime.Now;
  158. await _redPackRecordRepository.UpdateAsync(redPackRecordEntity);
  159. var sendRecordItems = await _redPackApplication.GetRedPackRecordDetail(new SnapshotRedPackRecordSendInDto
  160. {
  161. IsReceive = true,
  162. }).ToListAsync();
  163. sendRecordItems.Count.ShouldNotBe(0);
  164. }
  165. [Fact]
  166. public async Task GetRedPackRecordSupplementItems_Test()
  167. {
  168. var items = await _redPackApplication.GetRedPackRecordSupplementItems(new SnapshotRedPackRecordSupplementItemsInDto()).ToListAsync();
  169. items.Any(m => m.FromName.NotNullOrEmpty()).ShouldBeTrue();
  170. items.Any(m => m.Remark.NotNullOrEmpty()).ShouldBeTrue();
  171. items.Any(m => m.AuditType.NotNullOrEmpty()).ShouldBeTrue();
  172. items.ShouldNotBeNull();
  173. }
  174. }