Browse Source

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

xf 4 months ago
parent
commit
2bf5b6c44a

+ 27 - 7
src/Hotline.Api/Controllers/OrderController.cs

@@ -417,6 +417,12 @@ public class OrderController : BaseController
             throw UserFriendlyException.SameMessage("选择的工单中含有会签工单, 不能批量发布. 请排除会签工单.");
 
         var hasProvince = await _orderRepository.Queryable().AnyAsync(x => dto.Ids.Contains(x.Id) && x.Source == ESource.ProvinceStraight);
+        //if (hasProvince)
+        //    throw UserFriendlyException.SameMessage("选择的工单中含有省工单, 不能批量发布. 请排除省工单.");
+        if (_appOptions.Value.IsYiBin)
+        {
+			hasProvince = await _orderRepository.Queryable().AnyAsync(x => dto.Ids.Contains(x.Id) && x.IsProvince);
+		}
         if (hasProvince)
             throw UserFriendlyException.SameMessage("选择的工单中含有省工单, 不能批量发布. 请排除省工单.");
 
@@ -3473,6 +3479,9 @@ public class OrderController : BaseController
             orderTerminateList.Any(x => x.Status == ETerminateStatus.Refuse) ? "不同意" :
             orderTerminateList.Any(x => x.Status == ETerminateStatus.Approval || x.Status == ETerminateStatus.SendBack) ? "审批中" : null;
 
+        dto.IsReTransact = await _orderSpecialRepository.Queryable()
+	        .Where(x => x.OrderId == dto.Id && x.SpecialType == ESpecialType.ReTransact).AnyAsync();
+
         return _sessionContext.OrgIsCenter ? dto : dto.DataMask();
     }
 
@@ -5488,13 +5497,29 @@ public class OrderController : BaseController
                 BusinessType = dto.BusinessType
             };
             DateTime endTime = order.ExpiredTime!.Value;
+            //todo
+            //宜宾需求:1. 坐席申请特提:指派给申请人办理 2. 派单员申请特提:所有派单员都能办 3.其他特提场景:按节点原配置办理
+            var processType = dto.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
+                ? EProcessType.Zhiban
+                : EProcessType.Jiaoban;
             // 计算期满时间
             if (dto.AlterTime)
             {
+               
+
+                DateTime startTime = DateTime.Now;
+                if (order.CenterToOrgTime.HasValue && processType== EProcessType.Jiaoban)
+                {
+                    startTime = order.CenterToOrgTime.Value;
+                }
+                else if(processType== EProcessType.Zhiban)
+                {
+                    startTime = order.StartTime.Value;
+                }
                 var expiredTime =
                     // _timeLimitDomainService.CalcEndTime(
                     await _expireTime.CalcEndTime(
-                        DateTime.Now, DateTime.Now,
+                        DateTime.Now, startTime,
                         ETimeType.WorkDay,
                         dto.TimeLimit.Value, order.AcceptTypeCode);
                 if (expiredTime.EndTime < order.ExpiredTime.Value)
@@ -5517,12 +5542,7 @@ public class OrderController : BaseController
                     cancellationToken: HttpContext.RequestAborted);
             }
 
