qinchaoyue 3 долоо хоног өмнө
parent
commit
0d6bd4b745
27 өөрчлөгдсөн 380 нэмэгдсэн , 118 устгасан
  1. 11 16
      src/Hotline.Api/Controllers/OrderController.cs
  2. 3 0
      src/Hotline.Api/Controllers/Snapshot/RedPackController.cs
  3. 13 1
      src/Hotline.Api/Controllers/Snapshot/SnapshotController.cs
  4. 1 1
      src/Hotline.Api/StartupExtensions.cs
  5. 2 2
      src/Hotline.Application/Snapshot/BiSnapshotApplication.cs
  6. 2 0
      src/Hotline.Application/Snapshot/Contracts/IOrderSnapshotApplication.cs
  7. 1 1
      src/Hotline.Application/Snapshot/Notifications/SnapshotHandler.cs
  8. 61 68
      src/Hotline.Application/Snapshot/RedPackApplication.cs
  9. 2 1
      src/Hotline.Application/Snapshot/SnapshotApplicationBase.cs
  10. 46 5
      src/Hotline.Application/Snapshot/SnapshotOrderApplication.cs
  11. 1 1
      src/Hotline.Application/Snapshot/SnapshotPointsApplication.cs
  12. 2 1
      src/Hotline.Share/Dtos/Article/BulletinDto.cs
  13. 42 4
      src/Hotline.Share/Dtos/Order/OrderDto.cs
  14. 32 8
      src/Hotline.Share/Dtos/Snapshot/IndustryDto.cs
  15. 6 0
      src/Hotline.Share/Dtos/Snapshot/OrderDto.cs
  16. 5 0
      src/Hotline.Share/Dtos/Snapshot/OrderPublishDto.cs
  17. 16 0
      src/Hotline.Share/Dtos/Snapshot/RedPackDto.cs
  18. 23 0
      src/Hotline.Share/Enums/Settings/EPageType.cs
  19. 3 3
      src/Hotline.Share/Enums/Snapshot/EGuiderSystemReplyType.cs
  20. 13 0
      src/Hotline.Share/Tools/StringExtensions.cs
  21. 32 0
      src/Hotline/Settings/SystemWebPageSetting.cs
  22. 6 0
      src/Hotline/Snapshot/Industry.cs
  23. 2 0
      test/Hotline.Tests/Application/IndustryApplicationTest.cs
  24. 5 3
      test/Hotline.Tests/Application/OrderApplicationTest.cs
  25. 38 3
      test/Hotline.Tests/Application/OrderSnapshotApplicationTest.cs
  26. 11 0
      test/Hotline.Tests/Application/RedPackApplicationTest.cs
  27. 1 0
      test/Hotline.Tests/Application/SnapshotApplicationTest.cs

+ 11 - 16
src/Hotline.Api/Controllers/OrderController.cs

@@ -4281,21 +4281,8 @@ public class OrderController : BaseController
             orderTerminateList.Any(x => x.Status == ETerminateStatus.Refuse) ? "不同意" :
             orderTerminateList.Any(x => x.Status == ETerminateStatus.Approval || x.Status == ETerminateStatus.SendBack) ? "审批中" : null;
 
-        if (_systemSettingCacheManager.Snapshot)
-        {
-            await _orderSnapshotRepository.Queryable()
-                .Where(m => m.Id == order.Id)
-                .Select(m => new { m.IndustryId, m.IndustryName , m.IndustryCase})
-                .FirstAsync(HttpContext.RequestAborted)
-                .Then(async snapshot =>
-                {
-                    if (snapshot.IndustryCase.IsNullOrEmpty())
-                        dto.IndustryName = snapshot.IndustryName;
-                    else
-                        dto.IndustryName = snapshot.IndustryName + " " + snapshot.IndustryCase;
-                    dto.IndustryId = snapshot.IndustryId;
-                });
-        }
+        // 加载随手拍信息
+        await _orderSnapshotApplication.GetOrderDetailAsync(id, dto, HttpContext.RequestAborted);
 
         //处理回访录音
         if (dto.OrderVisits != null && dto.OrderVisits.Count > 0)
@@ -4697,6 +4684,14 @@ public class OrderController : BaseController
             if (dto.IsEdit != true && order.Status > EOrderStatus.HandOverToUnAccept)
                 throw UserFriendlyException.SameMessage("工单已发起流程,不可编辑");
         }
+        if (_systemSettingCacheManager.Snapshot)
+        {
+            await _orderSnapshotRepository.Updateable()
+                .SetColumns(m => m.IndustryId, dto.IndustryId)
+                .SetColumns(m => m.IndustryName, dto.IndustryName)
+                .Where(m => m.Id == dto.Id)
+                .ExecuteCommandAsync();
+        }
 
         // 副本工单
         var copy = new OrderCopy();
@@ -5223,7 +5218,7 @@ public class OrderController : BaseController
                 orderHandleFlowDto.CrossSteps = orderHandleFlowDto.CrossSteps.OrderBy(d => d.Sort).ToList();
                 var stepCount = orderHandleFlowDto.CrossSteps.Count;
                 var unhandleSteps = new List<WorkflowStep> { startStep };
-                for (int i = 0; i < stepCount; i++)
+                for (int i = 0;i < stepCount;i++)
                 {
                     var crossStep = orderHandleFlowDto.CrossSteps[i];
                     var tempSteps = new List<WorkflowStep>();

+ 3 - 0
src/Hotline.Api/Controllers/Snapshot/RedPackController.cs

@@ -12,6 +12,7 @@ using XF.Domain.Exceptions;
 using Mapster;
 using Hotline.Snapshot.IRepository;
 using Hotline.Application.Snapshot.Contracts;
+using Hotline.Api.Filter;
 
 namespace Hotline.Api.Controllers.Snapshot;
 
@@ -165,6 +166,7 @@ public class RedPackController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPut("record")]
+    [LogFilterAlpha("添加红包补充发放信息")]
     public async Task UpdateRedPackRecordAsync([FromBody] UpdateRedPackRecordInDto dto)
         => await _redPackApplication.UpdateRedPackRecordAsync(dto);
 
@@ -174,6 +176,7 @@ public class RedPackController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPut("record/special")]
+    [LogFilterAlpha("添加特殊红包补充发放信息")]
     public async Task UpdateRedPackSpecialRecordAsync([FromBody] UpdateRedPackRecordInDto dto)
         => await _redPackApplication.UpdateRedPackSpecialRecordAsync(dto);
 

+ 13 - 1
src/Hotline.Api/Controllers/Snapshot/SnapshotController.cs

@@ -51,8 +51,9 @@ public class SnapshotController : BaseController
     private readonly ISessionContext _sessionContext;
     private readonly IThirdAccountRepository _thirdAccountRepository;
     private readonly ILogger<SnapshotController> _logger;
