diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index d16dd24d..6e63cc9c 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -743,19 +743,22 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA for (int carry_mat_index = 0; carry_mat_index < carry_mats.Count; carry_mat_index++) { var carry_mat = carry_mats[carry_mat_index]; + bool isexists = false; foreach (var basRegionMat in basRegionMats) { - if (!carry_mat.category_list.Contains(basRegionMat.category)) - { - carry_mats.RemoveAt(carry_mat_index); carry_mat_index--; - } - else + if (carry_mat.category_list.Contains(basRegionMat.category)) { carry_mat.category = basRegionMat.category; carry_mat.region_id = basRegionMat.region_id; carry_mat.region_code = basRegionMat.region_code; + isexists = true; + break; } } + if (!isexists) + { + carry_mats.RemoveAt(carry_mat_index); carry_mat_index--; + } } #endregion @@ -767,7 +770,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA List endLocations = new List(); // 小件物料入外协存储区 - var carry_mat = carry_mats.Where(r => r.carry_id == wmsCarryH.id).First(); + var carry_mat = carry_mats.Where(r => r.carry_id == wmsCarryH.id).FirstOrDefault(); if (carry_mat != null && !string.IsNullOrEmpty(carry_mat.category)) { inStockStrategyInput = new() { warehouse_id = "1", Size = 1, passage = startlocation.passage, AvoidBusyPassage = true, Region_id = carry_mat.region_id, PolicyCode = WmsWareHouseConst.POLICY_YCLINSTOCK }; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 9b0253b5..dd9d743b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -775,7 +775,7 @@ namespace Tnb.WarehouseMgr { decimal? needOut = input.needOut; int endlocation_index = 0; - BasLocation endlocation_ssx = null; + BasLocation endlocation_ssx2 = null; for (int i = 0; i < itemsASC.Count; i++) { @@ -790,7 +790,7 @@ namespace Tnb.WarehouseMgr // 每6个重新获取一次终点 if (i % move_num == 0) { - endlocation_ssx = await cyDb.Queryable().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); + endlocation_ssx2 = await cyDb.Queryable().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); } // 查找是否有一个料箱可以正好满足剩余需求数量(目前只做这个额外判断,其它情形不考虑) @@ -803,9 +803,9 @@ namespace Tnb.WarehouseMgr needOut -= _wmsCarryCode.codeqty; WmsCarryH _wmsCarryH = itemsASC[j].wmsCarryH; - await cyDb.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); + await cyDb.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx2.id == it.id).ExecuteCommandAsync(); - carrysASC.Add(new Tuple(_wmsCarryH, _wmsCarryCode.codeqty, endlocation_ssx)); + carrysASC.Add(new Tuple(_wmsCarryH, _wmsCarryCode.codeqty, endlocation_ssx2)); isFind = true; break; @@ -818,9 +818,9 @@ namespace Tnb.WarehouseMgr // 目前只支持一个料箱只有一个物料 needOut -= wmsCarryCode.codeqty; - await cyDb.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); + await cyDb.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx2.id == it.id).ExecuteCommandAsync(); - carrysASC.Add(new Tuple(wmsCarryH, wmsCarryCode.codeqty, endlocation_ssx)); + carrysASC.Add(new Tuple(wmsCarryH, wmsCarryCode.codeqty, endlocation_ssx2)); } if (needOut > 0) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs index cb3fe134..a46da3f4 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs @@ -72,7 +72,8 @@ namespace Tnb.WarehouseMgr public static SemaphoreSlim s_taskDistributeYCL2ZCC = new(1); public static SemaphoreSlim s_taskDistributeZCCToYCL = new(1); - public static string[] YCLCKPowerRole = new string[2] { "37184163262485", "37183913754133" }; + // 1.注塑领料工权限 2.注塑领班权限 3.挤出领料工权限 4.挤出领班权限 + public static string[] YCLCKPowerRole = new string[4] { "37184163262485", "37183913754133", "37184764210965", "37184773840661" }; public WmsMaterialTransferService( ISqlSugarRepository repository, @@ -1361,8 +1362,8 @@ namespace Tnb.WarehouseMgr } if (wmsMaterialTransfer.status != WmsWareHouseConst.BILLSTATUS_ADD_ID) { - Logger.LogWarning($@"当前转库单状态为{wmsMaterialTransfer.status},不能下发中储仓下发到二楼暂存仓任务!"); - throw new AppFriendlyException($@"当前转库单状态为{wmsMaterialTransfer.status},不能下发中储仓下发到二楼暂存仓任务!", 500); + Logger.LogWarning($@"当前转库单不是新增状态,不能下发中储仓下发到二楼暂存仓任务!"); + throw new AppFriendlyException($@"当前转库单不是新增状态,不能下发中储仓下发到二楼暂存仓任务!", 500); } List wmsMaterialTransferds = _db.Queryable().Where(r => r.bill_id == input.source_id).ToList(); @@ -1385,11 +1386,13 @@ namespace Tnb.WarehouseMgr // throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!", 500); //} - // 转库单载具子表 - List wmsMaterialTransferCarrys = new List(); + await _db.Ado.BeginTranAsync(); foreach (WmsMaterialTransferD wmsMaterialTransferD in wmsMaterialTransferds) { + // 转库单载具子表 + List wmsMaterialTransferCarrys = new List(); + // 需要转库数量 decimal? needOut = wmsMaterialTransferD.qty; @@ -1401,7 +1404,8 @@ namespace Tnb.WarehouseMgr code_batch = wmsMaterialTransferD.code_batch, needOut = needOut, material_code = wmsMaterialTransferD.material_code, - endlocations = new string[2] { WmsWareHouseConst.ZZCSSX121009, WmsWareHouseConst.ZZCSSX121010 } + endlocations = new string[2] { WmsWareHouseConst.ZZCSSX121009, WmsWareHouseConst.ZZCSSX121010 }, + dbConn = _db }; List>? carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput); @@ -1429,50 +1433,46 @@ namespace Tnb.WarehouseMgr await _db.Updateable().SetColumns(r => r.work_station == wmsMaterialTransferD.station_code).Where(r => r.id == wmsCarryH.id).ExecuteCommandAsync(); } - } - await _db.Ado.BeginTranAsync(); - - await _db.Updateable().SetColumns(r => new WmsMaterialTransfer - { - status = WmsWareHouseConst.BILLSTATUS_ON_ID, - carry_count = wmsMaterialTransferCarrys.Count, - remainbindracknum = wmsMaterialTransferCarrys.Count - }).Where(r => r.id == input.source_id).ExecuteCommandAsync(); - Logger.LogInformation($"【DistributeToZCC】更新转库单{wmsMaterialTransfer.bill_code}主表的数据"); - - - foreach (WmsMaterialTransferCarry wmsMaterialTransferCarry in wmsMaterialTransferCarrys) - { - CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput(); - commonCreatePretaskInput.startlocation_id = wmsMaterialTransferCarry.startlocation_id; - commonCreatePretaskInput.endlocation_id = wmsMaterialTransferCarry.endlocation_id; - commonCreatePretaskInput.carry_id = wmsMaterialTransferCarry.carry_id; - commonCreatePretaskInput.carry_code = wmsMaterialTransferCarry.carry_code; - commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID; - 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) + await _db.Updateable().SetColumns(r => new WmsMaterialTransfer { - Logger.LogInformation($"【DistributeToZCC生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}"); - throw new AppFriendlyException($"生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}", 500); + status = WmsWareHouseConst.BILLSTATUS_ON_ID, + carry_count = (r.carry_count == null ? 0 : r.carry_count) + wmsMaterialTransferCarrys.Count, + remainbindracknum = (r.remainbindracknum == null ? 0 : r.remainbindracknum) + wmsMaterialTransferCarrys.Count + }).Where(r => r.id == input.source_id).ExecuteCommandAsync(); + Logger.LogInformation($"【DistributeToZCC】更新转库单{wmsMaterialTransfer.bill_code}主表的数据"); + + foreach (WmsMaterialTransferCarry wmsMaterialTransferCarry in wmsMaterialTransferCarrys) + { + CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput(); + commonCreatePretaskInput.startlocation_id = wmsMaterialTransferCarry.startlocation_id; + commonCreatePretaskInput.endlocation_id = wmsMaterialTransferCarry.endlocation_id; + commonCreatePretaskInput.carry_id = wmsMaterialTransferCarry.carry_id; + commonCreatePretaskInput.carry_code = wmsMaterialTransferCarry.carry_code; + commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID; + commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID; + commonCreatePretaskInput.source_id = wmsMaterialTransferCarry.mat_bill_id; + commonCreatePretaskInput.isExcuteMission = false; + + var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput, _db); + if (res.code != JNPF.Common.Enums.HttpStatusCode.OK) + { + 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(); } - 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} 行号 {wmsMaterialTransferD.lineno}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功"); } - await _db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync(); - Logger.LogInformation($"【DistributeToZCC】插入转库单{wmsMaterialTransfer.bill_code}载具表的数据"); - - Logger.LogInformation($"转库单{wmsMaterialTransfer.bill_code}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功"); - - await _db.Ado.CommitTranAsync(); } catch (Exception ex) @@ -1567,8 +1567,8 @@ namespace Tnb.WarehouseMgr await db.Updateable().SetColumns(r => new WmsMaterialTransfer { status = WmsWareHouseConst.BILLSTATUS_ON_ID, - carry_count = wmsMaterialTransferCarrys.Count, - remainbindracknum = wmsMaterialTransferCarrys.Count + carry_count = (r.carry_count == null ? 0 : r.carry_count) + wmsMaterialTransferCarrys.Count, + remainbindracknum = (r.remainbindracknum == null ? 0 : r.remainbindracknum) + wmsMaterialTransferCarrys.Count }).Where(r => r.id == input.source_id).ExecuteCommandAsync(); Logger.LogInformation($"【DistributeToZCC】更新转库单{wmsMaterialTransfer.bill_code}主表的数据"); @@ -1585,7 +1585,7 @@ namespace Tnb.WarehouseMgr commonCreatePretaskInput.source_id = wmsMaterialTransferCarry.mat_bill_id; commonCreatePretaskInput.isExcuteMission = false; - var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput); + var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput, _db); if (res.code != JNPF.Common.Enums.HttpStatusCode.OK) { Logger.LogInformation($"【DistributeToZCC生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}"); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs index 4ffa668a..d4021e40 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs @@ -466,7 +466,7 @@ namespace Tnb.WarehouseMgr }; var instockDs = new List(); var instockCodes = new List(); - List wmsCarryCodes = await _db.Queryable().Where(r => r.carry_id == carry.id).ToListAsync(); + List wmsCarryCodes = await _dbScanInStockByRedis.Queryable().Where(r => r.carry_id == carry.id).ToListAsync(); foreach (var r in wmsCarryCodes.GroupBy(g => new { g.material_id, g.code_batch })) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs index 4ea2e980..75a7f811 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs @@ -1,4 +1,5 @@ -using JNPF.Common.Core.Manager; +using System.Collections; +using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; @@ -6,6 +7,7 @@ using JNPF.Common.Filter; using JNPF.Common.Security; using JNPF.EventBus; using JNPF.FriendlyException; +using JNPF.Systems.Entitys.System; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using JNPF.VisualDev.Entitys; @@ -106,6 +108,11 @@ namespace Tnb.WarehouseMgr input.sidx = input.sidx.Replace("create_time", "a.create_time").Replace("erp_bill_code", "e.erp_bill_code"); } + + Dictionary status_dic = await _db.Queryable() + .InnerJoin((a, b) => a.Id == b.DictionaryTypeId) + .Where((a, b) => a.FullName == "单据状态").Select((a, b) => b).ToDictionaryAsync(k => k.Id, v => v.FullName); + SqlSugarPagedList result = await _db.Queryable() .InnerJoin((a, b) => a.carry_id == b.carry_id) .InnerJoin((a, b, c) => b.material_id == c.id)