-            //todo
-            //宜宾需求:1. 坐席申请特提:指派给申请人办理 2. 派单员申请特提:所有派单员都能办 3.其他特提场景:按节点原配置办理
-
-            var processType = dto.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
-                ? EProcessType.Zhiban
-                : EProcessType.Jiaoban;
+            
 
             if (dto.BusinessType == EBusinessType.Send && recall.NextHandlers.Any())
             {

+ 1 - 1
src/Hotline.Api/Hotline.Api.csproj

@@ -15,7 +15,7 @@
     <PackageReference Include="Mapster.DependencyInjection" Version="1.0.1" />
     <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.10" />
     <PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="8.0.10" />
-    <PackageReference Include="MiniExcel" Version="1.34.2" />
+    <PackageReference Include="MiniExcel" Version="1.36.0" />
     <PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
     <PackageReference Include="Serilog.Sinks.Grafana.Loki" Version="8.3.0" />
     <PackageReference Include="Serilog.Sinks.MongoDB" Version="6.0.0" />

+ 88 - 82
src/Hotline.Application/Orders/OrderApplication.cs

@@ -209,9 +209,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         var expiredTimeConfig =
             // _timeLimitDomainService.CalcEndTime(DateTime.Now, new TimeConfig(timeCount, timeType), order.AcceptTypeCode);
             await _expireTime.CalcEndTime(expiredTimeBase, startTime, new TimeConfig(timeCount, timeType), order.AcceptTypeCode);
-        order.TimeLimit = expiredTimeConfig.TimeText;
-        order.TimeLimitCount = expiredTimeConfig.Count;
-        order.TimeLimitUnit = expiredTimeConfig.TimeType;
+        //order.TimeLimit = expiredTimeConfig.TimeText;
+        //order.TimeLimitCount = expiredTimeConfig.Count;
+        //order.TimeLimitUnit = expiredTimeConfig.TimeType;
         order.ExpiredTime = expiredTimeConfig.ExpiredTime;
         order.NearlyExpiredTime = expiredTimeConfig.NearlyExpiredTime;
         order.NearlyExpiredTimeOne = expiredTimeConfig.NearlyExpiredTimeOne;
@@ -2009,77 +2009,77 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         string orgLevelStr = (dto.OrgCode.Length + 3).ToString();
         var oldData = new List<VisitAndOrgSatisfactionStatisticsDto>();
 
-        var quer = _systemOrganizeRepository.Queryable().Where(x => x.Id.StartsWith(dto.OrgCode))
-            .LeftJoin<OrderVisitDetail>((x, it) => x.Id == it.VisitOrgCode)
-            .Where((x, it) => it.OrderVisit.VisitTime >= dto.StartTime.Value &&
-                              it.OrderVisit.VisitTime <= dto.EndTime.Value &&
-                              it.VisitTarget == EVisitTarget.Org && it.OrderVisit.VisitState == EVisitState.Visited)
-            .WhereIF(dto.OrgCode == "001", (x, it) => it.VisitOrgCode == dto.OrgCode)
-            .WhereIF(dto.OrgCode != "001", (x, it) => it.VisitOrgCode.StartsWith(dto.OrgCode))
-            .WhereIF(!string.IsNullOrEmpty(dto.LineNum),
-                (x, it) => it.OrderVisit.Order.CallRecord.Gateway.Contains(dto.LineNum))
-            .WhereIF(dto.TypeCode != null && dto.TypeCode == 1,
-                (x, it) => it.OrderVisit.Order.IdentityType == EIdentityType.Citizen)
-            .WhereIF(dto.TypeCode != null && dto.TypeCode == 2,
-                (x, it) => it.OrderVisit.Order.IdentityType == EIdentityType.Enterprise)
-            .WhereIF(IsCenter == false,
-                (x, it) => it.VisitOrgCode.StartsWith(_sessionContextProvider.SessionContext.OrgId))
-            .WhereIF(dto.VisitType != null, (x, it) => it.OrderVisit.VisitType == dto.VisitType)
-            .GroupBy((x, it) => new
-            {
-                VisitOrgCode = it.VisitOrgCode
-            })
-            .Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
-            {
-                OrgCode = it.VisitOrgCode,
-                TotalSumCount = SqlFunc.AggregateCount(it.VisitOrgCode),
-                VerySatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "5", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "5", 1,
-                        0))), //非常满意数
-                SatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "4", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "4", 1,
-                        0))), //满意数
-                RegardedAsSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "-1", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "-1", 1,
-                        0))), //视为满意
-                DefaultSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "0", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "0", 1,
-                        0))), //默认满意
-                NoSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "2", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "2", 1,
-                        0))), //不满意
-                NoEvaluateCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "7", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "7", 1,
-                        0))), //未做评价
-                NoPutThroughCount = SqlFunc.IIF(dto.TypeId == 1,
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "6", 1, 0)),
-                    SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "6", 1,
-                        0))) //未接通
-            })
-            .MergeTable()
-            .LeftJoin<SystemOrganize>((x, it) =>
-                x.OrgCode == it.Id && (it.Level == org.Level || it.Level == (org.Level + 1)))
-            .Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
-            {
-                OrgName = it.Name,
-                OrgCode = x.OrgCode,
-                OrgType = it.OrgType,
-                TotalSumCount = x.TotalSumCount,
-                VerySatisfiedCount = x.VerySatisfiedCount, //非常满意数
-                SatisfiedCount = x.SatisfiedCount, //满意数
-                RegardedAsSatisfiedCount = x.RegardedAsSatisfiedCount, //视为满意
-                DefaultSatisfiedCount = x.DefaultSatisfiedCount, //默认满意
-                NoSatisfiedCount = x.NoSatisfiedCount, //不满意
-                NoEvaluateCount = x.NoEvaluateCount, //未做评价
-                NoPutThroughCount = x.NoPutThroughCount, //未接通
-            });
-        var list = await quer.ToListAsync();
+		var mainList = await _systemOrganizeRepository.Queryable().Where(x => x.Id.StartsWith(dto.OrgCode))
+		   .LeftJoin<OrderVisitDetail>((x, it) => x.Id == it.VisitOrgCode)
+		   .Where((x, it) => it.OrderVisit.VisitTime >= dto.StartTime.Value &&
+							 it.OrderVisit.VisitTime <= dto.EndTime.Value &&
+							 it.VisitTarget == EVisitTarget.Org && it.OrderVisit.VisitState == EVisitState.Visited)
+           .Where((x, it) => it.VisitOrgCode.StartsWith(dto.OrgCode)  )
+		                 //&& it.VisitOrgCode != dto.OrgCode
+		   .WhereIF(!string.IsNullOrEmpty(dto.LineNum),
+			   (x, it) => it.OrderVisit.Order.CallRecord.Gateway.Contains(dto.LineNum))
+		   .WhereIF(dto.TypeCode != null && dto.TypeCode == 1,
+			   (x, it) => it.OrderVisit.Order.IdentityType == EIdentityType.Citizen)
+		   .WhereIF(dto.TypeCode != null && dto.TypeCode == 2,
+			   (x, it) => it.OrderVisit.Order.IdentityType == EIdentityType.Enterprise)
+		   .WhereIF(IsCenter == false,
+			   (x, it) => it.VisitOrgCode.StartsWith(_sessionContextProvider.SessionContext.OrgId))
+		   .WhereIF(dto.VisitType != null, (x, it) => it.OrderVisit.VisitType == dto.VisitType)
+		   .GroupBy((x, it) => new
+		   {
+			   VisitOrgCode = it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr))
+		   })
+		   .Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
+		   {
+			   OrgCode = it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
+			   TotalSumCount = SqlFunc.AggregateCount(it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr))),
+			   VerySatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "5", 1, 0)),
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "5", 1,
+					   0))), //非常满意数
+			   SatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "4", 1, 0)),
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "4", 1,
+					   0))), //满意数
+			   RegardedAsSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "-1", 1, 0)),
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "-1", 1,
+					   0))), //视为满意
+			   DefaultSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "0", 1, 0)),
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "0", 1,
+					   0))), //默认满意
+			   NoSatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "2", 1, 0)),
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "2", 1,
+					   0))), //不满意
+			   NoEvaluateCount = SqlFunc.IIF(dto.TypeId == 1,
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "7", 1, 0)),
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "7", 1,
+					   0))), //未做评价
+			   NoPutThroughCount = SqlFunc.IIF(dto.TypeId == 1,
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "6", 1, 0)),
+				   SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "6", 1,
+					   0))) //未接通
+		   })
+		   .MergeTable()
+		   .LeftJoin<SystemOrganize>((x, it) =>
+			   x.OrgCode == it.Id && (it.Level == org.Level || it.Level == (org.Level + 1)))
+		   .Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
+		   {
+			   OrgName = it.Name,
+			   OrgCode = x.OrgCode,
+			   OrgType = it.OrgType,
+			   TotalSumCount = x.TotalSumCount,
+			   VerySatisfiedCount = x.VerySatisfiedCount, //非常满意数
+			   SatisfiedCount = x.SatisfiedCount, //满意数
+			   RegardedAsSatisfiedCount = x.RegardedAsSatisfiedCount, //视为满意
+			   DefaultSatisfiedCount = x.DefaultSatisfiedCount, //默认满意
+			   NoSatisfiedCount = x.NoSatisfiedCount, //不满意
+			   NoEvaluateCount = x.NoEvaluateCount, //未做评价
+			   NoPutThroughCount = x.NoPutThroughCount, //未接通
+		   }).ToListAsync();
+
 
         #region 老系统数据
         if (await _statisticsDepartSatisfiedRepository.Queryable().Where(x => x.Time >= dto.StartTime.Value && x.Time <= dto.EndTime.Value).AnyAsync())