+    private readonly IRepository<SystemWebPageSetting> _webPageRepository;
 
-    public SnapshotController(IRepository<Order> orderRepository, ISnapshotApplication snapshotApplication, ISystemAreaDomainService systemAreaDomainService, IIndustryRepository industryRepository, IOrderDomainService orderDomainService, IFileRepository fileRepository, IOrderSnapshotRepository orderSnapshotRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISessionContext sessionContext, IThirdAccountRepository thirdAccountRepository, ILogger<SnapshotController> logger)
+    public SnapshotController(IRepository<Order> orderRepository, ISnapshotApplication snapshotApplication, ISystemAreaDomainService systemAreaDomainService, IIndustryRepository industryRepository, IOrderDomainService orderDomainService, IFileRepository fileRepository, IOrderSnapshotRepository orderSnapshotRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISessionContext sessionContext, IThirdAccountRepository thirdAccountRepository, ILogger<SnapshotController> logger, IRepository<SystemWebPageSetting> webPageRepository)
     {
         _orderRepository = orderRepository;
         _snapshotApplication = snapshotApplication;
@@ -65,6 +66,7 @@ public class SnapshotController : BaseController
         _sessionContext = sessionContext;
         _thirdAccountRepository = thirdAccountRepository;
         _logger = logger;
+        _webPageRepository = webPageRepository;
     }
 
     /// <summary>
@@ -76,6 +78,16 @@ public class SnapshotController : BaseController
     public async Task<HomePageOutDto> GetHomePageAsync()
         => await _snapshotApplication.GetHomePageAsync();
 
+    /// <summary>
+    /// 获取页面设置
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("page/setting")]
+    [AllowAnonymous]
+    public async Task<IList<SystemWebPageSetting>> GetSystemWebPageAsync([FromQuery] SystemWebPageInDto dto)
+        => await _webPageRepository.Queryable().Where(m => m.Name == dto.Name && m.PageType == dto.PageType).ToListAsync(HttpContext.RequestAborted);
+
     /// <summary>
     /// 行业界面基础信息
     /// </summary>

+ 1 - 1
src/Hotline.Api/StartupExtensions.cs

@@ -201,7 +201,7 @@ internal static class StartupExtensions
         services.AddMq(configuration);
 
         //job
-        //services.RegisterJob(appConfiguration);
+        services.RegisterJob(appConfiguration);
 
         services.AddPdfManager();
 

+ 2 - 2
src/Hotline.Application/Snapshot/BiSnapshotApplication.cs

