Kaynağa Gözat

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

Dun.Jason 1 yıl önce
ebeveyn
işleme
7bdc1d2258

+ 59 - 5
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -41,9 +41,9 @@ namespace Hotline.Api.Controllers.Bi
         private readonly IRepository<AiOrderVisitDetail> _aiOrderVisitDetailRepository;
         private readonly ISessionContext _sessionContext;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
+        private readonly IRepository<OrderSpecialDetail> _orderSpecialDetailRepository;
 
-
-        public BiOrderController(
+		public BiOrderController(
             IOrderRepository orderRepository,
             IRepository<Hotspot> hotspotTypeRepository,
             ISystemDicDataCacheManager sysDicDataCacheManager,
@@ -58,8 +58,9 @@ namespace Hotline.Api.Controllers.Bi
             IRepository<SystemOrganize> systemOrganizeRepository,
             IRepository<AiOrderVisitDetail> aiOrderVisitDetailRepository,
             ISessionContext sessionContext,
-            ISystemSettingCacheManager systemSettingCacheManager
-            )
+            ISystemSettingCacheManager systemSettingCacheManager,
+            IRepository<OrderSpecialDetail> orderSpecialDetailRepository
+			)
         {
             _orderRepository = orderRepository;
             _hotspotTypeRepository = hotspotTypeRepository;
@@ -76,7 +77,9 @@ namespace Hotline.Api.Controllers.Bi
             _aiOrderVisitDetailRepository = aiOrderVisitDetailRepository;
             _sessionContext = sessionContext;
             _systemSettingCacheManager = systemSettingCacheManager;
-        }
+            _orderSpecialDetailRepository = orderSpecialDetailRepository;
+
+		}
 
         //public async Task OrgDataListDetail([FromQuery] OrgDataListDetailRequest dto)
         //{
@@ -1552,5 +1555,56 @@ 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) 
+        {
+			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)
+                .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
+                .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
+                .GroupBy(x => new { x.OrgId, x.OrgName })
+                .Select(x => new OrderReTransactVo
+                {
+                    OrgId = x.OrgId,
+                    OrgName = x.OrgName,
+                    Num = SqlFunc.AggregateCount(1)
+                }).MergeTable()
+				.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("请选择时间!");
+			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));
+		}
+
+
+
     }
 }

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

@@ -106,8 +106,9 @@ public class OrderController : BaseController
     private readonly IRepository<User> _userRepository;
     private readonly IExportApplication _exportApplication;
     private readonly IRepository<TranspondCityRawData> _transpondCityRawDataRepository;
+    private readonly IRepository<OrderSpecialDetail> _orderSpecialDetailRepository;
 
-    public OrderController(
+	public OrderController(
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
         IWorkflowApplication workflowApplication,
@@ -156,8 +157,9 @@ public class OrderController : BaseController
         IRepository<OrderSendBackAudit> orderSendBackAuditRepository,
         IRepository<User> userRepository,
         IExportApplication exportApplication,
-        IRepository<TranspondCityRawData> transpondCityRawDataRepository
-        )
+        IRepository<TranspondCityRawData> transpondCityRawDataRepository,
+        IRepository<OrderSpecialDetail> orderSpecialDetailRepository
+		)
     {
         _orderDomainService = orderDomainService;
         _orderRepository = orderRepository;
@@ -208,7 +210,8 @@ public class OrderController : BaseController
         _userRepository = userRepository;
         _exportApplication = exportApplication;
         _transpondCityRawDataRepository = transpondCityRawDataRepository;
-    }
+        _orderSpecialDetailRepository = orderSpecialDetailRepository;
+	}
 
     #region 工单发布
 
@@ -2611,8 +2614,14 @@ public class OrderController : BaseController
             //写入质检
             await _qualityApplication.AddQualityAsync(EQualitySource.Send, order.Id, HttpContext.RequestAborted);
         }
+        else if (dto.FlowDirection is EFlowDirection.CenterToCenter)
+        {
+	        expiredTimeConfig = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToCenter, order.AcceptTypeCode);
+	        order.CenterToCenter(expiredTimeConfig.TimeText, expiredTimeConfig.Count,
+		        expiredTimeConfig.TimeType, expiredTimeConfig.ExpiredTime, expiredTimeConfig.NearlyExpiredTime);
+        }
 
-        _mapper.Map(expiredTimeConfig, order);
+		_mapper.Map(expiredTimeConfig, order);
         await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
         var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
 		// 平均派单
@@ -3370,7 +3379,19 @@ public class OrderController : BaseController
 		if (dto.Files.Any())
 			model.FileJson = await _fileRepository.AddFileAsync(dto.Files, model.Id, "", HttpContext.RequestAborted);
 		await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);
