JudicialManagementOrdersService.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using DotNetCore.CAP;
  2. using Hotline.File;
  3. using Hotline.Orders;
  4. using Hotline.Share.Enums.JudicialManagement;
  5. using MapsterMapper;
  6. using Microsoft.Extensions.Logging;
  7. using XF.Domain.Authentications;
  8. using XF.Domain.Cache;
  9. using XF.Domain.Dependency;
  10. using XF.Domain.Repository;
  11. namespace Hotline.JudicialManagement
  12. {
  13. public class JudicialManagementOrdersService : IJudicialManagementOrdersService, IScopeDependency
  14. {
  15. private readonly ISessionContext _sessionContext;
  16. private readonly ICapPublisher _capPublisher;
  17. private readonly IMapper _mapper;
  18. private readonly ILogger<OrderDomainService> _logger;
  19. private readonly IFileRepository _fileRepository;
  20. private readonly ITypedCache<CacheOrderNO> _cacheOrderNo;
  21. private readonly IRepository<JudicialManagementOrders> _judicialManagementOrdersRepository;
  22. public JudicialManagementOrdersService(ISessionContext sessionContext,
  23. ICapPublisher capPublisher,
  24. IMapper mapper,
  25. ILogger<OrderDomainService> logger,
  26. IFileRepository fileRepository,
  27. ITypedCache<CacheOrderNO> cacheOrderNo,
  28. IRepository<JudicialManagementOrders> judicialManagementOrdersRepository)
  29. {
  30. _sessionContext = sessionContext;
  31. _capPublisher = capPublisher;
  32. _mapper = mapper;
  33. _logger = logger;
  34. _fileRepository = fileRepository;
  35. _cacheOrderNo = cacheOrderNo;
  36. _judicialManagementOrdersRepository = judicialManagementOrdersRepository;
  37. }
  38. public async Task<string> AddAsync(JudicialManagementOrders order, bool autoAccept = false, CancellationToken cancellationToken = default)
  39. {
  40. if (autoAccept)
  41. {
  42. order.AutoAccept(_sessionContext.RequiredUserId, _sessionContext.UserName, _sessionContext.StaffNo, _sessionContext.RequiredOrgId, _sessionContext.OrgName);
  43. }
  44. order.Init();
  45. var no = GenerateNewOrderNoSF();
  46. order.No = no + "SF";
  47. order.Password = Random.Shared.Next(100000, 1000000).ToString();
  48. order.ProvinceNo ??= GenerateNewProvinceNoSF(no, order.SourceChannelCode);
  49. order.OrderSoure = EOrderSoure.Enforcement;
  50. return await _judicialManagementOrdersRepository.AddAsync(order, cancellationToken);
  51. }
  52. private string GenerateNewOrderNoSF()
  53. {
  54. var today = DateTime.Today;
  55. var cacheKey = $"{today:yyyyMMdd}SF";
  56. var cacheOrderNo = _cacheOrderNo.GetOrSet(cacheKey, f =>
  57. {
  58. var todayOrderCount = _judicialManagementOrdersRepository.Queryable()
  59. .CountAsync(d => d.CreationTime.Date == today.Date)
  60. .GetAwaiter()
  61. .GetResult();
  62. return new CacheOrderNO { TotalCount = todayOrderCount };
  63. }, TimeSpan.FromDays(1));
  64. cacheOrderNo!.TotalCount += 1;
  65. var no = GenerateOrderNo(today, cacheOrderNo.TotalCount);
  66. _cacheOrderNo.Set(cacheKey, cacheOrderNo);
  67. return no;
  68. }
  69. private string GenerateNewProvinceNoSF(string no, string sourceChannelCode)
  70. {
  71. //诉求渠道+成员单位标识+行政区划代码+年月日+流水号
  72. //成员单位标识 99
  73. //宜宾市 511500 市级
  74. var today = DateTime.Today;
  75. //var count = no.Substring(no.Length - 5);
  76. //todo 双系统并行暂时执行此方案
  77. var count = no.Substring(no.Length - 4);
  78. count = (Convert.ToInt32(count) + 500000).ToString();
  79. var provinceCodes = new[] { "RGDH", "WX", "WB", "AP", "WZ", "YJ", "SCZWFWW", "XCX", "QT" };
  80. var prefix = provinceCodes.Any(d => d.Equals(sourceChannelCode))
  81. ? sourceChannelCode
  82. : "QT";
  83. return $"{prefix}99511500{today:yyMMdd}{count}";
  84. }
  85. private string GenerateOrderNo(DateTime today, int count)
  86. {
  87. return $"{today:yyyyMMdd}{count:000000}";
  88. }
  89. }
  90. public class CacheOrderNO
  91. {
  92. public int TotalCount { get; set; }
  93. }
  94. }