Browse Source

采购超时统计

yijia
shanji 2 years ago
parent
commit
e9a3a60369
  1. 50
      BBWYB.Server.API/Controllers/TimeLimitTaskController.cs
  2. 24
      BBWYB.Server.API/Controllers/TimeLimitTaskSyncController.cs
  3. 24
      BBWYB.Server.Business/Sync/TimeLimitTaskSyncBusiness.cs
  4. 98
      BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs
  5. 31
      BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeLimitTaskRequest.cs
  6. 14
      BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeOutRequest.cs
  7. 9
      BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskListResponse.cs
  8. 22
      BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskStatisticsResponse.cs

50
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;
}
/// <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);
}
}
}

24
BBWYB.Server.API/Controllers/TimeLimitTaskSyncController.cs

@ -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();
}
}
}

24
BBWYB.Server.Business/Sync/TimeLimitTaskSyncBusiness.cs

@ -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();
}
}
}

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

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

14
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; }
/// <summary>
/// 店铺Id 可空
/// </summary>
public long? ShopId { get; set; }
}
}

9
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<TimeLimitTaskResponse> ItemList { get; set; }
}
}

22
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; }
/// <summary>
/// 采购超时率(%)
/// </summary>
public double PurchaseTimeOutPercent { get; set; }
/// <summary>
/// 合格证拟定超时量
/// </summary>
public double CertificatesTimeOutCount { get; set; }
/// <summary>
/// 合格证补充超时量
/// </summary>
public double CertificatesSupplementTimeOutCount { get; set; }
}
}
Loading…
Cancel
Save