8 changed files with 224 additions and 48 deletions
@ -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; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 检查任务过期
|
||||
|
/// </summary>
|
||||
|
[HttpPost] |
||||
|
[AllowAnonymous] |
||||
|
public void CheckTask() |
||||
|
{ |
||||
|
timeLimitTaskBusiness.CheckTask(); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 查询限时任务列表
|
||||
|
/// </summary>
|
||||
|
/// <param name="request"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost] |
||||
|
public TimeLimitTaskListResponse QueryTimeLimitTask([FromBody] QueryTimeLimitTaskRequest request) |
||||
|
{ |
||||
|
return timeLimitTaskBusiness.QueryTimeLimitTask(request); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 限时任务统计
|
||||
|
/// </summary>
|
||||
|
/// <param name="request"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost] |
||||
|
public IList<TimeLimitTaskStatisticsResponse> TimeOutStatistics(QueryTimeOutRequest request) |
||||
|
{ |
||||
|
return timeLimitTaskBusiness.TimeOutStatistics(request); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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; |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 检查任务过期
|
|
||||
/// </summary>
|
|
||||
[HttpPost] |
|
||||
public void CheckTask() |
|
||||
{ |
|
||||
timeLimitTaskSyncBusiness.CheckTask(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
@ -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<TimeLimitTask>().Set(t => t.IsTimely, false) |
|
||||
.Where(t => t.CompletionTime == null) |
|
||||
.Where(t => t.ExpirationTime < DateTime.Now) |
|
||||
.ExecuteAffrows(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
@ -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<TimeLimitTask>().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<TimeLimitTask>().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<TimeLimitTaskResponse>(); |
||||
|
return new TimeLimitTaskListResponse() |
||||
|
{ |
||||
|
Count = count, |
||||
|
ItemList = list |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
public IList<TimeLimitTaskStatisticsResponse> TimeOutStatistics(QueryTimeOutRequest request) |
||||
|
{ |
||||
|
if (request.StartDate > request.EndDate) |
||||
|
throw new BusinessException("开始时间不能大于结束时间"); |
||||
|
request.EndDate = request.EndDate.Date.AddDays(1).AddSeconds(-1); |
||||
|
|
||||
|
var list = new List<TimeLimitTaskStatisticsResponse>(); |
||||
|
|
||||
|
var shopIdList = new List<long>(); |
||||
|
|
||||
|
#region 采购超时率
|
||||
|
var purchaseTaskCountGroups = fsql.Select<TimeLimitTask>().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<TimeLimitTask>().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; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 是否完成
|
||||
|
/// </summary>
|
||||
|
public bool IsCompleted { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 店铺Id (可空)
|
||||
|
/// </summary>
|
||||
|
public long? ShopId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 页码,1开始
|
||||
|
/// </summary>
|
||||
|
public int PageIndex { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 每页记录数
|
||||
|
/// </summary>
|
||||
|
public int PageSize { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
namespace BBWYB.Server.Model.Dto |
||||
|
{ |
||||
|
public class QueryTimeOutRequest |
||||
|
{ |
||||
|
public DateTime StartDate { get; set; } |
||||
|
|
||||
|
public DateTime EndDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 店铺Id 可空
|
||||
|
/// </summary>
|
||||
|
public long? ShopId { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
namespace BBWYB.Server.Model.Dto |
||||
|
{ |
||||
|
public class TimeLimitTaskListResponse |
||||
|
{ |
||||
|
public long Count { get; set; } |
||||
|
|
||||
|
public IList<TimeLimitTaskResponse> ItemList { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
namespace BBWYB.Server.Model.Dto |
||||
|
{ |
||||
|
public class TimeLimitTaskStatisticsResponse |
||||
|
{ |
||||
|
public long ShopId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 采购超时率(%)
|
||||
|
/// </summary>
|
||||
|
public double PurchaseTimeOutPercent { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 合格证拟定超时量
|
||||
|
/// </summary>
|
||||
|
public double CertificatesTimeOutCount { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 合格证补充超时量
|
||||
|
/// </summary>
|
||||
|
public double CertificatesSupplementTimeOutCount { get; set; } |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue