Browse Source

Merge branch 'master' of http://git.12345lm.cn/Fengwo/hotline

Dun.Jason 1 year ago
parent
commit
4af8da8eb2

+ 107 - 22
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -2,22 +2,18 @@
 using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Settings;
 using Hotline.Settings.Hotspots;
-using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Order;
-using Hotline.Share.Enums.KnowledgeBase;
 using Hotline.Share.Enums.Order;
 using Microsoft.AspNetCore.Mvc;
 using SqlSugar;
 using Hotline.Share.Requests;
-using Hotline.Users;
 using XF.Domain.Repository;
-using Hotline.Caching.Services;
-using Hotline.Share.Dtos.CallCenter;
-using Microsoft.AspNetCore.Authorization;
 using Hotline.Caching.Interfaces;
-using System.Data;
+using Hotline.FlowEngine.Workflows;
+using Hotline.Share.Dtos.CallCenter;
 using MapsterMapper;
+using XF.Domain.Exceptions;
 
 namespace Hotline.Api.Controllers.Bi
 {
@@ -29,13 +25,18 @@ namespace Hotline.Api.Controllers.Bi
         private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
         private readonly IRepository<OrderDelay> _orderDelayRepository;
         private readonly IMapper _mapper;
+        private readonly IRepository<WorkflowCountersign> _workflowCountersignRepository;
+        private readonly IRepository<OrderSpecial> _orderSpecialRepository;
+
 		public BiOrderController(
             IOrderRepository orderRepository,
             IRepository<Hotspot> hotspotTypeRepository,
             ISystemDicDataCacheManager sysDicDataCacheManager,
             IRepository<OrderVisitDetail> orderVisitDetailRepository,
             IRepository<OrderDelay> orderDelayRepository,
-            IMapper mapper
+            IRepository<WorkflowCountersign> workflowCountersignRepository,
+            IRepository<OrderSpecial> orderSpecialRepository,
+			IMapper mapper
             )
         {
             _orderRepository = orderRepository;
@@ -43,7 +44,9 @@ namespace Hotline.Api.Controllers.Bi
             _sysDicDataCacheManager = sysDicDataCacheManager;
             _orderVisitDetailRepository = orderVisitDetailRepository;
             _orderDelayRepository = orderDelayRepository;
-            _mapper = mapper;
+            _workflowCountersignRepository = workflowCountersignRepository;
+            _orderSpecialRepository = orderSpecialRepository;
+			_mapper = mapper;
         }
 
         /// <summary>
@@ -54,23 +57,43 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("org_data_list")]
         public async Task<PagedDto<OrderBiOrgDataListVo>> OrgDataList([FromQuery] ReportPagedRequest dto)
         {
-            //TODO 会签统计待处理 目前缺少关联关系
-            var query = _orderRepository.Queryable(false, false, false)
+			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
+			var queryOrder = _orderRepository.Queryable(false, false, false)
                 .LeftJoin<SystemOrganize>((x, o) => x.ActualHandleOrgCode == o.Id)
                 .WhereIF(dto.StartTime.HasValue, (x, o) => x.CreationTime >= dto.StartTime)
                 .WhereIF(dto.EndTime.HasValue, (x, o) => x.CreationTime <= dto.EndTime)
-                .WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => o.Name.Contains(dto.Keyword!))
                 .GroupBy((x, o) => new { x.ActualHandleOrgCode, o.Name })
                 .Select((x, o) => new OrderBiOrgDataListVo
                 {
                     OrgName = o.Name,
                     OrgId = x.ActualHandleOrgCode,
                     HandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF((int)x.Status >= 300 && x.ExpiredTime > x.FiledTime, 1, 0)),
-                    //CounterHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsDeleted, 1, 0)),
                     NoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF((int)x.Status < 300 && x.ExpiredTime > x.FiledTime, 1, 0)),
-                    //CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status == EKnowledgeStatus.OnShelf, 1, 0))
                 }).MergeTable();
