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; } } }