Parcourir la source

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

xf il y a 6 mois
Parent
commit
0a43c6f98c

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

@@ -1065,7 +1065,7 @@ namespace Hotline.Api.Controllers
         public async Task AddAiVisit([FromBody]AddAiVisitDto dto)
         {
             //验证是否有重复电话
-            if (dto.AiOrderVisitDetails.DistinctBy(x=>x.OuterNo).Count() != dto.AiOrderVisitDetails.Count)
+            if (dto.AiOrderVisitDetails.DistinctBy(x=>x.OuterNo.Trim()).Count() != dto.AiOrderVisitDetails.Count)
             {
                 throw UserFriendlyException.SameMessage("任务中存在重复外呼号码,请检查后重新提交");
             }

+ 7 - 5
src/Hotline.Api/Controllers/CommonPController.cs

@@ -183,7 +183,7 @@ namespace Hotline.Api.Controllers
                     aboutExpire = SqlFunc.AggregateSum(SqlFunc.IIF(DateTime.Now > o.NearlyExpiredTime!.Value && DateTime.Now < o.ExpiredTime!.Value,
                         1, 0)),
                     havExpired = SqlFunc.AggregateSum(SqlFunc.IIF(DateTime.Now > o.ExpiredTime!.Value , 1, 0)),
-                    countersignHandle = SqlFunc.AggregateSum(SqlFunc.IIF(o.CounterSignType.HasValue, 1, 0)),
+                    countersignHandle = SqlFunc.AggregateSum(SqlFunc.IIF(o.Status == EOrderStatus.Countersigning, 1, 0)),
                 }).ToListAsync();
             var aboutExpire = order?.Sum(x=>x.aboutExpire) ?? 0;
             var havExpired = order?.Sum(x=>x.havExpired) ?? 0;
@@ -255,7 +255,8 @@ namespace Hotline.Api.Controllers
 						CounterSignType = d.CounterSignType
 					})
 					.ToListAsync();
-				var waitedList = waitedDataList.Take(40).ToList();
+				var waitedList = waitedDataList.Where(x => x.Status != EOrderStatus.Countersigning && 
+				((x.Time > DateTime.Now && x.Status < EOrderStatus.Filed) || (x.Time > x.ActualHandleTime && x.Status >= EOrderStatus.Filed))).Take(40).ToList();
 				waitedList = waitedList.Count > 0 ? waitedList.Copy() : waitedList;
 				//allNum += waitedList.Count > 40 ? 40 : waitedList.Count;
 				//allList.AddRange(waitedList);
@@ -289,7 +290,7 @@ namespace Hotline.Api.Controllers
 				//allNum += visitDataList.Count;
 				//allList.AddRange(visitDataList);
 				//会签待办
-				var signDataList = waitedDataList.Where(x => x.CounterSignType == ECounterSignType.Center || x.CounterSignType == ECounterSignType.Department).Take(40).ToList();
+				var signDataList = waitedDataList.Where(x => x.Status == EOrderStatus.Countersigning).Take(40).ToList();
 				signDataList = signDataList.Count > 0 ? signDataList.Copy() : signDataList;
 				signDataList.ForEach(x => x.Type = "Sign");
 				//allNum += signDataList.Count;
@@ -434,7 +435,8 @@ namespace Hotline.Api.Controllers
 						CounterSignType = d.CounterSignType
 					})
 					.ToListAsync();
-				var waitedList = waitedDataList.Take(40).ToList();
+				var waitedList = waitedDataList.Where(x => x.Status != EOrderStatus.Countersigning &&
+				((x.Time > DateTime.Now && x.Status < EOrderStatus.Filed) || (x.Time > x.ActualHandleTime && x.Status >= EOrderStatus.Filed))).Take(40).ToList();
 				waitedList = waitedList.Count > 0 ? waitedList.Copy() : waitedList;
 				//allNum += waitedList.Count > 40 ? 40 : waitedList.Count;
 				//allList.AddRange(waitedList);
@@ -446,7 +448,7 @@ namespace Hotline.Api.Controllers
 				//allNum += waitedExpiredDataList.Count;
 				//allList.AddRange(waitedExpiredDataList);
 				//会签待办
