浏览代码

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

xf 1 年之前
父节点
当前提交
a4898ea432

+ 118 - 4
src/Hotline.Api/Controllers/EnforcementOrderController.cs

@@ -13,6 +13,8 @@ using Hotline.Share.Enums.Order;
 using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using Org.BouncyCastle.Utilities;
+using Polly.Caching;
 using SqlSugar;
 using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
@@ -168,8 +170,9 @@ namespace Hotline.Api.Controllers
                 {
                     p.AreaName,
                     p.Id
-                }).ToListAsync();
-
+                })
+                .OrderBy(p => p.Id)
+                .ToListAsync();
         }
 
         /// <summary>
@@ -240,7 +243,6 @@ namespace Hotline.Api.Controllers
         /// <param name="AreaCode"></param>
         /// <returns></returns>
         [HttpGet("event_classification_statistics")]
-        [AllowAnonymous]
         public async Task<object> GetEventClassificationStatisticsAsync(DateTime StartDate, DateTime EndDate, string Id, string AreaCode)
         {
 
@@ -296,6 +298,28 @@ namespace Hotline.Api.Controllers
             return new { List = items, Total = total, OrderCount = orderCount };
         }
 
+        /// <summary>
+        /// 事项分类统计--明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("event_classification_statistics_order_list")]
+        public async Task<PagedDto<EnforcementOrderListDto>> GetEventClassificationStatisticsOrderListAsync([FromQuery] QueryEventClassificationStatisticsDto dto)
+        {
+            dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
+
+            var (total, items) = await _enforcementOrdersRepository.Queryable()
+            .Includes(x => x.Order)
+            .Where(d => d.Order.Id != null)
+            .Where(d => d.Order.CreationTime >= dto.StartDate && d.Order.CreationTime <= dto.EndDate)
+            .WhereIF(!string.IsNullOrEmpty(dto.EventTypeId), d => d.EventTypeId == dto.EventTypeId)
+            .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.Order.AreaCode == dto.AreaCode)
+              .OrderByDescending(d => d.CreationTime)
+           .ToPagedListAsync(dto, HttpContext.RequestAborted);
+
+            return new PagedDto<EnforcementOrderListDto>(total, _mapper.Map<List<EnforcementOrderListDto>>(items));
+        }
+
         /// <summary>
         /// 执法部门办件统计
         /// </summary>
@@ -318,6 +342,7 @@ namespace Hotline.Api.Controllers
                     })
                     .Select(d => new
                     {
+                        OrgCode = d.Order.OrgLevelOneCode,
                         OrgName = d.Order.OrgLevelOneName,
                         CountNum = SqlFunc.AggregateCount(d.Order.OrgLevelOneCode),
                         TheClueIsTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == true, 1, 0)),
@@ -330,7 +355,72 @@ namespace Hotline.Api.Controllers
         }
 
         /// <summary>
