TANG JIANG 1 год назад
Родитель
Сommit
a8f637afcd

+ 76 - 68
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -11,7 +11,9 @@ using Hotline.Share.Dtos.Bigscreen;
 using Hotline.Share.Dtos.CallCenter;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.CallCenter;
+using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
+using Hotline.Share.Enums.Settings;
 using Hotline.Share.Requests;
 using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
@@ -21,6 +23,7 @@ using XF.Domain.Authentications;
 using XF.Domain.Constants;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
+using XF.Utility.EnumExtensions;
 
 namespace Hotline.Api.Controllers.Bi
 {
@@ -43,7 +46,7 @@ namespace Hotline.Api.Controllers.Bi
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
         private readonly IRepository<OrderSpecialDetail> _orderSpecialDetailRepository;
 
-        public BiOrderController(
+		public BiOrderController(
             IOrderRepository orderRepository,
             IRepository<Hotspot> hotspotTypeRepository,
             ISystemDicDataCacheManager sysDicDataCacheManager,
@@ -60,7 +63,7 @@ namespace Hotline.Api.Controllers.Bi
             ISessionContext sessionContext,
             ISystemSettingCacheManager systemSettingCacheManager,
             IRepository<OrderSpecialDetail> orderSpecialDetailRepository
-            )
+			)
         {
             _orderRepository = orderRepository;
             _hotspotTypeRepository = hotspotTypeRepository;
@@ -79,12 +82,12 @@ namespace Hotline.Api.Controllers.Bi
             _systemSettingCacheManager = systemSettingCacheManager;
             _orderSpecialDetailRepository = orderSpecialDetailRepository;
 
-        }
+		}
 
         //public async Task OrgDataListDetail([FromQuery] OrgDataListDetailRequest dto)
         //{
         //    dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
-
+            
         //    await _orderRepository.Queryable()
         //    .Where(x => x.CreationTime >= dto.StartDate && x.CreationTime <= dto.EndDate)
         //    .WhereIF(dto.QueryType == 1, x => x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime) //业务已办超期
@@ -92,7 +95,7 @@ namespace Hotline.Api.Controllers.Bi
         //    .WhereIF(dto.QueryType == 3, x => x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate()) //业务待办超期
         //    //.WhereIF(dto.QueryType ==4,) //会签待办超期
         //    .ToPageListAsync(dto.PageIndex, dto.PageSize);
-
+            
         //}
 
 
@@ -114,14 +117,14 @@ namespace Hotline.Api.Controllers.Bi
                 .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(IsCenter == false, (x, o) => x.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
+                .WhereIF(IsCenter == false, (x,o) => x.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
                 .GroupBy((x, o) => new { x.ActualHandleOrgCode, o.Name })
                 .Select((x, o) => new OrderBiOrgDataListVo
                 {
                     OrgName = o.Name,
                     OrgId = x.ActualHandleOrgCode,
-                    HandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime, 1, 0)),
-                    NoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate(), 1, 0)),
+                    HandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >=  EOrderStatus.Filed && x.ExpiredTime < x.FiledTime, 1, 0)),
+                    NoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status <  EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate(), 1, 0)),
                 }).MergeTable();
             var queryCountersign = _workflowCountersignRepository.Queryable()
                 .LeftJoin<WorkflowCountersignMember>((x, o) => x.Id == o.WorkflowCountersignId)
@@ -132,7 +135,7 @@ namespace Hotline.Api.Controllers.Bi
                 {
                     OrgId = o.Key,
                     CounterHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled, 1, 0)),
-                    CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled == false, 1, 0)),
+                    CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled==false, 1, 0)),
                 }).MergeTable();
 
             var query = queryOrder.LeftJoin(queryCountersign, (or, co) => or.OrgId == co.OrgId)
@@ -189,7 +192,7 @@ namespace Hotline.Api.Controllers.Bi
                     UserName = x.AcceptorName,
                     UserId = x.AcceptorId,
                     //Subtotal = SqlFunc.AggregateCount(x.AcceptorId),
-                    CentreArchive = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >= EOrderStatus.Filed && x.ProcessType == EProcessType.Zhiban, 1, 0)),
+                    CentreArchive = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >=  EOrderStatus.Filed && x.ProcessType == EProcessType.Zhiban, 1, 0)),
                     CentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >= EOrderStatus.Filed && x.ProcessType == EProcessType.Jiaoban, 1, 0)),
                     //NoCentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF((int)x.Status < 300 && x.ExpiredTime > x.FiledTime, 1, 0)),
                     Invalid = SqlFunc.AggregateSum(SqlFunc.IIF(x.AcceptType == "无效", 1, 0)),
@@ -213,7 +216,7 @@ namespace Hotline.Api.Controllers.Bi
                     query = dto.SortRule == 0 ? query.OrderBy(x => x.Repeat) : query.OrderByDescending(x => x.Repeat);
                     break;
             }