-				var signDataList = waitedDataList.Where(x => x.CounterSignType == ECounterSignType.Center || x.CounterSignType == ECounterSignType.Department).Take(40).ToList();
+				var signDataList = waitedDataList.Where(x => x.Status == EOrderStatus.Countersigning).Take(40).ToList();
 				signDataList = signDataList.Count > 0 ? signDataList.Copy() : signDataList;
 				signDataList.ForEach(x => x.Type = "Sign");
 				

+ 4 - 4
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -171,10 +171,10 @@ namespace Hotline.Api.Controllers
                             WorkUserId = (work != null) ? work.UserId: "",
                             WorkUserName = (work != null) ? work.UserName: "",
                         };
-            if (hasListen == false)
-            {
-                query = query.Where(m => listenTels.Contains(m.TelNo) == false);
-            }
+            //if (hasListen == false)
+            //{
+            //    query = query.Where(m => listenTels.Contains(m.TelNo) == false);
+            //}
             var list = query.OrderBy(x=>x.TelNo).OrderByDescending(x=>x.CreatedAt).ToList();
             return list;// _mapper.Map<IReadOnlyList<TrTelStateDto>>(tels.AgentList);
         }

+ 6 - 3
src/Hotline.Api/Controllers/OldHotlineController.cs

@@ -388,7 +388,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <returns></returns>
         [HttpGet("get_rsa_loginname")]
-        public async Task<string> GetRASLoginName()
+        public async Task<string> GetRASLoginName([FromQuery]bool IsUrlEncode)
         {
             var account = await _accountRepository.GetAsync(_sessionContextProvider.SessionContext.RequiredUserId,HttpContext.RequestAborted);
             if (account == null)
@@ -397,8 +397,11 @@ namespace Hotline.Api.Controllers
             }
             try
             {
-                string userName = System.Web.HttpUtility.UrlEncode(RSA.RSAEncrypt(account.UserName, RSA_Create.RSA_PUBLIC_KEY, "PEM"));
-                //string userName = RSA.RSAEncrypt(account.UserName, RSA_Create.RSA_PUBLIC_KEY, "PEM");
+                string userName = String.Empty;
+                if (IsUrlEncode)
+                    userName = System.Web.HttpUtility.UrlEncode(RSA.RSAEncrypt(account.UserName, RSA_Create.RSA_PUBLIC_KEY, "PEM"));
+                else
+                    userName = RSA.RSAEncrypt(account.UserName, RSA_Create.RSA_PUBLIC_KEY, "PEM");
                 return userName;
             }
             catch

+ 18 - 15
src/Hotline.Api/Controllers/OrderController.cs

@@ -4906,8 +4906,8 @@ public class OrderController : BaseController
             //todo
             //宜宾需求:1. 坐席申请特提:指派给申请人办理 2. 派单员申请特提:所有派单员都能办 3.其他特提场景:按节点原配置办理
 
-            var processType = dto.FlowDirection == EFlowDirection.OrgToCenter || dto.FlowDirection == EFlowDirection.CenterToCenter
-                ? EProcessType.Zhiban
+            var processType = dto.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
+				? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
             await _workflowApplication.RecallAsync(recall, endTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Redo,
                 HttpContext.RequestAborted);
@@ -5348,19 +5348,22 @@ public class OrderController : BaseController
         if (order == null) throw UserFriendlyException.SameMessage("无效工单信息!");
 
         var baseTypeId = string.Empty;
