From e9a3a60369c61fd51c6ae44fbcfd4c24397f6ca0 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 10 Jul 2023 22:40:45 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E8=B6=85=E6=97=B6=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/TimeLimitTaskController.cs | 50 ++++++++++ .../TimeLimitTaskSyncController.cs | 24 ----- .../Sync/TimeLimitTaskSyncBusiness.cs | 24 ----- .../TimeLimitTask/TimeLimitTaskBusiness.cs | 98 +++++++++++++++++++ .../QueryTimeLimitTaskRequest.cs | 31 ++++++ .../TimeLimitTask/QueryTimeOutRequest.cs | 14 +++ .../TimeLimitTaskListResponse.cs | 9 ++ .../TimeLimitTaskStatisticsResponse.cs | 22 +++++ 8 files changed, 224 insertions(+), 48 deletions(-) create mode 100644 BBWYB.Server.API/Controllers/TimeLimitTaskController.cs delete mode 100644 BBWYB.Server.API/Controllers/TimeLimitTaskSyncController.cs delete mode 100644 BBWYB.Server.Business/Sync/TimeLimitTaskSyncBusiness.cs create mode 100644 BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs create mode 100644 BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeLimitTaskRequest.cs create mode 100644 BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeOutRequest.cs create mode 100644 BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskListResponse.cs create mode 100644 BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskStatisticsResponse.cs diff --git a/BBWYB.Server.API/Controllers/TimeLimitTaskController.cs b/BBWYB.Server.API/Controllers/TimeLimitTaskController.cs new file mode 100644 index 0000000..f9c0282 --- /dev/null +++ b/BBWYB.Server.API/Controllers/TimeLimitTaskController.cs @@ -0,0 +1,50 @@ +using BBWYB.Server.Business; +using BBWYB.Server.Model.Dto; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace BBWYB.Server.API.Controllers +{ + [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] + public class TimeLimitTaskController : BaseApiController + { + private TimeLimitTaskBusiness timeLimitTaskBusiness; + public TimeLimitTaskController(IHttpContextAccessor httpContextAccessor, TimeLimitTaskBusiness timeLimitTaskBusiness) : base(httpContextAccessor) + { + this.timeLimitTaskBusiness = timeLimitTaskBusiness; + } + + /// + /// 检查任务过期 + /// + [HttpPost] + [AllowAnonymous] + public void CheckTask() + { + timeLimitTaskBusiness.CheckTask(); + } + + /// + /// 查询限时任务列表 + /// + /// + /// + [HttpPost] + public TimeLimitTaskListResponse QueryTimeLimitTask([FromBody] QueryTimeLimitTaskRequest request) + { + return timeLimitTaskBusiness.QueryTimeLimitTask(request); + } + + /// + /// 限时任务统计 + /// + /// + /// + [HttpPost] + public IList TimeOutStatistics(QueryTimeOutRequest request) + { + return timeLimitTaskBusiness.TimeOutStatistics(request); + } + } +} diff --git a/BBWYB.Server.API/Controllers/TimeLimitTaskSyncController.cs b/BBWYB.Server.API/Controllers/TimeLimitTaskSyncController.cs deleted file mode 100644 index 6b736db..0000000 --- a/BBWYB.Server.API/Controllers/TimeLimitTaskSyncController.cs +++ /dev/null @@ -1,24 +0,0 @@ -using BBWYB.Server.Business.Sync; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; - -namespace BBWYB.Server.API.Controllers -{ - public class TimeLimitTaskSyncController : BaseApiController - { - private TimeLimitTaskSyncBusiness timeLimitTaskSyncBusiness; - public TimeLimitTaskSyncController(IHttpContextAccessor httpContextAccessor, TimeLimitTaskSyncBusiness timeLimitTaskSyncBusiness) : base(httpContextAccessor) - { - this.timeLimitTaskSyncBusiness = timeLimitTaskSyncBusiness; - } - - /// - /// 检查任务过期 - /// - [HttpPost] - public void CheckTask() - { - timeLimitTaskSyncBusiness.CheckTask(); - } - } -} diff --git a/BBWYB.Server.Business/Sync/TimeLimitTaskSyncBusiness.cs b/BBWYB.Server.Business/Sync/TimeLimitTaskSyncBusiness.cs deleted file mode 100644 index 34fc9ce..0000000 --- a/BBWYB.Server.Business/Sync/TimeLimitTaskSyncBusiness.cs +++ /dev/null @@ -1,24 +0,0 @@ -using BBWYB.Common.Log; -using BBWYB.Common.Models; -using BBWYB.Server.Model.Db; -using Yitter.IdGenerator; - -namespace BBWYB.Server.Business.Sync -{ - public class TimeLimitTaskSyncBusiness : BaseBusiness, IDenpendency - { - //private TaskSchedulerManager taskSchedulerManager; - public TimeLimitTaskSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) - { - //this.taskSchedulerManager = taskSchedulerManager; - } - - public void CheckTask() - { - fsql.Update().Set(t => t.IsTimely, false) - .Where(t => t.CompletionTime == null) - .Where(t => t.ExpirationTime < DateTime.Now) - .ExecuteAffrows(); - } - } -} diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs new file mode 100644 index 0000000..436af85 --- /dev/null +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs @@ -0,0 +1,98 @@ +using BBWYB.Common.Log; +using BBWYB.Common.Models; +using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Dto; +using Yitter.IdGenerator; + +namespace BBWYB.Server.Business +{ + public class TimeLimitTaskBusiness : BaseBusiness, IDenpendency + { + private VenderBusiness venderBusiness; + public TimeLimitTaskBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, VenderBusiness venderBusiness) : base(fsql, nLogManager, idGenerator) + { + this.venderBusiness = venderBusiness; + } + public void CheckTask() + { + fsql.Update().Set(t => t.IsTimely, false) + .Where(t => t.CompletionTime == null) + .Where(t => t.ExpirationTime < DateTime.Now) + .ExecuteAffrows(); + } + + + public TimeLimitTaskListResponse QueryTimeLimitTask(QueryTimeLimitTaskRequest request) + { + if (request.StartDate > request.EndDate) + throw new BusinessException("开始时间不能大于结束时间"); + if (request.PageSize > 100) + request.PageSize = 100; + + request.EndDate = request.EndDate.Date.AddDays(1).AddSeconds(-1); + var list = fsql.Select().WhereIf(request.ShopId != null, t => t.ShopId == request.ShopId) + .Where(t => t.CreateTme >= request.StartDate && t.CreateTme <= request.EndDate) + .WhereIf(request.IsCompleted, t => t.CompletionTime != null) + .WhereIf(!request.IsCompleted, t => t.CompletionTime == null) + .WhereIf(request.TimeLimitTaskType != null, t => t.TaskType == request.TimeLimitTaskType) + .OrderByDescending(t => t.CreateTme) + .Count(out var count) + .Page(request.PageIndex, request.PageSize) + .ToList(); + return new TimeLimitTaskListResponse() + { + Count = count, + ItemList = list + }; + } + + public IList TimeOutStatistics(QueryTimeOutRequest request) + { + if (request.StartDate > request.EndDate) + throw new BusinessException("开始时间不能大于结束时间"); + request.EndDate = request.EndDate.Date.AddDays(1).AddSeconds(-1); + + var list = new List(); + + var shopIdList = new List(); + + #region 采购超时率 + var purchaseTaskCountGroups = fsql.Select().WhereIf(request.ShopId != null, t => t.ShopId == request.ShopId) + .Where(t => t.CreateTme >= request.StartDate && t.CreateTme <= request.EndDate) + .GroupBy(t => t.ShopId) + .ToList(g => new + { + ShopId = g.Key, + TaskCount = g.Count() + }); + + var purchaseTaskTimOutCountGroups = fsql.Select().WhereIf(request.ShopId != null, t => t.ShopId == request.ShopId) + .Where(t => t.CreateTme >= request.StartDate && t.CreateTme <= request.EndDate) + .Where(t => t.IsTimely == false) + .GroupBy(t => t.ShopId) + .ToList(g => new + { + ShopId = g.Key, + TaskCount = g.Count() + }); + #endregion + + shopIdList.AddRange(purchaseTaskCountGroups.Select(g => g.ShopId.Value).ToList()); + + foreach (var shopId in shopIdList) + { + var response = new TimeLimitTaskStatisticsResponse(); + response.ShopId = shopId; + + var purchaseTaskCount = purchaseTaskCountGroups.FirstOrDefault(x => x.ShopId == response.ShopId)?.TaskCount ?? 0; + var purchaseTaskTimeOutCount = purchaseTaskTimOutCountGroups.FirstOrDefault(x => x.ShopId == response.ShopId)?.TaskCount ?? 0; + + response.PurchaseTimeOutPercent = purchaseTaskCount == 0 ? 0 : Math.Round(1.0 * purchaseTaskTimeOutCount / purchaseTaskCount * 100, 2); + + list.Add(response); + } + + return list; + } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeLimitTaskRequest.cs b/BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeLimitTaskRequest.cs new file mode 100644 index 0000000..3976ade --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeLimitTaskRequest.cs @@ -0,0 +1,31 @@ +namespace BBWYB.Server.Model.Dto +{ + public class QueryTimeLimitTaskRequest + { + public DateTime StartDate { get; set; } + + public DateTime EndDate { get; set; } + + public Enums.TimeLimitTaskType? TimeLimitTaskType { get; set; } + + /// + /// 是否完成 + /// + public bool IsCompleted { get; set; } + + /// + /// 店铺Id (可空) + /// + public long? ShopId { get; set; } + + /// + /// 页码,1开始 + /// + public int PageIndex { get; set; } + + /// + /// 每页记录数 + /// + public int PageSize { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeOutRequest.cs b/BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeOutRequest.cs new file mode 100644 index 0000000..32cf2aa --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeOutRequest.cs @@ -0,0 +1,14 @@ +namespace BBWYB.Server.Model.Dto +{ + public class QueryTimeOutRequest + { + public DateTime StartDate { get; set; } + + public DateTime EndDate { get; set; } + + /// + /// 店铺Id 可空 + /// + public long? ShopId { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskListResponse.cs b/BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskListResponse.cs new file mode 100644 index 0000000..f8be7d9 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskListResponse.cs @@ -0,0 +1,9 @@ +namespace BBWYB.Server.Model.Dto +{ + public class TimeLimitTaskListResponse + { + public long Count { get; set; } + + public IList ItemList { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskStatisticsResponse.cs b/BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskStatisticsResponse.cs new file mode 100644 index 0000000..049ad8b --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskStatisticsResponse.cs @@ -0,0 +1,22 @@ +namespace BBWYB.Server.Model.Dto +{ + public class TimeLimitTaskStatisticsResponse + { + public long ShopId { get; set; } + + /// + /// 采购超时率(%) + /// + public double PurchaseTimeOutPercent { get; set; } + + /// + /// 合格证拟定超时量 + /// + public double CertificatesTimeOutCount { get; set; } + + /// + /// 合格证补充超时量 + /// + public double CertificatesSupplementTimeOutCount { get; set; } + } +}