Forráskód Böngészése

即将超期查询

田爽 1 éve
szülő
commit
15ebbc2a6d

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

@@ -2398,6 +2398,28 @@ public class OrderController : BaseController
 	#endregion
 
 	#region 超期查询
+	/// <summary>
+	/// 工单超期列表
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <returns></returns>
+	[HttpGet("order/about_expire/list")]
+	public async Task<PagedDto<OrderDto>> AboutList([FromQuery] AboutToExpireListDto dto)
+	{
+		return await _orderRepository.GetAboutToExpireAsync(dto, HttpContext.RequestAborted);
+	}
+
+	/// <summary>
+	/// 工单超期节点列表
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <returns></returns>
+	[HttpGet("order/about_expire_node/list")]
+	public async Task<PagedDto<WorkflowOrderDto>> AboutNodeList([FromQuery] AboutToExpireListDto dto)
+	{
+		return await _orderRepository.GetAboutToExpireNodeAsync(dto, HttpContext.RequestAborted);
+	}
+
 	/// <summary>
 	/// 工单超期列表
 	/// </summary>

+ 65 - 8
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -4,6 +4,7 @@ using System.Drawing.Printing;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using Hotline.Caching.Interfaces;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Identity.Roles;
 using Hotline.Orders;
@@ -18,6 +19,7 @@ using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.Order;
 using MapsterMapper;
 using SqlSugar;
+using XF.Domain.Constants;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
@@ -29,16 +31,19 @@ namespace Hotline.Repository.SqlSugar.Orders
         private readonly IDataPermissionFilterBuilder _dataPermissionFilterBuilder;
         private readonly ITimeLimitDomainService _timeLimitDomainService;
         private readonly IMapper _mapper;
+        private readonly ISystemSettingCacheManager _systemSettingCacheManager;
 
 		public OrderRepository(ISugarUnitOfWork<HotlineDbContext> uow,
             IDataPermissionFilterBuilder dataPermissionFilterBuilder,
             ITimeLimitDomainService timeLimitDomainService,
-            IMapper mapper
+            IMapper mapper,
+            ISystemSettingCacheManager systemSettingCacheManager
 			) : base(uow, dataPermissionFilterBuilder)
         {
             _dataPermissionFilterBuilder = dataPermissionFilterBuilder;
             _timeLimitDomainService = timeLimitDomainService;
             _mapper = mapper;
+            _systemSettingCacheManager = systemSettingCacheManager;
 		}
 
         public async Task<string> AddOrderNavAsync(Order order, CancellationToken cancellationToken)
@@ -131,13 +136,65 @@ namespace Hotline.Repository.SqlSugar.Orders
             return oders;
         }
 
-        /// <summary>
-        /// 已超期列表
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <param name="cancellationToken"></param>
-        /// <returns></returns>
-        public async Task<PagedDto<OrderDto>> GetToExpireAsync(AboutToExpireListDto dto, CancellationToken cancellationToken)
+		/// <summary>
+		/// 即将超期列表
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <param name="cancellationToken"></param>
+		/// <returns></returns>
+		public async Task<PagedDto<OrderDto>> GetAboutToExpireAsync(AboutToExpireListDto dto, CancellationToken cancellationToken)
+		{
+			var setting = _systemSettingCacheManager.GetSetting(SettingConstants.OrderAboutToExpire);
+            var value = setting?.SettingValue[0];
+            value = string.IsNullOrEmpty(value) ? "0" : value;
+			DateTime stTime = DateTime.Now.AddDays(int.Parse(value));
+			stTime = _timeLimitDomainService.WorkDay(DateTime.Now);
+			var (total, items) = await Db.Queryable<Order>()
+				.WhereIF(dto.IsProvince.HasValue, x => x.IsProvince == dto.IsProvince)
+				.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Title.Contains(dto.Keyword!) || x.No.Contains(dto.Keyword!))
+				//.WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No == dto.No)
+				//.WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
+				.Where(x => x.ExpiredTime != null &&
+				(((x.Status == EOrderStatus.Filed || x.Status == EOrderStatus.Published || x.Status == EOrderStatus.Visited) && x.FiledTime > x.ExpiredTime) ||
+				((x.Status != EOrderStatus.Filed && x.Status != EOrderStatus.Published && x.Status != EOrderStatus.Visited) && stTime > x.ExpiredTime.Value)))
+				.OrderByDescending(x => x.CreationTime)
+				.ToPagedListAsync(dto.PageIndex, dto.PageSize, cancellationToken);
+			return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+		}
+
+		/// <summary>
+		/// 即将超期节点列表
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <param name="cancellationToken"></param>
+		/// <returns></returns>
+		public async Task<PagedDto<WorkflowOrderDto>> GetAboutToExpireNodeAsync(AboutToExpireListDto dto, CancellationToken cancellationToken)
+		{
+			var setting = _systemSettingCacheManager.GetSetting(SettingConstants.OrderAboutToExpire);
+			var value = setting?.SettingValue[0];
+			value = string.IsNullOrEmpty(value) ? "0" : value;
+			DateTime stTime = DateTime.Now.AddDays(int.Parse(value));
+			stTime = _timeLimitDomainService.WorkDay(DateTime.Now);
+			RefAsync<int> total = 0;
+			var items = await Db.Queryable<Workflow>()
+				.LeftJoin<Order>((x, o) => x.ExternalId == o.Id)
+				.Where(x => x.ModuleCode == "OrderHandle")
+				.WhereIF(dto.IsProvince.HasValue, (x, o) => o.IsProvince == dto.IsProvince)
+				.WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => o.Title.Contains(dto.Keyword!) || o.No.Contains(dto.Keyword!))
+				.Where((x, o) => (((int)x.Status >= 20 && x.EndTime > x.ExpiredTime) || ((int)x.Status < 20 && stTime > x.ExpiredTime)))
+				.Select((x, o) => new WorkflowOrder { Order = o }, true)
+				.OrderByDescending(x => x.CreationTime)
+				.ToPageListAsync(dto.PageIndex, dto.PageSize, total, cancellationToken);
+			return new PagedDto<WorkflowOrderDto>(total, _mapper.Map<IReadOnlyList<WorkflowOrderDto>>(items));
+		}
+
+		/// <summary>
+		/// 已超期列表
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <param name="cancellationToken"></param>
+		/// <returns></returns>
+		public async Task<PagedDto<OrderDto>> GetToExpireAsync(AboutToExpireListDto dto, CancellationToken cancellationToken)
         {
             DateTime stTime = _timeLimitDomainService.WorkDay(DateTime.Now);
 			var (total, items) = await Db.Queryable<Order>()

+ 2 - 0
src/Hotline/Orders/IOrderRepository.cs

@@ -21,6 +21,8 @@ namespace Hotline.Orders
         Task RemoveOrderFinalityBatchAsync(List<string> ids, CancellationToken cancellationToken);
         Task<PagedDto<OrderDto>> GetToExpireAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
         Task<PagedDto<WorkflowOrderDto>> GetToExpireNodeAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
+        Task<PagedDto<OrderDto>> GetAboutToExpireAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
+        Task<PagedDto<WorkflowOrderDto>> GetAboutToExpireNodeAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
 
 	}
 }