@@ -2121,8 +2121,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     NoPutThroughCount = it.NoPutThroughCount, //未接通
                 })
                 .ToListAsync();
-            list = (from t1 in list
-                    join t2 in oldData on t1.OrgCode equals t2.OrgCode into t1_t2
+            mainList = (from t1 in mainList
+					join t2 in oldData on t1.OrgCode equals t2.OrgCode into t1_t2
                     from item in t1_t2.DefaultIfEmpty()
                     select new VisitAndOrgSatisfactionStatisticsDto()
                     {
@@ -2140,7 +2140,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     }).ToList();
         }
         #endregion
-        return list;
+        return mainList;
     }
 
 
@@ -3907,6 +3907,15 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
         }
 
+        if (dto.QueryType is 1 || dto.QueryType is 2)
+        {
+            query.WhereIF(dto.QueryType is 1, d => d.IsForwarded == false)
+                .WhereIF(dto.QueryType is 2, d => d.IsForwarded == true)
+                .Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(os => os.OrderId == d.Id && os.IsDeleted == false && os.SpecialType == ESpecialType.ReTransact)
+                    .NotAny())
+                ;
+        }
+
         query.Where(d => d.Status != EOrderStatus.WaitForAccept &&
                          d.Status != EOrderStatus.BackToUnAccept &&
                          d.Status != EOrderStatus.SpecialToUnAccept &&
@@ -3916,11 +3925,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .Where(d => SqlFunc.Subqueryable<OrderDelay>().Where(od => od.OrderId == d.Id && od.IsDeleted == false && od.DelayState == EDelayState.Examining).NotAny())
             .Where(d => SqlFunc.Subqueryable<OrderSendBackAudit>().Where(osba => osba.OrderId == d.Id && osba.IsDeleted == false && osba.State == ESendBackAuditState.Apply)
                 .NotAny())
-            .Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(s => s.OrderId == d.Id && s.State == 0 && s.IsDeleted == false)
-                .WhereIF(dto.QueryType != null && (dto.QueryType == 1 || dto.QueryType == 2), s => s.SpecialType == ESpecialType.ReTransact)
-                //.WhereIF(dto.QueryType != null && dto.QueryType == 3, s =>  s.SpecialType != ESpecialType.ReTransact)
-                .NotAny())
-            .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
+			.Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(s => s.OrderId == d.Id && s.State == 0 && s.IsDeleted == false).NotAny())
+			.WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword))
             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
             .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)

