From d2b3038cfc91dc6b2c7b44677e0e978a679bec2a Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Wed, 25 Sep 2024 11:47:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BD=90=E5=A5=97=E3=80=81=E8=BD=AC=E5=BA=93?= =?UTF-8?q?=E5=8D=95=E8=BD=BD=E5=85=B7=E8=A1=A8=E5=9B=9E=E5=86=99=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.ProductionMgr/RedisBackGround.cs | 162 ++++++++++-------- .../Entity/WmsMaterialTransferCarry.cs | 5 + .../Tnb.WarehouseMgr/WareHouseService.cs | 17 +- .../WmsMaterialTransferService.cs | 20 ++- .../Tnb.WarehouseMgr/WmsPrdInstockHService.cs | 1 + .../Filter/RequestActionFilter.cs | 2 +- 6 files changed, 122 insertions(+), 85 deletions(-) diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index 17a4c10e..f8cde1ab 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -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 { @@ -2725,9 +2727,11 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行生成物料齐套配送记录"); LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行生成物料齐套配送记录"); - List prdMoTasks = await db_WmsMaterialkit.Queryable().Where(r => r.mo_task_status == DictConst.InProgressEnCode + List prdMoTasks = await db_WmsMaterialkit.Queryable().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 workstaiondic = db_WmsMaterialkit.Queryable().ToDictionary(k => k.Id, v => v.EnCode); foreach (PrdMoTask prdMoTask in prdMoTasks) { List 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() + .InnerJoin((a, b) => a.location_id == b.id) + .InnerJoin((a, b, c) => a.id == c.carry_id) + .InnerJoin((a, b, c, d) => c.membercarry_id == d.carry_id) + .InnerJoin((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() + .InnerJoin((a, b) => a.carry_id == b.id) + .InnerJoin((a, b, c) => c.carry_id == b.id) + .InnerJoin((a, b, c, d) => d.id == c.material_id) + .InnerJoin((a, b, c, d, e) => a.id == e.pretask_id) + .InnerJoin((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 inventory = new List(); + 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 wmsMaterialTransferDs = await db_WmsMaterialkit.Queryable() - .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 wmsMaterialkitRecordDs = await db_WmsMaterialkit.Queryable() .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() - .InnerJoin((a, b) => a.location_id == b.id) - .InnerJoin((a, b, c) => a.id == c.carry_id) - .InnerJoin((a, b, c, d) => c.membercarry_id == d.carry_id) - .InnerJoin((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() - .InnerJoin((a, b) => a.carry_id == b.id) - .InnerJoin((a, b, c) => c.carry_id == b.id) - .InnerJoin((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 inventory = new List(); - 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 _wmsMaterialTransferDs = wmsMaterialTransferDs.Where(r => r.material_id == wmsMaterialkitRecordD.material_id).ToList(); await db_WmsMaterialkit.Ado.BeginTranAsync(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferCarry.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferCarry.cs index 6c37120c..5cf79b80 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferCarry.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferCarry.cs @@ -68,4 +68,9 @@ public partial class WmsMaterialTransferCarry : BaseEntity /// 料箱数量 /// public decimal? qty { get; set; } + + /// + /// 预任务id + /// + public string? pretask_id { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index ac4352df..4d417704 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -597,6 +597,13 @@ namespace Tnb.WarehouseMgr .Select() .ToListAsync(); + + string ss = cyDb.Queryable().LeftJoin((a, b) => a.id == b.carry_id) + .LeftJoin((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().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 { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs index bf78e1f0..2973c0a1 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs @@ -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().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().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}条全部生成成功"); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs index a6092235..085d40b5 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs @@ -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; diff --git a/common/Tnb.Common.Core/Filter/RequestActionFilter.cs b/common/Tnb.Common.Core/Filter/RequestActionFilter.cs index 46d764a8..47dedbea 100644 --- a/common/Tnb.Common.Core/Filter/RequestActionFilter.cs +++ b/common/Tnb.Common.Core/Filter/RequestActionFilter.cs @@ -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(); var userId = userContext?.FindFirstValue(ClaimConst.CLAINMUSERID); var userName = userContext?.FindFirstValue(ClaimConst.CLAINMREALNAME);