diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index d445a368..79ba49e1 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -117,7 +117,7 @@ namespace Tnb.ProductionMgr public SemaphoreSlim s_taskF2KTPsupplement = new(1); public SemaphoreSlim s_taskYCLInternalTransfer = new(1); - public SemaphoreSlim s_elevatortask = new(1); + public Dictionary s_elevatortaskDic = new(); private StackExRedisHelper _redisData; private readonly IPrdInstockService _prdInstockService; @@ -138,7 +138,7 @@ namespace Tnb.ProductionMgr private ISqlSugarClient db_Floor4DMJ2MJX; private ISqlSugarClient db_Floor4MJX2MJC; private ISqlSugarClient db_Floor4DMC2CPK; - private ISqlSugarClient db_ElevatorTaskExceptionHandle; + private List db_ElevatorTaskExceptionHandles = new (); private ISqlSugarClient db_F2KTPsupplement; private ISqlSugarClient db_YCLInternalTransfer; @@ -196,9 +196,18 @@ namespace Tnb.ProductionMgr db_Floor4DMJ2MJX = repository.CopyNew(); db_Floor4MJX2MJC = repository.CopyNew(); db_Floor4DMC2CPK = repository.CopyNew(); - db_ElevatorTaskExceptionHandle = repository.CopyNew(); db_F2KTPsupplement = repository.CopyNew(); db_YCLInternalTransfer = repository.CopyNew(); + + List elevatorAreas = repository.CopyNew().Queryable().Select(r => r.area_code).Distinct().ToList(); + foreach (var s_elevatorArea in elevatorAreas) + { + ISqlSugarClient db_ElevatorTaskExceptionHandle = repository.CopyNew(); + db_ElevatorTaskExceptionHandles.Add(db_ElevatorTaskExceptionHandle); + SemaphoreSlim s_elevatortask = new(1); + s_elevatortaskDic.Add(s_elevatorArea, s_elevatortask); + } + } #endregion @@ -1918,98 +1927,123 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA async void ElevatorTaskExceptionHandle(object args) { - if (s_elevatortask.CurrentCount == 0) - return; - - try + Task[] taskActions = new Task[s_elevatortaskDic.Count]; + int index = 0; + foreach (string area in s_elevatortaskDic.Keys) { + SemaphoreSlim s_elevatortask = s_elevatortaskDic[area]; + + if (s_elevatortask.CurrentCount == 0) + return; + await s_elevatortask.WaitAsync(); - List elevatorTasks = db_ElevatorTaskExceptionHandle.Queryable() - .Where(r => r.startlocation_code.Contains("DT") && r.endlocation_code.Contains("DT") && r.act_start_date == null && 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))}"); - - - if (elevatorTasks?.Count > 0) + var db_ElevatorTaskExceptionHandle = db_ElevatorTaskExceptionHandles[index]; + taskActions[index] = Task.Run(async () => { - List> elevatorTaskGroup = elevatorTasks.GroupBy(r => $"{r.endlocation_code} {r.end_floor}").ToList(); - foreach (IGrouping group in elevatorTaskGroup) + try { - List wmsDistaskHs = group.ToList(); - ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskHs[0].endlocation_id, taskCode = wmsDistaskHs[0].bill_code }; - LoggerElevatorTask.Information($"【GenTaskExecute】执行电梯任务时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}"); - var e = await _wareHouseService.FindElevatorFromPars(q); - LoggerElevatorTask.Information($"【GenTaskExecute】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}"); + List elevatorTasks = db_ElevatorTaskExceptionHandle.Queryable() + .Where(r => r.area_code == area && r.act_start_date == null && r.act_end_date == null + && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList(); - // 三、四号梯发货带两托货 - string[] doubleCarryRunElevators = + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】检查到需要恢复/执行的电梯任务{elevatorTasks.Count}条 {string.Join(',', elevatorTasks.Select(x => x.bill_code))}"); + + + if (elevatorTasks?.Count > 0) { + List> elevatorTaskGroup = elevatorTasks.GroupBy(r => $"{r.endlocation_code} {r.end_floor}").ToList(); + foreach (IGrouping group in elevatorTaskGroup) + { + List wmsDistaskHs = group.ToList(); + ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskHs[0].endlocation_id, taskCode = wmsDistaskHs[0].bill_code }; + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}"); + var e = await _wareHouseService.FindElevatorFromPars(q); + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}"); + + // 三、四号梯发货带两托货 + string[] doubleCarryRunElevators = + { "Elevator3","Elevator4" }; - if (doubleCarryRunElevators.Contains(e.elevator_code) && wmsDistaskHs[0].end_floor == 1) - { - LoggerElevatorTask.Information($"【GenTaskExecute】判断为三四号梯任务"); - LoggerElevatorTask.Information($"【GenTaskExecute】现在有{group.Count()}托货"); - // 电梯内放置两托货呼叫电梯下 - if (group.Count() == 2) - { - if (e != null) + if (doubleCarryRunElevators.Contains(e.elevator_code) && wmsDistaskHs[0].end_floor == 1) { - wmsDistaskHs[0].device_id = e.device_id; - wmsDistaskHs[1].device_id = e.device_id; - } - LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}"); - await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); - LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}执行完成"); - } - // 一托货 - else if (group.Count() == 1) - { - // 如果当前电梯没有执行中的任务 则呼叫电梯下 + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】判断为三四号梯任务"); + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】现在有{group.Count()}托货"); + // 电梯内放置两托货呼叫电梯下 + if (group.Count() == 2) + { + if (e != null) + { + wmsDistaskHs[0].device_id = e.device_id; + wmsDistaskHs[1].device_id = e.device_id; + } + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}"); + await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成"); + } + // 一托货 + 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) + 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) + { + if (e != null) + { + wmsDistaskHs[0].device_id = e.device_id; + } + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}"); + await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成"); + } + } + else + { + LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】电梯 {e.elevator_code} 待执行的电梯任务数异常 目前是{group.Count()} 超过了两托"); + } + } + else { + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】判断为非三四号梯任务"); if (e != null) { wmsDistaskHs[0].device_id = e.device_id; } - LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}"); + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}"); await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); - LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}执行完成"); + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成"); } + } - else - { - LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】电梯 {e.elevator_code} 待执行的电梯任务数异常 目前是{group.Count()} 超过了两托"); - } - } - else - { - LoggerElevatorTask.Information($"【GenTaskExecute】判断为非三四号梯任务"); - if (e != null) - { - wmsDistaskHs[0].device_id = e.device_id; - } - LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}"); - await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); - LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}执行完成"); } } - } - - } - catch (Exception ex) - { - LoggerFloor2RackDelivery.LogError($"【ElevatorTaskExceptionHandle】{ex.Message}"); - LoggerFloor2RackDelivery.LogError($"【ElevatorTaskExceptionHandle】{ex.StackTrace}"); - } - finally - { - s_elevatortask.Release(); + catch (ObjectDisposedException ex) + { + LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】 数据库连接异常:{ex.Message}"); + LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】 数据库连接异常:{ex.StackTrace}"); + if (ex.Source == "Npgsql") + db_ElevatorTaskExceptionHandle = _repository.AsSugarClient().CopyNew(); + } + catch (Exception ex) + { + Console.WriteLine("【ElevatorTaskExceptionHandle】" + ex.Message); + LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】 {ex.Message}"); + LoggerElevatorTask.LogError($"【ElevatorTaskExceptionHandle】 {ex.StackTrace}"); + // 数据库连接断开时会报错 + try { await db_ElevatorTaskExceptionHandle.Ado.RollbackTranAsync(); } catch { }; + } + finally + { + s_elevatortask.Release(); + } + }); + index++; } + + Task.WaitAll(taskActions); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs index f44f7d34..bb2e2269 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs @@ -29,6 +29,11 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs /// public string? instockorg_code { get; set; } + /// + /// 入库组织id + /// + public string? instockorg_id { get; set; } + /// /// 供货日期 /// @@ -89,5 +94,10 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs /// public string? warehouse_outstock { get; set; } + /// + /// 入库仓库 + /// + public string? warehouse_instock_id { get; set; } + } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOutstockInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOutstockInput.cs index 4eea13b3..487ed847 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOutstockInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOutstockInput.cs @@ -38,6 +38,11 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs /// public string? outstockorg_code { get; set; } + /// + /// 出库组织编号 + /// + public string? outstockorg_id { get; set; } + /// /// 入库仓库编号 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs index 753f4daf..0c1091a9 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs @@ -34,6 +34,11 @@ public partial class WmsRawmatTransferinstockD : BaseEntity /// public string? matspecification { get; set; } + /// + /// 单位ID + /// + public string? unit_id { get; set; } + /// /// 单位 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index 063f118f..a9650cbd 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -491,6 +491,31 @@ namespace Tnb.WarehouseMgr foreach (WmsDistaskH wmsDistaskH in wmsDistaskHs) { + // 如果是三楼出库任务 扣减电梯任务数 + ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskH.endlocation_id, taskCode = wmsDistaskH.bill_code }; + Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 判断是否在执行取消电梯任务 {JsonConvert.SerializeObject(q)}"); + var e = await _wareHouseService.FindElevatorFromPars(q); + if (e != null) + { + Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行取消电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}"); + WmsElevatorH wmsElevatorH = await _db.Queryable().Where(r => r.elevator_id == e.device_id).FirstAsync(); + if (wmsElevatorH != null) + { + int eleRow = await _db.Updateable().SetColumns(r => r.task_nums == r.task_nums - 1).Where(r => r.id == wmsElevatorH.id).ExecuteCommandAsync(); + Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行取消电梯任务时 任务数变更{eleRow}"); + } + else + { + Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行取消电梯任务时 电梯id{e.device_id}找不到对应电梯资料"); + } + } + else + { + Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 判断不是在执行取消电梯任务"); + } + + + if (wmsDistaskH.startlocation_code.Contains("DT") || wmsDistaskH.endlocation_code.Contains("DT")) { //WmsElevatorUnlockInput wmsElevatorUnlockInput = new (); @@ -590,7 +615,29 @@ namespace Tnb.WarehouseMgr List wmsDistaskHs = _db.Queryable().Where(P => P.bill_code.Contains(input.taskChainCode)).ToList(); foreach (WmsDistaskH wmsDistaskH in wmsDistaskHs) - { + {// 如果是三楼出库任务 扣减电梯任务数 + ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskH.endlocation_id, taskCode = wmsDistaskH.bill_code }; + Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 判断是否在执行电梯任务 {JsonConvert.SerializeObject(q)}"); + var e = await _wareHouseService.FindElevatorFromPars(q); + if (e != null) + { + Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}"); + WmsElevatorH wmsElevatorH = await _db.Queryable().Where(r => r.elevator_id == e.device_id).FirstAsync(); + if (wmsElevatorH != null) + { + int eleRow = await _db.Updateable().SetColumns(r => r.task_nums == r.task_nums - 1).Where(r => r.id == wmsElevatorH.id).ExecuteCommandAsync(); + Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行取消电梯任务时 任务数变更{eleRow}"); + } + else + { + Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 执行电梯任务时 电梯id{e.device_id}找不到对应电梯资料"); + } + } + else + { + Logger.Information($"【TaskChainCallBack】{wmsDistaskH.bill_code} 判断不是在执行电梯任务"); + } + if (wmsDistaskH.startlocation_code.Contains("DT") || wmsDistaskH.endlocation_code.Contains("DT")) { //WmsElevatorUnlockInput wmsElevatorUnlockInput = new (); @@ -874,8 +921,7 @@ namespace Tnb.WarehouseMgr await _db.Updateable().SetColumns(r => new WmsElevatorH { is_use = (int)EnumElevatorUseStatus.空闲, - use_tasks = "", - task_nums = 0 + use_tasks = "" }) .Where(it => it.elevator_id == wmsElevatorH.elevator_id).ExecuteCommandAsync(); @@ -884,14 +930,17 @@ namespace Tnb.WarehouseMgr .Where(r => r.startlocation_code.Contains($"DT") && r.endlocation_code.Contains($"DT") && r.act_start_date == null && r.act_end_date == null && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList(); + int eleUpdateRow = 0; foreach (var item in elevatorTasks) { item.status = WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID; + eleUpdateRow += await _db.Updateable().SetColumns(it => new WmsElevatorH { task_nums = it.task_nums - 1 }).Where(it => item.area_code == it.area_code).ExecuteCommandAsync(); + } int row = await _db.Updateable(elevatorTasks).ExecuteCommandAsync(); Logger.Information($"【WmsElevatorUnlock】操作电梯{input.elevator_code}重置电梯任务{row}条 {string.Join(',', elevatorTasks.Select(r => r.bill_code))}"); - + Logger.Information($"【WmsElevatorUnlock】操作电梯{input.elevator_code}扣减电梯任务数{eleUpdateRow}条 {string.Join(',', elevatorTasks.Select(r => r.bill_code))}"); s_eleUseStatusDic[wmsElevatorH.elevator_id] = (int)EnumElevatorUseStatus.空闲; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs index 0ffdb7db..87098566 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs @@ -1090,7 +1090,7 @@ namespace Tnb.WarehouseMgr wmsRawmatTransferinstockH.contact_person = input.contact_person; wmsRawmatTransferinstockH.tel = input.tel; - var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_code).FirstAsync(); + var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_id).FirstAsync(); if (org_erpExtendField != null) { wmsRawmatTransferinstockH.outstockorg_id = org_erpExtendField.pk_org_v; @@ -1098,8 +1098,8 @@ namespace Tnb.WarehouseMgr } else { - _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_code}在wms系统中未找到!"); - throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_code}在wms系统中未找到!", 500); + _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_id}在wms系统中未找到!"); + throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_id}在wms系统中未找到!", 500); } wmsRawmatTransferinstockH.erp_pk = input.erp_pk; wmsRawmatTransferinstockH.create_id = WmsWareHouseConst.ErpUserId; @@ -1121,6 +1121,7 @@ namespace Tnb.WarehouseMgr var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync(); if (erpExtendField != null) { + msRawmatTransferinstockD.unit_id = erpExtendField.Id; msRawmatTransferinstockD.unit = erpExtendField.EnCode; } else @@ -1158,7 +1159,7 @@ namespace Tnb.WarehouseMgr wmsTransferInstockH.bill_code = Code; wmsTransferInstockH.erp_bill_code = input.transfer_order; - var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_code).FirstAsync(); + var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_id).FirstAsync(); if (org_erpExtendField != null) { wmsTransferInstockH.outstockorg_id = org_erpExtendField.pk_org_v; @@ -1166,8 +1167,8 @@ namespace Tnb.WarehouseMgr } else { - _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_code}在wms系统中未找到!"); - throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_code}在wms系统中未找到!", 500); + _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_id}在wms系统中未找到!"); + throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_id}在wms系统中未找到!", 500); } wmsTransferInstockH.incoming_ware = warehouse_instock.id; wmsTransferInstockH.org_id = WmsWareHouseConst.AdministratorOrgId; @@ -1290,7 +1291,7 @@ namespace Tnb.WarehouseMgr wmsTransferOrderH.create_id = WmsWareHouseConst.ErpUserId; wmsTransferOrderH.create_time = DateTime.Now; wmsTransferOrderH.org_id = WmsWareHouseConst.AdministratorOrgId; - var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.instockorg_code).FirstAsync(); + var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.instockorg_id).FirstAsync(); if (org_erpExtendField != null) { wmsTransferOrderH.instockorg_id = org_erpExtendField.pk_org_v; @@ -1298,8 +1299,8 @@ namespace Tnb.WarehouseMgr } else { - _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.instockorg_code}在wms系统中未找到!"); - throw new AppFriendlyException($@"表头明细中组织{input.instockorg_code}在wms系统中未找到!", 500); + _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.instockorg_id}在wms系统中未找到!"); + throw new AppFriendlyException($@"表头明细中组织{input.instockorg_id}在wms系统中未找到!", 500); } var _erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id) @@ -1315,55 +1316,15 @@ namespace Tnb.WarehouseMgr } await db.Insertable(wmsTransferOrderH).ExecuteCommandAsync(); - List wmsTransferOrderDs = new List(); - foreach (var detail in input.details) - { - WmsTransferOrderD wmsTransferOrderD = new WmsTransferOrderD(); - - wmsTransferOrderD.bill_id = wmsTransferOrderD.id; - wmsTransferOrderD.unit = detail.unit_code; - var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync(); - if (erpExtendField != null) - { - wmsTransferOrderD.unit = erpExtendField.EnCode; - } - else - { - _LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中单位{detail.unit_code}在wms系统中未找到!"); - throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500); - } - - wmsTransferOrderD.qty = detail.qty; - wmsTransferOrderD.batchno = detail.code_batch; - wmsTransferOrderD.erp_line_pk = detail.erp_line_pk; - wmsTransferOrderD.create_id = WmsWareHouseConst.ErpUserId; - wmsTransferOrderD.create_time = DateTime.Now; - wmsTransferOrderD.lineno = detail.lineno; - wmsTransferOrderD.erp_wh_type = detail.warehouse_outstock; - - var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); - if (material != null) - { - wmsTransferOrderD.material_id = material.id; - wmsTransferOrderD.material_code = material.code; - wmsTransferOrderD.material_name = material.name; - wmsTransferOrderD.material_specification = material.material_specification; - } - - wmsTransferOrderDs.Add(wmsTransferOrderD); - } - - await db.Insertable(wmsTransferOrderDs).ExecuteCommandAsync(); - Dictionary dic_WmsErpWarehouseidrelaH = await db.Queryable() - .LeftJoin((a, b) => a.wms_warehousecode == b.whcode) - .Select((a, b) => new - { - a.erp_warehousecode, - b.id, - b.whcode - }) - .ToDictionaryAsync(k => k.erp_warehousecode, v => v.id); + .LeftJoin((a, b) => a.wms_warehousecode == b.whcode) + .Select((a, b) => new + { + a.erp_warehousecode, + b.id, + b.whcode + }) + .ToDictionaryAsync(k => k.erp_warehousecode, v => v.id); foreach (var key in dic_WmsErpWarehouseidrelaH.Keys) { if (dic_WmsErpWarehouseidrelaH[key] == null) @@ -1383,8 +1344,52 @@ namespace Tnb.WarehouseMgr .ToDictionaryAsync(k => k.erp_warehousecode, v => v.whcode); List details_WAREHOUSE_YCL_ID = input.details.Where(r => dic_WmsErpWarehouseidrelaH[r.warehouse_outstock].ToString() == WmsWareHouseConst.WAREHOUSE_YCL_ID).ToList(); - List details_WAREHOUSE_CP_ID = input.details.Where(r => dic_WmsErpWarehouseidrelaH[r.warehouse_outstock].ToString() == WmsWareHouseConst.WAREHOUSE_YCL_ID).ToList(); + List details_WAREHOUSE_CP_ID = input.details.Where(r => dic_WmsErpWarehouseidrelaH[r.warehouse_outstock].ToString() == WmsWareHouseConst.WAREHOUSE_CP_ID).ToList(); + List wmsTransferOrderDs = new List(); + foreach (var detail in input.details) + { + WmsTransferOrderD wmsTransferOrderD = new WmsTransferOrderD(); + + wmsTransferOrderD.bill_id = wmsTransferOrderD.id; + wmsTransferOrderD.unit = detail.unit_code; + var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync(); + if (erpExtendField != null) + { + wmsTransferOrderD.unit_id = erpExtendField.Id; + wmsTransferOrderD.unit = erpExtendField.EnCode; + } + else + { + _LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中单位{detail.unit_code}在wms系统中未找到!"); + throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500); + } + + wmsTransferOrderD.qty = detail.qty; + wmsTransferOrderD.batchno = detail.code_batch; + wmsTransferOrderD.erp_line_pk = detail.erp_line_pk; + wmsTransferOrderD.create_id = WmsWareHouseConst.ErpUserId; + wmsTransferOrderD.create_time = DateTime.Now; + wmsTransferOrderD.lineno = detail.lineno; + wmsTransferOrderD.erp_wh_type = detail.warehouse_outstock; + wmsTransferOrderD.warehouse_code = dic_WmsErpWarehousecoderelaH[detail.warehouse_outstock].ToString(); + wmsTransferOrderD.warehouse_instock_code = detail.warehouse_instock_id; + + var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); + if (material != null) + { + wmsTransferOrderD.material_id = material.id; + wmsTransferOrderD.material_code = material.code; + wmsTransferOrderD.material_name = material.name; + wmsTransferOrderD.material_specification = material.material_specification; + } + + wmsTransferOrderDs.Add(wmsTransferOrderD); + } + + await db.Insertable(wmsTransferOrderDs).ExecuteCommandAsync(); + + if (details_WAREHOUSE_YCL_ID.Count > 0) { WmsRawmatTransferoutstockH wmsRawmatTransferoutstockH = new WmsRawmatTransferoutstockH(); @@ -1394,7 +1399,6 @@ namespace Tnb.WarehouseMgr wmsRawmatTransferoutstockH.create_time = DateTime.Now; wmsRawmatTransferoutstockH.biller = input.biller; wmsRawmatTransferoutstockH.dept_code = input.dept_code; - wmsRawmatTransferoutstockH.warehouse_code = dic_WmsErpWarehousecoderelaH[details_WAREHOUSE_YCL_ID[0].warehouse_outstock].ToString(); wmsRawmatTransferoutstockH.erp_pk = input.erp_pk; wmsRawmatTransferoutstockH.transfer_order_id = wmsTransferOrderH.id; wmsRawmatTransferoutstockH.issuance_status = "0"; @@ -1411,6 +1415,7 @@ namespace Tnb.WarehouseMgr var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync(); if (erpExtendField != null) { + wmsRawmatTransferoutstockD.unit_id = erpExtendField.Id; wmsRawmatTransferoutstockD.unit = erpExtendField.EnCode; } else @@ -1420,6 +1425,8 @@ namespace Tnb.WarehouseMgr } wmsRawmatTransferoutstockD.erp_wh_type = detail.warehouse_outstock; + wmsRawmatTransferoutstockD.warehouse_code = dic_WmsErpWarehousecoderelaH[detail.warehouse_outstock].ToString(); + wmsRawmatTransferoutstockD.warehouse_instock_code = detail.warehouse_instock_id; wmsRawmatTransferoutstockD.qty = detail.qty; wmsRawmatTransferoutstockD.code_batch = detail.code_batch; wmsRawmatTransferoutstockD.erp_line_pk = detail.erp_line_pk; @@ -1450,7 +1457,6 @@ namespace Tnb.WarehouseMgr wmsTransferOutstockH.bill_code = code; wmsTransferOutstockH.create_id = WmsWareHouseConst.ErpUserId; wmsTransferOutstockH.create_time = DateTime.Now; - wmsTransferOutstockH.warehouse_code = dic_WmsErpWarehousecoderelaH[details_WAREHOUSE_CP_ID[0].warehouse_outstock].ToString(); wmsTransferOutstockH.erp_pk = input.erp_pk; wmsTransferOutstockH.transfer_order_id = wmsTransferOrderH.id; wmsTransferOutstockH.issuance_status = "0"; @@ -1476,6 +1482,8 @@ namespace Tnb.WarehouseMgr } + wmsTransferOutstockD.warehouse_code = dic_WmsErpWarehousecoderelaH[detail.warehouse_outstock].ToString(); + wmsTransferOutstockD.warehouse_instock_code = detail.warehouse_instock_id; wmsTransferOutstockD.pr_qty = detail.qty; wmsTransferOutstockD.xf_qty = 0; wmsTransferOutstockD.qty = 0; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 8a830d0c..ac92d875 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -2466,6 +2466,7 @@ namespace Tnb.WarehouseMgr await db.Ado.RollbackTranAsync(); } } + /// /// 任务完成 /// @@ -2483,7 +2484,7 @@ namespace Tnb.WarehouseMgr //更新任务执行表,单据状态为 完成 _ = await db.Updateable().SetColumns(it => new WmsDistaskH { status = WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID, act_end_date = DateTime.Now }).Where(it => input.disTaskIds.Contains(it.id)).ExecuteCommandAsync(); List disTasks = await db.Queryable().InnerJoin((a, b) => a.carry_id == b.id).Where(a => input.disTaskIds.Contains(a.id)).Select((a, b) => new WmsDistaskH { carry_status = b.carry_status }, true).ToListAsync(); - + Logger.Information($"【TaskComplate】 disTasks 值 {JsonConvert.SerializeObject(disTasks)}"); if (disTasks?.Count > 0) { @@ -2491,8 +2492,19 @@ 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(); - //更新电梯任务数量 - _ = await db.Updateable().SetColumns(it => new WmsElevatorH { task_nums = it.task_nums - 1}).Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ExecuteCommandAsync(); + WmsElevatorH wmsElevatorH = await db.Queryable().Where(r => disTasks.Select(x => x.area_code).Contains(r.area_code)).FirstAsync(); + if (wmsElevatorH != null) + { + Logger.LogInformation($"【TaskComplate】更新前电梯{disTasks[0].area_code}信息{JsonConvert.SerializeObject(wmsElevatorH)}"); + //更新电梯任务数量 + int eleUpdateRow = 0; + foreach (var disTask in disTasks) + { + eleUpdateRow += await db.Updateable().SetColumns(it => new WmsElevatorH { task_nums = it.task_nums - 1 }).Where(it => disTask.area_code == it.area_code).ExecuteCommandAsync(); + } + Logger.LogInformation($"【TaskComplate】更新前电梯{disTasks[0].area_code}任务行数{eleUpdateRow}"); + } + // 更新任务数量 _ = 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();