Prechádzať zdrojové kódy

hotfix: 延期待办IsCanHandle() error

xf 10 mesiacov pred
rodič
commit
5a20a55a9b

+ 1 - 1
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -670,7 +670,7 @@ namespace Hotline.Api.Controllers
                 .Includes(it => it.Knowledge)
                 .Includes(it => it.User)
                 .Includes(it => it.SystemOrganize)
-                .Includes(it => it.Workflow)
+                .Includes(it => it.Workflow, d=>d.Steps)
                 .Where(it => it.WorkflowId != null)
                 .WhereIF(pagedDto.EKnowledgeApplyType.HasValue, d => d.WorkflowModuleStatus == pagedDto.EKnowledgeApplyType)
                 .WhereIF(pagedDto.EKnowledgeWorkFlowStatus.HasValue, d => d.WorkFlowApplyStatus == pagedDto.EKnowledgeWorkFlowStatus)

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

@@ -668,7 +668,7 @@ public class OrderController : BaseController
         var dissatisfiedReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.DissatisfiedReason);
         var visitManner = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.VisitManner).Where(x => x.DicDataValue != "-1");
         //var callRecord = await _trCallRecordRepository.GetAsync(x => x.CallAccept == orderVisit.CallId); //由CallAccept改为OtherAccept
-        var callRecord = await _trCallRecordRepository.GetAsync(x => x.OtherAccept == orderVisit.CallId && string.IsNullOrEmpty(x.OtherAccept)==false,HttpContext.RequestAborted);
+        var callRecord = await _trCallRecordRepository.GetAsync(x => x.OtherAccept == orderVisit.CallId && string.IsNullOrEmpty(x.OtherAccept) == false, HttpContext.RequestAborted);
         var recordingFileUrl = "";
         var recordingBaseAddress = "";
         var recordingAbsolutePath = "";
@@ -781,7 +781,7 @@ public class OrderController : BaseController
                 _mapper.Map(detaildto, visit.OrderVisitDetails[i]);
             }
         }
-       
+
         await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
         await _orderVisitedDetailRepository.UpdateRangeAsync(visit.OrderVisitDetails, HttpContext.RequestAborted);
         await _orderRepository.UpdateAsync(visit.Order, HttpContext.RequestAborted);