@@ -231,9 +231,9 @@ public class BiSnapshotApplication : IBiSnapshotApplication, IScopeDependency
             .Where((snapshot) => snapshot.CreationTime >= dto.StartTime && snapshot.CreationTime <= dto.EndTime)
             .Select((snapshot, order, redPackAudit, special, guiderAudit, record, second, orderSpecial, organize) => new SnapshotStatisticsOutDto
             {
-                WZSLFWNJS = SqlFunc.AggregateSum(SqlFunc.IIF(order.HotspotName == "非受理范围", 1, 0)), // 未在受理范围内件数,
+                WZSLFWNJS = SqlFunc.AggregateSum(SqlFunc.IIF(order.HotspotId.StartsWith("18"), 1, 0)), // 未在受理范围内件数,
                 SSPZ12345JS = SqlFunc.AggregateSum(SqlFunc.IIF(order.SourceChannelCode == "SJP12345", 1, 0)), // 随手拍转12345件数,
-                SLFWNZJS = SqlFunc.AggregateSum(SqlFunc.IIF(order.HotspotName != "非受理范围" && order.SourceChannelCode == "SJP12345", 1, 0)), // 受理范围内总件数,
+                SLFWNZJS = SqlFunc.AggregateSum(SqlFunc.IIF(order.HotspotId.StartsWith("18") == false && order.SourceChannelCode == "SJP12345", 1, 0)), // 受理范围内总件数,
                 SLFWNPGWGYSXSNHFJS = SqlFunc.AggregateSum(SqlFunc.IIF(snapshot.IsGuidSystemCallBack == true && snapshot.GuidSystemCallBackTime.Value.AddHours(-4) > snapshot.SendGuidSystemTime, 1, 0)), // 受理范围内派给网格员四小时内回复件数,
                 SLFWNPGWGYCGSXSHFJS = SqlFunc.AggregateSum(SqlFunc.IIF(snapshot.IsGuidSystemCallBack == true && snapshot.GuidSystemCallBackTime.Value.AddHours(-4) <= snapshot.SendGuidSystemTime, 1, 0)), // 受理范围内派给网格员超过四小时回复件数
                 SLFWNPGWGYWHFJS = SqlFunc.AggregateSum(SqlFunc.IIF(snapshot.IsGuidSystemCallBack == false, 1, 0)), // 受理范围内派给网格员未回复件数

+ 2 - 0
src/Hotline.Application/Snapshot/Contracts/IOrderSnapshotApplication.cs

@@ -144,4 +144,6 @@ public interface IOrderSnapshotApplication
     /// <param name="firstErrorId"></param>
     Task UpdateSpecialReasonAsync(string orderId, string errorId, string errorName);
     Task UpdateIsEmphasisAsync(UpdateIsEmphasisInDto dto);
+
+    Task GetOrderDetailAsync(string id, Share.Dtos.Order.OrderDto dto, CancellationToken token);
 }

+ 1 - 1
src/Hotline.Application/Snapshot/Notifications/SnapshotHandler.cs

@@ -189,7 +189,7 @@ public class SnapshotStartWorkFlow : INotificationHandler<StartWorkflowNotify>
     {
         try
         {
-            if (_sysSetting.Snapshot == false && notification.Workflow.ModuleCode != WorkflowModuleConsts.OrderHandle) return;
+            if (_sysSetting.Snapshot == false || notification.Workflow.ModuleCode != WorkflowModuleConsts.OrderHandle) return;
             await _snapshotPointsDomainService.AddPointsAsync(notification.Workflow.ExternalId, EPointsSource.Report, ESnapshotSMSStatus.Agree, 0);
         }
         catch (Exception e)

+ 61 - 68
src/Hotline.Application/Snapshot/RedPackApplication.cs

@@ -245,7 +245,7 @@ public class RedPackApplication : IRedPackApplication, IScopeDependency
         var outDto = new SnapshotOrderAuditDetailOutDto { Order = order.Adapt<SnapshotOrderAuditOrderDetailOutDto>() };
         var industry = await _industryRepository.Queryable(includeDeleted: true)
             .LeftJoin<OrderSnapshot>((i, o) => i.Id == o.IndustryId)
-            .Select((i, o) => new { i.Id, i.CitizenReadPackAmount , i.ArgeePoints, i.ExtraDeductedPoints, i.RefusePoints})
+            .Select((i, o) => new { i.Id, i.CitizenReadPackAmount, i.ArgeePoints, i.ExtraDeductedPoints, i.RefusePoints })
             .FirstAsync();
         outDto.Amount = industry.CitizenReadPackAmount;
         outDto.ArgeePoints = industry.ArgeePoints;
@@ -283,7 +283,8 @@ public class RedPackApplication : IRedPackApplication, IScopeDependency
             .LeftJoin<OrderSnapshot>((redPackAudit, snapshot) => redPackAudit.OrderId == snapshot.Id)
             .LeftJoin<Order>((redPackAudit, snapshot, order) => redPackAudit.OrderId == order.Id)
             .LeftJoin<SpecialRedPackAudit>((redPackAudit, snapshot, order, special) => redPackAudit.OrderId == special.OrderId)
-            .Where((redPackAudit, snapshot, order, special) => (redPackAudit.Status == ERedPackAuditStatus.Agree && snapshot.IndustryName == "安全隐患" && order.OrderTagCode!.Contains("DHZY")) || snapshot.IsSafetyDepartment == true || (redPackAudit.Status == ERedPackAuditStatus.Agree && order.CreationTime >= beginTime && order.CreationTime <= endTime && redPackAudit.ApprovedAmount == 20 && order.AcceptTypeCode != "30" && snapshot.IndustryName != "电气焊作业申报"))
+            .LeftJoin<SupplementRecord>((redPackAudit, snapshot, order, special, supplement) => special.Id == supplement.RedPackAuditId)
+            .Where((redPackAudit, snapshot, order, special) => (redPackAudit.Status == ERedPackAuditStatus.Agree && snapshot.IndustryName == "安全隐患" && order.OrderTagCode!.Contains("DHZY")) || (redPackAudit.Status == ERedPackAuditStatus.Agree && order.CreationTime >= beginTime && order.CreationTime <= endTime && redPackAudit.ApprovedAmount == 20 && order.AcceptTypeCode != "30" && snapshot.IndustryName != "电气焊作业申报" && (order.HotspotId == null || order.HotspotId.StartsWith("18") == false)))
             .WhereIF(dto.Status == 0, (redPackAudit, snapshot, order, special) => special.Id == null)
             .WhereIF(dto.Status == 1, (redPackAudit, snapshot, order, special) => special.Status == ERedPackAuditStatus.Agree)
             .WhereIF(dto.Status == 2, (redPackAudit, snapshot, order, special) => special.Status == ERedPackAuditStatus.Refuse)
@@ -302,8 +303,8 @@ public class RedPackApplication : IRedPackApplication, IScopeDependency
             .WhereIF(dto.AcutalAmount.HasValue, (redPackAudit, snapshot, order, special) => special.AcutalAmount == dto.AcutalAmount)
             .WhereIF(dto.ApprovedAmount.HasValue, (redPackAudit, snapshot, order, special) => special.ApprovedAmount == dto.ApprovedAmount)
             .WhereIF(dto.IsDanger.HasValue, (redPackAudit, snapshot, order, special) => snapshot.IsDanger == dto.IsDanger)
-            .OrderByDescending((redPackAudit, snapshot, order, special) => redPackAudit.CreationTime)
-                        .Select((redPackAudit, snapshot, order, special) => new SnapshotOrderAuditItemsOutDto
+            .OrderByDescending((redPackAudit, snapshot, order, special, supplement) => redPackAudit.CreationTime)
+                        .Select((redPackAudit, snapshot, order, special, supplement) => new SnapshotOrderAuditItemsOutDto
                         {
                             Id = redPackAudit.Id,
                             RedPackAuditId = redPackAudit.Id,
@@ -338,10 +339,13 @@ public class RedPackApplication : IRedPackApplication, IScopeDependency
                             AuditOrgId = special.AuditOrgId,
                             AuditOrgName = special.AuditOrgName,
                             AuditRemark = special.AuditRemark,
-                            //BankCardNo = record.BankCardNo,
-                            //OpenBank = record.OpenBank,
+                            BankCardNo = supplement.BankCardNo,
+                            OpenBank = supplement.OpenBank,
                             AuditStatus = special.Status,
                         });
+#if DEBUG
+        var sql = query.ToSqlString();
+#endif        
         return query;
     }
 
@@ -380,7 +384,7 @@ public class RedPackApplication : IRedPackApplication, IScopeDependency
             .LeftJoin<RedPackRecord>((redPackAudit, order, snapshot, record) => redPackAudit.Id == record.OrderId)
             .LeftJoin<Industry>((redPackAudit, order, snapshot, record, industry) => snapshot.IndustryId == industry.Id)
             .LeftJoin<IndustryCase>((redPackAudit, order, snapshot, record, industry, industryCase) => snapshot.IndustryCase == industryCase.Id)
-            .Where((redPackAudit, order, snapshot, record, industry) => order.Status >= EOrderStatus.Filed)
+            .Where((redPackAudit, order, snapshot, record, industry) => (order.HotspotId == null || order.HotspotId.StartsWith("18") == false) && order.Status >= EOrderStatus.Filed)
             .WhereIF(dto.No.NotNullOrEmpty(), (redPackAudit, order, snapshot, record, industry) => order.No.Contains(dto.No))
             .WhereIF(dto.Title.NotNullOrEmpty(), (redPackAudit, order, snapshot, record, industry) => order.Title.Contains(dto.Title))
             .WhereIF(dto.FromPhone.NotNullOrEmpty(), (redPackAudit, order, snapshot, record, industry) => order.FromPhone.Contains(dto.FromPhone))
@@ -573,37 +577,31 @@ public class RedPackApplication : IRedPackApplication, IScopeDependency
     /// <returns></returns>
     public async Task UpdateRedPackRecordAsync(UpdateRedPackRecordInDto dto)
     {
-        //var record = await _redPackRecordRepository.Queryable()
-        //    .Where(m => m.RedPackAuditId == dto.RedPackAuditId)
-        //    .FirstAsync() ?? throw UserFriendlyException.SameMessage("审核记录不存在");
-        //record.DistributionState = EReadPackSendStatus.Successful;
-        //record.PickupStatus = ERedPackPickupStatus.Received;
-        var audit = await _redPackAuditRepository.GetAsync(dto.RedPackAuditId) ?? throw UserFriendlyException.SameMessage("审核记录不存在");
-        var orderNo = await _orderRepository.Queryable().Where(m => m.Id == audit.OrderId).Select(m => m.No).FirstAsync();
-
-        dto.Adapt(audit);
-        audit.IsSend = true;
-        audit.AcutalAmount = dto.ReplenishAmount;
-        await _redPackAuditRepository.UpdateAsync(audit);
-        //await _redPackRecordRepository.UpdateAsync(record);
+        await _redPackAuditRepository.Queryable().Where(m => m.Id == dto.RedPackAuditId)
+            .Select(m => new { m.Id, m.OrderId})
+            .FirstAsync()
+            .Then(async audit =>
+            {
+                var orderNo = await _orderRepository.Queryable().Where(m => m.Id == audit.OrderId).Select(m => m.No).FirstAsync();
 
-        var entity = dto.Adapt<SupplementRecord>();
-        var industryName = await _orderSnapshotRepository.Queryable()
-            .Where(m => m.Id == audit.OrderId)
-            .Select(m => new { m.IndustryName, m.IndustryId })
-            .FirstAsync();
-        entity.OrderId = audit.OrderId;
-        //entity.RedPackRecordId = record.Id;
-        entity.RedPackAuditId = audit.Id;
-        entity.No = orderNo;
-        entity.IndustryName = industryName.IndustryName;
-        entity.IndustryId = industryName.IndustryId;
-        await _supplementRecordRepository.AddAsync(entity);
-
-        if (dto.IsSendSMS)
-        {
-            // TODO: 发送短信
-        }
+                var entity = dto.Adapt<SupplementRecord>();
+                var industryName = await _orderSnapshotRepository.Queryable()
+                    .Where(m => m.Id == audit.OrderId)
+                    .Select(m => new { m.IndustryName, m.IndustryId })
+                    .FirstAsync();
+                entity.OrderId = audit.OrderId;
+                entity.RedPackAuditId = audit.Id;
+                entity.No = orderNo;
+                entity.IndustryName = industryName.IndustryName;
+                entity.IndustryId = industryName.IndustryId;
+                entity.ReplenishRemark = dto.ReplenishRemark;
+                await _supplementRecordRepository.AddAsync(entity);
+
+                if (dto.IsSendSMS)
+                {
+                    // TODO: 发送短信
+                }
+            });
     }
 
     /// <summary>
@@ -613,37 +611,32 @@ public class RedPackApplication : IRedPackApplication, IScopeDependency
     /// <returns></returns>
     public async Task UpdateRedPackSpecialRecordAsync(UpdateRedPackRecordInDto dto)
     {
-        //var record = await _redPackRecordRepository.Queryable()
-        //    .Where(m => m.RedPackAuditId == dto.RedPackAuditId)
-        //    .FirstAsync() ?? throw UserFriendlyException.SameMessage("审核记录不存在");
-        //record.DistributionState = EReadPackSendStatus.Successful;
-        //record.PickupStatus = ERedPackPickupStatus.Received;
-        var audit = await _specialRedPackAuditRepository.GetAsync(dto.RedPackAuditId) ?? throw UserFriendlyException.SameMessage("审核记录不存在");
-        var orderNo = await _orderRepository.Queryable().Where(m => m.Id == audit.OrderId).Select(m => m.No).FirstAsync();
-
-        dto.Adapt(audit);
-        audit.IsSend = true;
-        audit.AcutalAmount = dto.ReplenishAmount;
-        await _specialRedPackAuditRepository.UpdateAsync(audit);
-        //await _redPackRecordRepository.UpdateAsync(record);
-
-        var entity = dto.Adapt<SupplementRecord>();
-        var industryName = await _orderSnapshotRepository.Queryable()
-            .Where(m => m.Id == audit.OrderId)
-            .Select(m => new { m.IndustryName, m.IndustryId })
-            .FirstAsync();
-        entity.OrderId = audit.OrderId;
-        //entity.RedPackRecordId = record.Id;
-        entity.RedPackAuditId = audit.Id;
-        entity.No = orderNo;
-        entity.IndustryName = industryName.IndustryName;
-        entity.IndustryId = industryName.IndustryId;
-        await _supplementRecordRepository.AddAsync(entity);
-
-        if (dto.IsSendSMS)
-        {
-            // TODO: 发送短信
-        }
+        await _specialRedPackAuditRepository.Queryable()
+            .Where(m => m.Id == dto.RedPackAuditId)
+            .Select(m => new { m.Id, m.OrderId })
+            .FirstAsync()
+            .Then(async audit =>
+            {
+                var orderNo = await _orderRepository.Queryable().Where(m => m.Id == audit.OrderId).Select(m => m.No).FirstAsync();
+
+                var entity = dto.Adapt<SupplementRecord>();
+                var industryName = await _orderSnapshotRepository.Queryable()
+                    .Where(m => m.Id == audit.OrderId)
+                    .Select(m => new { m.IndustryName, m.IndustryId })
+                    .FirstAsync();
+                entity.OrderId = audit.OrderId;
+                entity.RedPackAuditId = audit.Id;
+                entity.No = orderNo;
+                entity.IndustryName = industryName.IndustryName;
+                entity.IndustryId = industryName.IndustryId;
+                entity.ReplenishRemark = dto.ReplenishRemark;
+                await _supplementRecordRepository.AddAsync(entity);
+
+                if (dto.IsSendSMS)
+                {
+                    // TODO: 发送短信
+                }
+            });
     }
 
 

+ 2 - 1
src/Hotline.Application/Snapshot/SnapshotApplicationBase.cs

@@ -288,7 +288,7 @@ public abstract class SnapshotApplicationBase
     public async Task<IReadOnlyList<BulletinOutDto>> GetBulletinsAsync(BulletinInDto dto, CancellationToken cancellationToken)
     {
         var items = await _bulletinRepository.Queryable()
-            .Where(m => m.BulletinState == EBulletinState.ReviewPass)
+            .Where(m => m.BulletinState == EBulletinState.ReviewPass && m.IsArrive == true)
             .LeftJoin<Industry>((bulletin, industry) => bulletin.SnapshotBulletinTypeId == industry.BulletinTypePublicityId)
             .Where((bulletin, industry) => industry.Id == dto.IndustryId)
             .ToFixedListAsync(dto, cancellationToken);
@@ -338,6 +338,7 @@ public abstract class SnapshotApplicationBase
             .WhereIF(dto.Status == EOrderQueryStatus.NoReply, (snapshot, order) => order.Status < EOrderStatus.Filed)
             .WhereIF(dto.Status == EOrderQueryStatus.Reply, (snapshot, order) => order.Status >= EOrderStatus.Filed)
             .WhereIF(dto.KeyWords.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.KeyWords) || order.No.Contains(dto.KeyWords))
+            .OrderByDescending((snapshot, order) => snapshot.CreationTime)
             .Select((snapshot, order) => new OrderOutDto
             {
                 Id = snapshot.Id,

+ 46 - 5
src/Hotline.Application/Snapshot/SnapshotOrderApplication.cs

@@ -32,6 +32,7 @@ using XF.Domain.Exceptions;
 using XF.Utility.EnumExtensions;
 using Hotline.Snapshot.IRepository;
 using Hotline.Application.Snapshot.Contracts;
+using Microsoft.AspNetCore.Http;
 
 namespace Hotline.Application.Snapshot;
 public class SnapshotOrderApplication : IOrderSnapshotApplication, IScopeDependency
@@ -74,7 +75,7 @@ public class SnapshotOrderApplication : IOrderSnapshotApplication, IScopeDepende
         dto.ValidateObject();
         var oldPublish = await _snapshotOrderPublishRepository.Queryable().Where(m => m.OrderId == dto.OrderId).FirstAsync(cancellation);
         if (oldPublish != null)
-            await _snapshotOrderPublishRepository.RemoveAsync(oldPublish,cancellationToken: cancellation);
+            await _snapshotOrderPublishRepository.RemoveAsync(oldPublish, cancellationToken: cancellation);
         var snapshotOrder = await _orderSnapshotRepository.GetAsync(dto.OrderId)
             ?? throw UserFriendlyException.SameMessage("工单不存在");
         var order = await _orderRepository.Queryable()
@@ -213,11 +214,10 @@ public class SnapshotOrderApplication : IOrderSnapshotApplication, IScopeDepende
     {
         var query = _orderSnapshotRepository.Queryable()
             .LeftJoin<Order>((snapshot, order) => snapshot.Id == order.Id)
-            .LeftJoin<WorkflowStep>((snapshot, order, step) => step.ExternalId == order.Id)
+            .LeftJoin<WorkflowStep>((snapshot, order, step) => step.ExternalId == order.Id && step.Tag == TagDefaults.OrderMark && step.Status != EWorkflowStepStatus.Handled)
             .Where((snapshot, order, step) => snapshot.IndustryName == "安全隐患")
-            .WhereIF(dto.Status == 0, (snapshot, order, step) => step.Tag == TagDefaults.OrderMark) // 全部
-            .WhereIF(dto.Status == 1, (snapshot, order, step) => step.Tag == TagDefaults.OrderMark && step.Status != EWorkflowStepStatus.Handled && step.HandlerId == _sessionContext.UserId) // 待标记
-            .WhereIF(dto.Status == 2, (snapshot, order, step) => step.Tag == TagDefaults.OrderMark && step.Status == EWorkflowStepStatus.Handled) // 已标记
+            .WhereIF(dto.Status == 1, (snapshot, order, step) => step.Id != null && snapshot.IsSafetyDepartment == null) // 待标记
+            .WhereIF(dto.Status == 2, (snapshot, order, step) => snapshot.IsSafetyDepartment != null) // 已标记
             .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order, step) => order.No.Contains(dto.No))
             .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order, step) => order.Title.Contains(dto.Title))
             .OrderByDescending((snapshot, order, step) => snapshot.CreationTime)
@@ -237,6 +237,9 @@ public class SnapshotOrderApplication : IOrderSnapshotApplication, IScopeDepende
                 LabelTime = snapshot.SignTime,
                 LabelUserName = snapshot.SignUserName
             });
