ソースを参照

Merge branch 'test' of http://110.188.24.182:10023/Fengwo/hotline into test

tangjiang 4 週間 前
コミット
cc79a3854d

+ 20 - 19
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -2364,24 +2364,25 @@ namespace Hotline.Api.Controllers.Bi
              .Where(x => x.VisitTime >= StartTime && x.VisitTime <= EndTime && x.VisitState != EVisitState.None && x.VisitState != EVisitState.Visited).CountAsync()
             };
             //
-            var data = await _orderVisitDetailRepository.Queryable()
+            var query = _orderVisitDetailRepository.Queryable()
                 .LeftJoin<OrderVisit>((it, o) => it.VisitId == o.Id)
                 .LeftJoin<SystemOrganize>((it, o, so) => it.VisitOrgCode == so.Id)
                 .Where((it, o, so) => it.VisitTarget == EVisitTarget.Org && o.VisitTime >= StartTime && o.VisitTime <= EndTime && o.VisitState == EVisitState.Visited)
                  .Select((it, o, so) => new
                  {
-                     Dissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2"), 1, 0)),
-                     Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2"), 0, 1)),
-                     CityDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2")) && so.OrgType == EOrgType.City, 1, 0)),
-                     CitySatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") && !SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2") && so.OrgType == EOrgType.City, 1, 0)),
-                     CountyDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2")) && so.OrgType == EOrgType.County, 1, 0)),
-                     CountySatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") && !SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2") && so.OrgType == EOrgType.County, 1, 0)),
-                     CenterDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2")) && so.IsCenter, 1, 0)),
-                     CenterSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") && !SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2") && so.IsCenter, 1, 0)),
-                     OrgDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2")) && !so.IsCenter, 1, 0)),
-                     OrgSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") && !SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2") && !so.IsCenter, 1, 0)),
-                 })
-                .FirstAsync();
+                     Dissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="1" || SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="2", 1, 0)),
+                     Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key")== "1" || SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "2", 0, 1)),
+                     CityDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "1" || SqlFunc.JsonField(it.OrgProcessingResults, "Key")== "2") && so.OrgType == EOrgType.City, 1, 0)),
+                     CitySatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "1") && !(SqlFunc.JsonField(it.OrgProcessingResults, "Key")== "2") && so.OrgType == EOrgType.City, 1, 0)),
+                     CountyDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="1" || SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="2") && so.OrgType == EOrgType.County, 1, 0)),
+                     CountySatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!(SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="1") && !(SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="2") && so.OrgType == EOrgType.County, 1, 0)),
+                     CenterDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="1" || SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="2") && so.IsCenter, 1, 0)),
+                     CenterSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!(SqlFunc.JsonField(it.OrgProcessingResults, "Key")== "1") && !(SqlFunc.JsonField(it.OrgProcessingResults, "Key")== "2") && so.IsCenter, 1, 0)),
+                     OrgDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="1" || SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="2") && !so.IsCenter, 1, 0)),
+                     OrgSatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!(SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="1") && !(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "2") && !so.IsCenter, 1, 0)),
+                 });
+            Console.Write(query.ToSqlString());
+             var data = await query.FirstAsync();
             if (data.Satisfied > 0)
             {
                 var count = data.Satisfied + data.Dissatisfied;
@@ -2659,12 +2660,12 @@ namespace Hotline.Api.Controllers.Bi
                 .Select((it, so) => new EnterpriseOrderDto
                 {
                     VisitdCount = SqlFunc.AggregateCount(1),
-                    Dissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2"), 1, 0)),
-                    Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") && !SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2"), 1, 0)),
-                    CityDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2")) && so.OrgType == EOrgType.City, 1, 0)),
-                    CitySatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") && !SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2") && so.OrgType == EOrgType.City, 1, 0)),
-                    CountyDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2")) && so.OrgType == EOrgType.County, 1, 0)),
-                    CountySatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") && !SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2") && so.OrgType == EOrgType.County, 1, 0)),
+                    Dissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="1" || SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="2", 1, 0)),
+                    Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!(SqlFunc.JsonField(it.OrgProcessingResults, "Key")== "1") && !(SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="2"), 1, 0)),
+                    CityDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="1" || SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="2") && so.OrgType == EOrgType.City, 1, 0)),
+                    CitySatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!(SqlFunc.JsonField(it.OrgProcessingResults, "Key")== "1") && !(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "2") && so.OrgType == EOrgType.City, 1, 0)),
+                    CountyDissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF((SqlFunc.JsonField(it.OrgProcessingResults, "Key")=="1" || SqlFunc.JsonField(it.OrgProcessingResults, "Key")== "2") && so.OrgType == EOrgType.County, 1, 0)),
+                    CountySatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(!(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "1") && !(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "2") && so.OrgType == EOrgType.County, 1, 0)),
                 })
                 .ToListAsync();
 

