Browse Source

加入任务池

master
feng 3 years ago
parent
commit
9b5c2c5b04
  1. 11
      src/Coldairarrow.Api/Controllers/HuiYan/pricetasklogController.cs
  2. 2
      src/Coldairarrow.Api/Controllers/HuiYan/teamitemsController.cs
  3. 168
      src/Coldairarrow.Business/HuiYan/pricetasklogBusiness.cs
  4. 13
      src/Coldairarrow.Business/HuiYan/teamitemsBusiness.cs
  5. 4
      src/Coldairarrow.Entity/HuiYan/teamitems.cs
  6. 2
      src/Coldairarrow.IBusiness/HuiYan/IpricetasklogBusiness.cs
  7. 2
      客户端/齐越慧眼/齐越慧眼/vuepage/client/src/api/http.js
  8. 42
      客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/pricetask/Index.vue

11
src/Coldairarrow.Api/Controllers/HuiYan/pricetasklogController.cs

@ -144,5 +144,16 @@ namespace Coldairarrow.Api.Controllers.HuiYan
{
return _pricetasklogBus.GetTaskCount();
}
/// <summary>
/// 接取任务
/// </summary>
/// <param name="teamItemId"></param>
/// <returns></returns>
[HttpPost]
public AjaxResult AcceptTask(string teamItemId)
{
return _pricetasklogBus.AcceptTask(teamItemId);
}
}
}

2
src/Coldairarrow.Api/Controllers/HuiYan/teamitemsController.cs

@ -129,5 +129,7 @@ namespace Coldairarrow.Api.Controllers.HuiYan
{
return _teamitemsBus.GetMyTaskInfo(type, start, end);
}
}
}

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

@ -138,82 +138,6 @@ namespace Coldairarrow.Business.HuiYan
CheckIsTimeOut();
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("任务分配成功!");
}
@ -289,86 +213,74 @@ namespace Coldairarrow.Business.HuiYan
return Error("任务不存在!");
}
var users = _iuserBusiness.GetPriceTaskUserList().ToList();
Expression<Func<user, pricetasklog, PricetaskUser>> select = (a, b) => new PricetaskUser()
var result = Db.RunTransaction(() =>
{
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);
int row = Db.Update<teamitems>(c => c.Id == teamItem.Id, (item) =>
{
item.State = (int)TeamItemState.;
item.PriceTaskCreateDate = DateTime.Now;
});
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);
if (row <= 0)
throw new Exception("系统繁忙!");
//获取当日可分配的一个用户
var user = q.GroupBy(c => c.Uid).Where(c => c.Count() < c.FirstOrDefault()?.MaxTaskCount).Select(c => new { Id = c.Key, Count = c.Count() }).OrderBy(c => c.Count).FirstOrDefault();
});
if (user == null)
if (result.Success)
{
return Success("发布任务成功!");
}
DingHelper.DingApiHelper.Main.SendNotify("齐越慧眼比价系统任务量已达上限!");
return Error(result.ex.Message);
}
//钉钉推送
// return Error("当前任务量已超过任务池可用任务量!");
}
public AjaxResult AcceptTask(string teamItemId)
{
var teamItem = Db.GetIQueryable<teamitems>().FirstOrDefault(c => c.Id == teamItemId);
if (teamItem == null)
{
return Error("任务不存在!");
}
var result = Db.RunTransaction(() =>
{
int row = Db.Update<teamitems>(c => c.Id == teamItem.Id, (item) =>
var price = new pricetasklog()
{
if (user != null)
{
item.PriceTaskUserId = user.Id;
}
else {
item.PriceTaskUserId = null;
}
CreateTime = DateTime.Now,
Id = IdHelper.GetId(),
CreatorId = _operator.UserId,
Deleted = false,
ItemId = teamItem.ItemId,
UserId = _operator.UserId,
State = PriceTaskState.,
TeamItemId = teamItem.Id
};
int row = Db.Insert(price);
item.State = (int)TeamItemState.;
if (row <= 0)
throw new Exception("任务已被接取!");
row = Db.Update<teamitems>(c => c.Id == teamItem.Id, (item) =>
{
item.PriceTaskUserId =_operator.UserId;
});
if (row <= 0)
throw new Exception("系统繁忙!");
if (user != null)
{
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 (result.Success)
{
return Success("发布任务成功!");
return Success("接取任务成功!");
}
return Error(result.ex.Message);
}
public AjaxResult SetState(string id, int state)
{

13
src/Coldairarrow.Business/HuiYan/teamitemsBusiness.cs

@ -125,6 +125,19 @@ namespace Coldairarrow.Business.HuiYan
where = where.And(c => c.State == state);
}
}
if (state == 4)
{
var task = q.Where(c=> c.State == (int)TeamItemState.&&string.IsNullOrEmpty(c.PriceTaskUserId)).OrderBy(c=>c.PriceTaskCreateDate).FirstOrDefault();
List<TeamitemDto> result= new List<TeamitemDto>();
if (task != null)
{
result.Add(task);
}
return new PageResult<TeamitemDto>() { Data = result, Total = 1, Success = true };
}
}
where = where.AndIf(!string.IsNullOrEmpty(keyWord), d => string.IsNullOrEmpty(d.CatName) ? true : d.CatName.Contains(keyWord));

4
src/Coldairarrow.Entity/HuiYan/teamitems.cs

@ -125,5 +125,9 @@ namespace Coldairarrow.Entity.HuiYan
/// 完成时间
/// </summary>
public DateTime? UpdateDate { get; set; }
/// <summary>
/// 比价发布日期
/// </summary>
public DateTime? PriceTaskCreateDate { get; set; }
}
}

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