+#if DEBUG
+        var sql = query.ToSqlString();
+#endif
         return query;
     }
 
@@ -352,6 +355,7 @@ public class SnapshotOrderApplication : IOrderSnapshotApplication, IScopeDepende
             snapshot.VerifyType = dto.Data.VerifyType;
             snapshot.IsCheckList = dto.Data.IsCheckList;
             snapshot.CompliantType = dto.Data.CompliantType;
+            dto.Workflow.Opinion += $" 核实方式: {dto.Data.VerifyType}  是否按清单检查: {(dto.Data.IsCheckList.Value ? "是" : "否")}";
             await _orderSnapshotRepository.UpdateAsync(snapshot);
             return;
         }
@@ -602,4 +606,41 @@ public class SnapshotOrderApplication : IOrderSnapshotApplication, IScopeDepende
             .Where(m => dto.Ids.Contains(m.Id))
             .ExecuteCommandAsync();
     }
+
+    public async Task GetOrderDetailAsync(string id, Share.Dtos.Order.OrderDto dto, CancellationToken token)
+    {
+        if (_systemSettingCacheManager.Snapshot == false) return;
+
+        await _orderSnapshotRepository.Queryable()
+            .Where(snapshot => snapshot.Id == id)
+            .Select(snapshot => new
+            {
+                snapshot.IndustryId,
+                snapshot.IndustryName,
+                snapshot.IsRectifyDepartment,
+                snapshot.IsDangerDepartment,
+                snapshot.IsSafetyDepartment,
+                snapshot.SignRemark,
+                snapshot.SignUserId,
+                snapshot.SignUserName,
+                snapshot.SignTime,
+                snapshot.IndustryCase
+            })
+            .FirstAsync(token)
+            .Then(async snapshot =>
+            {
+                dto.IndustryName = snapshot.IndustryName;
+                if (snapshot.IndustryCase.NotNullOrEmpty())
+                    dto.IndustryName = snapshot.IndustryName + " " + (await _industryCaseRepository.Queryable().Where(m => m.Id == snapshot.IndustryCase).FirstAsync())?.Name ?? string.Empty;
+                dto.IndustryId = snapshot.IndustryId;
+                dto.IsRectifyDepartment = snapshot.IsRectifyDepartment;
+                dto.IsDangerDepartment = snapshot.IsDangerDepartment;
+                dto.IsSafetyDepartment = snapshot.IsSafetyDepartment;
+                dto.SignUserId = snapshot.SignUserId;
+                dto.SignUserName = snapshot.SignUserName;
+                dto.SignTime = snapshot.SignTime;
+                dto.SignRemark = snapshot.SignRemark;
+            });
+
+    }
 }