+ 5 - 1
src/Hotline.Application/Orders/OrderScreenHandler/OrderScreenNextWorkflowHandler.cs

@@ -75,9 +75,13 @@ public class OrderScreenNextWorkflowHandler : INotificationHandler<NextStepNotif
 								//省件甄别--以省审批前一个节点整理的甄别意见为准推送省上 宜宾
 								if (_appOptions.Value.IsYiBin)
 								{
-									screenDto.Content = notification.Dto.Opinion;
+									
 									screenDto.Files = new List<Share.Dtos.File.FileDto>();
 								}
+								if (_appOptions.Value.IsLuZhou)
+								{
+									screenDto.Content = notification.Dto.Opinion;
+								}
 								//推省上
 								_capPublisher.Publish(EventNames.HotlineOrderScreenApply, new PublishScreenDto()
 								{

+ 2 - 6
src/Hotline.Application/Orders/OrderSecondaryHandlingApplication.cs

@@ -182,12 +182,8 @@ namespace Hotline.Application.Orders
                 };
                 var reTransactNum = order.ReTransactNum is null ? 1 : order.ReTransactNum + 1;
                 //var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now, order.AcceptTypeCode);
-                var startTime = DateTime.Now;
-                if (order.CenterToOrgTime.HasValue)
-                {
-                    startTime = order.CenterToOrgTime.Value;
-                }
-                var expiredTime = await _expireTime.CalcEndTime(DateTime.Now,startTime, order.AcceptTypeCode);
+                
+                var expiredTime = await _expireTime.CalcEndTime(DateTime.Now,DateTime.Now, order.AcceptTypeCode);
                 var processType = step.FlowDirection == EFlowDirection.OrgToCenter || step.FlowDirection == EFlowDirection.CenterToCenter ? EProcessType.Zhiban : EProcessType.Jiaoban;
                 var isOrderFiled = order.Status >= EOrderStatus.Filed;
                 await _orderRepository.Updateable().SetColumns(o => new Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne, ReTransactNum = reTransactNum, ProcessType = processType, Status = EOrderStatus.Handling })

