浏览代码

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

tangjiang 9 月之前
父节点
当前提交
9b29a8a2ce

+ 17 - 11
src/Hotline.Api/Controllers/CommonPController.cs

@@ -156,30 +156,36 @@ namespace Hotline.Api.Controllers
             //今日待办 tasksOkNum
             //var time = DateTime.Parse(tadayTime);
             //工单
-            var order = await _orderRepository.Queryable(hasHandled: true)
-                .GroupBy(o => new { o.Id,o.Status }).MergeTable()
+            var order = await _orderRepository.Queryable(hasHandled: false)
+	            .Includes(d => d.OrderSpecials)
+	            .Where(d => d.Status != EOrderStatus.WaitForAccept && d.Status != EOrderStatus.BackToUnAccept && d.Status != EOrderStatus.SpecialToUnAccept)
+				.Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
+	            .Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
+	            .Where(d => d.OrderSpecials.Any() == false || d.OrderSpecials.Any(s => s.State > 0))
+				.GroupBy(o => new { o.Id,o.Status })
                 .Select(o => new
                 {
                     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 && o.Status < EOrderStatus.Filed, 1, 0)),
+                    havExpired = SqlFunc.AggregateSum(SqlFunc.IIF(DateTime.Now > o.ExpiredTime!.Value , 1, 0)),
                     countersignHandle = SqlFunc.AggregateSum(SqlFunc.IIF(o.CounterSignType.HasValue, 1, 0)),
-                }).FirstAsync();
-            var aboutExpire = order?.aboutExpire ?? 0;
-            var havExpired = order?.havExpired ?? 0;
-            var countersignHandle = order?.countersignHandle ?? 0;
+                }).ToListAsync();
+            var aboutExpire = order?.Sum(x=>x.aboutExpire) ?? 0;
+            var havExpired = order?.Sum(x=>x.havExpired) ?? 0;
+            var countersignHandle = order?.Sum(x=> x.countersignHandle) ?? 0;
             //延期
-            var delay = await _orderDelayRepository.Queryable(hasHandled: true)
+            var delay = await _orderDelayRepository.Queryable(hasHandled: false)
                 .Where(d => d.DelayState == EDelayState.Examining).CountAsync();
             //甄别
-            var screenAudit = await _orderScreenRepository.Queryable(hasHandled: true)
+            var screenAudit = await _orderScreenRepository.Queryable(hasHandled: false)
                 .Where(d => d.Status == EScreenStatus.Apply)
                 .CountAsync();
             //var workTime = _timeLimitDomainService.CalcWorkTimeReduce(DateTime.Now, 5);
             var screenHandle = await _orderVisitedDetailRepository.Queryable(false, true)
                 .Includes(x => x.OrderVisit)
-                .LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.Status < EScreenStatus.End && s.IsDeleted == false)
-                .Where((x, s) => s.Id == null)
+                .LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId  && s.IsDeleted == false)
+                               //&& s.Status < EScreenStatus.End
+				.Where((x, s) => s.Id == null)
                 //.Where(x => x.OrderVisit.VisitTime < DateTime.Now && x.OrderVisit.VisitTime > workTime)
                 .Where((x, s) => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle)
                 .Where((x, s) => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode == _sessionContext.OrgId && (

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

@@ -1729,9 +1729,11 @@ public class OrderController : BaseController
             .Includes(x => x.OrderVisit)
             .Includes(x => x.OrderVisit, y => y.Order)
             .Includes(x => x.OrderVisit, y => y.Employee)
-            .LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.IsDeleted == false)
-            .WhereIF(dto.ScreenSendBack is 1, (x, s) => s.Status == EScreenStatus.SendBack && s.SendBackApply == true)
-            .WhereIF(dto.ScreenSendBack is 2, (x, s) => (s.Status != EScreenStatus.SendBack && s.SendBackApply != true) || s.Id == null)
+            //.LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.IsDeleted == false)
+            .Includes(x=>x.OrderScreens)
+            .Where(x=> x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.SendBackApply == true) || x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.SendBackApply != true)) == false)
+            .WhereIF(dto.ScreenSendBack is 1, x => x.OrderScreens.Any(s=>s.Status == EScreenStatus.SendBack && s.SendBackApply == true))
+            .WhereIF(dto.ScreenSendBack is 2, x => x.OrderScreens.Any(s=> (s.Status != EScreenStatus.SendBack && s.SendBackApply != true)) == false)
             .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order!.No!.Contains(dto.No!))
             .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order!.Title!.Contains(dto.Title!))
             .WhereIF(dto.IsProvince.HasValue, x => x.OrderVisit.Order!.IsProvince == dto.IsProvince)