-            switch (dto.SortField)
+            var queryCountersign = _workflowCountersignRepository.Queryable()
+                .LeftJoin<WorkflowCountersignMember>((x,o)=>x.Id ==o.WorkflowCountersignId)
+	            .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
+	            .WhereIF(dto.EndTime.HasValue, x=> x.CreationTime <= dto.EndTime)
+                .GroupBy((x,o)=> o.Key)
+                .Select((x,o) => new OrderBiOrgDataListVo
+	            {
+					OrgId =  o.Key,
+                    CounterHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled,1,0)),
+                    CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(!o.IsHandled, 1, 0)),
+				}).MergeTable();
+
+            var  query = queryOrder.LeftJoin(queryCountersign,(or,co)=>or.OrgId == co.OrgId)
+				.Select((or,co) => new OrderBiOrgDataListVo {
+					OrgName = or.OrgName,
+					OrgId = or.OrgId,
+					HandlerExtendedNum =or.HandlerExtendedNum,
+					NoHandlerExtendedNum =or.NoHandlerExtendedNum,
+					CounterHandlerExtendedNum =co.CounterHandlerExtendedNum,
+					CounterNoHandlerExtendedNum =co.CounterNoHandlerExtendedNum
+				}).MergeTable();
+
+            query = query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),  x => x.OrgName.Contains(dto.Keyword!));
+			switch (dto.SortField)
             {
                 case "handlerExtendedNum":
                     query = dto.SortRule == 0 ? query.OrderBy(x => x.HandlerExtendedNum) : query.OrderByDescending(x => x.HandlerExtendedNum);
@@ -98,7 +121,8 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("centre_data_list")]
         public async Task<PagedDto<OrderBiCentreDataListVo>> CentreDataList([FromQuery] ReportPagedRequest dto)
         {
-            var query = _orderRepository.Queryable(false, false, false)
+	        if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
+			var query = _orderRepository.Queryable(false, false, false)
                 .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
                 .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
                 .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.AcceptorName.Contains(dto.Keyword!))
@@ -143,7 +167,8 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("hotspot_data_list")]
         public async Task<PagedDto<HotspotDataLsitVo>> HotspotDataLsit([FromQuery] HotspotReportPagedRequest dto)
         {
-            var query = _hotspotTypeRepository.Queryable(false, true)
+	        if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
+			var query = _hotspotTypeRepository.Queryable(false, true)
                 .LeftJoin<Order>((x, o) => o.HotspotSpliceName != null && (x.HotSpotFullName == o.HotspotSpliceName || o.HotspotSpliceName.Contains(x.HotSpotFullName)) && o.IsDeleted == false)
                 .WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= dto.StartTime)
                 .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.EndTime)
@@ -170,8 +195,8 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("visit-nosatisfied")]
         public async Task<object> QueryVisitNoSatisfied([FromQuery] QueryVisitNoSatiisfiedRequest dto)
         {
-            var dissatisfiedReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.DissatisfiedReason);
-
+	        if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
+			var dissatisfiedReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.DissatisfiedReason);
             List<dynamic>? list = new List<dynamic>();
             //DataTable dt = new DataTable();
             foreach (var item in dissatisfiedReason)
@@ -210,7 +235,8 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("visit-nosatisfied-detail")]
         public async Task<PagedDto<OrderVisitDetailDto>> BiQueryVisitNoSatisfiedDetail([FromQuery]BiQueryVisitNoSatisfiedDetailDto dto)
         {
-            var (total,items) = await _orderVisitDetailRepository.Queryable()
+	        if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
+			var (total,items) = await _orderVisitDetailRepository.Queryable()
                 .Includes(x => x.OrderVisit, d => d.Order)
                 .Includes(x => x.OrderVisit, d => d.Employee)
                 .Where(x => x.VisitOrgCode == dto.OrgCode)
@@ -234,7 +260,8 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("order-delay-data-list")]
         public async Task<IReadOnlyList<BiOrderDelayDataDto>> QueryOrderDelayDataList([FromQuery] QueryOrderDelayDataListRequest dto)
         {
-            var list = await _orderDelayRepository.Queryable()
+	        if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
+			var list = await _orderDelayRepository.Queryable()
                 .LeftJoin<SystemOrganize>((x, o) => x.ApplyOrgCode == o.Id)
                 .WhereIF(dto.StartTime.HasValue, (x, o) => x.CreationTime >= dto.StartTime)
                 .WhereIF(dto.EndTime.HasValue, (x, o) => x.CreationTime <= dto.EndTime)
@@ -253,5 +280,63 @@ namespace Hotline.Api.Controllers.Bi
 
             return list;
         }