File diff suppressed because it is too large
+ 1 - 81
src/Hotline.Application/StatisticalReport/OrderReportApplication.cs


+ 6 - 2
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -1470,7 +1470,10 @@ namespace Hotline.Repository.SqlSugar.Orders
         public ISugarQueryable<OrgVisitDetailListResp> VisitAndOrgSatisfactionDetail(VisitAndOrgSatisfactionDetailDto dto)
         {
             bool IsCenter = _sessionContext.OrgIsCenter;
-            return _orderVisitDetailRepository.Queryable()
+            if (IsCenter == false && string.IsNullOrEmpty(dto.PickOrgCode))
+	            dto.PickOrgCode = _sessionContext.RequiredOrgId;
+
+			return _orderVisitDetailRepository.Queryable()
                 .Includes(x => x.OrderVisit, o => o.Order, d => d.CallRecord)
                 .Where(x => x.OrderVisit.VisitTime >= dto.StartTime && x.OrderVisit.VisitTime <= dto.EndTime && x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited)
                 .WhereIF(dto.OrgCode == "001", x => x.VisitOrgCode == dto.OrgCode)
@@ -1482,7 +1485,8 @@ namespace Hotline.Repository.SqlSugar.Orders
                 //.WhereIF(IsCenter == true && dto.IsOnlyMy == null, x => x.VisitOrgCode.StartsWith(dto.OrgCode))
                 //.WhereIF(IsCenter == true , x=> x.VisitOrgCode.StartsWith(dto.OrgCode))
                 //.WhereIF(IsCenter == false, x => x.VisitOrgCode == dto.OrgCode)
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode), x => x.VisitOrgCode.StartsWith(dto.OrgCode))
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && (string.IsNullOrEmpty(dto.PickOrgCode) ||  dto.OrgCode != dto.PickOrgCode), x => x.VisitOrgCode.StartsWith(dto.OrgCode))
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && (!string.IsNullOrEmpty(dto.PickOrgCode)  && dto.PickOrgCode == dto.OrgCode) ,x=>x.VisitOrgCode == dto.OrgCode)  
                 .WhereIF(dto.TypeId is 1, x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.DateValue)
                 .WhereIF(dto.TypeId is 2, x => SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == dto.DateValue)
                 .WhereIF(!string.IsNullOrEmpty(dto.LineNum), x => x.OrderVisit.Order.CallRecord.Gateway == dto.LineNum)

+ 7 - 1
src/Hotline.Share/Dtos/Bi/BiOrderDto.cs

@@ -56,7 +56,13 @@ namespace Hotline.Share.Dtos.Bi
         /// 回访方式
         /// </summary>
         public EVisitType? VisitType { get; set; }
-    }
+
+        /// <summary>
+        /// 选择的部门
+        /// </summary>
+        public string? PickOrgCode { get; set; }
+
+	}
 
     public record HighFrequencyCallStatisticsRequest : PagedRequest
     {

+ 1 - 1
src/Hotline.Share/Dtos/Order/Detail/OrderFlowTraceDto.cs

@@ -112,7 +112,7 @@ public class OrderFlowTraceDto
     /// <summary>
     /// 发布范围
     /// </summary>
-    public bool PublishState { get; set; }
+    public bool? PublishState { get; set; }
 
     /// <summary>
     /// 整理结果

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

@@ -792,7 +792,7 @@ namespace Hotline.Share.Dtos.Order
                 {
                     overDays = (FiledTime - ExpiredTime).Value.Days + "天";
                 }
-                else if (ExpiredTime < DateTime.Now)
+				else if (FiledTime.HasValue == false && ExpiredTime < DateTime.Now)
                 {
                     overDays = (DateTime.Now - ExpiredTime).Value.Days + "天";
                 }
@@ -953,7 +953,9 @@ namespace Hotline.Share.Dtos.Order
         /// 工单补充
         /// </summary>
         public List<OrderComplementDto> OrderComplements { get; set; }
-    }
+
+        public bool? IsReTransact { get; set; }
+	}
 
     public class UpdateOrderDto : AddOrderDto
     {

+ 3 - 2
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -1746,7 +1746,7 @@ namespace Hotline.FlowEngine.Workflows
                         }
                     }
                 };