@@ -1758,13 +1760,13 @@ public class OrderController : BaseController
             //    x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))
             //.WhereIF(!string.IsNullOrEmpty(dto.OrgNoSatisfiedReason),
             //    x => SqlFunc.JsonField(x.OrgNoSatisfiedReason, "Key") == dto.OrgNoSatisfiedReason)
-            .Where((x, s) => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle);
+            .Where(x=> x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle);
         if (_sessionContext.OrgId != null && !_sessionContext.OrgIsCenter)
         {
             query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                    (x, s) => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
+                    x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
                               x.OrderVisit.Order.No.Contains(dto.Keyword!))
-                .Where((x, s) => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode == _sessionContext.OrgId && (
+                .Where(x => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode == _sessionContext.OrgId && (
                     SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
                     SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2" ||
                     SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
@@ -1774,9 +1776,9 @@ public class OrderController : BaseController
         else
         {
             query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                    (x, s) => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
+                    x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
                               x.OrderVisit.Order.No.Contains(dto.Keyword!))
-                .Where((x, s) => x.VisitTarget == EVisitTarget.Org && (
+                .Where(x => x.VisitTarget == EVisitTarget.Org && (
                     SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
                     SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2" ||
                     SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
@@ -1785,7 +1787,15 @@ public class OrderController : BaseController
         }
 
         var (total, items) = await query
-            .OrderByDescending((x, s) => x.CreationTime)
+            .OrderByIF(dto is { SortRule: 0, SortField: "order.startTime" }, x => x.OrderVisit.Order.StartTime, OrderByType.Asc)
+            .OrderByIF(dto is { SortRule: 1, SortField: "order.startTime" }, x => x.OrderVisit.Order.StartTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "order.actualHandleTime" }, x => x.OrderVisit.Order.ActualHandleTime, OrderByType.Asc)
+            .OrderByIF(dto is { SortRule: 1, SortField: "order.actualHandleTime" }, x => x.OrderVisit.Order.ActualHandleTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "order.filedTime" }, x => x.OrderVisit.Order.FiledTime, OrderByType.Asc)
+            .OrderByIF(dto is { SortRule: 1, SortField: "order.filedTime" }, x => x.OrderVisit.Order.FiledTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "orderVisit.visitTime" }, x => x.OrderVisit.VisitTime, OrderByType.Asc)
+            .OrderByIF(dto is { SortRule: 1, SortField: "orderVisit.visitTime" }, x => x.OrderVisit.VisitTime, OrderByType.Desc)
+			.OrderByDescending(x => x.CreationTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
         return new PagedDto<OrderVisitDetailDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDetailDto>>(items));
     }
@@ -1811,7 +1821,7 @@ public class OrderController : BaseController
             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Visit.Order.No.Contains(dto.No!));
         if (dto.Status is EScreenStatus.Apply)
         {
-            query.Where(d => (d.Status == EScreenStatus.Apply || d.Status == EScreenStatus.Approval));
+            query.Where(d => (d.Status == EScreenStatus.Apply || d.Status == EScreenStatus.Approval || (d.Status == EScreenStatus.SendBack || d.SendBackApply  == false)));
         }
 
         if (dto.Status.HasValue && dto.Status == EScreenStatus.MyHandle)
@@ -1820,12 +1830,14 @@ public class OrderController : BaseController
         }
 
         var (total, items) = await query
+            .WhereIF(dto.DataScope is 1 ,x=>x.CreatorId == _sessionContext.RequiredUserId)
             .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.Order!.AcceptTypeCode! == dto.AcceptType!)
             .WhereIF(!string.IsNullOrEmpty(dto.HotspotSpliceName), x => x.Order!.Hotspot.HotSpotFullName!.StartsWith(dto.HotspotSpliceName!))
             .WhereIF(!string.IsNullOrEmpty(dto.SourceChannel), x => x.Order!.SourceChannelCode! == dto.SourceChannel!)
             .WhereIF(!string.IsNullOrEmpty(dto.VisitOrgName), x => x.VisitDetail.VisitOrgName!.Contains(dto.VisitOrgName!))
             .WhereIF(!string.IsNullOrEmpty(dto.CreatorOrgName), d => d.CreatorOrgName == dto.CreatorOrgName)
-            .WhereIF(dto.IsProvince.HasValue, x => x.Order!.IsProvince == dto.IsProvince)
+            .WhereIF(!string.IsNullOrEmpty(dto.CreatorName), d => d.CreatorName == dto.CreatorName)
+			.WhereIF(dto.IsProvince.HasValue, x => x.Order!.IsProvince == dto.IsProvince)
             .WhereIF(dto.IsSendBackApplyNum is true, x => x.SendBackApplyNum > 0)
             .WhereIF(dto.IsSendBackApplyNum is false, x => x.SendBackApplyNum == 0)
             .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)