+ 1 - 1
src/Hotline.Application/Snapshot/SnapshotPointsApplication.cs

@@ -36,7 +36,7 @@ public class SnapshotPointsApplication : ISnapshotPointsApplication, IScopeDepen
             .Select((points, citizen) => new PointsItemsOutDto
             {
                 IsSecurityMax = citizen.IsSecurityMax ?? false,
-                Rank = SqlFunc.MappingColumn<int>("DENSE_RANK() OVER (ORDER BY SUM(CASE WHEN \"points\".\"Direction\" = 1 THEN \"points\".\"Points\" ELSE 0 END) DESC)"),
+                Rank = SqlFunc.MappingColumn<int>("DENSE_RANK() OVER (ORDER BY SUM(CASE WHEN \"points\".\"Direction\" = 0 THEN \"points\".\"Points\" ELSE 0 END) DESC)"),
                 OutTotalPoint = SqlFunc.AggregateSum(SqlFunc.IIF(points.Direction == EPointsDirection.Out, points.Points, 0)),
                 OutPoints = SqlFunc.AggregateSum(SqlFunc.IIF(points.Direction == EPointsDirection.Out && points.Source == EPointsSource.Audit, points.Points, 0)),
                 TotalPoints = SqlFunc.AggregateSum(points.Points),

+ 2 - 1
src/Hotline.Share/Dtos/Article/BulletinDto.cs

@@ -560,10 +560,11 @@ namespace Hotline.Share.Dtos.Article
         /// </summary>
         public string Title { get; set; }
 
+        private string content;
         /// <summary>
         /// 内容
         /// </summary>
-        public string Content { get; set; }
+        public string Content { get { return content.RemoveHtmlTags(); } set { content = value; } }
 
         public DateTime CreationTime { get; set; }
     }

+ 42 - 4
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -880,10 +880,13 @@ namespace Hotline.Share.Dtos.Order
             this.FromName = maskString;
             this.FromGender = EGender.Unknown;
             this.FromPhone = maskString;
-            this.FullAddress = maskString;
-            this.Address = maskString;
-            this.City = maskString;
-            this.Street = maskString;
+            if (SourceChannelCode != "ZGSSP")
+            {
+                this.FullAddress = maskString;
+                this.Address = maskString;
+                this.City = maskString;
+                this.Street = maskString;
+            }
             this.ContactMask = maskString;
             return this;
         }
