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. 5
      src/Coldairarrow.Api/Startup.cs
  4. 95
      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>
<ItemGroup>
<PackageReference Include="AttributeQuartz.Net" Version="1.0.0" />
<PackageReference Include="Colder.Logging.Serilog" Version="1.2.17" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" 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.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();
}
}
}

5
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;
@ -59,6 +60,7 @@ namespace Coldairarrow.Api
//jwt
services.AddJwt(_configuration);
services.AddAttributeQuartz();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
@ -93,6 +95,7 @@ namespace Coldairarrow.Api
.UseOpenApi()//添加swagger生成api文档(默认路由文档 /swagger/v1/swagger.json)
.UseSwaggerUi3()//添加Swagger UI到请求管道中(默认路由: /swagger).
;
app.StartAttributeQuartz(_configuration["WebRootUrl"]);
}
}
}

95
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<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)
{
var teamItem = Db.GetIQueryable<teamitems>().FirstOrDefault(c => c.Id == teamItemId && c.UserId == _operator.UserId);
@ -199,21 +282,30 @@ namespace Coldairarrow.Business.HuiYan
DingHelper.DingApiHelper.Main.SendNotify("齐越慧眼比价系统任务量已达上限!");
//钉钉推送
return Error("当前任务量已超过任务池可用任务量!");
// return Error("当前任务量已超过任务池可用任务量!");
}
var result = Db.RunTransaction(() =>
{
int row = Db.Update<teamitems>(c => c.Id == teamItem.Id, (item) =>
{
if (user != null)
{
item.PriceTaskUserId = user.Id;
}
else {
item.PriceTaskUserId = null;
}
item.State = (int)TeamItemState.;
});
if (row <= 0)
throw new Exception("系统繁忙!");
if (user != null)
{
row = Db.Insert(new pricetasklog()
{
CreateTime = DateTime.Now,
@ -228,6 +320,7 @@ namespace Coldairarrow.Business.HuiYan
if (row <= 0)
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 SetState(string id, int state);
AjaxResult GetMyCount();
AjaxResult DayTaskSet();
}
}
Loading…
Cancel
Save