-        if (step != null && step.Steps.Any() && _sessionContext.Roles.Contains("zuoxi") && specialSeats &&
-            !_sessionContext.Roles.Contains("paidanyuan"))
-        {
-            step.Steps = step.Steps.Where(x => x.Key.ToLower() == "start").ToList();
-            if (step.Steps.Any()) baseTypeId = step.Steps[0].Key;
-        }
-
-        if (step != null && step.Steps.Any() && _sessionContext.Roles.Contains("paidanyuan") && specialSendOrder &&
-            !_sessionContext.Roles.Contains("zuoxi"))
-        {
-            step.Steps = step.Steps.Where(d => d.BusinessType is EBusinessType.Send).ToList();
-            if (step.Steps.Any()) baseTypeId = step.Steps[0].Key;
-        }
+        if (!_sessionContext.Roles.Contains("banzhang"))
+        {
+			if (step != null && step.Steps.Any() && _sessionContext.Roles.Contains("zuoxi") && specialSeats &&
+			    !_sessionContext.Roles.Contains("paidanyuan"))
+			{
+				step.Steps = step.Steps.Where(x => x.Key.ToLower() == "start").ToList();
+				if (step.Steps.Any()) baseTypeId = step.Steps[0].Key;
+			}
+
+			if (step != null && step.Steps.Any() && _sessionContext.Roles.Contains("paidanyuan") && specialSendOrder &&
+			    !_sessionContext.Roles.Contains("zuoxi"))
+			{
+				step.Steps = step.Steps.Where(d => d.BusinessType is EBusinessType.Send).ToList();
+				if (step.Steps.Any()) baseTypeId = step.Steps[0].Key;
+			}
+		}
 
         var rsp = new
         {

+ 14 - 12
src/Hotline.Application/Orders/OrderApplication.cs

@@ -782,7 +782,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
         if (dto.LeaderSMSKey != null)
         {
-            var dic = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.LeaderSMS).First(m => m.Id == dto.LeaderSMSKey);
+            var dic = _sysDicDataCacheManager.LeaderSMS.First(m => m.Id == dto.LeaderSMSKey);
             _capPublisher.Publish(EventNames.HotlineLeaderSMS, new PublishLeaderSMSDto(order.Id, dic.DicDataName, dic.DicDataValue));
         }
 
@@ -987,30 +987,30 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(!string.IsNullOrEmpty(dto.ReceiveProvinceNo), d => d.ReceiveProvinceNo == dto.ReceiveProvinceNo) //省编号
             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No) //工单编码
             .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
-            //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
+                                                                                                     //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
             .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel)
             //.WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.SourceChannelCode)) //来源渠道
             //.WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId)) //热点类型
             .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
             .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone == dto.TransferPhone!) //转接号码
-            //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
-            //.WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
-            //.WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.CurrentHandleOrgId == dto.OrgId)//接办部门
+                                                                                                           //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
+                                                                                                           //.WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
+                                                                                                           //.WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.CurrentHandleOrgId == dto.OrgId)//接办部门
             .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
             .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
             .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
             .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
             .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
-            //.WhereIF(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.EmergencyLevel))  //紧急程度
+                                                                                               //.WhereIF(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.EmergencyLevel))  //紧急程度
             .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone == dto.FromPhone) //来电号码
             .WhereIF(!string.IsNullOrEmpty(dto.PhoneNo), d => d.Contact == dto.PhoneNo!) //联系电话
-            //.WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode) //推送分类
+                                                                                         //.WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode) //推送分类
             .WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), x => x.OrderPushTypes.Any(opt => opt.PushTypeCode == dto.PushTypeCode)) //推送分类
             .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
             .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
-            //.WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Status))  //工单状态
+                                                                                            //.WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Status))  //工单状态
             .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status) //工单状态
-            //.WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Status <= EOrderStatus.SpecialToUnAccept)
+                                                                       //.WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Status <= EOrderStatus.SpecialToUnAccept)
             .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName == dto.ActualHandlerName) //接办人
             .WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
             .WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
@@ -1025,8 +1025,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                      (d.ExpiredTime > d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //否 超期
             .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
             .WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName == dto.FromName) //来电人姓名
-            //.WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.AreaCode)) //区域
-            //.WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)//区域
+                                                                                           //.WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.AreaCode)) //区域
+                                                                                           //.WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)//区域
             .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") > 0,
                 d => d.AreaCode.StartsWith(SqlFunc.Substring(dto.AreaCode, 0, 4)))
             .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") <= 0, d => d.AreaCode.StartsWith(dto.AreaCode))