+ 7 - 31
src/Hotline.Api/Controllers/TestController.cs

@@ -326,7 +326,7 @@ IRepository<Hotspot> hotspotRepository
                         OrderSoure = EOrderSoure.Hotline,
                         OrgCode = order.OrgLevelOneCode,
                         OrgName = order.OrgLevelOneName,
-                        CreationTime= order.CreationTime
+                        CreationTime = order.CreationTime
                     };
                     await _enforcementOrdersHandlerRepository.AddAsync(enforcementOrdersHandler, HttpContext.RequestAborted);
                 }
@@ -788,7 +788,7 @@ IRepository<Hotspot> hotspotRepository
             "20240622000060",
             "20240621000144",
         };
-        
+
         var orders = await _orderRepository.Queryable()
             .Includes(d => d.OrderExtension)
             .Where(d => numbers.Contains(d.No))
@@ -923,37 +923,13 @@ IRepository<Hotspot> hotspotRepository
     [HttpGet("t5")]
     public async Task Test5()
     {
-        var traces = await _workflowTraceRepository.Queryable()
-            .Where(d => d.Status == EWorkflowStepStatus.Handled && d.HandlerOrgAreaCode == null)
-            .ToListAsync(HttpContext.RequestAborted);
-
-        var orgIds = traces.Select(d => d.HandlerOrgId).ToList();
-        var orgs = await _systemOrganizeRepository.Queryable()
-            .Where(d => orgIds.Contains(d.Id))
-            .ToListAsync(HttpContext.RequestAborted);
+        //var orderCount = await _orderRepository.Queryable()
+        //    .Where(d => d.Status >= EOrderStatus.Filed &&
+        //              d.CurrentStepId == null)
 
-        var updateSteps = new List<WorkflowTrace>();
-        foreach (var trace in traces)
-        {
-            var org = orgs.FirstOrDefault(d => d.Id == trace.HandlerOrgId);
-            if (org == null)
-            {
-                _logger.LogWarning($"未找到部门,Id:{trace.HandlerOrgId}");
-                continue;
-            }
-
-            if (!trace.HandlerOrgIsCenter.HasValue)
-                trace.HandlerOrgIsCenter = org.IsCenter;
-            if (string.IsNullOrEmpty(trace.HandlerOrgAreaCode))
-                trace.HandlerOrgAreaCode = org.AreaCode;
-            if (string.IsNullOrEmpty(trace.HandlerOrgAreaName))
-                trace.HandlerOrgAreaName = org.AreaName;
-
-            updateSteps.Add(trace);
-        }
 
-        _logger.LogWarning($"更新数据:{updateSteps.Count} 条");
-        await _workflowTraceRepository.UpdateRangeAsync(updateSteps, HttpContext.RequestAborted);
+        //_logger.LogWarning($"更新数据:{updateSteps.Count} 条");
+        //await _workflowTraceRepository.UpdateRangeAsync(updateSteps, HttpContext.RequestAborted);
     }
 
     [HttpGet("rsa")]

+ 4 - 1
src/Hotline.Share/Dtos/Knowledge/KnowledgeBiDto.cs

@@ -33,8 +33,11 @@ namespace Hotline.Share.Dtos.Knowledge
 	}
 
 
-	public record KnowledgeBiDataListDto : PagedKeywordRequest
+	public record KnowledgeBiDataListDto : PagedRequest
 	{
+
+		public string? Keyword { get; set; }
+
 		/// <summary>
 		/// 开始时间
 		/// </summary>

+ 20 - 0
src/Hotline.Share/Dtos/Order/OrderScreenDto.cs

@@ -69,12 +69,32 @@ namespace Hotline.Share.Dtos.Order
 		/// </summary>
 		public DateTime? ApplyEndTime { get; set; }
 
+		/// <summary>
+		/// 业务流程ID
+		/// </summary>
+		public string? WorkflowId { get; set; }
+
 		/// <summary>
 		/// 附件列表
 		/// </summary>
 		public List<FileDto> Files { get; set; } = new();
 
 		public List<FileJson>? FileJson { get; set; }
+
+		/// <summary>
+		/// 甄别退回次数
+		/// </summary>
+		public int SendBackNum { get; set; }
+
+		/// <summary>
+		/// 甄别退回到申请人
+		/// </summary>
+		public bool SendBackApply { get; set; }
+
+		/// <summary>
+		/// 甄别重提申请次数
+		/// </summary>
+		public int SendBackApplyNum { get; set; }
 	}
 
 	public class OrderScreenListDto