@@ -1048,6 +1051,41 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public string? IndustryName { get; set; }
 
+        /// <summary>
+        /// 部门-是否整改
+        /// </summary>
+        public bool? IsRectifyDepartment { get; set; }
+
+        /// <summary>
+        /// 部门-是否存在安全隐患
+        /// </summary>
+        public bool? IsDangerDepartment { get; set; }
+
+        /// <summary>
+        /// 标记-部门标记是否安全生产
+        /// </summary>
+        public bool? IsSafetyDepartment { get; set; }
+
+        /// <summary>
+        /// 标记-标记人
+        /// </summary>
+        public string? SignUserId { get; set; }
+
+        /// <summary>
+        /// 标记-标记人
+        /// </summary>
+        public string? SignUserName { get; set; }
+
+        /// <summary>
+        /// 标记-标记时间
+        /// </summary>
+        public DateTime? SignTime { get; set; }
+
+        /// <summary>
+        /// 标记-标记备注
+        /// </summary>
+        public string? SignRemark { get; set; }
+
         #endregion
 
         public bool? IsReTransact { get; set; }

+ 32 - 8
src/Hotline.Share/Dtos/Snapshot/IndustryDto.cs

@@ -1,6 +1,7 @@
 using Hotline.Share.Dtos.File;
 using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Enums.Order;
+using Hotline.Share.Enums.Settings;
 using Hotline.Share.Enums.Snapshot;
 using Hotline.Share.Requests;
 using Hotline.Share.Tools;
@@ -77,6 +78,11 @@ public class IndustryDetailOutDto : IndustryItemsOutDto
     /// App是否启用
     /// </summary>
     public bool IsAppEnable { get; set; }
+
+    /// <summary>
+    /// 是否开启积分
+    /// </summary>
+    public bool? IsPoints { get; set; }
 }
 
 public class IndustryItemsOutDto : IndustryOutDto
@@ -206,6 +212,22 @@ public record IndustryListInDto(string? Name, string? ApproveOrgName) : PagedReq
 public record IndustryCaseItemInDto(string? CaseName, string? IndustryName) : PagedRequest;
 
 
+public class SystemWebPageInDto
+{
+    /// <summary>
+    /// 页面类型;
+    /// 1: 正常;
+    /// 2: 关怀;
+    /// </summary>
+    [Required]
+    public EPageType PageType { get; set; }
+
+    /// <summary>
+    /// 页面名称
+    /// </summary>
+    [Required]
+    public string Name { get; set; }
+}
 public class IndustryBaseOutDto
 {
     /// <summary>
@@ -400,26 +422,28 @@ public class AddIndustryDto
     /// <summary>
     /// 上报积分
     /// </summary>
-    [Required]
-    public int ReportPoints { get; set; }
+    public int? ReportPoints { get; set; }
 
     /// <summary>
     /// 审核同意积分
     /// </summary>
-    [Required]
-    public int ArgeePoints { get; set; }
+    public int? ArgeePoints { get; set; }
 
     /// <summary>
     /// 审核不同意扣除积分
     /// </summary>
-    [Required]
-    public int RefusePoints { get; set; }
+    public int? RefusePoints { get; set; }
 
     /// <summary>
     /// 额外扣除积分
     /// </summary>
-    [Required]
-    public int ExtraDeductedPoints { get; set; }
+    public int? ExtraDeductedPoints { get; set; }
+
+    /// <summary>
+    /// 是否开启积分
+    /// </summary>
+    public bool? IsPoints { get; set; }
+
 }
 
 public class IndustryCaseItemOutDto : AddIndustryCaseDto

+ 6 - 0
src/Hotline.Share/Dtos/Snapshot/OrderDto.cs

@@ -193,6 +193,7 @@ public class AddSnapshotOrderInDto : Position
                     $"场所名称:{this.WorkplaceName}\r\n" + // 多业态混合经营场所 - 存储多种功能的劳动密集型企业
                     $"作业区域: {this.WorkArea}\r\n" + // 自流井区舒坪街道
                     $"作业类型: {name}\r\n" + // 电焊
+                    $"{(this.CompanyName.NotNullOrEmpty() ? "购气单位/个人名称: " + this.CompanyName + "\r\n" : string.Empty)}" +
                     $"作业时间:{this.StartWorkTime}~{this.EndWorkTime}\r\n" +
                     $"作业地点: {Address}{FullAddress}"; // 舒平(自流井区)(油库)"
         }
@@ -801,6 +802,11 @@ public class SnapshotOrderAuditDetailOutDto
     /// </summary>
     public IEnumerable<KeyValuePair<int, string>> AuditComBox { get; set; }
 
+    /// <summary>
+    /// 是否开启积分
+    /// </summary>
+    public bool? IsPoints { get; set; }
+
     /// <summary>
     /// 额外扣除积分类型
     /// </summary>

+ 5 - 0
src/Hotline.Share/Dtos/Snapshot/OrderPublishDto.cs

@@ -120,6 +120,11 @@ public class OrderPublishDetailOutDto : OrderPublishOutDto
     /// 线索名称
     /// </summary>
     public string HotspotSpliceName { get; set; }
+
+    /// <summary>
+    /// 上报时间
+    /// </summary>
+    public DateTime CreationTime { get; set; }
 }
 
 public class SnapshotWorkflow

+ 16 - 0
src/Hotline.Share/Dtos/Snapshot/RedPackDto.cs

@@ -199,6 +199,11 @@ public class SnapshotRedPackRecordSupplementItemsOutDto
     /// </summary>
     public string FromPhone { get; set; }
 
+    /// <summary>
+    /// 来电人姓名
+    /// </summary>
+    public string FromName { get; set; }
+
     /// <summary>
     /// 区域
     /// </summary>
@@ -238,6 +243,17 @@ public class SnapshotRedPackRecordSupplementItemsOutDto
     /// 备注
     /// </summary>
     public string Remark { get; set; }