@@ -1043,7 +1043,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "3", d => d.Source == ESource.ProvinceStraight &&
                 d.SourceChannelCode == "S12345" && d.IsProvince == true) //省12345
             .WhereIF(!string.IsNullOrEmpty(dto.ContentRetrieval),
-                d => d.Title.Contains(dto.ContentRetrieval) || d.Content.Contains(dto.ContentRetrieval))
+                d => d.Title.Contains(dto.ContentRetrieval) || d.Content.Contains(dto.ContentRetrieval) || d.FileOpinion.Contains(dto.ContentRetrieval) || d.ActualOpinion.Contains(dto.ContentRetrieval))
+            .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == true, d => d.CurrentStepAcceptTime!=null)
+            .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == false, d => d.CurrentStepAcceptTime == null)
             .WhereIF(dto.FiledType is FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
             .WhereIF(dto.FiledType is FiledType.OrgFiled, d => d.ProcessType == EProcessType.Jiaoban)
             .OrderByDescending(d => d.CreationTime);

+ 1 - 1
src/Hotline.Application/Orders/OrderVisitApplication.cs

@@ -24,7 +24,7 @@ public class OrderVisitApplication : IOrderVisitApplication, IScopeDependency
         var query = _orderVisitRepository
             .Queryable()
             .WhereIF(dto.EmployeeName.NotNullOrEmpty(), m => m.Employee.Name.Contains(dto.EmployeeName))
-            .Where(m => m.CreationTime >= dto.StartTime && m.CreationTime <= dto.EndTime && m.VisitType != null)
+            .Where(m => m.VisitTime >= dto.StartTime && m.VisitTime <= dto.EndTime && m.VisitType != null)
             .GroupBy(m => m.EmployeeId)
             .Select(m => new OrderVisitQuantityOutDto
             {

+ 5 - 1
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -10,6 +10,7 @@ using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.CallCenter;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Requests;
+using Hotline.Share.Tools;
 using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
 using SqlSugar;
 using System.Data;
@@ -1249,6 +1250,8 @@ namespace Hotline.Repository.SqlSugar.Orders
                 .Where(x => x.OrderVisit.VisitState == EVisitState.Visited && x.VisitTarget == EVisitTarget.Org)
                 .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.RequiredOrgId))
                 .WhereIF(dto.OrgVisitStatisticsType.HasValue, x => x.OrderVisit.Order.ProcessType == (EProcessType)((int)dto.OrgVisitStatisticsType))
+                .WhereIF(dto.Keyword.NotNullOrEmpty(), x => x.OrderVisit.Order.Title.Contains(dto.Keyword)) // 根据关键字匹配
+                .WhereIF(dto.TypeCode != 0, x => x.OrderVisit.Order.IdentityType == (EIdentityType)dto.TypeCode)
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults), dto.AttitudeType == EAttitudeType.ProcessingResult ? x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults : x => SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == dto.OrgProcessingResults)
                 .WhereIF(!string.IsNullOrEmpty(dto.VisitUser), x => x.OrderVisit.Employee.Name.Contains(dto.VisitUser))
                 .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order.No == dto.No)
@@ -1284,7 +1287,8 @@ namespace Hotline.Repository.SqlSugar.Orders
                     Content = x.OrderVisit.Order.Content,
                     FileOpinion = x.OrderVisit.Order.FileOpinion,
                     FiledTime = x.OrderVisit.Order.FiledTime,
-                    VisitOrgName = x.VisitOrgName
+                    VisitOrgName = x.VisitOrgName,
+                    ActualHandleOrgName = x.OrderVisit.Order.ActualHandleOrgName
                 });
 
         }

+ 2 - 0
src/Hotline.Share/Dtos/Order/HomeOrderDto.cs

@@ -60,5 +60,7 @@ namespace Hotline.Share.Dtos.Order
 		/// </summary>
 		public DateTime? ActualHandleTime { get; set; }
 
+		public string Key => Type + OrderId;
+
 	}
 }

+ 6 - 1
src/Hotline.Share/Dtos/Order/OrderBiDto.cs

@@ -371,7 +371,12 @@ namespace Hotline.Share.Dtos.Order
 		/// 办结时间
 		/// </summary>
 		public DateTime? FiledTime { get; set; }
-    }
+
+		/// <summary>
+		/// 接办部门
+		/// </summary>
+		public string ActualHandleOrgName { get; set; }
+	}
 
 
 

+ 5 - 0
src/Hotline.Share/Dtos/Order/QueryOrderDto.cs

@@ -184,6 +184,11 @@ namespace Hotline.Share.Dtos.Order
         /// 省交办编号
         /// </summary>
         public string? ReceiveProvinceNo { get; set; }
+
+        /// <summary>
+        /// 受理情况 true :已签收  false:未签收  空:全部
+        /// </summary>
+        public bool? IsSgin { get; set; }
     }
 
 

+ 5 - 0
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -492,6 +492,11 @@ public record OrgVisitDetailListReq: PagedKeywordRequest
     /// 默认 办件结果;
     /// </summary>
     public EAttitudeType AttitudeType { get; set; } = EAttitudeType.ProcessingResult;