+ 21 - 2
src/Hotline.Share/Dtos/Order/OrderVisitDto.cs

@@ -530,7 +530,12 @@ namespace Hotline.Share.Dtos.Order
 
         public OrderSecondaryHandlingDto SecondaryHandling { get; set; }
 
-        public OrderDto Order => OrderVisit != null ? OrderVisit.Order : null;
+        /// <summary>
+        /// 甄别记录
+        /// </summary>
+        public List<OrderScreenDto> OrderScreens { get; set; }
+
+		public OrderDto Order => OrderVisit != null ? OrderVisit.Order : null;
 
         /// <summary>
         /// 语音评价(话务评价)
@@ -603,7 +608,21 @@ namespace Hotline.Share.Dtos.Order
         /// 未解决备注
         /// </summary>
         public string? VolveConent { get; set; }
-    }
+
+        public string ScreenSendBackText => GetScreenSendBack();
+
+        public string GetScreenSendBack() {
+            if (OrderScreens != null && OrderScreens.Any())
+            {
+                if (OrderScreens.First().Status == EScreenStatus.SendBack && OrderScreens.First().SendBackApply)
+                {
+                    return "是";
+                }
+            }
+            return "否";
+        }
+
+	}
 
     public class DistributionVisitRspDto
     {

+ 15 - 4
src/Hotline.Share/Dtos/Order/QueryOrderDto.cs

@@ -454,10 +454,16 @@ namespace Hotline.Share.Dtos.Order
 
     public record ScreenListDto : PagedKeywordRequest
     {
-        /// <summary>
-        /// 甄别申请状态
-        /// </summary>
-        public EScreenStatus? Status { get; set; }
+
+		/// <summary>
+		/// 0 全部  1 我的
+		/// </summary>
+		public int? DataScope { get; set; }
+
+		/// <summary>
+		/// 甄别申请状态
+		/// </summary>
+		public EScreenStatus? Status { get; set; }
 
 		/// <summary>
 		/// 编码
@@ -499,6 +505,11 @@ namespace Hotline.Share.Dtos.Order
 		/// </summary>
 		public bool? IsProvince { get; set; }
 
+        /// <summary>
+        /// 申请人
+        /// </summary>
+        public string? CreatorName { get; set; }
+
         /// <summary>
         /// 甄别申请时间
         /// </summary>

+ 17 - 8
src/Hotline/FlowEngine/Workflows/Workflow.cs

@@ -580,6 +580,10 @@ public partial class Workflow
 
     private void ResetActualStep()
     {
+        ActualHandleStepCode = null;
+        ActualHandleStepName = null;
+        ActualHandleStepId = null;
+        ActualHandleStepCreateTime = null;
         ActualHandleStepAcceptTime = null;
         ActualHandleTime = null;
         ActualHandlerId = null;
@@ -592,14 +596,19 @@ public partial class Workflow
 
     private void ResetCurrentStep()
     {
-        //CurrentStepAcceptTime = null;
-        //CurrentHandleTime = null;
-        //CurrentHandlerId = null;
-        //CurrentHandlerName = null;
-        //CurrentHandleOrgId = null;
-        //CurrentHandleOrgName = null;
-        //CurrentHandleOrgAreaCode = null;
-        //CurrentHandleOrgAreaName = null;
+        CurrentStepId = null;
+        CurrentStepCode = null;
+        CurrentStepName = null;
+        CurrentStepCreateTime = null;
+        CurrentStepAcceptTime = null;
+        CurrentHandleTime = null;
+        CurrentHandlerId = null;
+        CurrentHandlerName = null;
+        CurrentHandleOrgId = null;
+        CurrentHandleOrgName = null;
+        CurrentHandleOrgLevel = null;
+        CurrentHandleOrgAreaCode = null;
+        CurrentHandleOrgAreaName = null;
     }
 
     /// <summary>

+ 6 - 0
src/Hotline/Orders/OrderVisitDetail.cs

@@ -24,6 +24,12 @@ namespace Hotline.Orders
         /// </summary>
         [Navigate(NavigateType.OneToOne, nameof(Id),nameof(OrderSecondaryHandling.VisitDetailId))]
         public OrderSecondaryHandling SecondaryHandling { get; set; }
+
+        /// <summary>
+        /// 甄别记录
+        /// </summary>
+        [Navigate(NavigateType.OneToMany,  nameof(OrderScreen.VisitDetailId), nameof(Id))]
+        public List<OrderScreen> OrderScreens { get; set; }
 		/// <summary>
 		/// 语音评价(话务评价)
 		/// </summary>