-        /// 区域受理排行
+        /// 执法部门办件统计---子级
+        /// </summary>
+        /// <param name="StartDate"></param>
+        /// <param name="EndDate"></param>
+        /// <param name="OrgCode"></param>
+        /// <returns></returns>
+        [HttpGet("enforcement_departmental_processing_statistics_child")]
+        public async Task<object> GetDepartmentalProcessingStatisticsAsync(DateTime StartDate, DateTime EndDate, string OrgCode)
+        {
+
+            EndDate = EndDate.AddDays(1).AddSeconds(-1);
+            if (string.IsNullOrEmpty(OrgCode))
+                throw UserFriendlyException.SameMessage("部门code不能为空!");
+
+            var data = await _enforcementOrdersRepository.Queryable()
+                   .Includes(x => x.Order)
+                   .Where(d => d.Order.Id != null)
+                   .Where(d => d.Order.CreationTime >= StartDate && d.Order.CreationTime <= EndDate)
+                   .Where(d => d.Order.ActualHandleOrgCode.StartsWith(OrgCode))
+                    .GroupBy(d => new
+                    {
+                        OrgCode = d.Order.ActualHandleOrgCode,
+                        OrgName = d.Order.ActualHandleOrgName
+                    })
+                    .Select(d => new
+                    {
+                        OrgCode = d.Order.ActualHandleOrgCode,
+                        OrgName = d.Order.ActualHandleOrgName,
+                        CountNum = SqlFunc.AggregateCount(d.Order.ActualHandleOrgCode),
+                        TheClueIsTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == true, 1, 0)),
+                        TheClueIsNotTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == false, 1, 0)),
+                        EnforcementOrder = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsEnforcementOrder, 1, 0)),
+
+                    })
+                   .ToListAsync();
+
+            return data;
+        }
+
+        /// <summary>
+        /// 执法部门办件统计---明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("enforcement_departmental_processing_statistics_order_list")]
+        public async Task<PagedDto<EnforcementOrderListDto>> GetDepartmentalProcessingStatisticsOrderListAsync([FromQuery] QueryDepartmentalProcessingStatisticsDto dto)
+        {
+            dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
+
+            var (total, items) = await _enforcementOrdersRepository.Queryable()
+            .Includes(x => x.Order)
+            .Where(d => d.Order.Id != null)
+            .Where(d => d.Order.CreationTime >= dto.StartDate && d.Order.CreationTime <= dto.EndDate)
+            .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", d => d.Order.OrgLevelOneCode == dto.OrgCode)
+            .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001", d => d.Order.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+            .WhereIF(dto.TheClueIsTrue == true, d => d.IsTheClueTrue == true)
+            .WhereIF(dto.TheClueIsNotTrue == true, d => d.IsTheClueTrue == false)
+            .WhereIF(dto.EnforcementOrder == true, d => d.IsEnforcementOrder == true)
+              .OrderByDescending(d => d.CreationTime)
+           .ToPagedListAsync(dto, HttpContext.RequestAborted);
+
+            return new PagedDto<EnforcementOrderListDto>(total, _mapper.Map<List<EnforcementOrderListDto>>(items));
+        }
+
+        /// <summary>
+        /// 区域分类统计
         /// </summary>
         /// <returns></returns>
         [HttpGet("regional_classification_statistics")]
@@ -364,6 +454,30 @@ namespace Hotline.Api.Controllers
             return list;
         }
 
+        /// <summary>
+        /// 区域分类统计---明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("regional_classification_statistics_order_list")]
+        public async Task<PagedDto<EnforcementOrderListDto>> GetRegionalClassificationStatisticsOrderListAsync([FromQuery] QueryRegionalClassificationStatisticsDto dto)
+        {
+            dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
+
+            var (total, items) = await _enforcementOrdersRepository.Queryable()
+            .Includes(x => x.Order)
+            .Where(d => d.Order.Id != null)
+            .Where(d => d.Order.CreationTime >= dto.StartDate && d.Order.CreationTime <= dto.EndDate)
+            .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.Order.AreaCode == dto.AreaCode)
+            .WhereIF(dto.TheClueIsTrue == true, d => d.IsTheClueTrue == true)
+            .WhereIF(dto.TheClueIsNotTrue == true, d => d.IsTheClueTrue == false)
+            .WhereIF(dto.EnforcementOrder == true, d => d.IsEnforcementOrder == true)
+              .OrderByDescending(d => d.CreationTime)
+           .ToPagedListAsync(dto, HttpContext.RequestAborted);
+
+            return new PagedDto<EnforcementOrderListDto>(total, _mapper.Map<List<EnforcementOrderListDto>>(items));
+        }
+
         /// <summary>
         /// 部门满意度统计
         /// </summary>

+ 45 - 31
src/Hotline.Api/Controllers/OrderController.cs

@@ -3255,25 +3255,19 @@ public class OrderController : BaseController
                 NextHandlers = dto.NextHandlers,
                 Opinion = dto.Cause
             };