@ -23,5 +23,7 @@ namespace Coldairarrow.Business.HuiYan
AjaxResult GetMyCount();
AjaxResult DayTaskSet();
AjaxResult AcceptTask(string teamItemId);
}
}

2
客户端/齐越慧眼/齐越慧眼/vuepage/client/src/api/http.js

@ -19,7 +19,7 @@ else if (process.env.NODE_ENV == 'production') {
let ipAddress = axios.defaults.baseURL;
//axios.defaults.baseURL = 'http://localhost:5000/';
axios.defaults.baseURL = 'http://localhost:5000/';
//axios.defaults.baseURL = 'http://hyapi.qiyue666.com/';
axios.interceptors.request.use((config) => {

42
客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/pricetask/Index.vue

@ -1,6 +1,11 @@
<template>
<div class="about">
<a-tabs @change="changeTab">
<a-tabs @change="changeTab">
<a-tab-pane
key="4"
tab="任务池"
>
</a-tab-pane>
<a-tab-pane
key="0"
:tab="'待比价(' + stateList.filter((c) => c == 0).length + ')'"
@ -23,7 +28,7 @@
</a-tab-pane>
</a-tabs>
<a-row :gutter="10" style="margin-bottom: 10px">
<a-row :gutter="10" style="margin-bottom: 10px" v-if="currentTab!=4">
<a-col :span="5">
<a-input v-model="catKeyWord" placeholder="搜索品类词"> </a-input>
</a-col>
@ -352,7 +357,7 @@
<a style="text-align: left;" class=" itemtitle" :title="item.Title">{{
item.Title
}}</a>
<div style="text-align: left;">
<div style="text-align: left;" v-if="currentTab!=4">
品类词{{item.CatName}}
</div>
</div>
@ -424,12 +429,21 @@
@click="setState(item.PriceTaskId, 1)"
>修改完成
</a-button>
<a-button
v-if="currentTab==4"
style="margin-left: 10px"
type="primary"
@click="acceptTask(item.Id)"
>加入待比价
</a-button>
</a-col>
<a-col
:span="12"
style="text-align: right"
v-if="item.PriceTaskState != 3"
v-if="item.PriceTaskState != 3&&currentTab!=4"
>
<a-button
style="margin-right: 10px"
@ -522,7 +536,7 @@ export default {
loading: false,
queryParam: { condition: "State", keyword: 0 },
selectedRowKeys: [],
currentTab: "0",
currentTab: "4",
lastEditData: undefined,
catKeyWord: undefined,
extFormList: ["以图搜款"],
@ -639,12 +653,17 @@ export default {
},
getDatas(type) {
var that = this;
var url = "/HuiYan/pricetasklog/GetItems";
if (this.catKeyWord && this.catKeyWord.length > 0) {
url = "/HuiYan/pricetasklog/GetItems?keyword=" + this.catKeyWord;
}
if(type==4)
{
url='/HuiYan/teamitems/GetItems'
}
this.http
.post(url, {
PageIndex: this.pagination.current,
@ -718,6 +737,17 @@ export default {
});
}
},
acceptTask(teamItemId){
this.http.post(`/HuiYan/pricetasklog/AcceptTask?teamItemId=${teamItemId}`).then((res) => {
if (res.Success) {
this.$message.success("操作成功!");
this.getDatas(this.currentTab);
} else {
this.$message.error(res.Msg);
this.getDatas(this.currentTab);
}
});
},
sendPriceTask(id) {
this.http.post(`/HuiYan/pricetasklog/AddTask?id=${id}`).then((res) => {
if (res.Success) {

Loading…
Cancel
Save