+ 12 - 9
src/Hotline.Api/Controllers/OrderController.cs

@@ -92,6 +92,7 @@ public class OrderController : BaseController
 {
     #region 注入
 
+    private readonly ISystemLogRepository _systemLogRepository;
     private readonly IOrderDomainService _orderDomainService;
     private readonly BaseDataApplication _baseDataApplication;
     private readonly IOrderRepository _orderRepository;
@@ -246,7 +247,8 @@ public class OrderController : BaseController
         ICircularRecordDomainService circularRecordDomainService,
         IRedPackAuditRepository redPackAuditRepository,
         IRepository<Hotline.Special.SpecialNumber> specialNumberRepository,
-        IRepository<OrderVisitDetailCopy> orderVisitDetailCopyRepository)
+        IRepository<OrderVisitDetailCopy> orderVisitDetailCopyRepository,
+        ISystemLogRepository systemLogRepository)
     {
         _orderDomainService = orderDomainService;
         _orderRepository = orderRepository;
@@ -325,6 +327,7 @@ public class OrderController : BaseController
         _redPackAuditRepository = redPackAuditRepository;
         _specialNumberRepository = specialNumberRepository;
         _orderVisitDetailCopyRepository = orderVisitDetailCopyRepository;
+        _systemLogRepository = systemLogRepository;
     }
 
     #endregion