+
+    /// <summary>
+    /// 补充发放类型
+    /// </summary>
+    public string? ReplenishType { get; set; }
+
+    /// <summary>
+    /// 补充发放类型Id
+    /// </summary>
+    public string? ReplenishTypeId { get; set; }
+
 }
 
 public record SnapshotRedPackRecordSupplementItemsInDto : PagedRequest

+ 23 - 0
src/Hotline.Share/Enums/Settings/EPageType.cs

@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Enums.Settings;
+
+public enum EPageType
+{
+    /// <summary>
+    /// 正常
+    /// </summary>
+    [Description("正常")]
+    Normal = 1,
+
+    /// <summary>
+    /// 关怀
+    /// </summary>
+    [Description("关怀")]
+    Care = 2
+}

+ 3 - 3
src/Hotline.Share/Enums/Snapshot/EGuiderSystemReplyType.cs

@@ -9,10 +9,10 @@ namespace Hotline.Share.Enums.Snapshot;
 public enum EGuiderSystemReplyType
 {
     /// <summary>
-    /// 未知
+    /// 流转
     /// </summary>
-    [Description("未知")]
-    Unknow = 1,
+    [Description("流转")]
+    Circular = 1,
 
     /// <summary>
     /// 办结

+ 13 - 0
src/Hotline.Share/Tools/StringExtensions.cs

@@ -143,4 +143,17 @@ public static class StringExtensions
         }
         return string.Empty;
     }
+
+    /// <summary>
+    /// 移除字符串中的所有 HTML 标签
+    /// </summary>
+    /// <param name="input">包含 HTML 的字符串</param>
+    /// <returns>去除 HTML 标签后的字符串</returns>
+    public static string RemoveHtmlTags(this string input)
+    {
+        if (string.IsNullOrWhiteSpace(input))
+            return string.Empty;
+
+        return Regex.Replace(input, "<.*?>", string.Empty);
+    }
 }

+ 32 - 0
src/Hotline/Settings/SystemWebPageSetting.cs

@@ -0,0 +1,32 @@
+using Hotline.Share.Enums.Settings;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Settings;
+
+public class SystemWebPageSetting : CreationEntity
+{
+    /// <summary>
+    /// 页面名字
+    /// </summary>
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 页面类型
+    /// </summary>
+    public EPageType PageType { get; set; }
+
+    /// <summary>
+    /// 页面元素名称
+    /// </summary>
+    public string TagName { get; set; }
+
+    /// <summary>
+    /// 页面元素值
+    /// </summary>
+    public string TagValue { get; set; }
+}

+ 6 - 0
src/Hotline/Snapshot/Industry.cs

@@ -173,6 +173,12 @@ public class Industry : CreationSoftDeleteEntity
     [SugarColumn(ColumnDescription = "行业类型")]
     public EIndustryType IndustryType { get; set; }
 
+    /// <summary>
+    /// 是否开启积分
+    /// </summary>
+    [SugarColumn(ColumnDescription = "是否开启积分")]
+    public bool? IsPoints { get; set; }
+
     /// <summary>
     /// 上报积分
     /// </summary>

+ 2 - 0
test/Hotline.Tests/Application/IndustryApplicationTest.cs

@@ -58,6 +58,7 @@ public class IndustryApplicationTest : TestBase
         var orgs = await _systemOrganizeRepository.GetOrgEnabled();
         industry.ApproveOrgId = orgs.First().Key;
         industry.ApproveOrgName = null;
+        industry.IsPoints = false;
         await _industryApplication.UpdateIndustryAsync(industry, CancellationToken.None);
         var updateIndustry = await _industryApplication.GetIndustryDetailAsync(item.Id, CancellationToken.None);
         updateIndustry.ForeachClassProperties(async (industry, property, name, value) =>
@@ -65,6 +66,7 @@ public class IndustryApplicationTest : TestBase
             industry.GetType().GetProperty(name).GetValue(industry).ShouldBe(value);
             return true;
         });
+        updateIndustry.IsPoints.ShouldBe(false);
         await _industryApplication.UpdateIndustryAsync(item.Adapt<UpdateIndustryInDto>(), CancellationToken.None);
     }
 

+ 5 - 3
test/Hotline.Tests/Application/OrderApplicationTest.cs

@@ -4,7 +4,9 @@ using Hotline.Early;
 using Hotline.Orders;
 using Hotline.Push.FWMessage;
 using Hotline.Push.Notifies;
+using Hotline.Settings;
 using Hotline.Share.Dtos.Order;
+using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Enums.Order;
 using Mapster;
 using NPOI.SS.Formula.Functions;
@@ -58,8 +60,8 @@ public class OrderApplicationTest
         m.NotifyDto.Name.ShouldBe(data.Name);
         m.NotifyDto.PushBusiness.ShouldBe(data.PushBusiness);
 
-        new EarlyWarningSetting { Id = "123" }.Adapt<EarlyWarningSettingDto>().Id.ShouldBe("123");
-
-        new EarlyWarningSettingDto { Id = "123" }.Adapt<EarlyWarningSetting>().Id.ShouldBe("123");
+        var a = new SystemDicData { Id = "123"};
+        var b = a.Adapt<SystemDicDataOutDto>();
+        b.ShouldNotBeNull();
     }
 }

+ 38 - 3
test/Hotline.Tests/Application/OrderSnapshotApplicationTest.cs

@@ -19,6 +19,7 @@ using Hotline.ThirdAccountDomainServices;
 using Hotline.ThirdAccountDomainServices.Interfaces;
 using Hotline.Users;
 using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.DependencyInjection;
 using NPOI.SS.Formula.Functions;
 using Shouldly;
@@ -48,8 +49,9 @@ public class OrderSnapshotApplicationTest : TestBase
     private readonly IIndustryCaseRepository _industryCaseRepository;
     private readonly ISnapshotPointsRecordRepository _pointsRecordRepository;
     private readonly IIndustryRepository _industryRepository;
+    private readonly OrderController _orderController;
 
