齐套、转库单载具表回写任务信息

This commit is contained in:
2024-09-25 11:47:49 +08:00
parent f5040f60da
commit d2b3038cfc
6 changed files with 122 additions and 85 deletions

View File

@@ -58,6 +58,8 @@ using Tnb.WarehouseMgr.Entities.Dto.Queries;
using Tnb.WarehouseMgr.Entities.Entity;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
using Org.BouncyCastle.Bcpg.OpenPgp;
using JNPF.Systems.Entitys.Permission;
namespace Tnb.ProductionMgr
{
@@ -2728,6 +2730,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
List<PrdMoTask> prdMoTasks = await db_WmsMaterialkit.Queryable<PrdMoTask>().Where(r => r.mo_task_status == DictConst.InProgressEnCode
&& !string.IsNullOrEmpty(r.parent_id)).ToListAsync();
LoggerWmsMaterialkit.LogInformation($"查找到进行中的任务单:{string.Join(',', prdMoTasks.Select(r => r.mo_task_code))}");
Dictionary<string, object> workstaiondic = db_WmsMaterialkit.Queryable<OrganizeEntity>().ToDictionary(k => k.Id, v => v.EnCode);
foreach (PrdMoTask prdMoTask in prdMoTasks)
{
List<PrdMoTask> rep_prdMoTasks = prdMoTasks.Where(r => r.workstation_id == prdMoTask.workstation_id && r.id != prdMoTask.id).ToList();
@@ -2793,23 +2797,86 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的生产Bom id{prdMoTask.bom_id}下的物料id{input.material_id}在物料档案中不存在");
continue;
}
WmsMaterialkitRecordD wmsMaterialkitRecordD = new WmsMaterialkitRecordD();
wmsMaterialkitRecordD.create_id = WmsWareHouseConst.AdministratorUserId;
wmsMaterialkitRecordD.create_time = DateTime.Now;
wmsMaterialkitRecordD.bill_id = wmsMaterialkitRecordH.id;
wmsMaterialkitRecordD.material_id = material.id;
wmsMaterialkitRecordD.material_code = material.code;
wmsMaterialkitRecordD.material_name = material.name;
wmsMaterialkitRecordD.material_specification = material.material_specification;
wmsMaterialkitRecordD.unit_code = material.unit_id;
wmsMaterialkitRecordD.plan_qty = prdMoTask.scheduled_qty * input.denominator / input.molecule;
wmsMaterialkitRecordD.yxf_qty = 0;
wmsMaterialkitRecordD.molecule = input.molecule;
wmsMaterialkitRecordD.denominator = input.denominator;
wmsMaterialkitRecordD.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
wmsMaterialkitRecordD.times = 0;
wmsMaterialkitRecordD.total_time = 0;
wmsMaterialkitRecordDs.Add(wmsMaterialkitRecordD);
// 暂存仓库存
var zccinventory = await db_WmsMaterialkit.Queryable<WmsCarryH>()
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
.InnerJoin<WmsCarryD>((a, b, c) => a.id == c.carry_id)
.InnerJoin<WmsCarryCode>((a, b, c, d) => c.membercarry_id == d.carry_id)
.InnerJoin<BasMaterial>((a, b, c, d, e) => d.material_id == e.id)
.Where((a, b, c, d, e) => b.wh_id == WmsWareHouseConst.WAREHOUSE_ZCC_ID && e.id == material.id && a.work_station == workstaiondic[prdMoTask.workstation_id].ToString())
.Select((a, b, c, d, e) => new customInventoryEntity
{
material_id = e.id,
material_code = e.code,
material_name = e.name,
material_specification = e.material_specification,
codeqty = d.codeqty,
unit_code = d.unit_id
}).ToListAsync();
// 正在配送
var inroadinventory = await db_WmsMaterialkit.Queryable<WmsPretaskH>()
.InnerJoin<WmsCarryH>((a, b) => a.carry_id == b.id)
.InnerJoin<WmsCarryCode>((a, b, c) => c.carry_id == b.id)
.InnerJoin<BasMaterial>((a, b, c, d) => d.id == c.material_id)
.InnerJoin<WmsMaterialTransferCarry>((a, b, c, d, e) => a.id == e.pretask_id)
.InnerJoin<WmsMaterialTransferD>((a, b, c, d, e, f) => e.mat_bill_id == f.id)
.Where((a, b, c, d, e, f) => a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID && a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
&& (a.endlocation_id == WmsWareHouseConst.ZZCSSX121009 || a.endlocation_id == WmsWareHouseConst.ZZCSSX121010) && d.id == material.id && f.station_code == workstaiondic[prdMoTask.workstation_id].ToString())
.Select((a, b, c, d) => new customInventoryEntity
{
material_id = d.id,
material_code = d.code,
material_name = d.name,
material_specification = d.material_specification,
codeqty = c.codeqty,
unit_code = c.unit_id
}).ToListAsync();
List<customInventoryEntity> inventory = new List<customInventoryEntity>();
inventory.AddRange(zccinventory);
inventory.AddRange(inroadinventory);
inventory.GroupBy(g => new { g.material_id, g.material_code, g.material_name, g.material_specification, g.unit_code }).Select(g =>
{
customInventoryEntity newinventory = new customInventoryEntity();
newinventory.material_id = g.Key.material_id;
newinventory.material_code = g.Key.material_code;
newinventory.material_name = g.Key.material_name;
newinventory.material_specification = g.Key.material_specification;
newinventory.unit_code = g.Key.unit_code;
newinventory.codeqty = inventory.Where(r => r.material_id == newinventory.material_id && r.unit_code == newinventory.unit_code).Sum(s => s.codeqty);
return newinventory;
});
// 查询已有库存 (多工单情况下要考虑库存是否被其它工单预留 暂定)
decimal? exists_qty = inventory.Sum(r => r.codeqty);
if (exists_qty < prdMoTask.scheduled_qty * input.denominator / input.molecule)
{
WmsMaterialkitRecordD wmsMaterialkitRecordD = new WmsMaterialkitRecordD();
wmsMaterialkitRecordD.create_id = WmsWareHouseConst.AdministratorUserId;
wmsMaterialkitRecordD.create_time = DateTime.Now;
wmsMaterialkitRecordD.bill_id = wmsMaterialkitRecordH.id;
wmsMaterialkitRecordD.material_id = material.id;
wmsMaterialkitRecordD.material_code = material.code;
wmsMaterialkitRecordD.material_name = material.name;
wmsMaterialkitRecordD.material_specification = material.material_specification;
wmsMaterialkitRecordD.unit_code = material.unit_id;
wmsMaterialkitRecordD.plan_qty = prdMoTask.scheduled_qty * input.denominator / input.molecule - exists_qty;
wmsMaterialkitRecordD.yxf_qty = 0;
wmsMaterialkitRecordD.molecule = input.molecule;
wmsMaterialkitRecordD.denominator = input.denominator;
wmsMaterialkitRecordD.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
wmsMaterialkitRecordD.times = 0;
wmsMaterialkitRecordD.total_time = 0;
wmsMaterialkitRecordDs.Add(wmsMaterialkitRecordD);
}
}
await db_WmsMaterialkit.Insertable(wmsMaterialkitRecordH).ExecuteCommandAsync();
@@ -2834,73 +2901,16 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
foreach (WmsMaterialkitRecordH wmsMaterialkitRecord in wmsMaterialkitRecordHs)
{
List<WmsMaterialTransferD> wmsMaterialTransferDs = await db_WmsMaterialkit.Queryable<WmsMaterialTransferD>()
.Where(r => wmsMaterialTransfers.Select(x => x.id).Contains(r.bill_id) && r.station_code == wmsMaterialkitRecord.workstation_id).OrderBy(r => r.id).ToListAsync();
.Where(r => wmsMaterialTransfers.Select(x => x.id).Contains(r.bill_id) && r.station_code == workstaiondic[wmsMaterialkitRecord.workstation_id].ToString()).OrderBy(r => r.id).ToListAsync();
List<WmsMaterialkitRecordD> wmsMaterialkitRecordDs = await db_WmsMaterialkit.Queryable<WmsMaterialkitRecordD>()
.Where(r => r.bill_id == wmsMaterialkitRecord.id && r.status != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID && r.status != WmsWareHouseConst.BILLSTATUS_CANCEL_ID).ToListAsync();
foreach (WmsMaterialkitRecordD wmsMaterialkitRecordD in wmsMaterialkitRecordDs)
{
Stopwatch stopwatch2 = new Stopwatch();
stopwatch2.Start();
// 暂存仓库存
var zccinventory = await db_WmsMaterialkit.Queryable<WmsCarryH>()
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
.InnerJoin<WmsCarryD>((a, b, c) => a.id == c.carry_id)
.InnerJoin<WmsCarryCode>((a, b, c, d) => c.membercarry_id == d.carry_id)
.InnerJoin<BasMaterial>((a, b, c, d, e) => d.material_id == e.id)
.Where((a, b, c, d, e) => b.wh_id == WmsWareHouseConst.WAREHOUSE_ZCC_ID && e.id == wmsMaterialkitRecordD.material_id)
.Select((a, b, c, d, e) => new customInventoryEntity
{
material_id = e.id,
material_code = e.code,
material_name = e.name,
material_specification = e.material_specification,
codeqty = d.codeqty,
unit_code = d.unit_id
}).ToListAsync();
// 正在配送
var inroadinventory = await db_WmsMaterialkit.Queryable<WmsPretaskH>()
.InnerJoin<WmsCarryH>((a, b) => a.carry_id == b.id)
.InnerJoin<WmsCarryCode>((a, b, c) => c.carry_id == b.id)
.InnerJoin<BasMaterial>((a, b, c, d) => d.id == c.material_id)
.Where((a, b, c, d) => a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID && a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
&& (a.endlocation_id == WmsWareHouseConst.ZZCSSX121009 || a.endlocation_id == WmsWareHouseConst.ZZCSSX121010) && d.id == wmsMaterialkitRecordD.material_id)
.Select((a, b, c, d) => new customInventoryEntity
{
material_id = d.id,
material_code = d.code,
material_name = d.name,
material_specification = d.material_specification,
codeqty = c.codeqty,
unit_code = c.unit_id
}).ToListAsync();
List<customInventoryEntity> inventory = new List<customInventoryEntity>();
inventory.AddRange(zccinventory);
inventory.AddRange(inroadinventory);
inventory.GroupBy(g => new { g.material_id, g.material_code, g.material_name, g.material_specification, g.unit_code }).Select(g =>
{
customInventoryEntity newinventory = new customInventoryEntity();
newinventory.material_id = g.Key.material_id;
newinventory.material_code = g.Key.material_code;
newinventory.material_name = g.Key.material_name;
newinventory.material_specification = g.Key.material_specification;
newinventory.unit_code = g.Key.unit_code;
newinventory.codeqty = inventory.Where(r => r.material_id == newinventory.material_id && r.unit_code == newinventory.unit_code).Sum(s => s.codeqty);
return newinventory;
});
// 需要下发的数量
decimal? need_qty = wmsMaterialkitRecordD.plan_qty - wmsMaterialkitRecordD.yxf_qty;
// 查询已有库存 (多工单情况下要考虑库存是否被其它工单预留 暂定)
decimal? exists_qty = inventory.Sum(r => r.codeqty);
need_qty = need_qty - exists_qty;
if (need_qty <= 0)
break;
// 查询转库单
List<WmsMaterialTransferD> _wmsMaterialTransferDs = wmsMaterialTransferDs.Where(r => r.material_id == wmsMaterialkitRecordD.material_id).ToList();
await db_WmsMaterialkit.Ado.BeginTranAsync();

View File

@@ -68,4 +68,9 @@ public partial class WmsMaterialTransferCarry : BaseEntity<string>
/// 料箱数量
/// </summary>
public decimal? qty { get; set; }
/// <summary>
/// 预任务id
/// </summary>
public string? pretask_id { get; set; }
}

View File

@@ -597,6 +597,13 @@ namespace Tnb.WarehouseMgr
.Select<WmsCarryH>()
.ToListAsync();
string ss = cyDb.Queryable<WmsCarryH>().LeftJoin<WmsCarryCode>((a, b) => a.id == b.carry_id)
.LeftJoin<BasLocation>((a, b, c) => a.location_id == c.id)
.Where(whereExpr)
//.OrderByIF((a,b,c)=>SqlFunc.IsNullOrEmpty())
.OrderBy(policy.policy).ToSqlString();
items = items.DistinctBy(r => r.id).ToList();
return input.Size > 0 ? items.Take(input.Size).ToList() : items;
}
@@ -1636,7 +1643,6 @@ namespace Tnb.WarehouseMgr
{
if (s_GenTaskExecute.CurrentCount == 0)
{
Logger.Information("【GenTaskExecute】 【测试】 丢弃此执行");
return;
}
await s_GenTaskExecute.WaitAsync();
@@ -3415,6 +3421,10 @@ namespace Tnb.WarehouseMgr
row = await db.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1)
.Where(it => preTasks.Select(r => r.endlocation_id).Contains(it.id)).ExecuteCommandAsync();
if (row == 0)
{
throw new Exception($"点位{string.Join(',', preTasks.Select(r => r.endpoint_code))}绑定的库位id为{string.Join(',', preTasks.Select(r => r.endlocation_id))}的库位不存在");
}
return row > 0;
}
catch (Exception ex)
@@ -4284,7 +4294,10 @@ namespace Tnb.WarehouseMgr
wmsCarryHChangeExp,
it => new BasLocation { is_lock = 1 }, db);
Logger.LogInformation($"【CommonCreatePretask】 成功生成预任务:{preTasks.First().bill_code}");
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.OK, "成功");
JObject keyValuePairs = new JObject();
JArray array = JArray.Parse(JsonConvert.SerializeObject(preTasks.Select(r => r.id)));
keyValuePairs["pretaskids"] = array;
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.OK, "成功", keyValuePairs);
}
else
{

View File

@@ -230,7 +230,6 @@ namespace Tnb.WarehouseMgr
material_id = input.material_id,
code_batch = input.code_batch,
Size = input.palletCount,
Region_id = WmsWareHouseConst.REGION_Purchase_ID,
PolicyCode = WmsWareHouseConst.POLICY_YCLOUTSTOCK
};
@@ -1392,8 +1391,6 @@ namespace Tnb.WarehouseMgr
}).Where(r => r.id == input.source_id).ExecuteCommandAsync();
Logger.LogInformation($"【DistributeToZCC】更新转库单{wmsMaterialTransfer.bill_code}主表的数据");
await _db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync();
Logger.LogInformation($"【DistributeToZCC】插入转库单{wmsMaterialTransfer.bill_code}载具表的数据");
foreach (WmsMaterialTransferCarry wmsMaterialTransferCarry in wmsMaterialTransferCarrys)
{
@@ -1413,9 +1410,16 @@ namespace Tnb.WarehouseMgr
Logger.LogInformation($"【DistributeToZCC生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}");
throw new AppFriendlyException($"生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}", 500);
}
JObject keyValuePairs = JObject.Parse(res.data.ToString());
JArray array = JArray.Parse(keyValuePairs["pretaskids"].ToString());
wmsMaterialTransferCarry.pretask_id = array[0].ToString();
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty == r.yxfqty + wmsMaterialTransferCarry.qty).Where(r => r.id == wmsMaterialTransferCarry.mat_bill_id).ExecuteCommandAsync();
}
await _db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync();
Logger.LogInformation($"【DistributeToZCC】插入转库单{wmsMaterialTransfer.bill_code}载具表的数据");
Logger.LogInformation($"转库单{wmsMaterialTransfer.bill_code}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功");
@@ -1653,8 +1657,6 @@ namespace Tnb.WarehouseMgr
}).Where(r => r.id == input.source_id).ExecuteCommandAsync();
Logger.LogInformation($"【DistributeZCCToYCL】更新转库单{wmsMaterialTransfer.bill_code}主表的数据");
await _db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync();
Logger.LogInformation($"【DistributeZCCToYCL】插入转库单{wmsMaterialTransfer.bill_code}载具表的数据");
foreach (WmsMaterialTransferCarry wmsMaterialTransferCarry in wmsMaterialTransferCarrys)
{
@@ -1667,16 +1669,22 @@ namespace Tnb.WarehouseMgr
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
commonCreatePretaskInput.source_id = wmsMaterialTransferCarry.mat_bill_id;
commonCreatePretaskInput.isExcuteMission = false;
var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
{
Logger.LogInformation($"【DistributeZCCToYCL生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}");
throw new AppFriendlyException($"生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}", 500);
}
JObject keyValuePairs = JObject.Parse(res.data.ToString());
JArray array = JArray.Parse(keyValuePairs["pretaskids"].ToString());
wmsMaterialTransferCarry.pretask_id = array[0].ToString();
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty == r.yxfqty + wmsMaterialTransferCarry.qty).Where(r => r.id == wmsMaterialTransferCarry.mat_bill_id).ExecuteCommandAsync();
}
await _db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync();
Logger.LogInformation($"【DistributeZCCToYCL】插入转库单{wmsMaterialTransfer.bill_code}载具表的数据");
Logger.LogInformation($"转库单{wmsMaterialTransfer.bill_code}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功");

View File

@@ -124,6 +124,7 @@ namespace Tnb.WarehouseMgr
#region bip仓库
string scwarehouse_id = "";
string rkwarehouse_id = "";
// bip变更为俩字段传一样或不传scwarehouse_id
if (type == DictConst.PrdMoTypeZS)
{
scwarehouse_id = WmsWareHouseConst.bipwarehouseid_zs;

View File

@@ -55,7 +55,7 @@ public class RequestActionFilter : IAsyncActionFilter
//var headers = httpRequest.Headers;
if (!ignoreLog && isRequestSucceed)
{
Log.Information("Action Finished: {0}() - Elapsed: {1:F2}ms", actionName, sw.ElapsedMilliseconds);
Log.Information("Action Finished: {0}({1}) - Elapsed: {2:F2}ms", actionName, context.ActionArguments.ToJsonString(), sw.ElapsedMilliseconds);
ConnectionConfigOptions options = userContext?.FindFirstValue(ClaimConst.CONNECTIONCONFIG)?.ToObject<ConnectionConfigOptions>();
var userId = userContext?.FindFirstValue(ClaimConst.CLAINMUSERID);
var userName = userContext?.FindFirstValue(ClaimConst.CLAINMREALNAME);