diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs index 48d2a743..9b4e8b92 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs @@ -2320,7 +2320,7 @@ namespace Tnb.ProductionMgr List ids = prdVisionResultRecords.Select(x => x.id).ToList(); await db.Updateable().SetColumns(x => x.status == 1).Where(x => ids.Contains(x.id)).ExecuteCommandAsync(); - await ReportInstock(new CheckCompleteInput() + await ReportInstock(new CheckCompleteInput() { report_id = report.id, pqty = report.reported_qty.ParseToDecimal(), @@ -2397,15 +2397,14 @@ namespace Tnb.ProductionMgr wmsPrdInstockInput.type = prdMo.mo_type; wmsPrdInstockInput.create_id = report.create_id; wmsPrdInstockInput.prd_report_id = report.id; - wmsPrdInstockInput.prdInstockDs = new List(); wmsPrdInstockInput.prdInstockCodes = new List(); - wmsPrdInstockInput.prdInstockDs.Add(new WmsPrdInstockDInput() + wmsPrdInstockInput.prdInstockD = new WmsPrdInstockDInput() { task_bill_code = prdMoTask.mo_task_code, warehouse_id = report.warehouse_id, startlocation_id = location.id, carry_id = wmsCarryH.id, - }); + }; if (prdMoTask.schedule_type == 1) { diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index ac0d6a32..bddb2c83 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -1941,7 +1941,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA //WCS下发任务前会判断是否一托下 防止向WCS发送一托下指令和下发任务同步进行 await s_elevatortaskWCSRequest.WaitAsync(); - var db_ElevatorTaskExceptionHandle = _wareHouseService.db_ElevatorTaskExceptionHandles[index]; taskActions[index] = Task.Run(async () => { @@ -1953,7 +1952,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA .Where(r => r.area_code == area && r.act_end_date == null && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList(); - LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】检查到需要恢复/执行的电梯任务{elevatorTasks.Count}条 {string.Join(',', elevatorTasks.Select(x => x.bill_code))}"); + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】检查到需要恢复/执行的电梯{area}任务{elevatorTasks.Count}条 {string.Join(',', elevatorTasks.Select(x => x.bill_code))}"); if (elevatorTasks?.Count > 0) { @@ -1968,6 +1967,14 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA var e = await _wareHouseService.FindElevatorFromPars(q); LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}"); + // 存在叉车已放货完成电梯任务还没生成的情况,这种情况等待完成 + WmsElevatorH wmsElevator = await db_ElevatorTaskExceptionHandle.Queryable().Where(r => r.elevator_id == e.device_id).FirstAsync(); + if (wmsElevator.carry_count != elevatorTasks.Count) + { + throw new Exception($"电梯{e.elevator_code}内放货托盘为{wmsElevator.carry_count}托,已生成的电梯任务为{elevatorTasks.Count},需要等待电梯任务生成"); + } + + // 三、四号梯发货带两托货 string[] doubleCarryRunElevators = { @@ -1976,7 +1983,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA if (doubleCarryRunElevators.Contains(e.elevator_code) && wmsDistaskHs[0].end_floor == 1) { LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】判断为三四号梯任务"); - LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】现在有{group.Count()}托货"); + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】现在{e.elevator_code}有{group.Count()}托货"); // 电梯内放置两托货呼叫电梯下 if (group.Count() == 2) { @@ -1994,7 +2001,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA else if (group.Count() == 1) { // 如果当前电梯没有执行中的任务 则呼叫电梯下 - if (db_ElevatorTaskExceptionHandle.Queryable().Where(r => r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.endlocation_id == wmsDistaskHs[0].startlocation_id).Count() == 0) { @@ -2003,7 +2009,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA wmsDistaskHs[0].device_id = e.device_id; } - LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}"); await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs, db_ElevatorTaskExceptionHandle); LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成"); @@ -2034,8 +2039,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } catch (ObjectDisposedException ex) { - LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】 数据库连接异常:{ex.Message}"); - LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】 数据库连接异常:{ex.StackTrace}"); + LoggerElevatorTask.LogWarning($"【ElevatorTaskExceptionHandle】 数据库连接异常:{ex.Message}"); + LoggerElevatorTask.LogWarning($"【ElevatorTaskExceptionHandle】 数据库连接异常:{ex.StackTrace}"); if (ex.Source == "Npgsql") db_ElevatorTaskExceptionHandle = _repository.AsSugarClient().CopyNew(); } @@ -2373,15 +2378,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA await db_Floor4MJX2MJC.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startlocation.id).ExecuteCommandAsync(); //锁定终点库位 await db_Floor4MJX2MJC.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endlocation.id).ExecuteCommandAsync(); - - bool result_createPretask = await createPretask(startlocation.id, endlocation.id, wmsCarryH.id, wmsCarryH.carry_code, LoggerFloor4MJX2MJC, db_Floor4MJX2MJC); - if (!result_createPretask) - { - LoggerFloor4MJX2MJC.LogWarning($"【四楼待灭菌线到灭菌仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败"); - throw new Exception($"【四楼待灭菌线到灭菌仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败"); - } - LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成成功"); - + DateTime dateTime = DateTime.Now; WmsSterilizationInstockH wmsSterilizationInstockH = new WmsSterilizationInstockH(); wmsSterilizationInstockH.carry_id = wmsCarryH.id; @@ -2402,6 +2399,15 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA else LoggerFloor4MJX2MJC.LogWarning($"【四楼待灭菌线到灭菌仓】 灭菌入库记录生成失败"); + bool result_createPretask = await createPretask(startlocation.id, endlocation.id, wmsCarryH.id, wmsCarryH.carry_code, LoggerFloor4MJX2MJC, db_Floor4MJX2MJC, WmsWareHouseConst.BIZTYPE_WMSSTERILIZATIONINSTOCKCH_ID, "", wmsSterilizationInstockH.id); + if (!result_createPretask) + { + LoggerFloor4MJX2MJC.LogWarning($"【四楼待灭菌线到灭菌仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败"); + throw new Exception($"【四楼待灭菌线到灭菌仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成失败"); + } + LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 {startlocation.location_code} 到 {endlocation.location_code} 预任务生成成功"); + + } await db_Floor4MJX2MJC.Ado.CommitTranAsync(); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/WmsPrdInstockCodeInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/WmsPrdInstockCodeInput.cs index 33ef1a41..ce4e7bcc 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/WmsPrdInstockCodeInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/WmsPrdInstockCodeInput.cs @@ -8,6 +8,7 @@ namespace Tnb.WarehouseMgr.Entities.Dto { public class WmsPrdInstockCodeInput { + public string prd_instockd_id { get; set; } public decimal planqty { get; set; } public decimal pqty { get; set; } public string code_batch { get; set; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/WmsPrdInstockInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/WmsPrdInstockInput.cs index 97effc4f..722bc845 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/WmsPrdInstockInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/WmsPrdInstockInput.cs @@ -19,7 +19,7 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Inputs public string type { get; set; } public string create_id { get; set; } public string prd_report_id { get; set; } - public List prdInstockDs { get; set; } + public WmsPrdInstockDInput prdInstockD { get; set; } public List prdInstockCodes { get; set; } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.cs index e13b112a..a5fe608d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.cs @@ -100,4 +100,10 @@ public partial class WmsElevatorH : BaseEntity /// 占用任务 /// public string use_tasks { get; set; } + + /// + /// 电梯内托数 + /// + public int carry_count { get; set; } + } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPrdInstockCode.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPrdInstockCode.cs index da74e35c..07d3757a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPrdInstockCode.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPrdInstockCode.cs @@ -44,6 +44,12 @@ public partial class WmsPrdInstockCode : BaseEntity /// public string? prd_instock_id { get; set; } + /// + /// 入库明细id + /// + public string? prd_instockD_id { get; set; } + + /// /// 载具ID /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 76c103d6..ea84428b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -2375,13 +2375,22 @@ namespace Tnb.WarehouseMgr int doorStatus = -1; bool closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(devName, 4); //向电梯发送前门关门指令 Logger.Information($"{devName.Match(@"\d+")}#梯 关门结果:{closeDoorRes}"); + + // 检查门状态 + int checkCloseDoor = 0; do { + checkCloseDoor++; doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus); - Logger.Information($"{devName.Match(@"\d+")}#梯 当前门状态:{doorStatus}"); + Logger.Information($"第{checkCloseDoor}次 {devName.Match(@"\d+")}#梯 当前门状态:{doorStatus}"); + // 30次后重试 + if (checkCloseDoor >= 30) + { + throw new Exception($"电梯{devName}关门状态判断已达30次,即将重新执行这批电梯任务"); + } await Task.Delay(1000); } while (doorStatus != 4); - Logger.Information($"结束判断 {devName.Match(@"\d+")}#梯 当前门状态:{doorStatus}"); + Logger.Information($"第{checkCloseDoor}次 结束判断 {devName.Match(@"\d+")}#梯 当前门状态:{doorStatus}"); int floor = await GetRealFloor(devName, disTask.end_floor); @@ -2394,10 +2403,20 @@ namespace Tnb.WarehouseMgr //发送到目标楼的指令 dynamic result = await _elevatorControlService.WriteTagAsync(devName, ElevatorConsts.FloorExecute, floor); + // 检查电梯下行状态 + int checkRunDoor = 0; do { + checkRunDoor++; tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); Logger.Information($"{devName.Match(@"\d+")}#梯 sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},当前楼层floorNo:{tuple.floorNo},目标楼层disTask.end_floor={floor}"); + + Logger.Information($"第{checkCloseDoor}次 {devName.Match(@"\d+")}#梯 当前门状态:{doorStatus}"); + // 180次后重试 + if (checkRunDoor >= 180) + { + throw new Exception($"电梯{devName}运行状态判断已达180次,即将重新执行这批电梯任务"); + } await Task.Delay(1000); } while (tuple.sysStatus != 3 || tuple.runStatus != 0 || floor != tuple.floorNo); @@ -2417,7 +2436,8 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Logger.Error("执行到目标楼层电梯任务失败", ex); + Logger.LogWarning("执行到目标楼层电梯任务失败", ex.Message); + Logger.LogWarning("执行到目标楼层电梯任务失败", ex.StackTrace); throw; } } @@ -2594,6 +2614,24 @@ namespace Tnb.WarehouseMgr _ = await db.Updateable().SetColumns(it => new BasLocation { is_use = ((int)EnumCarryStatus.空闲).ToString(), is_lock = 0 }).Where(it => startLocationIds.Contains(it.id)).ExecuteCommandAsync(); } + List disTasks = db.Queryable().Where(r => input.disTaskIds.Contains(r.id)).ToList(); + foreach (WmsDistaskH disTask in disTasks) + { + // 出电梯减一托盘数 + if (disTask.startlocation_code.Contains("DT") && !disTask.endlocation_code.Contains("DT")) + { + ElevagorInfoQuery q = new() { startlocation_id = disTask.startlocation_id, taskCode = disTask.bill_code }; + Logger.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}"); + var e = await FindElevatorFromPars(q); + Logger.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}"); + + await _db.Updateable().SetColumns(r => new WmsElevatorH + { + carry_count = r.carry_count - 1 + }).Where(r => r.elevator_id == e.device_id).ExecuteCommandAsync(); + } + } + await db.Ado.CommitTranAsync(); } @@ -2632,6 +2670,7 @@ namespace Tnb.WarehouseMgr List preTaskIds = disTasks.Select(x => x.pretask_id).ToList(); _ = await db.Updateable().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID }).Where(it => preTaskIds.Contains(it.id)).ExecuteCommandAsync(); + #region 电梯 WmsElevatorH wmsElevatorH = await db.Queryable().Where(r => disTasks.Select(x => x.area_code).Contains(r.area_code)).FirstAsync(); if (wmsElevatorH != null) { @@ -2645,6 +2684,24 @@ namespace Tnb.WarehouseMgr Logger.LogInformation($"【TaskComplate】更新电梯{disTasks[0].area_code}任务行数{eleUpdateRow}"); } + foreach (var disTask in disTasks) + { + // 进电梯任务加一托盘数 + if (disTask.endlocation_code.Contains("DT") && !disTask.startlocation_code.Contains("DT")) + { + ElevagorInfoQuery q = new() { endlocation_id = disTask.endlocation_id, taskCode = disTask.bill_code }; + Logger.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}"); + var e = await FindElevatorFromPars(q); + Logger.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}"); + + await _db.Updateable().SetColumns(r => new WmsElevatorH + { + carry_count = r.carry_count + 1 + }).Where(r => r.elevator_id == e.device_id).ExecuteCommandAsync(); + } + } + + #endregion // 更新任务数量 _ = await db.Updateable().SetColumns(it => new BasLocation { task_nums = it.task_nums - 1 }).Where(it => disTasks.Select(x => x.endlocation_code).Contains(it.location_code)).ExecuteCommandAsync(); @@ -4064,7 +4121,7 @@ namespace Tnb.WarehouseMgr await _db.Updateable().SetColumns(r => r.waternumber == waternumber).Where(r => r.id == basCoderules.id).ExecuteCommandAsync(); watercode = waternumber.ToString().PadLeft(watercodeLength, '0'); } - return prefix + custom + watercode; + return watercode; } catch(Exception ex) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs index 3f316d02..8f24b63b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs @@ -124,8 +124,9 @@ namespace Tnb.WarehouseMgr //string code = $"WWSH{watercode}"; string code_batch = string.IsNullOrEmpty(WmsOutsourceD.code_batch) ? "" : WmsOutsourceD.code_batch; - string code = await _wareHouseService.CreateCodeRules("", WmsOutsourceD.matcode + code_batch, 4); + string watercode = await _wareHouseService.CreateCodeRules("", WmsOutsourceD.matcode + code_batch, 4); + string code = $"{WmsOutsourceD.matcode}-{WmsOutsourceD.code_batch}-{watercode}"; WmsTempCode barCode = new() { material_id = WmsOutsourceD.matcode_id, diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs index 735822ee..ba8fa870 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs @@ -135,23 +135,22 @@ namespace Tnb.WarehouseMgr scwarehouse_id = WmsWareHouseConst.bipwarehouseid_bz; } #endregion - foreach (WmsPrdInstockDInput prdInstockDInput in input.prdInstockDs) - { - WmsPrdInstockDs.Add(new WmsPrdInstockD() - { - task_bill_code = prdInstockDInput.task_bill_code, - warehouse_id = prdInstockDInput.warehouse_id, - startlocation_id = prdInstockDInput.startlocation_id, - carry_id = prdInstockDInput.carry_id, - create_id = input.create_id, - create_time = DateTime.Now, - prd_instock_id = prd_instock_code_id, - status = WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID, - scwarehouse_id = scwarehouse_id - }); - } - List WmsPrdInstockCodes = new List(); + WmsPrdInstockDInput prdInstockDInput = input.prdInstockD; + WmsPrdInstockD wmsPrdInstockD = new WmsPrdInstockD() + { + task_bill_code = prdInstockDInput.task_bill_code, + warehouse_id = prdInstockDInput.warehouse_id, + startlocation_id = prdInstockDInput.startlocation_id, + carry_id = prdInstockDInput.carry_id, + create_id = input.create_id, + create_time = DateTime.Now, + prd_instock_id = prd_instock_code_id, + status = WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID, + scwarehouse_id = scwarehouse_id + }; + WmsPrdInstockDs.Add(wmsPrdInstockD); + foreach (WmsPrdInstockCodeInput prdInstockCodeInput in input.prdInstockCodes) { @@ -163,11 +162,14 @@ namespace Tnb.WarehouseMgr code = prdInstockCodeInput.code, unit_id = prdInstockCodeInput.unit_id, carry_id = prdInstockCodeInput.carry_id, - prd_instock_id = prd_instock_code_id + prd_instock_id = prd_instock_code_id, + prd_instockD_id = wmsPrdInstockD.id }); } - await db.Insertable(WmsPrdInstockDs).ExecuteCommandAsync(); + + + await db.Insertable(wmsPrdInstockD).ExecuteCommandAsync(); await db.Insertable(WmsPrdInstockCodes).ExecuteCommandAsync(); @@ -185,125 +187,121 @@ namespace Tnb.WarehouseMgr } await semaphoreSlim.WaitAsync(); - foreach (WmsPrdInstockD wmsPrdInstockD in WmsPrdInstockDs) + //入库取终点 + InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = wmsPrdInstockD.warehouse_id, Size = 1 }; + List endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); + if (endLocations?.Count == 0) { - //入库取终点 - InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = wmsPrdInstockD.warehouse_id, Size = 1 }; - List endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); - if (endLocations?.Count == 0) - { - throw new AppFriendlyException("没有可用的库位", 500); - } - BasLocation endLocation = endLocations[0]; + throw new AppFriendlyException("没有可用的库位", 500); + } + BasLocation endLocation = endLocations[0]; - BasLocation startLocation = db.Queryable().Where(r => r.id == wmsPrdInstockD.startlocation_id).First(); - if (startLocation == null) + BasLocation startLocation = db.Queryable().Where(r => r.id == wmsPrdInstockD.startlocation_id).First(); + if (startLocation == null) + { + throw new AppFriendlyException("系统中找不到起点ID的库位信息", 500); + } + + BasLocation endlocation_ssx = null; + string startlocation_id_ssx = null; + + + if (type == DictConst.PrdMoTypeZS) + { + Logger.LogInformation($"【PrdInstock】注塑车间生产提报"); + // 注塑线边库到2,4输送线 + // 根据ZSSSXCTU01 ZSSSXCTU02任务数平均分配任务 + endlocation_ssx = await db.Queryable().Where(r => new string[2] { "32624148726549", "32624157608981" }.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); + await db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); + + // ZSSSXCTU01 对应 SSX-011-002 + if (endlocation_ssx.location_code == "ZSSSXCTU01") { - throw new AppFriendlyException("系统中找不到起点ID的库位信息", 500); + startlocation_id_ssx = "32609073591317"; + } + // ZSSSXCTU02 对应 SSX-011-004 + else if (endlocation_ssx.location_code == "ZSSSXCTU02") + { + startlocation_id_ssx = "32609093546005"; } - BasLocation endlocation_ssx = null; - string startlocation_id_ssx = null; + WmsCarryH wmsCarryH = await db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); - - if (type == DictConst.PrdMoTypeZS) + // 生成到输送线任务 + CommonCreatePretaskInput commonCreatePretaskInput1 = new CommonCreatePretaskInput(); + commonCreatePretaskInput1.startlocation_id = startLocation.id; + commonCreatePretaskInput1.endlocation_id = endlocation_ssx.id; + commonCreatePretaskInput1.carry_id = wmsCarryH.id; + commonCreatePretaskInput1.carry_code = wmsCarryH.carry_code; + commonCreatePretaskInput1.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; + commonCreatePretaskInput1.biz_type = ""; + commonCreatePretaskInput1.require_id = wmsPrdInstockD.id; + commonCreatePretaskInput1.isExcuteMission = false; + Entities.Dto.Outputs.Result res1 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput1, db); + if (res1.code != HttpStatusCode.OK) { - Logger.LogInformation($"【PrdInstock】注塑车间生产提报"); - // 注塑线边库到2,4输送线 - // 根据ZSSSXCTU01 ZSSSXCTU02任务数平均分配任务 - endlocation_ssx = await db.Queryable().Where(r => new string[2] { "32624148726549", "32624157608981" }.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); - await db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); - - // ZSSSXCTU01 对应 SSX-011-002 - if (endlocation_ssx.location_code == "ZSSSXCTU01") - { - startlocation_id_ssx = "32609073591317"; - } - // ZSSSXCTU02 对应 SSX-011-004 - else if (endlocation_ssx.location_code == "ZSSSXCTU02") - { - startlocation_id_ssx = "32609093546005"; - } - - WmsCarryH wmsCarryH = await db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); - - // 生成到输送线任务 - CommonCreatePretaskInput commonCreatePretaskInput1 = new CommonCreatePretaskInput(); - commonCreatePretaskInput1.startlocation_id = startLocation.id; - commonCreatePretaskInput1.endlocation_id = endlocation_ssx.id; - commonCreatePretaskInput1.carry_id = wmsCarryH.id; - commonCreatePretaskInput1.carry_code = wmsCarryH.carry_code; - commonCreatePretaskInput1.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; - commonCreatePretaskInput1.biz_type = ""; - commonCreatePretaskInput1.require_id = wmsPrdInstockD.id; - commonCreatePretaskInput1.isExcuteMission = false; - Entities.Dto.Outputs.Result res1 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput1, db); - if (res1.code != HttpStatusCode.OK) - { - throw new Exception($"注塑车间生成到输送线的任务失败 {res1.msg}"); - } - - // 生成到中储仓任务 - CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); - commonCreatePretaskInput2.startlocation_id = startlocation_id_ssx; - commonCreatePretaskInput2.endlocation_id = endLocation.id; - commonCreatePretaskInput2.carry_id = wmsCarryH.id; - commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code; - commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; - commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID; - commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; - commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false; - - Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db); - if (res2.code != HttpStatusCode.OK) - { - throw new Exception($"注塑车间生成到中储仓的任务失败 {res2.msg}"); - } - } - else if (type == DictConst.PrdMoTypeJC) - { - Logger.LogInformation($"【PrdInstock】挤出车间生产提报"); - WmsCarryH wmsCarryH = await db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); - - // 生成到中储仓任务 - CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); - commonCreatePretaskInput2.startlocation_id = startLocation.id; - commonCreatePretaskInput2.endlocation_id = endLocation.id; - commonCreatePretaskInput2.carry_id = wmsCarryH.id; - commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code; - commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; - commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID; - commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; - commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false; - - Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db); - if (res2.code != HttpStatusCode.OK) - { - throw new Exception($"挤出车间生成到中储仓的任务失败 {res2.msg}"); - } - } - else if (type == DictConst.PrdMoTypeBZ) - { - Logger.LogInformation($"【PrdInstock】包装车间生产提报"); - WmsCarryH wmsCarryH = await db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); - - // 生成任务 - CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); - commonCreatePretaskInput2.startlocation_id = startLocation.id; - commonCreatePretaskInput2.endlocation_id = endLocation.id; - commonCreatePretaskInput2.carry_id = wmsCarryH.id; - commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code; - commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; - commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID; - commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; - - Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db); - if (res2.code != HttpStatusCode.OK) - { - throw new Exception($"包装车间生成任务失败 {res2.msg}"); - } + throw new Exception($"注塑车间生成到输送线的任务失败 {res1.msg}"); } + // 生成到中储仓任务 + CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); + commonCreatePretaskInput2.startlocation_id = startlocation_id_ssx; + commonCreatePretaskInput2.endlocation_id = endLocation.id; + commonCreatePretaskInput2.carry_id = wmsCarryH.id; + commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code; + commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; + commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID; + commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; + commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false; + + Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db); + if (res2.code != HttpStatusCode.OK) + { + throw new Exception($"注塑车间生成到中储仓的任务失败 {res2.msg}"); + } + } + else if (type == DictConst.PrdMoTypeJC) + { + Logger.LogInformation($"【PrdInstock】挤出车间生产提报"); + WmsCarryH wmsCarryH = await db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); + + // 生成到中储仓任务 + CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); + commonCreatePretaskInput2.startlocation_id = startLocation.id; + commonCreatePretaskInput2.endlocation_id = endLocation.id; + commonCreatePretaskInput2.carry_id = wmsCarryH.id; + commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code; + commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; + commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID; + commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; + commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false; + + Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db); + if (res2.code != HttpStatusCode.OK) + { + throw new Exception($"挤出车间生成到中储仓的任务失败 {res2.msg}"); + } + } + else if (type == DictConst.PrdMoTypeBZ) + { + Logger.LogInformation($"【PrdInstock】包装车间生产提报"); + WmsCarryH wmsCarryH = await db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); + + // 生成任务 + CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); + commonCreatePretaskInput2.startlocation_id = startLocation.id; + commonCreatePretaskInput2.endlocation_id = endLocation.id; + commonCreatePretaskInput2.carry_id = wmsCarryH.id; + commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code; + commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; + commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID; + commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; + + Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db); + if (res2.code != HttpStatusCode.OK) + { + throw new Exception($"包装车间生成任务失败 {res2.msg}"); + } } @@ -337,6 +335,8 @@ namespace Tnb.WarehouseMgr // 如果生产入库 输送线到仓库这条任务完成,反写单据数据 if (input.bizTypeId == WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID) { + + isOk = await _db.Updateable() .SetColumns(it => new WmsPrdInstockD { status = WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID }) .Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync(); @@ -347,7 +347,7 @@ namespace Tnb.WarehouseMgr // BasWarehouse kcWarehouse = await _db.Queryable().SingleAsync(x=>x.id==wmsPrdInstockD.warehouse_id); PrdReport prdReport = await _db.Queryable().SingleAsync(x => x.id == instock.prd_report_id); - List allInstockDetails = await _db.Queryable().Where(it => it.prd_instock_id == instock.id).ToListAsync(); + List allInstockDetails = await _db.Queryable().Where(it => it.prd_instockD_id == wmsPrdInstockD.id).ToListAsync(); List materialIds = Arrays.AsList(instock.material_id); List unitCodes = allInstockDetails.Select(x => x.unit_id).Distinct().ToList(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs index a482f1ec..e3564360 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs @@ -361,9 +361,9 @@ namespace Tnb.WarehouseMgr //string watercode = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PURCHASE_MAT_ENCODE); string code_batch = string.IsNullOrEmpty(WmsPurchaseD.code_batch) ? "" : WmsPurchaseD.code_batch; - string code = await _wareHouseService.CreateCodeRules("", WmsPurchaseD.material_code + code_batch, 4); + string watercode = await _wareHouseService.CreateCodeRules("", WmsPurchaseD.material_code + code_batch, 4); - //string code = $"CGSH{watercode}"; + string code = $"{WmsPurchaseD.material_code}-{WmsPurchaseD.code_batch}-{watercode}"; WmsTempCode barCode = new() { material_id = WmsPurchaseD.material_id, diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs index 36eb0859..509f44a7 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs @@ -249,8 +249,9 @@ namespace Tnb.WarehouseMgr //string code = $"YCLDBRK{watercode}"; string code_batch = string.IsNullOrEmpty(WmsRawmatTransferinstockD.code_batch) ? "" : WmsRawmatTransferinstockD.code_batch; - string code = await _wareHouseService.CreateCodeRules("", WmsRawmatTransferinstockD.matcode + code_batch, 4); + string watercode = await _wareHouseService.CreateCodeRules("", WmsRawmatTransferinstockD.matcode + code_batch, 4); + string code = $"{WmsRawmatTransferinstockD.matcode}-{WmsRawmatTransferinstockD.code_batch}-{watercode}"; WmsTempCode barCode = new() { material_id = WmsRawmatTransferinstockD.matcode_id, diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSterilizationInstockHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSterilizationInstockHService.cs index 69c98de7..fb35bc1a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSterilizationInstockHService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSterilizationInstockHService.cs @@ -62,11 +62,23 @@ namespace Tnb.WarehouseMgr throw new ArgumentNullException(nameof(input)); } - bool isOk = await _db.Updateable().SetColumns(it => new WmsSterilizationInstockH { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID }) - .Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync(); - if (!isOk) + + BasLocation endLocation = await _db.Queryable().Where(r => r.id == input.wmsDistaskH.endlocation_id).FirstAsync(); + // 生产入库(灭菌完成) 仓库传 1001A1100000001MA8KP + if (endLocation.wh_id == WmsWareHouseConst.WAREHOUSE_MJC_ID) { - throw Oops.Oh(ErrorCode.COM1001); + + } + // 生产入库(成品) 仓库传 1001A1100000001MA8ME + else if (endLocation.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID) + { + bool isOk = await _db.Updateable().SetColumns(it => new WmsSterilizationInstockH { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID }) + .Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync(); + if (!isOk) + { + throw Oops.Oh(ErrorCode.COM1001); + } + } } }