From f225a90acdf4887eeb0f433ad8f9f30b8495c694 Mon Sep 17 00:00:00 2001 From: feng <279202647@qq.com> Date: Mon, 6 Dec 2021 17:58:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E4=BB=BB=E5=8A=A1=E6=B1=A0?= =?UTF-8?q?=E9=9A=94=E5=A4=A9=E5=88=86=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../05.Coldairarrow.Api.csproj | 1 + .../HuiYan/pricetasklogController.cs | 12 +- src/Coldairarrow.Api/Startup.cs | 9 +- .../HuiYan/pricetasklogBusiness.cs | 121 ++++++++++++++++-- src/Coldairarrow.Entity/DTO/PriceUserCount.cs | 25 ++++ .../HuiYan/IpricetasklogBusiness.cs | 2 + 6 files changed, 152 insertions(+), 18 deletions(-) create mode 100644 src/Coldairarrow.Entity/DTO/PriceUserCount.cs diff --git a/src/Coldairarrow.Api/05.Coldairarrow.Api.csproj b/src/Coldairarrow.Api/05.Coldairarrow.Api.csproj index ec2bb6f..2681e9e 100644 --- a/src/Coldairarrow.Api/05.Coldairarrow.Api.csproj +++ b/src/Coldairarrow.Api/05.Coldairarrow.Api.csproj @@ -26,6 +26,7 @@ + diff --git a/src/Coldairarrow.Api/Controllers/HuiYan/pricetasklogController.cs b/src/Coldairarrow.Api/Controllers/HuiYan/pricetasklogController.cs index 0fd67df..04aba99 100644 --- a/src/Coldairarrow.Api/Controllers/HuiYan/pricetasklogController.cs +++ b/src/Coldairarrow.Api/Controllers/HuiYan/pricetasklogController.cs @@ -1,4 +1,5 @@ -using Coldairarrow.Business.HuiYan; +using AttributeQuartz; +using Coldairarrow.Business.HuiYan; using Coldairarrow.Business.MDS; using Coldairarrow.Entity.DTO; using Coldairarrow.Entity.HuiYan; @@ -124,5 +125,14 @@ namespace Coldairarrow.Api.Controllers.HuiYan { return _pricetasklogBus.SetState(id, state); } + + [HttpGet("/task/dayrun")] + [AllowAnonymous] + [QuartzTask(CronExpression = "0 0 7 * * ?", Router ="/task/dayrun")] + public AjaxResult DayTaskSet() + { + _pricetasklogBus.DayTaskSet(); + return Success(); + } } } \ No newline at end of file diff --git a/src/Coldairarrow.Api/Startup.cs b/src/Coldairarrow.Api/Startup.cs index 69d583d..bb99667 100644 --- a/src/Coldairarrow.Api/Startup.cs +++ b/src/Coldairarrow.Api/Startup.cs @@ -1,4 +1,5 @@ -using Coldairarrow.Util; +using AttributeQuartz; +using Coldairarrow.Util; using Coldairarrow.Util.DataAccess; using EFCore.Sharding; using Microsoft.AspNetCore.Builder; @@ -58,7 +59,8 @@ namespace Coldairarrow.Api }); //jwt - services.AddJwt(_configuration); + services.AddJwt(_configuration); + services.AddAttributeQuartz(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) @@ -92,7 +94,8 @@ namespace Coldairarrow.Api }) .UseOpenApi()//添加swagger生成api文档(默认路由文档 /swagger/v1/swagger.json) .UseSwaggerUi3()//添加Swagger UI到请求管道中(默认路由: /swagger). - ; + ; + app.StartAttributeQuartz(_configuration["WebRootUrl"]); } } } diff --git a/src/Coldairarrow.Business/HuiYan/pricetasklogBusiness.cs b/src/Coldairarrow.Business/HuiYan/pricetasklogBusiness.cs index 7a67759..f0d465d 100644 --- a/src/Coldairarrow.Business/HuiYan/pricetasklogBusiness.cs +++ b/src/Coldairarrow.Business/HuiYan/pricetasklogBusiness.cs @@ -120,6 +120,89 @@ namespace Coldairarrow.Business.HuiYan return Success(new { MaxCount = user.MaxPriceTaskCount, Count = user.MaxPriceTaskCount - nowCount }); } + public AjaxResult DayTaskSet() + { + var users = _iuserBusiness.GetPriceTaskUserList().ToList(); + + Expression> select = (a, b) => new PricetaskUser() + { + UserName = a.UserName, + MaxTaskCount = a.MaxPriceTaskCount, + Uid = a.Id + }; + + select = select.BuildExtendSelectExpre(); + + var q_User = Db.GetIQueryable().Where(c => c.CreateTime.Date == DateTime.Now.Date || c.CreateTime == DateTime.MinValue); + + var q = from a in users + join b in q_User on a.Id equals b.UserId into ab + from b in ab.DefaultIfEmpty() + select @select.Invoke(a, b); + + + var userList = q.GroupBy(c => c.Uid).Where(c => c.Count() < c.FirstOrDefault()?.MaxTaskCount).Select(c => new PriceUserCount(c.Key, c.Count(), c.Max(c => c.MaxTaskCount) ?? 30)).ToList(); + + + var teamItemList = Db.GetIQueryable().Where(c => c.State == (int)TeamItemState.已发布比价 && string.IsNullOrEmpty(c.PriceTaskUserId)).ToList(); + + + + var result = Db.RunTransaction(() => + { + + List pricetasklogs = new List(); + + teamItemList.ForEach(teamItem => + { + + var user = userList.Where(c => c.Count < c.MaxCount).OrderBy(c => c.Count).FirstOrDefault(); + + if (user == null) + { + return; + } + + teamItem.PriceTaskUserId = user.UserId; + + user.Count += 1; + + + pricetasklogs.Add(new pricetasklog() + { + CreateTime = DateTime.Now, + Id = IdHelper.GetId(), + CreatorId = _operator.UserId, + Deleted = false, + ItemId = teamItem.ItemId, + UserId = user.UserId, + State = PriceTaskState.待比价, + TeamItemId = teamItem.Id + }); + + }); + + int row = Db.Insert(pricetasklogs); + if (row <= 0) + { + throw new Exception("执行定时任务分配错误!"); + } + row = Db.Update(teamItemList, new List() { "PriceTaskUserId" }); + if (row <= 0) + { + throw new Exception("执行定时任务分配更新任务信息错误!"); + } + }); + + + if (!result.Success) + { + DingHelper.DingApiHelper.Main.SendNotify("齐越慧眼比价系统任务分配异常!"); + } + + return Success("任务分配成功!"); + } + public AjaxResult CanelTask(string teamItemId) { var teamItem = Db.GetIQueryable().FirstOrDefault(c => c.Id == teamItemId && c.UserId == _operator.UserId); @@ -199,7 +282,7 @@ namespace Coldairarrow.Business.HuiYan DingHelper.DingApiHelper.Main.SendNotify("齐越慧眼比价系统任务量已达上限!"); //钉钉推送 - return Error("当前任务量已超过任务池可用任务量!"); + // return Error("当前任务量已超过任务池可用任务量!"); } @@ -207,27 +290,37 @@ namespace Coldairarrow.Business.HuiYan { int row = Db.Update(c => c.Id == teamItem.Id, (item) => { - item.PriceTaskUserId = user.Id; + if (user != null) + { + item.PriceTaskUserId = user.Id; + } + else { + item.PriceTaskUserId = null; + } + item.State = (int)TeamItemState.已发布比价; }); if (row <= 0) throw new Exception("系统繁忙!"); - row = Db.Insert(new pricetasklog() + if (user != null) { - CreateTime = DateTime.Now, - Id = IdHelper.GetId(), - CreatorId = _operator.UserId, - Deleted = false, - ItemId = teamItem.ItemId, - UserId = user.Id, - State = PriceTaskState.待比价, - TeamItemId = teamItem.Id - }); + row = Db.Insert(new pricetasklog() + { + CreateTime = DateTime.Now, + Id = IdHelper.GetId(), + CreatorId = _operator.UserId, + Deleted = false, + ItemId = teamItem.ItemId, + UserId = user.Id, + State = PriceTaskState.待比价, + TeamItemId = teamItem.Id + }); - if (row <= 0) - throw new Exception("系统任务繁忙!"); + if (row <= 0) + throw new Exception("系统任务繁忙!"); + } }); diff --git a/src/Coldairarrow.Entity/DTO/PriceUserCount.cs b/src/Coldairarrow.Entity/DTO/PriceUserCount.cs new file mode 100644 index 0000000..2bb68e3 --- /dev/null +++ b/src/Coldairarrow.Entity/DTO/PriceUserCount.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Coldairarrow.Entity.DTO +{ + public class PriceUserCount + { + + public int Count { get; set; } + + public string UserId { get; set; } + + public int MaxCount { get; set; } + + public PriceUserCount(string id,int count,int maxCount) + { + MaxCount = maxCount; + Count = count; + UserId = id; + } + } +} diff --git a/src/Coldairarrow.IBusiness/HuiYan/IpricetasklogBusiness.cs b/src/Coldairarrow.IBusiness/HuiYan/IpricetasklogBusiness.cs index c728861..8df3499 100644 --- a/src/Coldairarrow.IBusiness/HuiYan/IpricetasklogBusiness.cs +++ b/src/Coldairarrow.IBusiness/HuiYan/IpricetasklogBusiness.cs @@ -21,5 +21,7 @@ namespace Coldairarrow.Business.HuiYan AjaxResult CanelTask(string teamItemId); AjaxResult SetState(string id, int state); AjaxResult GetMyCount(); + + AjaxResult DayTaskSet(); } } \ No newline at end of file