@@ -1389,12 +1389,12 @@ public class OrderController : BaseController
     {
         var model = await _orderDelayRepository.Queryable()
             .Includes(d => d.Order)
-            .Includes(d => d.Workflow)
+            .Includes(d => d.Workflow, x=>x.Steps)
             .FirstAsync(d => d.Id == id);
         var rspModel = _mapper.Map<OrderDelayDto>(model);
         //rspModel.IsCanHandle = model.CanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId);
-        rspModel.IsCanHandle = model.Workflow.IsCanHandle(
-            _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles);
+        rspModel.IsCanHandle = model.Workflow?.IsCanHandle(
+            _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles) ?? false;
         rspModel.Handle = false;
         if (!string.IsNullOrEmpty(rspModel.WorkflowId))
         {
@@ -1732,13 +1732,13 @@ public class OrderController : BaseController
     {
         var model = await _orderScreenRepository.Queryable(canView: false)
             .Includes(x => x.Order)
-            .Includes(x => x.Workflow)
+            .Includes(x => x.Workflow, d=>d.Steps)
             .Includes(x => x.Visit, d => d.Order)
             .FirstAsync(x => x.Id == id);
         var rspModel = _mapper.Map<OrderScreenListDto>(model);
         //rspModel.IsCanHandle = model.CanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId);
-        rspModel.IsCanHandle = model.Workflow.IsCanHandle(
-            _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles);
+        rspModel.IsCanHandle = model.Workflow?.IsCanHandle(
+            _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles) ?? false;
         rspModel.Handle = false;
         if (!string.IsNullOrEmpty(rspModel.WorkflowId))
         {
@@ -2394,7 +2394,7 @@ public class OrderController : BaseController
 
         //工单ID跟通话记录相关联
         //var callRecord = await _trCallRecordRepository.GetAsync(p => p.CallAccept == order.CallId, HttpContext.RequestAborted);//由CallAccept改为OtherAccept
-        var callRecord = await _trCallRecordRepository.GetAsync(p => p.OtherAccept== order.CallId && string.IsNullOrEmpty(p.OtherAccept) ==false, HttpContext.RequestAborted);
+        var callRecord = await _trCallRecordRepository.GetAsync(p => p.OtherAccept == order.CallId && string.IsNullOrEmpty(p.OtherAccept) == false, HttpContext.RequestAborted);
         if (callRecord != null && string.IsNullOrEmpty(callRecord.ExternalId))
         {
             callRecord.ExternalId = order.Id;
@@ -3035,7 +3035,7 @@ public class OrderController : BaseController
             .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
             .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
             .Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
-            .Where(d => d.Status != EOrderStatus.BackToProvince &&  d.Status < EOrderStatus.Filed)
+            .Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
             //.Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(os => os.OrderId == d.Id).NotAny())
             .Where(d => d.OrderSpecials.Any() == false || d.OrderSpecials.Any(s => s.State == 0) == false)
             .OrderByDescending(d => d.StartTime)
@@ -3045,7 +3045,7 @@ public class OrderController : BaseController
 
         dto.IsHandled = false;
         isHandled = dto.IsHandled.HasValue && dto.IsHandled.Value;
-		EOrderStatus[] handleStatuses = EnumExts.GetFields<EOrderStatus>().Select(d => (EOrderStatus)d.Key).ToArray();
+        EOrderStatus[] handleStatuses = EnumExts.GetFields<EOrderStatus>().Select(d => (EOrderStatus)d.Key).ToArray();
         handleStatuses = handleStatuses.WhereIF(dto.IsHandled.HasValue,
                 d => dto.IsHandled!.Value
                     ? d is not EOrderStatus.WaitForAccept and not EOrderStatus.BackToUnAccept and not EOrderStatus.SpecialToUnAccept
@@ -3068,7 +3068,7 @@ public class OrderController : BaseController
             .OrderByIF(dto.IsHandled == false, d => d.CreationTime, OrderByType.Desc)
             .ToPagedListAsync(dto, HttpContext.RequestAborted);
 
-		var page2 = new PagedDto<OrderDto>(total2, _mapper.Map<IReadOnlyList<OrderDto>>(items2));
+        var page2 = new PagedDto<OrderDto>(total2, _mapper.Map<IReadOnlyList<OrderDto>>(items2));
 
         return new { Waited = page1, Sign = page2 };
     }

+ 1 - 1
src/Hotline/FlowEngine/Workflows/Workflow.cs

@@ -722,7 +722,7 @@ public partial class Workflow
     /// <returns></returns>
     public bool IsCanHandle(string userId, string orgId, string[] roleIds)
     {
-        if (!Steps.Any())
+        if (Steps is null || !Steps.Any())
             throw new UserFriendlyException("未查询节点信息");
         return Status is EWorkflowStatus.Runnable &&
                //(HandlerUsers.Any(d => d.Key == userId) || HandlerOrgs.Any(d => d.Key == orgCode));

+ 1 - 1
src/Hotline/KnowledgeBase/KnowledgeDomainService.cs

@@ -48,7 +48,7 @@ namespace Hotline.KnowledgeBase
         public async Task<Knowledge> KnowledgeInfo(string Id, CancellationToken cancellationToken)
         {
             var know = await _knowledgeRepository.Queryable(false, false, false)
-                .Includes(x => x.Workflow)
+                .Includes(x => x.Workflow, d=>d.Steps)
                 .Includes(x=>x.SourceOrganize)
                 .FirstAsync(p => p.Id == Id);
             if (know is null)