@@ -4990,7 +4993,7 @@ public class OrderController : BaseController
         try
         {
             var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
-            startDto.DefinitionModuleCode = WorkflowModuleConsts.OrderHandle;
+            startDto.DefinitionModuleCode = await _orderSnapshotApplication.GetStartflowAsync(order.Id, HttpContext.RequestAborted);
             startDto.Title = order.Title;
             var (workflow, startStep) =
                 await _workflowDomainService.StartAsync(startDto, order.Id, order.ExpiredTime, cancellationToken: HttpContext.RequestAborted);
@@ -5014,12 +5017,12 @@ public class OrderController : BaseController
     /// <summary>
     /// 查询工单办理流程开启参数
     /// </summary>
-    /// <returns></returns>4
+    /// <returns></returns>
     [HttpGet("startflow")]
     public async Task<NextStepsDto> GetFlowStartOptions([FromQuery] string? orderId)
     {
-        var dto = await _workflowApplication.GetStartStepsAsync(await _orderSnapshotApplication.GetStartflowAsync(orderId, HttpContext.RequestAborted),
-            HttpContext.RequestAborted);
+        var modelCode = await _orderSnapshotApplication.GetStartflowAsync(orderId, HttpContext.RequestAborted);
+        var dto = await _workflowApplication.GetStartStepsAsync(modelCode, HttpContext.RequestAborted);
         if (orderId.NotNullOrEmpty())
         {
             dto.Opinion = await _typeCache.GetAsync($"tmp_opinion_{orderId}{_sessionContext.UserId}", HttpContext.RequestAborted);
@@ -5176,7 +5179,7 @@ public class OrderController : BaseController
                 {
                     if (e.Message.Contains("未找到对应节点"))
                     {
-                        stringBuilder.AppendLine($"{order.No} 修改成功");
+                        stringBuilder.AppendLine($"{order.No} " + e.Message);
                         continue;
                     }
 
@@ -5222,7 +5225,7 @@ public class OrderController : BaseController
                 .Select((m, order) => order.No)
                 .ToListAsync();
             if (orderNo.NotNullOrEmpty())
-                stringBuilder.AppendLine(string.Join(',', orderNo) + " 该工单已红包审批,无法修改标记状态!");
+                throw new UserFriendlyException("该工单已红包审批,无法修改标记状态!");
             else
             {
                 await _orderSnapshotRepository.Updateable()
@@ -5398,7 +5401,7 @@ public class OrderController : BaseController
     {
         return (_, _, stepDefine, newStep) =>
         {
-            if (stepDefine.BusinessType is EBusinessType.Department or EBusinessType.DepartmentLeader)
+            if (stepDefine.BusinessType is EBusinessType.Department)
             {
                 newStep.HandlerId = null;
                 newStep.HandlerName = null;
@@ -7701,7 +7704,7 @@ public class OrderController : BaseController
             }
         }
 
-        if (_appOptions.Value.IsYiBin && _appOptions.Value.IsLuZhou)
+        if (_appOptions.Value.IsYiBin || _appOptions.Value.IsLuZhou)
         {
             if (order.FileOrgIsCenter.Value)
             {

+ 5 - 0
src/Hotline.Api/Controllers/TestController.cs

@@ -1537,5 +1537,10 @@ public class TestController : BaseController
 
         return ipv4;
     }
+
+    public string DecryptSign(string sign)
+    {
+        return sign;
+    }
 }
 

+ 1 - 1
src/Hotline.Repository.SqlSugar/System/SystemLogRepository.cs

@@ -29,7 +29,7 @@ public class SystemLogRepository : BaseRepository<SystemLog>, ISystemLogReposito
                 ExecuteParam = executeParam,
                 ExecuteResult = executeResult,
                 ExecuteUrl = executeUrl,
-                Remark = remark.Substring(0, 255),
+                Remark = remark.Length > 255 ? remark.Substring(0, 255) : remark,
                 Status = status,
                 IpUrl = ipUrl
             };

+ 6 - 1
src/Hotline.Share/Enums/FlowEngine/EFlowDirection.cs

@@ -22,5 +22,10 @@ public enum EFlowDirection
     /// <summary>
     /// 已归档回到部门
     /// </summary>
-    FiledToOrg = 7
+    FiledToOrg = 7,
+
+    /// <summary>
+    /// 其他(流程模板配置为其他时)
+    /// </summary>
+    Other = 99
 }

+ 4 - 6
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -1317,8 +1317,7 @@ namespace Hotline.FlowEngine.Workflows
                         EBusinessType.Department => EFlowDirection.CenterToOrg,
                         EBusinessType.DepartmentLeader => EFlowDirection.CenterToOrg,
                         EBusinessType.File => EFlowDirection.CenterToFile,
-                        _ => throw new ArgumentOutOfRangeException(nameof(directionStepBusinessType),
-                            directionStepBusinessType, null)
+                        _ => EFlowDirection.Other
                     };
                 case EBusinessType.Department:
                 case EBusinessType.DepartmentLeader:
@@ -1331,8 +1330,7 @@ namespace Hotline.FlowEngine.Workflows
                         EBusinessType.Department => EFlowDirection.OrgToOrg,
                         EBusinessType.DepartmentLeader => EFlowDirection.OrgToOrg,
                         EBusinessType.File => EFlowDirection.OrgToFile,
-                        _ => throw new ArgumentOutOfRangeException(nameof(directionStepBusinessType),
-                            directionStepBusinessType, null)
+                        _ => EFlowDirection.Other
                     };
                 case EBusinessType.File:
                     return directionStepBusinessType switch
@@ -1343,14 +1341,14 @@ namespace Hotline.FlowEngine.Workflows
                         EBusinessType.DepartmentLeader => EFlowDirection.FiledToOrg,
                         EBusinessType.CenterMonitor => EFlowDirection.FiledToCenter,
                         EBusinessType.CenterLeader => EFlowDirection.FiledToCenter,
-                        _ => throw new ArgumentOutOfRangeException(nameof(directionStepBusinessType), directionStepBusinessType, null)
+                        _ => EFlowDirection.Other
                     };
                 case EBusinessType.Unknown:
                 case EBusinessType.Publish:
                 case EBusinessType.Visit:
                 case EBusinessType.TrashEnd:
                 default:
-                    throw new ArgumentOutOfRangeException(nameof(sourceStepBusinessType), sourceStepBusinessType, null);
+                    return EFlowDirection.Other;
             }
         }
 