-                if (_appOptions.Value.IsZiGong && handlers.Any())
+                if (_appOptions.Value.IsZiGong && handlers != null && handlers.Any())
                 {
                     dto.NextHandlers = handlers;
                 }
@@ -3242,6 +3242,7 @@ namespace Hotline.FlowEngine.Workflows
             pubTrace.HandlerOrgAreaCode = null;
             pubTrace.HandlerOrgAreaName = null;
             pubTrace.StepExpiredTime = null;
+            pubTrace.HandleTime = null;
 
             pubTrace.CreationTime = endTrace.CreationTime.AddSeconds(1);
             await _workflowTraceRepository.AddAsync(pubTrace, cancellation);
@@ -3270,7 +3271,7 @@ namespace Hotline.FlowEngine.Workflows
             visitTrace.AssignerOrgId = pubTrace.HandlerOrgId;
             visitTrace.AssignerOrgName = pubTrace.HandlerOrgName;
             visitTrace.AssignerOrgIsCenter = pubTrace.HandlerOrgIsCenter ?? false;
-
+            visitTrace.HandleTime = null;
             visitTrace.AcceptorId = acceptor.UserId;
             visitTrace.AcceptorName = acceptor.UserName;
             visitTrace.AcceptorOrgId = acceptor.OrgId;

+ 12 - 3
src/Hotline/Orders/OrderDomainService.cs

@@ -299,7 +299,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         {
             try
             {
-                if (order.Source != ESource.ProvinceStraight)
+                if (order.Source != ESource.ProvinceStraight && order.FileOrgIsCenter.Value  == false)
                 {
                     var code = "";
                     //受理类型为“投诉、举报”
@@ -584,10 +584,19 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         {
             var sendNum = steps.Count / schedulings;
             scheduling.SendOrderNum += sendNum;
-            await _schedulingRepository.Updateable()
+            if (!scheduling.LoginSendOrderNum.HasValue)
+            {
+	            scheduling.LoginSendOrderNum = scheduling.LoginSendOrderNum.HasValue && scheduling.LoginSendOrderNum > sendNum ? scheduling.LoginSendOrderNum : sendNum;
+				await _schedulingRepository.Updateable()
+					.SetColumns(s => new Scheduling() { LoginSendOrderNum = scheduling.LoginSendOrderNum })
+					.Where(s => s.SchedulingTime == scheduling.SchedulingTime).ExecuteCommandAsync(cancellationToken);
+			}
+            sendNum = scheduling.LoginSendOrderNum.Value;
+			await _schedulingRepository.Updateable()
                 .SetColumns(s => new Scheduling() { SendOrderNum = scheduling.SendOrderNum, AtWork = scheduling.AtWork })
                 .Where(s => s.Id == scheduling.Id).ExecuteCommandAsync(cancellationToken);
-            if (sendNum <= 0) return;
+		
+			if (sendNum <= 0) return;
             var sendSteps = steps.Take(sendNum).ToList();
             await _orderRepository.Updateable().SetColumns(o => new Order()
             {

+ 6 - 0
src/Hotline/Schedulings/Scheduling.cs

@@ -66,6 +66,12 @@ namespace Hotline.Schedulings
 		/// </summary>
 		public int? SendOrderNum { get; set; }
 
+
+		/// <summary>
+		/// 登录派单次数
+		/// </summary>
+		public int? LoginSendOrderNum { get; set; }
+
 		/// <summary>
 		/// 是否上班
 		/// </summary>

+ 20 - 0
src/Hotline/Statistics/StatisticsDepart.cs

@@ -216,6 +216,26 @@ namespace Hotline.Statistics
 		[SugarColumn(ColumnDescription = "入库时间")]
 		public DateTime InsertTime { get; set; }
 
+		/// <summary>
+		/// 满意
+		/// </summary>
+		/// </summary>
+		[SugarColumn(ColumnDescription = "满意")]
+		public int SatisfactionCount { get; set; }
+
+		/// <summary>
+		/// 不满意
+		/// </summary>
+		/// </summary>
+		[SugarColumn(ColumnDescription = "不满意")]
+		public int NotSatisfactionCount { get; set; }
+
+		/// <summary>
+		/// 按时办结
+		/// </summary>
+		/// </summary>
+		[SugarColumn(ColumnDescription = "按时办结")]
+		public int CompleteOnTime { get; set; }
 
 	}
 }

Some files were not shown because too many files changed in this diff