优化生成任务链单号,代码将4层循环优化为3层
This commit is contained in:
@@ -158,8 +158,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
var items = new List<BasLocation>();
|
var items = new List<BasLocation>();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
//var stauts = (int)EnumCarryStatus.空闲;
|
|
||||||
items = await _db.Queryable<BasLocation>().Where(it => it.wh_id == input.warehouse_id && it.is_lock == 0 && it.is_type == "0" && it.is_use == ((int)EnumCarryStatus.空闲).ToString()).OrderBy(it => new { it.layers, it.loc_line, it.loc_column }, OrderByType.Asc).ToListAsync();
|
items = await _db.Queryable<BasLocation>().Where(it => it.wh_id == input.warehouse_id && it.is_lock == 0 && it.is_type == "0" && it.is_use == ((int)EnumCarryStatus.空闲).ToString()).OrderBy(it => new { it.layers, it.loc_line, it.loc_column }, OrderByType.Asc).ToListAsync();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -185,47 +183,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task GenTaskExecute()
|
public async Task GenTaskExecute()
|
||||||
{
|
{
|
||||||
//任务链属性处理内部函数
|
|
||||||
async Task _taskChainAttrHandle(List<WmsDistaskH> items, List<WmsPretaskH> areaPreTasks, int moveNum)
|
|
||||||
{
|
|
||||||
var groupCode = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_TASK_EXECUTE_ENCODE);
|
|
||||||
await Task.Run(() =>
|
|
||||||
{
|
|
||||||
if (moveNum == 1 || (moveNum > areaPreTasks.Count && areaPreTasks.Count == 1))
|
|
||||||
{
|
|
||||||
items.ForEach(x =>
|
|
||||||
{
|
|
||||||
x.is_chain = 0;
|
|
||||||
});
|
|
||||||
items[0].groups = groupCode;
|
|
||||||
items[0].bill_code = $"{groupCode}-1";
|
|
||||||
}
|
|
||||||
else if ((moveNum >= areaPreTasks.Count && areaPreTasks.Count > 1) || moveNum < areaPreTasks.Count)
|
|
||||||
{
|
|
||||||
items.ForEach(x => x.is_chain = 1);
|
|
||||||
var itemsCount = items.Count;
|
|
||||||
var mod = items.Count % moveNum > 0 ? itemsCount / moveNum + 1 : itemsCount / moveNum;
|
|
||||||
var start = 0;
|
|
||||||
var end = Math.Min(itemsCount, moveNum);
|
|
||||||
var arrary = items.ToArray();
|
|
||||||
for (int i = 1; i <= mod; i++)
|
|
||||||
{
|
|
||||||
while (start < itemsCount)
|
|
||||||
{
|
|
||||||
var subArray = arrary[start..end];
|
|
||||||
for (int j = 0, arrLen = subArray.Length; j < arrLen; j++)
|
|
||||||
{
|
|
||||||
subArray[j].groups = groupCode;
|
|
||||||
subArray[j].bill_code = $"{groupCode}-{i}";
|
|
||||||
}
|
|
||||||
start = end;
|
|
||||||
end = Math.Min((end + moveNum), arrary.Length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//获取所有未下发的预任务申请
|
//获取所有未下发的预任务申请
|
||||||
var preTasks = await _db.Queryable<WmsPretaskH>().InnerJoin<WmsCarryH>((a, b) => a.startlocation_id == b.location_id && a.carry_id == b.id)
|
var preTasks = await _db.Queryable<WmsPretaskH>().InnerJoin<WmsCarryH>((a, b) => a.startlocation_id == b.location_id && a.carry_id == b.id)
|
||||||
.InnerJoin<WmsAreaH>((a, b, c) => a.area_id == c.id)
|
.InnerJoin<WmsAreaH>((a, b, c) => a.area_id == c.id)
|
||||||
@@ -256,7 +213,49 @@ namespace Tnb.WarehouseMgr
|
|||||||
if (moveNum >= 1)
|
if (moveNum >= 1)
|
||||||
{
|
{
|
||||||
var areaPreTasks = itGroup.ToList();
|
var areaPreTasks = itGroup.ToList();
|
||||||
await _taskChainAttrHandle(items, areaPreTasks, moveNum);
|
var groupCode = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_TASK_EXECUTE_ENCODE);
|
||||||
|
if (moveNum == 1 || (moveNum > areaPreTasks.Count && areaPreTasks.Count == 1))
|
||||||
|
{
|
||||||
|
items.ForEach(x =>
|
||||||
|
{
|
||||||
|
x.is_chain = 0;
|
||||||
|
});
|
||||||
|
items[0].groups = groupCode;
|
||||||
|
items[0].bill_code = $"{groupCode}-1";
|
||||||
|
}
|
||||||
|
else if ((moveNum >= areaPreTasks.Count && areaPreTasks.Count > 1) || moveNum < areaPreTasks.Count)
|
||||||
|
{
|
||||||
|
items.ForEach(x => x.is_chain = 1);
|
||||||
|
var itemsCount = items.Count;
|
||||||
|
var mod = items.Count % moveNum > 0 ? itemsCount / moveNum + 1 : itemsCount / moveNum;
|
||||||
|
var start = 0;
|
||||||
|
var end = Math.Min(itemsCount, moveNum);
|
||||||
|
var arrary = items.ToArray();
|
||||||
|
var dic = new Dictionary<int, WmsDistaskH[]>();
|
||||||
|
for (int i = 1; i <= mod; i++)
|
||||||
|
{
|
||||||
|
while (start < itemsCount)
|
||||||
|
{
|
||||||
|
var subArray = arrary[start..end];
|
||||||
|
dic[i] = subArray;
|
||||||
|
//for (int j = 0, arrLen = subArray.Length; j < arrLen; j++)
|
||||||
|
//{
|
||||||
|
// subArray[j].groups = groupCode;
|
||||||
|
// subArray[j].bill_code = $"{groupCode}-{i}";
|
||||||
|
//}
|
||||||
|
start = end;
|
||||||
|
end = Math.Min((end + moveNum), arrary.Length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (var (k, v) in dic)
|
||||||
|
{
|
||||||
|
foreach (var it in v)
|
||||||
|
{
|
||||||
|
it.groups = groupCode;
|
||||||
|
it.bill_code = $"{groupCode}-{k}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (preTaskCodes?.Count > 0)
|
if (preTaskCodes?.Count > 0)
|
||||||
{
|
{
|
||||||
@@ -621,6 +620,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
List<WmsPointH> results = new() { startObj };
|
List<WmsPointH> results = new() { startObj };
|
||||||
if (points?.Count > 0)
|
if (points?.Count > 0)
|
||||||
{
|
{
|
||||||
|
points.Where(it => result.Contains(it.id));
|
||||||
foreach (var i in result)
|
foreach (var i in result)
|
||||||
{
|
{
|
||||||
WmsPointH? point = points?.Find(x => x.id == i);
|
WmsPointH? point = points?.Find(x => x.id == i);
|
||||||
|
|||||||
Reference in New Issue
Block a user