+
+    /// <summary>
+    /// 来电主体
+    /// </summary>
+    public int TypeCode { get; set; }
 }
 
 

+ 1 - 0
src/Hotline/Caching/Interfaces/ISysDicDataCacheManager.cs

@@ -13,5 +13,6 @@ namespace Hotline.Caching.Interfaces
         IReadOnlyList<SystemDicData> GetVisitSatisfaction();
         void RemoveSysDicDataCache(string code);
         IReadOnlyList<SystemDicData> AcceptType { get; }
+        IReadOnlyList<SystemDicData> LeaderSMS { get; }
     }
 }

+ 2 - 0
src/Hotline/Caching/Services/SysDicDataCacheManager.cs

@@ -32,6 +32,8 @@ namespace Hotline.Caching.Services
 
         public IReadOnlyList<SystemDicData> AcceptType => GetSysDicDataCache(SysDicTypeConsts.AcceptType);
 
+        public IReadOnlyList<SystemDicData> LeaderSMS => GetSysDicDataCache(SysDicTypeConsts.LeaderSMS);
+
         public void RemoveSysDicDataCache(string code)
         {
             _cacheSysDicData.Remove(code);

+ 9 - 5
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -1478,6 +1478,7 @@ namespace Hotline.FlowEngine.Workflows
             startStep.IsMain = true;
             startStep.IsOrigin = true;
             startStep.Status = EWorkflowStepStatus.WaitForAccept;
+            startStep.FlowDirection = dto.FlowDirection;
             startStep.PrevChosenStepCode = null;
             if (expiredTime.HasValue)
                 startStep.StepExpiredTime = expiredTime;
@@ -1504,7 +1505,7 @@ namespace Hotline.FlowEngine.Workflows
             //};
 
             //create endStep
-            var endStep = await CreateEndStepAsync(workflow, endStepDefine, currentStep, expiredTime,
+            var endStep = await CreateEndStepAsync(workflow, endStepDefine, currentStep,dto, expiredTime,
                 cancellationToken);
             //workflow.Steps.Add(endStep);
 
@@ -2414,7 +2415,8 @@ namespace Hotline.FlowEngine.Workflows
             Workflow workflow,
             StepDefine endStepDefine,
             WorkflowStep prevStep,
-            DateTime? expiredTime,
+            BasicWorkflowDto dto,
+			DateTime? expiredTime,
             CancellationToken cancellationToken)
         {
             if (workflow.Steps.Any(d => d.StepType == EStepType.End))
@@ -2432,7 +2434,7 @@ namespace Hotline.FlowEngine.Workflows
 
             var step = CreateStep(workflow, endStepDefine, prevStep, EFlowAssignType.User, handler,
                 null, null, EWorkflowStepStatus.WaitForAccept,
-                ECountersignPosition.None, expiredTime, endStepDefine.Name, true, businessType: EBusinessType.File);
+                ECountersignPosition.None, expiredTime, endStepDefine.Name, true, businessType: EBusinessType.File,flowDirection: dto.FlowDirection);
 
             //step.Accept(_sessionContext.RequiredUserId, _sessionContext.UserName,
             //    _sessionContext.RequiredOrgId, _sessionContext.OrgName,
@@ -2505,7 +2507,7 @@ namespace Hotline.FlowEngine.Workflows
                 var isMain = handlers.Count == 1 || (handlers.Count > 1 && handler.Key == dto.NextMainHandler);
                 var step = CreateStep(workflow, stepDefine, prevStep, flowAssignType,
                     handler, dto.NextStepCode, countersignId, stepStatus, csPosition, expiredTime,
-                    dto.NextStepName, isOrigin, isMain, handlerType, dto.BusinessType);
+                    dto.NextStepName, isOrigin, isMain, handlerType, dto.BusinessType,dto.FlowDirection);
 
                 //var stepHandler = stepHandlers.First(d => d.GetHandler().Key == handler.Key);
                 //step.StepHandlers = new List<WorkflowStepHandler> { stepHandler };
@@ -2811,7 +2813,8 @@ namespace Hotline.FlowEngine.Workflows
             bool isOrigin,
             bool isMainHandler = false,
             EHandlerType? handlerType = null, //动态节点依据动态策略判断