-            //if (dto.AlterTime) 
-            //{
-
-            //}
-            var time = _timeLimitDomainService.CalcEndTime(DateTime.Now, order.AcceptTypeCode);
-			recall.External = new External { TimeLimit = time.Count, TimeLimitUnit = ETimeType.WorkDay };
-            //if (dto.Files.Any()) recall.Files = dto.Files;
-
-            //todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
-            //期满时间
-            //if (recall is 特提)
-            //{
-            //    var expiredTimeConfig = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToOrg, order.AcceptTypeCode);
-            //    _mapper.Map(expiredTimeConfig, order);
-            //    await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
-
-            //}
-
-            await _workflowApplication.RecallAsync(recall, order.ExpiredTime, HttpContext.RequestAborted);
+			// 计算期满时间
+			//if (dto.AlterTime)
+			//{
+			var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now, order.AcceptTypeCode);
+			//var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now,
+			//	ETimeType.WorkDay,
+			//	dto.TimeLimit.Value, order.AcceptTypeCode);
+			await _orderRepository.Updateable().SetColumns(o => new Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime })
+				.Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+			var orderDto = _mapper.Map<OrderDto>(order);
+			await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto, cancellationToken: HttpContext.RequestAborted);
+			//}
+			await _workflowApplication.RecallAsync(recall, order.ExpiredTime, HttpContext.RequestAborted);
             var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == dto.OrderId);
             if (publish != null)
             {
@@ -3370,11 +3364,18 @@ public class OrderController : BaseController
 				NextHandlers = dto.NextHandlers,
 				Opinion = dto.Cause
 			};
+            // 计算期满时间
             if (dto.AlterTime)
-                recall.External = new External { TimeLimit = dto.TimeLimit, TimeLimitUnit = ETimeType.WorkDay };
-
+            {
+	            var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now,
+		             ETimeType.WorkDay,
+					 dto.TimeLimit.Value, order.AcceptTypeCode);
+				await _orderRepository.Updateable().SetColumns(o => new Order() { ExpiredTime = expiredTime.EndTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime })
+                    .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+				var orderDto = _mapper.Map<OrderDto>(order);
+	            await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,cancellationToken: HttpContext.RequestAborted);
+            }
             await _workflowApplication.RecallAsync(recall, order.ExpiredTime, HttpContext.RequestAborted);
-
 			var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == dto.OrderId);
 			if (publish != null)
 			{
@@ -3425,7 +3426,8 @@ public class OrderController : BaseController
             special.ReplyFileJson =
                 await _fileRepository.AddFileAsync(dto.Files, special.Id, "", HttpContext.RequestAborted);
         await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
-        if (special.State == 1)
+        var order = await _orderRepository.GetAsync(x => x.Id == special.OrderId);
+		if (special.State == 1)
         {
             var recall = new RecallDto
             {
@@ -3435,13 +3437,24 @@ public class OrderController : BaseController
                 NextHandlers = dto.NextHandlers,
                 Opinion = dto.Opinion
             };
-            //if (dto.AlterTime)
-            //    recall.External = new External { TimeLimit = dto.TimeLimit, TimeLimitUnit = dto.TimeLimitUnit };
-            //if (dto.Files.Any()) recall.Files = dto.Files;
+			//if (dto.AlterTime)
+			//    recall.External = new External { TimeLimit = dto.TimeLimit, TimeLimitUnit = dto.TimeLimitUnit };
+			//if (dto.Files.Any()) recall.Files = dto.Files;
+			// 计算期满时间
+			if (dto.AlterTime)
+			{
+				var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now,
+					ETimeType.WorkDay,
+					dto.TimeLimit.Value, order.AcceptTypeCode);
+				await _orderRepository.Updateable().SetColumns(o => new Order() { ExpiredTime = expiredTime.EndTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime })
+					.Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+				var orderDto = _mapper.Map<OrderDto>(order);
+				await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto, cancellationToken: HttpContext.RequestAborted);
+			}
 
-            //todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
+			//todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
 
-            await _workflowApplication.RecallAsync(recall, special.Order.ExpiredTime, HttpContext.RequestAborted);
+			await _workflowApplication.RecallAsync(recall, special.Order.ExpiredTime, HttpContext.RequestAborted);
             var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == special.OrderId);
             if (publish != null)
             {
@@ -3464,7 +3477,6 @@ public class OrderController : BaseController
                 await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
             }
 