-            var (total, items) = await query.Where(x => (x.CentreArchive + x.CentreCareOf + x.Invalid + x.Repeat) != 0).ToPagedListAsync(dto, HttpContext.RequestAborted);
+            var (total, items) = await query.Where(x=> (x.CentreArchive+x.CentreCareOf+x.Invalid+x.Repeat)!=0).ToPagedListAsync(dto, HttpContext.RequestAborted);
             return new PagedDto<OrderBiCentreDataListVo>(total, items);
         }
 
@@ -1189,33 +1192,21 @@ namespace Hotline.Api.Controllers.Bi
             var IsCenter = _sessionContext.OrgIsCenter;
 
             var orderData = await _orderRepository.Queryable()
-              // .LeftJoin<SystemOrganize>((it, o) => it.OrgLevelOneCode == o.Id)
-              .Where(it => it.CreationTime >= StartDate && it.CreationTime <= EndDate && it.Status >= EOrderStatus.Filed)
-      
-              .Select(it => new
-              {
-                  OrgCode = IsCenter == false ? it.ActualHandleOrgCode : it.OrgLevelOneCode,
-                  it.AcceptTypeCode,
-                  it.FileDurationWorkday,
-                  it.AllDuration
-              })
-              .MergeTable()
-              .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
-
-              .WhereIF(TypeCode == 1, (it, o) => it.OrgCode == "001")
-              .WhereIF(TypeCode == 2, (it, o) => it.OrgCode != "001")
-              .WhereIF(IsCenter == false, (it, o) => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
-
+              .LeftJoin<SystemOrganize>((it, o) => it.OrgLevelOneCode == o.Id)
+              .Where((it, o) => it.CreationTime >= StartDate && it.CreationTime <= EndDate && (int)it.Status >= 300)
+                .WhereIF(TypeCode == 1, (it, o) => it.OrgLevelOneCode == "001")
+                .WhereIF(TypeCode == 2, (it, o) => it.OrgLevelOneCode != "001")
+                .WhereIF(IsCenter == false, (it, o) => it.OrgLevelOneCode.StartsWith(_sessionContext.RequiredOrgId))
                .GroupBy((it, o) => new
                {
-                   it.OrgCode,
+                   it.OrgLevelOneCode,
                    o.Name,
                    o.OrgType
                })
                 .Select((it, o) => new DepartmentAcceptanceTypeStatisticsDto
                 {
-                    OrgName = it.OrgCode == "001" ? "热线中心" : o.Name,
-                    OrgCode = it.OrgCode,
+                    OrgName = it.OrgLevelOneCode == "001" ? "热线中心" : o.Name,
+                    OrgCode = it.OrgLevelOneCode,
                     OrgType = (int)o.OrgType == 2 ? "区县部门" : "市直部门",
                     ZxAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10", 1, 0)),
                     ZxAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10" && it.AllDuration != null, it.AllDuration, 0)),
@@ -1260,7 +1251,7 @@ namespace Hotline.Api.Controllers.Bi
         {
             dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
             var (total, items) = await _orderRepository.Queryable()
-                .Where(p => p.CreationTime >= dto.StartDate && p.CreationTime <= dto.EndDate && p.Status >= EOrderStatus.Filed)
+                .Where(p => p.CreationTime >= dto.StartDate && p.CreationTime <= dto.EndDate && (int)p.Status >= 300)
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneCode), p => p.OrgLevelOneCode == dto.OrgLevelOneCode)
                 .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
                 .OrderByDescending(d => d.CreationTime)
@@ -1400,7 +1391,7 @@ namespace Hotline.Api.Controllers.Bi
                    .Where((p, o) => p.CallOrderType == ECallOrderType.Order)
                    .Where((p, o) => p.ExternalId != null && o.Id != null)
                     .WhereIF(!string.IsNullOrEmpty(dto.PhoneNum), (p, o) => p.CPN == dto.PhoneNum)
-                   .Select((p, o) => new
+                   .Select((p, o) => new 
                    {
                        p.CPN,
                        p.ExternalId
@@ -1567,20 +1558,21 @@ namespace Hotline.Api.Controllers.Bi
             return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
         }
 
-        /// <summary>
-        /// 回退错件
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        [HttpGet("reTransact")]
-        public async Task<PagedDto<OrderReTransactVo>> OrderReTransact([FromQuery] ReportPagedRequest dto)
+		/// <summary>
+		/// 回退错件
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("reTransact")]
+		public async Task<PagedDto<OrderReTransactVo>> OrderReTransact([FromQuery] QueryOrderReTransactRequest dto) 
         {
-            if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
-                throw UserFriendlyException.SameMessage("请选择时间!");
-
-            var (total, items) = await _orderSpecialDetailRepository.Queryable()
-                .Includes(x => x.OrderSpecial)
-                .Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
+			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
+				throw UserFriendlyException.SameMessage("请选择时间!");
+			dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+			var (total, items) = await _orderSpecialDetailRepository.Queryable()
+                .Includes(x=>x.OrderSpecial)
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName!))
+				.Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
                 .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
                 .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
                 .GroupBy(x => new { x.OrgId, x.OrgName })
@@ -1590,33 +1582,49 @@ namespace Hotline.Api.Controllers.Bi
                     OrgName = x.OrgName,
                     Num = SqlFunc.AggregateCount(1)
                 }).MergeTable()
