Browse Source

加入任务池隔天分配

master
feng 4 years ago
parent
commit
f225a90acd
  1. 1
      src/Coldairarrow.Api/05.Coldairarrow.Api.csproj
  2. 12
      src/Coldairarrow.Api/Controllers/HuiYan/pricetasklogController.cs
  3. 9
      src/Coldairarrow.Api/Startup.cs
  4. 121
      src/Coldairarrow.Business/HuiYan/pricetasklogBusiness.cs
  5. 25
      src/Coldairarrow.Entity/DTO/PriceUserCount.cs
  6. 2
      src/Coldairarrow.IBusiness/HuiYan/IpricetasklogBusiness.cs

1
src/Coldairarrow.Api/05.Coldairarrow.Api.csproj

@ -26,6 +26,7 @@
</Target> </Target>
<ItemGroup> <ItemGroup>
<PackageReference Include="AttributeQuartz.Net" Version="1.0.0" />
<PackageReference Include="Colder.Logging.Serilog" Version="1.2.17" /> <PackageReference Include="Colder.Logging.Serilog" Version="1.2.17" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.5" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.5" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.5" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.5" />

12
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.Business.MDS;
using Coldairarrow.Entity.DTO; using Coldairarrow.Entity.DTO;
using Coldairarrow.Entity.HuiYan; using Coldairarrow.Entity.HuiYan;
@ -124,5 +125,14 @@ namespace Coldairarrow.Api.Controllers.HuiYan
{ {
return _pricetasklogBus.SetState(id, state); return _pricetasklogBus.SetState(id, state);
} }
[HttpGet("/task/dayrun")]
[AllowAnonymous]
[QuartzTask(CronExpression = "0 0 7 * * ?", Router ="/task/dayrun")]
public AjaxResult DayTaskSet()
{
_pricetasklogBus.DayTaskSet();
return Success();
}
} }
} }

9
src/Coldairarrow.Api/Startup.cs

@ -1,4 +1,5 @@
using Coldairarrow.Util; using AttributeQuartz;
using Coldairarrow.Util;
using Coldairarrow.Util.DataAccess; using Coldairarrow.Util.DataAccess;
using EFCore.Sharding; using EFCore.Sharding;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
@ -58,7 +59,8 @@ namespace Coldairarrow.Api
}); });
//jwt //jwt
services.AddJwt(_configuration); services.AddJwt(_configuration);
services.AddAttributeQuartz();
} }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
@ -92,7 +94,8 @@ namespace Coldairarrow.Api
}) })
.UseOpenApi()//添加swagger生成api文档(默认路由文档 /swagger/v1/swagger.json) .UseOpenApi()//添加swagger生成api文档(默认路由文档 /swagger/v1/swagger.json)
.UseSwaggerUi3()//添加Swagger UI到请求管道中(默认路由: /swagger). .UseSwaggerUi3()//添加Swagger UI到请求管道中(默认路由: /swagger).
; ;
app.StartAttributeQuartz(_configuration["WebRootUrl"]);
} }
} }
} }

121
src/Coldairarrow.Business/HuiYan/pricetasklogBusiness.cs

@ -120,6 +120,89 @@ namespace Coldairarrow.Business.HuiYan
return Success(new { MaxCount = user.MaxPriceTaskCount, Count = user.MaxPriceTaskCount - nowCount }); return Success(new { MaxCount = user.MaxPriceTaskCount, Count = user.MaxPriceTaskCount - nowCount });
} }
public AjaxResult DayTaskSet()
{
var users = _iuserBusiness.GetPriceTaskUserList().ToList();
Expression<Func<user, pricetasklog, PricetaskUser>> select = (a, b) => new PricetaskUser()
{
UserName = a.UserName,
MaxTaskCount = a.MaxPriceTaskCount,
Uid = a.Id
};
select = select.BuildExtendSelectExpre();
var q_User = Db.GetIQueryable<pricetasklog>().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<teamitems>().Where(c => c.State == (int)TeamItemState. && string.IsNullOrEmpty(c.PriceTaskUserId)).ToList();
var result = Db.RunTransaction(() =>
{
List<pricetasklog> pricetasklogs = new List<pricetasklog>();
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<string>() { "PriceTaskUserId" });
if (row <= 0)
{
throw new Exception("执行定时任务分配更新任务信息错误!");
}
});
if (!result.Success)
{
DingHelper.DingApiHelper.Main.SendNotify("齐越慧眼比价系统任务分配异常!");
}
return Success("任务分配成功!");
}
public AjaxResult CanelTask(string teamItemId) public AjaxResult CanelTask(string teamItemId)
{ {
var teamItem = Db.GetIQueryable<teamitems>().FirstOrDefault(c => c.Id == teamItemId && c.UserId == _operator.UserId); var teamItem = Db.GetIQueryable<teamitems>().FirstOrDefault(c => c.Id == teamItemId && c.UserId == _operator.UserId);
@ -199,7 +282,7 @@ namespace Coldairarrow.Business.HuiYan
DingHelper.DingApiHelper.Main.SendNotify("齐越慧眼比价系统任务量已达上限!"); DingHelper.DingApiHelper.Main.SendNotify("齐越慧眼比价系统任务量已达上限!");
//钉钉推送 //钉钉推送
return Error("当前任务量已超过任务池可用任务量!"); // return Error("当前任务量已超过任务池可用任务量!");
} }
@ -207,27 +290,37 @@ namespace Coldairarrow.Business.HuiYan
{ {
int row = Db.Update<teamitems>(c => c.Id == teamItem.Id, (item) => int row = Db.Update<teamitems>(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.; item.State = (int)TeamItemState.;
}); });
if (row <= 0) if (row <= 0)
throw new Exception("系统繁忙!"); throw new Exception("系统繁忙!");
row = Db.Insert(new pricetasklog() if (user != null)
{ {
CreateTime = DateTime.Now, row = Db.Insert(new pricetasklog()
Id = IdHelper.GetId(), {
CreatorId = _operator.UserId, CreateTime = DateTime.Now,
Deleted = false, Id = IdHelper.GetId(),
ItemId = teamItem.ItemId, CreatorId = _operator.UserId,
UserId = user.Id, Deleted = false,
State = PriceTaskState., ItemId = teamItem.ItemId,
TeamItemId = teamItem.Id UserId = user.Id,
}); State = PriceTaskState.,
TeamItemId = teamItem.Id
});
if (row <= 0) if (row <= 0)
throw new Exception("系统任务繁忙!"); throw new Exception("系统任务繁忙!");
}
}); });

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

2
src/Coldairarrow.IBusiness/HuiYan/IpricetasklogBusiness.cs

@ -21,5 +21,7 @@ namespace Coldairarrow.Business.HuiYan
AjaxResult CanelTask(string teamItemId); AjaxResult CanelTask(string teamItemId);
AjaxResult SetState(string id, int state); AjaxResult SetState(string id, int state);
AjaxResult GetMyCount(); AjaxResult GetMyCount();
AjaxResult DayTaskSet();
} }
} }
Loading…
Cancel
Save