-            var order = await _orderRepository.GetAsync(x => x.Id == special.OrderId);
             if (order != null && ("001171".Equals(special.OrgId) ||
                                   "001178".Equals(special.OrgId) ||
                                   "001180".Equals(special.OrgId)))
@@ -3673,8 +3685,10 @@ public class OrderController : BaseController
         if (order == null ) throw UserFriendlyException.SameMessage("无效工单信息!");
         if (order.CounterSignType == ECounterSignType.Center)
         {
-	        //中心会签调取方法
-        }
+            //中心会签调取方法
+            var org = await _workflowDomainService.GetLevelOneOrgsAsync(order.WorkflowId, HttpContext.RequestAborted);
+            orgs.AddRange(org);
+		}
         else
         {
 	        if (!string.IsNullOrEmpty(order.OrgLevelOneCode) && order.OrgLevelOneCode != "001")

+ 0 - 12
src/Hotline.Application/Handlers/FlowEngine/WorkflowRecallHandler.cs

@@ -60,18 +60,6 @@ public class WorkflowRecallHandler : INotificationHandler<RecallNotify>
                     order.Status = EOrderStatus.SpecialToUnAccept;
                     order.BackToUnsign();
                 }
-                if (data.External != null && data.External.TimeLimit.HasValue && data.External.TimeLimitUnit.HasValue)
-                {
-                    var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now,
-                        data.External.TimeLimitUnit.Value,
-                        data.External.TimeLimit.Value, order.AcceptTypeCode);
-                    order.ExpiredTime = expiredTime.EndTime;
-                    order.NearlyExpiredTime = expiredTime.NearlyExpiredTime;
-					//await _workflowDomainService.UpdateExpiredTimeAsync(workflow, expiredTime.EndTime,
-					//    expiredTime.RuleStr, data.External.TimeLimit, data.External.TimeLimitUnit, expiredTime.NearlyExpiredTime, cancellationToken);
-					var dto = _mapper.Map<OrderDto>(order);
-                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, dto, cancellationToken: cancellationToken);
-                }
                 await _orderRepository.UpdateAsync(order, false, cancellationToken);
 				break;
             case WorkflowModuleConsts.KnowledgeAdd:

+ 56 - 0
src/Hotline.Share/Dtos/JudicialManagement/QueryEventClassificationStatisticsDto.cs

@@ -10,4 +10,60 @@ namespace Hotline.Share.Dtos.JudicialManagement
 
         public string AreaCode { get; set; }
     }
+
+
+    public record QueryDepartmentalProcessingStatisticsDto: PagedRequest
+    {
+        public DateTime StartDate { get; set; }
+        public DateTime EndDate { get; set; }
+
+        /// <summary>
+        /// 部门code
+        /// </summary>
+        public string OrgCode { get; set; }
+
+        /// <summary>
+        /// 线索属实
+        /// </summary>
+        public bool TheClueIsTrue { get; set; }
+
+        /// <summary>
+        /// 线索不属实
+        /// </summary>
+        public bool TheClueIsNotTrue { get; set; }
+
+        /// <summary>
+        /// 行政执法工单
+        /// </summary>
+        public bool EnforcementOrder { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public record QueryRegionalClassificationStatisticsDto : PagedRequest
+    {
+        public DateTime StartDate { get; set; }
+        public DateTime EndDate { get; set; }
+
+        /// <summary>
+        /// 区域code
+        /// </summary>
+        public string AreaCode { get; set; }
+
+        /// <summary>
+        /// 线索属实
+        /// </summary>
+        public bool TheClueIsTrue { get; set; }
+
+        /// <summary>
+        /// 线索不属实
+        /// </summary>
+        public bool TheClueIsNotTrue { get; set; }
+
+        /// <summary>
+        /// 行政执法工单
+        /// </summary>
+        public bool EnforcementOrder { get; set; }
+    }
 }