优化生成任务链单号,代码将4层循环优化为3层

This commit is contained in:
alex
2023-07-25 10:16:41 +08:00
parent 1a01ea378e
commit 0f26a792b4

View File

@@ -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);