-		if (model.State == 1)
+        if (dto.ReTransactError.Any()) {
+            List<OrderSpecialDetail> details = new();
+			foreach (var item in dto.ReTransactError)
+	        {
+                var detail = new OrderSpecialDetail();
+                _mapper.Map(item, detail);
+                detail.SpecialId = model.Id;
+				details.Add(detail);
+			}
+            await  _orderSpecialDetailRepository.AddRangeAsync(details, HttpContext.RequestAborted);
+		}
+
+        if (model.State == 1)
 		{
 			var recall = new RecallDto
 			{

+ 3 - 2
src/Hotline.Application/Handlers/FlowEngine/WorkflowNextHandler.cs

@@ -11,6 +11,8 @@ using Hotline.Settings;
 using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.Order;
+using Hotline.Share.Dtos.Settings;
+using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Push;
 using Hotline.Share.Mq;
@@ -141,8 +143,7 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
 
                 //    expiredTimeChanged = true;
                 //}
-
-                await _orderRepository.UpdateAsync(order, cancellationToken);
+				await _orderRepository.UpdateAsync(order, cancellationToken);
                 try
                 {
                     if (notification.Dto.IsSms)

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

@@ -454,5 +454,14 @@ namespace Hotline.Share.Dtos.Order
 
 	public class BiOrderSendDto { 
 	
-	} 
+	}
+
+	public class OrderReTransactVo
+	{
+		public string OrgName { get; set; }
+
+		public string OrgId { get; set; }
+
+		public int Num { get; set; }
+	}
 }

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

@@ -414,10 +414,10 @@ namespace Hotline.Share.Dtos.Order
 		/// <summary>
 		/// 错件类型
 		/// </summary>
-		public List<ReTransactError> ReTransactError { get; set; }
+		public List<OrderSpecialDetailDto> ReTransactError { get; set; }
 	}
 
-	public class ReTransactError
+	public class OrderSpecialDetailDto
 	{
 
 		public string OrgId { get; set; }

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

@@ -134,4 +134,10 @@ public record BiQueryVisitNoSatisfiedDetailDto: ReportPagedRequest
 public record QueryOrderDelayDataListRequest:ReportPagedRequest 
 { 
 	public string? OrgName { get; set; }
+}
+
+public record QueryOrderReTransactDetailRequest : ReportPagedRequest
+{
+	public string? OrgName { get; set; }
+
 }

+ 10 - 1
src/Hotline/Orders/Order.cs

@@ -872,7 +872,16 @@ namespace Hotline.Orders
             CenterToOrgTime = null;
         }
 
-        public void SetHandleDuration()
+        public void CenterToCenter(string timelimit, int timelimitCount, ETimeType timilimitUnit, DateTime expiredTime, DateTime nearlyExpiredTime)
+        {
+	        TimeLimit = timelimit;
+	        TimeLimitCount = timelimitCount;
+	        TimeLimitUnit = timilimitUnit;
+	        ExpiredTime = expiredTime;
+	        NearlyExpiredTime = nearlyExpiredTime;
+        }
+
+		public void SetHandleDuration()
         {
             if (!ActualHandleTime.HasValue) return;
             if (!CenterToOrgTime.HasValue) return;

+ 3 - 2
src/Hotline/Orders/OrderSpecial.cs

@@ -96,8 +96,9 @@ namespace Hotline.Orders
 		/// <summary>
 		/// 错件类型
 		/// </summary>
-		[SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
-		public List<ReTransactError> ReTransactError { get; set; }
+		//[SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
+		[Navigate(NavigateType.OneToMany, nameof(OrderSpecialDetail.SpecialId))]
+		public List<OrderSpecialDetail> ReTransactError { get; set; }
 
 
 	}

+ 28 - 0
src/Hotline/Orders/OrderSpecialDetail.cs

@@ -0,0 +1,28 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Orders
+{
+	public class OrderSpecialDetail : FullStateEntity
+	{
+		/// <summary>
+		/// 特提Id
+		/// </summary>
+		public string SpecialId { get; set; }
+		public string OrgId { get; set; }
+
+		public string OrgName { get; set; }
+
+		public string ErrorId { get; set; }
+
+		public string ErrorName { get; set; }
+
+		[Navigate(NavigateType.ManyToOne, nameof(SpecialId))]
+		public OrderSpecial OrderSpecial { get; set; }
+	}
+}

+ 2 - 1
src/Hotline/Settings/TimeLimits/TimeLimitDomainService.cs

@@ -139,7 +139,8 @@ namespace Hotline.Settings.TimeLimits
             {
                 EFlowDirection.CenterToOrg => GetOrderTimeLimitConfig(acceptTypeCode),
                 EFlowDirection.OrgToCenter => GetOrderTimeLimitConfig(),
-                _ => throw new ArgumentOutOfRangeException(nameof(flowDirection), flowDirection, null)
+                EFlowDirection.CenterToCenter => new TimeConfig(1, ETimeType.WorkDay),
+				_ => throw new ArgumentOutOfRangeException(nameof(flowDirection), flowDirection, null)
             };
 
             return CalcEndTime(beginTime, timeConfig, acceptTypeCode);