优化生成任务链单号,代码将4层循环优化为3层
This commit is contained in:
@@ -158,8 +158,6 @@ namespace Tnb.WarehouseMgr
|
||||
var items = new List<BasLocation>();
|
||||
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();
|
||||
|
||||
}
|
||||
@@ -185,47 +183,6 @@ namespace Tnb.WarehouseMgr
|
||||
[HttpPost]
|
||||
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)
|
||||
.InnerJoin<WmsAreaH>((a, b, c) => a.area_id == c.id)
|
||||
@@ -256,7 +213,49 @@ namespace Tnb.WarehouseMgr
|
||||
if (moveNum >= 1)
|
||||
{
|
||||
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)
|
||||
{
|
||||
@@ -621,6 +620,7 @@ namespace Tnb.WarehouseMgr
|
||||
List<WmsPointH> results = new() { startObj };
|
||||
if (points?.Count > 0)
|
||||
{
|
||||
points.Where(it => result.Contains(it.id));
|
||||
foreach (var i in result)
|
||||
{
|
||||
WmsPointH? point = points?.Find(x => x.id == i);
|
||||
|
||||
Reference in New Issue
Block a user