-    }
+
+		/// <summary>
+		/// 特提统计
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("special_data_list")]
+		public async Task<PagedDto<OrderBiSpecialListVo>> SpecialDataList([FromQuery] ReportPagedRequest dto)
+		{
+			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
+			var query = _orderSpecialRepository.Queryable()
+				.WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
+				.WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
+				.GroupBy(x => new { x.Cause })
+				.Select(x => new OrderBiSpecialListVo
+				{
+					Cause = x.Cause,
+					OrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(true, 1, 0)),
+					MaxSpecialTime = SqlFunc.AggregateMax(x.CreationTime),
+				}).MergeTable();
+			switch (dto.SortField)
+			{
+				case "cause":
+					query = dto.SortRule == 0 ? query.OrderBy(x => x.Cause) : query.OrderByDescending(x => x.Cause);
+					break;
+				case "orderNum":
+					query = dto.SortRule == 0 ? query.OrderBy(x => x.OrderNum) : query.OrderByDescending(x => x.OrderNum);
+					break;
+				case "maxSpecialTime":
+					query = dto.SortRule == 0 ? query.OrderBy(x => x.MaxSpecialTime) : query.OrderByDescending(x => x.MaxSpecialTime);
+					break;
+			}
+			var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
+			return new PagedDto<OrderBiSpecialListVo>(total, items);
+		}
+
+		/// <summary>
+		/// 获取工单特提信息列表
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("special_data_list/list")]
+		public async Task<PagedDto<OrderSpecialDto>> List([FromQuery] OrderSpecialListDto dto)
+		{
+            if(!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
+			var (total, items) = await _orderSpecialRepository.Queryable()
+				.Includes(x => x.Order)
+				.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
+					x => x.Order.No.Contains(dto.Keyword!) || x.Order.Title.Contains(dto.Keyword!))
+				.WhereIF(!string.IsNullOrEmpty(dto.Cause),
+					x => x.Cause != null && x.Cause.Equals(dto.Cause))
+				.WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
+				.WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
+				.WhereIF(dto.State.HasValue, x => x.State == dto.State)
+				.OrderByDescending(x => x.CreationTime)
+				.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+			return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
+		}
+	}
 }

+ 4 - 10
src/Hotline.Share/Dtos/Order/OrderBiDto.cs

@@ -41,19 +41,13 @@ namespace Hotline.Share.Dtos.Order
 		public int Subtotal => CentreArchive + CentreCareOf + NoCentreCareOf + Invalid + Repeat;
 	}
 
-	public class OrderBiCanDelayListVo 
+	public class OrderBiSpecialListVo
 	{
-		public string OrgName { get; set; }
-
-		public string OrgId { get; set; }
-
-		public int Agreed { get; set; }
-
-		public int NotAgreed { get; set; }
+		public string Cause { get; set; }
 
-		public int Approval { get; set; }
+		public int OrderNum { get; set; }
 
-		public int Subtotal => Agreed + NotAgreed + Approval;
+		public DateTime MaxSpecialTime { get; set; }
 	}
 
 	public class HotspotDataLsitVo { 

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

@@ -232,13 +232,15 @@ namespace Hotline.Share.Dtos.Order
 	}
 	public record OrderSpecialListDto : PagedKeywordRequest
 	{
-		public DateTime? CreationTimeStart { get; set; }
-		public DateTime? CreationTimeEnd { get; set; }
+		public DateTime? StartTime { get; set; }
+		public DateTime? EndTime { get; set; }
 
 		/// <summary>
 		///  审核结果  0  待审核  1 审核通过  2 审核不通过
 		/// </summary>
 		public int? State { get; set; }
+
+		public string? Cause { get; set; }
 	}
 	public class OrderSpecialHandleTime 
 	{

+ 3 - 1
src/Hotline/FlowEngine/Workflows/WorkflowCountersignMember.cs

@@ -15,7 +15,9 @@ public class WorkflowCountersignMember : CreationEntity
     /// </summary>
     public EFlowAssignType? FlowAssignType { get; set; }
 
-    public string Name { get; set; }
+    public string Key { get; set; }
+
+    public string Value { get; set; }
 
     public bool IsHandled { get; set; }
 }

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

@@ -1210,8 +1210,8 @@ namespace Hotline.FlowEngine.Workflows
         {
             var members = handlers.Select(d => new WorkflowCountersignMember
             {
-                Id = d.Key,
-                Name = d.Value,
+                Key = d.Key,
+                Value = d.Value,
                 FlowAssignType = flowAssignType
             }).ToList();