-                .OrderByIF(dto.SortRule == 0, x => x.Num, OrderByType.Asc)
+				.OrderByIF(dto.SortRule == 0, x => x.Num, OrderByType.Asc)
                 .OrderByIF(dto.SortRule == 1, x => x.Num, OrderByType.Desc)
                 .ToPagedListAsync(dto, HttpContext.RequestAborted);
             return new PagedDto<OrderReTransactVo>(total, _mapper.Map<IReadOnlyList<OrderReTransactVo>>(items));
-        }
+		}
+
+		/// <summary>
+		/// 回退错件明细
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("reTransact_detail")]
+		public async Task<PagedDto<OrderSpecialDto>> OrderReTransactDetail([FromQuery] QueryOrderReTransactDetailRequest dto) 
+        {
+			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
+				throw UserFriendlyException.SameMessage("请选择时间!");
+			dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+			var (total, items) = await _orderSpecialDetailRepository.Queryable()
+				.Includes(x => x.OrderSpecial,s=>s.Order)
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgName),x=>x.OrgName.Contains(dto.OrgName!))
+				.WhereIF(!string.IsNullOrEmpty(dto.ErrorName), x => x.ErrorName.Contains(dto.ErrorName!))
+				.WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderSpecial!.Order!.No!.Contains(dto.No!))
+				.Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
+				.Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
+				.Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
+				.ToPagedListAsync(dto, HttpContext.RequestAborted);
+			return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
+		}
 
         /// <summary>
-        /// 回退错件明细
+        /// 获取基本信息
         /// </summary>
-        /// <param name="dto"></param>
+        /// <param name="id"></param>
         /// <returns></returns>
-        [HttpGet("reTransact_detail")]
-        public async Task<PagedDto<OrderSpecialDto>> OrderReTransactDetail([FromQuery] QueryOrderReTransactDetailRequest dto)
-        {
-            if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
-                throw UserFriendlyException.SameMessage("请选择时间!");
-            var (total, items) = await _orderSpecialDetailRepository.Queryable()
-                .Includes(x => x.OrderSpecial)
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName!))
-                .Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
-                .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
-                .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
-                .ToPagedListAsync(dto, HttpContext.RequestAborted);
-            return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
-        }
-
-
-
-    }
+		[HttpGet("reTransact_base")]
+		public async Task<object> ReTransactBaseData()
+		{
+			var rsp = new
+			{
+				ReTransactErrorType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.ReTransactErrorType),
+			};
+			return rsp;
+		}
+
+	}
 }

+ 2 - 0
src/Hotline.Api/Controllers/OrderController.cs

@@ -1682,6 +1682,8 @@ public class OrderController : BaseController
             ScreenStatus = EnumExts.GetDescriptions<EScreenStatus>(),
             ScreenType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.ScreenType),
             CounterSignType = EnumExts.GetDescriptions<ECounterSignType>(),
+            AcceptType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType),
+            SalesChannel = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.SalesChannel),
 		};
         return rsp;
     }

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

@@ -136,8 +136,18 @@ public record QueryOrderDelayDataListRequest:ReportPagedRequest
 	public string? OrgName { get; set; }
 }
 
+public record QueryOrderReTransactRequest : ReportPagedRequest
+{
+	public string? OrgName { get; set; }
+
+}
+
 public record QueryOrderReTransactDetailRequest : ReportPagedRequest
 {
 	public string? OrgName { get; set; }
 
+	public string? ErrorName { get; set; }
+
+	public string? No { get; set; }
+
 }

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

@@ -698,12 +698,13 @@ namespace Hotline.FlowEngine.Workflows
         public async Task<ICollection<Kv>> GetLevelOneOrgsAsync(string workflowId, CancellationToken cancellation)
         {
             var workflow = await GetWorkflowAsync(workflowId, withSteps: true, cancellationToken: cancellation);
-            return workflow.Steps.Where(d => d.BusinessType == EBusinessType.Department &&
+            var list = workflow.Steps.Distinct().Where(d => d.BusinessType == EBusinessType.Department &&
                                              d.HandlerType == EHandlerType.OrgLevel &&
                                              d.StepHandlers.Any(d =>
                                                  !string.IsNullOrEmpty(d.OrgId) && d.OrgId.CheckIfOrgLevelIs(1)))
                 .Select(d => new Kv(d.StepHandlers.First().OrgId, d.StepHandlers.First().OrgName))
-                .ToList();
+				.ToList();
+            return list.Where((x, i) => list.FindIndex(z => z.Key == x.Key) == i).ToList();
         }
 
         /// <summary>