-    public OrderSnapshotApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService, IThirdAccountRepository thirdAccountRepository, OrderServiceMock orderServiceMock, ISystemDicDataCacheManager systemDicDataCacheManager, IOrderSnapshotRepository orderSnapshotRepository, IOrderSnapshotApplication orderSnapshotApplication, ISnapshotApplication snapshotApplication, IIndustryLogRepository industryLogRepository, ICommunityInfoRepository communityInfoRepository, IRedPackAuditRepository redPackAuditRepository, IRedPackRecordRepository redPackRecordRepository, ISnapshotLabelLogRepository snapshotLabelLogRepository, ITypedCache<SystemSetting> cacheSettingData, IRedPackApplication redPackApplication, IOrderRepository orderRepository, ThirdAccounSupplierFactory thirdAccountDomainFactory, IIndustryCaseRepository industryCaseRepository, ISnapshotPointsRecordRepository pointsRecordRepository, IIndustryRepository industryRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdIdentiyService, thirdAccountRepository, cacheSettingData, thirdAccountDomainFactory)
+    public OrderSnapshotApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService, IThirdAccountRepository thirdAccountRepository, OrderServiceMock orderServiceMock, ISystemDicDataCacheManager systemDicDataCacheManager, IOrderSnapshotRepository orderSnapshotRepository, IOrderSnapshotApplication orderSnapshotApplication, ISnapshotApplication snapshotApplication, IIndustryLogRepository industryLogRepository, ICommunityInfoRepository communityInfoRepository, IRedPackAuditRepository redPackAuditRepository, IRedPackRecordRepository redPackRecordRepository, ISnapshotLabelLogRepository snapshotLabelLogRepository, ITypedCache<SystemSetting> cacheSettingData, IRedPackApplication redPackApplication, IOrderRepository orderRepository, ThirdAccounSupplierFactory thirdAccountDomainFactory, IIndustryCaseRepository industryCaseRepository, ISnapshotPointsRecordRepository pointsRecordRepository, IIndustryRepository industryRepository, OrderController orderController) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdIdentiyService, thirdAccountRepository, cacheSettingData, thirdAccountDomainFactory)
     {
         _orderServiceMock = orderServiceMock;
         _systemDicDataCacheManager = systemDicDataCacheManager;
@@ -66,6 +68,11 @@ public class OrderSnapshotApplicationTest : TestBase
         _industryCaseRepository = industryCaseRepository;
         _pointsRecordRepository = pointsRecordRepository;
         _industryRepository = industryRepository;
+        _orderController = orderController;
+        _orderController.ControllerContext = new ControllerContext
+        {
+            HttpContext = new DefaultHttpContext()
+        };
     }
 
     /// <summary>
@@ -106,7 +113,7 @@ public class OrderSnapshotApplicationTest : TestBase
         SetSettingCache(SettingConstants.OvertimeBack, "4");
         var snapshotLabels = _systemDicDataCacheManager.SnapshotOrderLabel;
         var inputLable = snapshotLabels.Where(m => m.DicDataValue == "bss").ToList();
-        var industryCase = await _industryCaseRepository.Queryable().Where(m => m.IsEnable ==  true).FirstAsync();
+        var industryCase = await _industryCaseRepository.Queryable().Where(m => m.IsEnable == true).FirstAsync();
         var order = _orderServiceMock.CreateSnapshotOrder(SetWeiXin)
             .办理到网格员(SetZuoXi)
             .StepHandle(async (order, mock) =>
@@ -163,9 +170,12 @@ public class OrderSnapshotApplicationTest : TestBase
                 data.IndustryCase = industryCase.Id;
                 data.IsRectifyDepartment = true;
             })
-            .StepHandle(async order => {
+            .StepHandle(async order =>
+            {
                 var snapshot = await _orderSnapshotRepository.GetAsync(order.Id);
                 snapshot.IndustryCase.ShouldBe(industryCase.Id);
+                var orderDetail = await _orderController.Get(order.Id);
+                orderDetail.IndustryName.Contains(" ").ShouldBeTrue();
             })
             .发布工单(SetZuoXi, inputLable.Select(m => new Kv(m.DicDataName, m.DicDataName)).ToList())
             .StepHandle(async order =>
@@ -201,6 +211,31 @@ public class OrderSnapshotApplicationTest : TestBase
                 baseData.AuditType.ShouldNotBeNull();
                 baseData.AuditTypeCode.ShouldNotBeNull();
                 baseData.Amount.ShouldNotBeNull();
+
+                var specialRedAuditItems = 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) { PageIndex = 1, PageSize = 10 }).ToListAsync();
+                var specialRedAudit = specialRedAuditItems.FirstOrDefault();
+                specialRedAudit.ShouldNotBeNull();
+                var a = _systemDicDataCacheManager.SnapshotReplenishType.First();
+                var inDto = new UpdateRedPackRecordInDto
+                {
+                    RedPackAuditId = baseData.RedPackAuditId,
+                    Name = "收银人",
+                    BankCardNo = "1233921321",
+                    OpenBank = "建设银行",
+                    ReplenishAmount = 10,
+                    ReplenishTime = DateTime.Now,
+                    ReplenishRemark = "补充发放备注",
+                    IsSendSMS = false,
+                    ReplenishType = a.DicDataName,
+                    ReplenishTypeId = a.DicDataValue
+                };
+
+                await _redPackApplication.UpdateRedPackSpecialRecordAsync(inDto);
+                specialRedAuditItems = 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) { PageIndex = 1, PageSize = 10 }).ToListAsync();
+                specialRedAudit = specialRedAuditItems.First();
+                specialRedAudit.ShouldNotBeNull();
+                specialRedAudit.BankCardNo.ShouldBe(inDto.BankCardNo);
+                specialRedAudit.OpenBank.ShouldBe(inDto.OpenBank);
             })
             .GetCreateResult();
         order.Id.ShouldNotBeNull();

+ 11 - 0
test/Hotline.Tests/Application/RedPackApplicationTest.cs

@@ -8,6 +8,7 @@ using Hotline.Settings;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Snapshot;
 using Hotline.Share.Enums.Snapshot;
+using Hotline.Share.Tools;
 using Hotline.Snapshot.IRepository;
 using Hotline.Tests.Mock;
 using Hotline.ThirdAccountDomainServices;
@@ -164,4 +165,14 @@ public class RedPackApplicationTest : TestBase
         }).ToListAsync();
         sendRecordItems.Count.ShouldNotBe(0);
     }
+
+    [Fact]
+    public async Task GetRedPackRecordSupplementItems_Test()
+    {
+        var items = await _redPackApplication.GetRedPackRecordSupplementItems(new SnapshotRedPackRecordSupplementItemsInDto()).ToListAsync();
+        items.Any(m => m.FromName.NotNullOrEmpty()).ShouldBeTrue();
+        items.Any(m => m.Remark.NotNullOrEmpty()).ShouldBeTrue();
+        items.Any(m => m.ReplenishType.NotNullOrEmpty()).ShouldBeTrue();
+        items.ShouldNotBeNull();
+    }
 }

+ 1 - 0
test/Hotline.Tests/Application/SnapshotApplicationTest.cs

@@ -93,6 +93,7 @@ public class SnapshotApplicationTest : TestBase
             IsPublished = true
         }).ToPageListAsync(0, 10);
         items.NotNullOrEmpty().ShouldBeTrue();
+        var signItems =  await _orderSnapshotApplication.GetSignOrderSnapshotItems(new SignOrderSnapshotItemsInDto()).ToListAsync();
     }
 
     [Fact]