+ 1 - 1
src/Hotline/Identity/IdentityDomainService.cs

@@ -32,7 +32,7 @@ public class IdentityDomainService : IIdentityDomainService, IScopeDependency
         if (string.IsNullOrEmpty(request.Nonce)) return false;
         var now = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
         _logger.LogInformation($"now:{now}, req:{request.Timestamp}");
-        if (request.Timestamp > now) return false;
+        if ((request.Timestamp - now) > 3) return false;
         if ((now - request.Timestamp) >= 60) return false;
         var nonce = _cacheAccountNonce.Get(request.Username)?.Nonce;
         _logger.LogInformation($"nonce:{nonce}, reqnonce:{request.Nonce}");

+ 18 - 0
test/Hotline.Tests/Application/OrderSnapshotApplicationTest.cs

@@ -1,6 +1,7 @@
 using Hotline.Api.Controllers;
 using Hotline.Application.Snapshot.Contracts;
 using Hotline.Caching.Interfaces;
+using Hotline.FlowEngine.WorkflowModules;
 using Hotline.Identity.Accounts;
 using Hotline.Identity.Roles;
 using Hotline.Orders;
@@ -75,6 +76,23 @@ public class OrderSnapshotApplicationTest : TestBase
         };
     }
 
+    /// <summary>
+    /// 随手拍网格员超时:
+    /// </summary>
+    /// <returns></returns>
+    [Fact]
+    public async Task SnapshotWorkflow_WorkflowModuleError_est()
+    {
+        var order = _orderServiceMock.CreateSnapshotOrder(SetWeiXin)
+            .办理到一级部门(SetZuoXi)
+            .StepHandle(async order =>
+            {
+                var detail = await _orderController.Get(order.Id);
+                detail.Workflow.ModuleCode.ShouldBe(WorkflowModuleConsts.OrderHandleSnapshot);
+            }
+            ).GetCreateResult();
+    }
+
     /// <summary>
     /// 随手拍网格员超时:
     /// </summary>

+ 2 - 2
test/Hotline.Tests/Mock/OrderServiceMock.cs

@@ -71,12 +71,12 @@ public class OrderServiceMock
         _systemDicDataCacheManager = systemDicDataCacheManager;
     }
 
-    public IOrderServiceStartWorkflow CreateSnapshotOrder(Action action)
+    public IOrderServiceStartWorkflow CreateSnapshotOrder(Action action, string industryName = "电气焊作业申报")
     {
         action.Invoke();
         var homePage = _snapshotController.GetHomePageAsync().GetAwaiter().GetResult();
         var industry = homePage.Industrys
-            .Where(m => m.IndustryType == EIndustryType.Clue)
+            .Where(m => m.Name == industryName)
             .OrderBy(m => m.DisplayOrder)
             .FirstOrDefault();
         var pageBase = _snapshotController.GetIndustryBaseAsync(industry.Id).GetAwaiter().GetResult();