-            EBusinessType? businessType = null
+            EBusinessType? businessType = null,
+            EFlowDirection? flowDirection = null
         )
         {
             //if (!handlers.Any())
@@ -2828,6 +2831,7 @@ namespace Hotline.FlowEngine.Workflows
             step.CountersignId = countersignId;
             step.Status = stepStatus;
             step.CountersignPosition = countersignPosition;
+            step.FlowDirection = flowDirection;
             if (expiredTime.HasValue)
                 step.StepExpiredTime = expiredTime;
             //step.TimeLimit = GetTimeLimit("");

+ 6 - 6
src/Hotline/Orders/OrderDomainService.cs

@@ -346,8 +346,8 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
                 //投诉举报
                 case "30":
                 case "35":
-                    valid.Validation = dto.Title.Contains("意见") || dto.Title.Contains("建议") || dto.Title.Contains("信息") || dto.Title.Contains("咨询");
-                    valid.Validation = dto.Content.Contains("意见") || dto.Content.Contains("建议") || dto.Content.Contains("信息") || dto.Content.Contains("咨询");
+                    valid.Validation = dto.Title.Contains("意见") || dto.Title.Contains("建议")  || dto.Title.Contains("咨询");
+                    valid.Validation = dto.Content.Contains("意见") || dto.Content.Contains("建议")  || dto.Content.Contains("咨询");
                     if (dto.Content.Length < 25)
                     {
                         valid.Validation = true;
@@ -356,8 +356,8 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
                     break;
                 // 意见
                 case "1":
-                    valid.Validation = dto.Title.Contains("投诉") || dto.Title.Contains("举报") || dto.Title.Contains("信息") || dto.Title.Contains("咨询");
-                    valid.Validation = dto.Content.Contains("投诉") || dto.Content.Contains("举报") || dto.Content.Contains("信息") || dto.Content.Contains("咨询");
+                    valid.Validation = dto.Title.Contains("投诉") || dto.Title.Contains("举报")|| dto.Title.Contains("咨询");
+                    valid.Validation = dto.Content.Contains("投诉") || dto.Content.Contains("举报") || dto.Content.Contains("咨询");
                     if (dto.Content.Length < 5)
                     {
                         valid.Validation = true;
@@ -367,8 +367,8 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
                 //建议求助
                 case "15":
                 case "20":
-                    valid.Validation = dto.Title.Contains("投诉") || dto.Title.Contains("举报") || dto.Title.Contains("信息") || dto.Title.Contains("咨询");
-                    valid.Validation = dto.Content.Contains("投诉") || dto.Content.Contains("举报") || dto.Content.Contains("信息") || dto.Content.Contains("咨询");
+                    valid.Validation = dto.Title.Contains("投诉") || dto.Title.Contains("举报")  || dto.Title.Contains("咨询");
+                    valid.Validation = dto.Content.Contains("投诉") || dto.Content.Contains("举报") || dto.Content.Contains("咨询");
                     if (dto.Content.Length < 25)
                     {
                         valid.Validation = true;

+ 1 - 1
src/Hotline/Orders/OrderVisitDomainService.cs

@@ -47,7 +47,7 @@ public class OrderVisitDomainService : IOrderVisitDomainService, IScopeDependenc
     public async Task UpdateSmsReplyAsync(MessageDto data)
     {
         _logger.LogInformation($"UpdateSmsReplyAsync 收到通知: {data.ToJson()}");
-        if (data.IsSmsReply == false || data.SmsReplyContent.IsNullOrEmpty() || data.ExternalId.IsNullOrEmpty()) return;
+        if (data.IsSmsReply == false || data.SmsReplyContent.IsNullOrEmpty()) return;
 
         var orderVisits = await _orderVisitRepository.Queryable()
             .Includes(m => m.Order)

+ 0 - 5
src/Hotline/Settings/TimeLimitDomain/ZiGongExpireTimeLimit.cs

@@ -61,11 +61,6 @@ public class ZiGongExpireTimeLimit : ExpireTimeLimitBase, ICalcExpireTime, IScop
         return await base.CalcExpiredTime(beginTime, flowDirection, order);
     }
 
-    public override TimeConfig GetOrderTimeLimitConfig(string? code = null)
-    {
-        return GetTimeConfigByOrderAsync(new OrderTimeClacInfo(code)).GetAwaiter().GetResult();
-    }
-
     /// <summary>
     /// 根据订单信息获取时间配置
     /// </summary>