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