diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index 9d4d1358..1979fdef 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -96,6 +96,8 @@ namespace Tnb.ProductionMgr // 原材料仓内转移 private static Timer? YCLInternalTransfertimer; + // 原材料仓内转移 + private static Timer? elevatorTimer; public SemaphoreSlim s_taskCheckGet = new(1); public SemaphoreSlim s_taskScan = new(1); @@ -1907,10 +1909,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA { try { + await _wareHouseService._s_GenTaskExecute.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).ToList(); + .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))}"); + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】检查到需要恢复/执行的电梯任务{elevatorTasks.Count}条 {string.Join(',', elevatorTasks.Select(x => x.bill_code))}"); if (elevatorTasks?.Count > 0) @@ -1927,10 +1931,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA // 三、四号梯发货带两托货 string[] doubleCarryRunElevators = { - "Elevator3","Elevator4" - }; + "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) { @@ -1939,6 +1945,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA wmsDistaskHs[0].device_id = e.device_id; wmsDistaskHs[1].device_id = e.device_id; } + LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯"); await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); } // 一托货 @@ -1963,23 +1970,28 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } else { + LoggerElevatorTask.Information($"【GenTaskExecute】判断为非三四号梯任务"); if (e != null) { wmsDistaskHs[0].device_id = e.device_id; } + LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯"); await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); } } } + } catch (Exception ex) { LoggerFloor2RackDelivery.LogError($"【ElevatorTaskExceptionHandle】{ex.Message}"); LoggerFloor2RackDelivery.LogError($"【ElevatorTaskExceptionHandle】{ex.StackTrace}"); } - - + finally + { + _wareHouseService._s_GenTaskExecute.Release(); + } } @@ -2606,15 +2618,14 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA // 停用 //PackOutstockServicetimer = new Timer(PackOutstockService, null, TimeSpan.Zero, TimeSpan.FromSeconds(60)); - ElevatorTaskExceptionHandleThread = new Thread(ElevatorTaskExceptionHandle); - ElevatorTaskExceptionHandleThread.Start(); - Floor4DMJ2MJXtimer = new Timer(Floor4DMJ2MJX, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); Floor4MJX2MJCtimer = new Timer(Floor4MJX2MJC, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); F2KTPsupplementtimer = new Timer(F2KTPsupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); YCLInternalTransfertimer = new Timer(YCLInternalTransfer, null, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(185)); + + elevatorTimer = new Timer(ElevatorTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20)); return Task.CompletedTask; } @@ -2647,6 +2658,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA ElevatorTaskExceptionHandleThread.Abort(); F2KTPsupplementtimer?.Dispose(); YCLInternalTransfertimer?.Dispose(); + elevatorTimer?.Dispose(); } #region 日志 diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs index fd4383b9..79e6c71d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs @@ -128,6 +128,19 @@ public class ModuleConsts /// 模块标识-出入库流水记录 todo /// public const string MODULE_WMSOUTINSTOCKDETAIL_ID = "MODULE_WMSOUTINSTOCKDETAIL_ID"; + /// + /// 模块标识-调拨出库单(成品) todo + /// + public const string MODULE_WmsTransferInstock_ID = "MODULE_WmsTransferInstock_ID"; + /// + /// 模块标识-调拨出库单(原材料) todo + /// + public const string MODULE_WmsRawmatTransferoutstock_ID = "MODULE_WmsRawmatTransferoutstock_ID"; + /// + /// 模块标识-物料签收记录 todo + /// + public const string MODULE_WmsMaterialSignH_ID = "MODULE_WmsMaterialSignH_ID"; + /// /// 模块标识-人工空载具入库 todo /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs index 682b0448..8fa89402 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs @@ -23,6 +23,11 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs /// public string? biller { get; set; } + /// + /// 出库仓库 + /// + public string? warehouse_outstock { get; set; } + /// /// 入库组织编号 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialSignD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialSignD.cs new file mode 100644 index 00000000..abc0da02 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialSignD.cs @@ -0,0 +1,82 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 物料签收记录子表 +/// +[SugarTable("wms_material_sign_d")] +public partial class WmsMaterialSignD : BaseEntity +{ + public WmsMaterialSignD() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 主表id + /// + public string? bill_id { get; set; } + + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 条码 + /// + public string? barcode { get; set; } + + /// + /// 物料id + /// + public string? material_id { get; set; } + + /// + /// 物料编码 + /// + public string? material_code { get; set; } + + /// + /// 物料名称 + /// + public string? material_name { get; set; } + + /// + /// 规格型号 + /// + public string? material_specification { get; set; } + + /// + /// 批次 + /// + public string? code_batch { get; set; } + + /// + /// 条码数量 + /// + public string? qty { get; set; } + + /// + /// 签收数量 + /// + public string? sign_qty { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialSignH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialSignH.cs new file mode 100644 index 00000000..d5568ec3 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialSignH.cs @@ -0,0 +1,57 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// wms物料签收记录 +/// +[SugarTable("wms_material_sign_h")] +public partial class WmsMaterialSignH : BaseEntity +{ + public WmsMaterialSignH() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 载具id + /// + public string? carry_id { get; set; } + + /// + /// 载具编码 + /// + public string? carry_code { get; set; } + + /// + /// 签收业务 + /// + public string? business { get; set; } + + /// + /// 回库预任务 + /// + public string? pretask_code { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockD.cs new file mode 100644 index 00000000..01d3b91e --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockD.cs @@ -0,0 +1,92 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 原材料调拨出库表子表 +/// +[SugarTable("wms_rawmat_transferoutstock_d")] +public partial class WmsRawmatTransferoutstockD : BaseEntity +{ + public WmsRawmatTransferoutstockD() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 主表id + /// + public string? bill_id { get; set; } + + /// + /// 物料id + /// + public string? matcode_id { get; set; } + + /// + /// 物料编号 + /// + public string? matcode { get; set; } + + /// + /// 物料描述 + /// + public string? matspecification { get; set; } + + /// + /// 单位 + /// + public string? unit { get; set; } + + /// + /// 出库数量 + /// + public decimal? qty { get; set; } + + /// + /// 实出数量 + /// + public decimal? actual_qty { get; set; } + + /// + /// 批次 + /// + public string? code_batch { get; set; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 扩展字段 + /// + public string? extras { get; set; } + + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 出库仓库 + /// + public string? warehouse_code { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockH.cs new file mode 100644 index 00000000..5d926a56 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockH.cs @@ -0,0 +1,117 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 原材料调拨出库 +/// +[SugarTable("wms_rawmat_transferoutstock_h")] +public partial class WmsRawmatTransferoutstockH : BaseEntity +{ + public WmsRawmatTransferoutstockH() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 原材料调拨出库单号 + /// + public string? bill_code { get; set; } + + /// + /// 联系人 + /// + public string? contact_person { get; set; } + + /// + /// 电话 + /// + public string? tel { get; set; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 扩展字段 + /// + public string? extras { get; set; } + + /// + /// 时间戳 + /// + public string? time_stamp { get; set; } + + /// + /// 单据类型 + /// + public string? document_type { get; set; } + + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 所属组织 + /// + public string? org_id { get; set; } + + /// + /// 流程任务Id + /// + public string? f_flowtaskid { get; set; } + + /// + /// 流程引擎Id + /// + public string? f_flowid { get; set; } + + /// + /// 部门编码 + /// + public string? dept_code { get; set; } + + /// + /// 业务员编码 + /// + public string? biller { get; set; } + + /// + /// 下发状态 + /// + public string? issuance_status { get; set; } + + /// + /// 出库类型 + /// + public string? outstock_type { get; set; } + + /// + /// 交易类型BIP + /// + public string? transaction_type { get; set; } + + /// + /// 出库仓库 + /// + public string? warehouse_code { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockD.cs new file mode 100644 index 00000000..c3478d0d --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockD.cs @@ -0,0 +1,137 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 成品调拨出库子表 +/// +[SugarTable("wms_transfer_outstock_d")] +public partial class WmsTransferOutstockD : BaseEntity +{ + public WmsTransferOutstockD() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 所属组织 + /// + public string? org_id { get; set; } + + /// + /// 出库单ID + /// + public string? bill_id { get; set; } + + /// + /// 执行状态 + /// + public string? status { get; set; } + + /// + /// 物品ID + /// + public string? material_id { get; set; } + + /// + /// 物品代码 + /// + public string? material_code { get; set; } + + /// + /// 主单位 + /// + public string? unit_id { get; set; } + + /// + /// 单位代码 + /// + public string? unit_code { get; set; } + + /// + /// 出库需求数量 + /// + public decimal? pr_qty { get; set; } + + /// + /// 已下发数量 + /// + public decimal? xf_qty { get; set; } + + /// + /// 实际出库数量 + /// + public decimal? qty { get; set; } + + /// + /// 流程任务Id + /// + public string? f_flowtaskid { get; set; } + + /// + /// 流程引擎Id + /// + public string? f_flowid { get; set; } + + /// + /// 规格 + /// + public string? material_specification { get; set; } + + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 批号 + /// + public string? pi_code { get; set; } + + /// + /// 物料描述 + /// + public string? material_desc { get; set; } + + /// + /// 灭菌批号 + /// + public string? miepi_code { get; set; } + + /// + /// 辅单位 + /// + public string? fuunit_id { get; set; } + + /// + /// 型号 + /// + public string? model { get; set; } + + /// + /// 辅数量 + /// + public string? fu_qty { get; set; } + + /// + /// 出库仓库 + /// + public string? warehouse_code { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockH.cs new file mode 100644 index 00000000..17e874c6 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockH.cs @@ -0,0 +1,102 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 成品调拨出库主表 +/// +[SugarTable("wms_transfer_outstock_h")] +public partial class WmsTransferOutstockH : BaseEntity +{ + public WmsTransferOutstockH() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 所属组织 + /// + public string? org_id { get; set; } + + /// + /// 流程任务Id + /// + public string? f_flowtaskid { get; set; } + + /// + /// 流程引擎Id + /// + public string? f_flowid { get; set; } + + /// + /// 审核员 + /// + public string? auditor_id { get; set; } + + /// + /// 审核状态 + /// + public int? audit_status { get; set; } + + /// + /// 出库单号 + /// + public string? bill_code { get; set; } + + /// + /// 出库单创建日期 + /// + public DateTime? bill_date { get; set; } + + /// + /// 单据状态 + /// + public string? status { get; set; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 出库类型 + /// + public string? outstock_type { get; set; } + + /// + /// 下发状态 + /// + public string? issuance_status { get; set; } + + /// + /// 交易类型BIP + /// + public string? transaction_type { get; set; } + + /// + /// 出库仓库 + /// + public string? warehouse_code { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs index 3b9d8b97..41ac9d7a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs @@ -32,6 +32,8 @@ namespace Tnb.WarehouseMgr.Interfaces /// SemaphoreSlim s_taskExecuteSemaphore_F2ZCCOutstock { get; } + SemaphoreSlim _s_GenTaskExecute { get; } + /// /// 入库策略 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index cfabad9e..428fcba9 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -66,6 +66,7 @@ namespace Tnb.WarehouseMgr protected static Dictionary _s_eleUseStatusDic; + public static SemaphoreSlim s_GenTaskExecute = new(1); protected IEventPublisher? EventPublisher { set; get; } protected static string _LoggerFileName = ""; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index c35a16f6..d9be781a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -394,8 +394,15 @@ namespace Tnb.WarehouseMgr _ = await _elevatorControlService.SendOpenCloseCmd(devName, 3); //发送电梯前门开门指令 } + // 3 4号梯只要电梯是当前楼层开门状态就能进 + bool canEnter = false; + if (devName == "Elevator3" || devName == "Elevator4") + { + canEnter = true; + } + if (sysStatus == (int)EnumSysStatus.正常状态 && runStatus == (int)EnumRunStatus.停梯 - && doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲) + && doorStatus == (int)EnumDoorStatus.开门到位保持 && (s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲 || canEnter)) { await _db.Updateable().SetColumns(r => new WmsElevatorH { @@ -732,15 +739,39 @@ namespace Tnb.WarehouseMgr Logger.Information($"【TaskCallback】 根据任务单查找电梯结果 {JsonConvert.SerializeObject(elevator)}"); if (!elevator?.device_id.IsNullOrEmpty() ?? false) { - await _db.Updateable().SetColumns(r => new WmsElevatorH - { - is_use = (int)EnumElevatorUseStatus.空闲, - use_tasks = "" - }).Where(r => r.elevator_id == elevator.device_id).ExecuteCommandAsync(); - s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲; // 根据disTask StartLocationId 起始库位关联电梯获取设备ID location_code.Continas("") var devName = s_elevatorMap[elevator.device_id]?.ToString(); - Logger.Information($"【TaskCallback】 {devName.Match(@"\d+")}#梯,设备名称:{devName},开始进入关门流程 {devName} 变更为空闲 {s_eleUseStatusDic.GetHashCode()} {s_eleUseStatusDic[elevator.device_id]}"); + + // 3 4号梯需要两托货都取出才能变更为空闲 + if (devName == "Elevator3" || devName == "Elevator4") + { + string number = devName.Replace("Elevator", ""); + List elevatorTasks = _db.Queryable() + .Where(r => r.startlocation_code.Contains($"DT-1-{number}") && r.endlocation_code.Contains($"RC") && 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(); + Logger.Information($"【TaskCallback】{devName.Match(@"\d+")}#梯 仍有未取货任务{elevatorTasks}条 {string.Join(',', elevatorTasks.Select(r => r.bill_code))}"); + if (elevatorTasks.Count == 0) + { + await _db.Updateable().SetColumns(r => new WmsElevatorH + { + is_use = (int)EnumElevatorUseStatus.空闲, + use_tasks = "" + }).Where(r => r.elevator_id == elevator.device_id).ExecuteCommandAsync(); + s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲; + Logger.Information($"【TaskCallback】 {devName.Match(@"\d+")}#梯,设备名称:{devName},开始进入关门流程 {devName} 变更为空闲 {s_eleUseStatusDic.GetHashCode()} {s_eleUseStatusDic[elevator.device_id]}"); + } + } + else + { + await _db.Updateable().SetColumns(r => new WmsElevatorH + { + is_use = (int)EnumElevatorUseStatus.空闲, + use_tasks = "" + }).Where(r => r.elevator_id == elevator.device_id).ExecuteCommandAsync(); + s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲; + Logger.Information($"【TaskCallback】 {devName.Match(@"\d+")}#梯,设备名称:{devName},开始进入关门流程 {devName} 变更为空闲 {s_eleUseStatusDic.GetHashCode()} {s_eleUseStatusDic[elevator.device_id]}"); + } + int doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus); Logger.Information($"【TaskCallback】 设备:{devName},门状态:{doorStatus.ToEnum().ToString()}"); if (doorStatus.ToEnum() != EnumDoorStatus.关门到位保持 @@ -829,6 +860,25 @@ namespace Tnb.WarehouseMgr use_tasks = "" }) .Where(it => it.elevator_id == wmsElevatorH.elevator_id).ExecuteCommandAsync(); + + if (input.elevator_code == "Elevator3" || input.elevator_code == "Elevator4") + { + // 成品出库解锁电梯 + string number = input.elevator_code.Replace("Elevator", ""); + List elevatorTasks = _db.Queryable() + .Where(r => r.startlocation_code.Contains($"DT-3-{number}") && r.endlocation_code.Contains($"DT-1-{number}") && 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(); + + foreach (var item in elevatorTasks) + { + item.status = WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID; + } + int row = await _db.Updateable(elevatorTasks).ExecuteCommandAsync(); + Logger.Information($"【WmsElevatorUnlock】操作电梯{input.elevator_code}重置电梯任务{row}条 {string.Join(',', elevatorTasks.Select(r => r.bill_code))}"); + } + + + s_eleUseStatusDic[wmsElevatorH.elevator_id] = (int)EnumElevatorUseStatus.空闲; } catch (Exception ex) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs index 31f21d2d..de8eda6f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs @@ -1,4 +1,5 @@ -using System.Text; +using System.Collections.Generic; +using System.Text; using Aop.Api.Domain; using JNPF.Common.Enums; using JNPF.DependencyInjection; @@ -979,6 +980,13 @@ namespace Tnb.WarehouseMgr throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500); } + BasWarehouse warehouse_outstock = await db.Queryable().Where(r => r.whcode == input.warehouse_outstock).FirstAsync(); + if (warehouse_outstock == null) + { + _LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到出库仓库{input.warehouse_outstock}的档案记录!"); + return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到出库仓库{input.warehouse_outstock}的档案记录!"); + } + try { await db.Ado.BeginTranAsync(); @@ -1036,6 +1044,27 @@ namespace Tnb.WarehouseMgr await db.Insertable(wmsTransferOrderDs).ExecuteCommandAsync(); + if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID) + { + WmsRawmatTransferoutstockH wmsRawmatTransferoutstockH = new WmsRawmatTransferoutstockH(); + + + List wmsRawmatTransferoutstockD = new List (); + + + await db.Insertable(wmsRawmatTransferoutstockH).ExecuteCommandAsync(); + await db.Insertable(wmsRawmatTransferoutstockD).ExecuteCommandAsync(); + } + else if(warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_CP_ID) + { + WmsTransferInstockH wmsTransferInstockH = new WmsTransferInstockH(); + + List wmsTransferInstockD = new List(); + + await db.Insertable(wmsTransferInstockH).ExecuteCommandAsync(); + await db.Insertable(wmsTransferInstockD).ExecuteCommandAsync(); + } + await db.Ado.CommitTranAsync(); LoggerErp2Mes.LogInformation($"【TransferOrder】成功生成单据:{Code}"); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index c848cc61..5b092ced 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -93,7 +93,11 @@ namespace Tnb.WarehouseMgr public Func AddUnExecuteTask { get; set; } - + public SemaphoreSlim _s_GenTaskExecute + { + get { return s_GenTaskExecute; } + } + public SemaphoreSlim s_taskExecuteSemaphore_YCLInstock { get { return _s_taskExecuteSemaphore_YCLInstock; } @@ -1615,49 +1619,55 @@ namespace Tnb.WarehouseMgr var e = await FindElevatorFromPars(q); Logger.Information($"【GenTaskExecute】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}"); - // 三、四号梯发货带两托货 + // 三、四号梯发货带两托货进定时任务 string[] doubleCarryRunElevators = new string[2] { "Elevator3","Elevator4" }; if (doubleCarryRunElevators.Contains(e.elevator_code) && wmsDistaskHs[0].end_floor == 1) { - // 电梯内放置两托货呼叫电梯下 - if (group.Count() == 2) - { - if (e != null) - { - wmsDistaskHs[0].device_id = e.device_id; - wmsDistaskHs[1].device_id = e.device_id; - } - _ = ExecuteTargetFloorTask(wmsDistaskHs); - } - // 一托货 - else if (group.Count() == 1) - { - // 如果当前电梯没有执行中的任务 则呼叫电梯下 + //Logger.Information($"【GenTaskExecute】判断为三四号梯任务"); + //Logger.Information($"【GenTaskExecute】现在有{group.Count()}托货"); + //// 电梯内放置两托货呼叫电梯下 + //if (group.Count() == 2) + //{ + // if (e != null) + // { + // wmsDistaskHs[0].device_id = e.device_id; + // wmsDistaskHs[1].device_id = e.device_id; + // } + // Logger.Information($"【GenTaskExecute】呼叫电梯"); + // _ = ExecuteTargetFloorTask(wmsDistaskHs); + //} + //// 一托货 + //else if (group.Count() == 1) + //{ + // // 如果当前电梯没有执行中的任务 则呼叫电梯下 - if (_db.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; - } - _ = ExecuteTargetFloorTask(wmsDistaskHs); - } - } - else - { - Logger.LogError($"电梯 {e.elevator_code} 待执行的电梯任务数异常 目前是{group.Count()} 超过了两托"); - } + // if (_db.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) + // { + // Logger.Information($"【GenTaskExecute】判断为三四号梯任务 没有执行中的任务 呼叫电梯"); + // if (e != null) + // { + // wmsDistaskHs[0].device_id = e.device_id; + // } + // _ = ExecuteTargetFloorTask(wmsDistaskHs); + // } + //} + //else + //{ + // Logger.LogError($"电梯 {e.elevator_code} 待执行的电梯任务数异常 目前是{group.Count()} 超过了两托"); + //} } else { + Logger.Information($"【GenTaskExecute】判断为非三四号梯任务"); if (e != null) { wmsDistaskHs[0].device_id = e.device_id; } + Logger.Information($"【GenTaskExecute】呼叫电梯"); _ = ExecuteTargetFloorTask(wmsDistaskHs); } } @@ -2511,14 +2521,16 @@ namespace Tnb.WarehouseMgr }); } - WmsCarryCode carryCode = new() + List carrycodes = _db.Queryable().Where(r => r.carry_id == carry.id).ToList(); + carrycodes.ForEach(r => { - warehouse_id = locWhIdMap.ContainsKey(endLocId) ? locWhIdMap[endLocId].ToString() : "", - location_id = multiList[i].endlocation_id, - location_code = multiList[i].endlocation_code - }; + r.warehouse_id = locWhIdMap.ContainsKey(endLocId) ? locWhIdMap[endLocId].ToString() : ""; + r.location_id = multiList[i].endlocation_id; + r.location_code = multiList[i].endlocation_code; + carryCodeIts.Add(r); + }); + carryIts.Add(carry); - carryCodeIts.Add(carryCode); BasLocation loc = new() { @@ -2544,7 +2556,7 @@ namespace Tnb.WarehouseMgr _ = await _db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code, it.instock_time }).ExecuteCommandAsync(); Logger.Information($"【TaskComplate】 更新载具 {JsonConvert.SerializeObject(carryIts)}"); //更新条码的库位和仓库信息 - _ = await _db.Updateable(carryCodeIts).UpdateColumns(it => new { it.warehouse_id, it.location_id, it.location_code }).Where(it => multiList.Select(x => x.carry_id).Contains(it.carry_id)).ExecuteCommandAsync(); + _ = await _db.Updateable(carryCodeIts).UpdateColumns(it => new { it.warehouse_id, it.location_id, it.location_code }).ExecuteCommandAsync(); //更新库位信息,使用状态为 使用,锁定状态为未锁定 _ = await _db.Updateable(locIts).UpdateColumns(it => new { it.is_use, it.is_lock }).ExecuteCommandAsync(); Logger.Information($"【TaskComplate】 更新库位 {JsonConvert.SerializeObject(locIts)}"); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs new file mode 100644 index 00000000..426e0516 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Aop.Api.Domain; +using JNPF.Common.Core.Manager; +using JNPF.Common.Dtos.VisualDev; +using JNPF.Common.Enums; +using JNPF.FriendlyException; +using JNPF.Systems.Interfaces.System; +using JNPF.VisualDev; +using JNPF.VisualDev.Interfaces; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using SqlSugar; +using Tnb.BasicData.Entities; +using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Consts; +using Tnb.WarehouseMgr.Entities.Dto.Inputs; +using Tnb.WarehouseMgr.Entities.Entity; +using Tnb.WarehouseMgr.Interfaces; + +namespace Tnb.WarehouseMgr +{ + /// + /// 调拨出库单(原材料) + /// + [OverideVisualDev(ModuleConsts.MODULE_WmsMaterialSignH_ID)] + public class WmsMaterialSignHService : BaseWareHouseService + { + private readonly ISqlSugarClient _db; + private readonly IUserManager _userManager; + private readonly IBillRullService _billRullService; + private readonly IRunService _runService; + private readonly IVisualDevService _visualDevService; + private readonly IWmsPDAScanInStockService _wmsPDAScanInStock; + public WmsMaterialSignHService( + ISqlSugarRepository repository, + IUserManager userManager, + IBillRullService billRullService, + IRunService runService, + IVisualDevService visualDevService, + IWmsPDAScanInStockService wmsPDAScanInStock) + { + _db = repository.AsSugarClient(); + _userManager = userManager; + _billRullService = billRullService; + _runService = runService; + _visualDevService = visualDevService; + _wmsPDAScanInStock = wmsPDAScanInStock; + } + + + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferoutstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferoutstockService.cs new file mode 100644 index 00000000..78447afb --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferoutstockService.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Aop.Api.Domain; +using JNPF.Common.Core.Manager; +using JNPF.Common.Dtos.VisualDev; +using JNPF.Common.Enums; +using JNPF.FriendlyException; +using JNPF.Systems.Interfaces.System; +using JNPF.VisualDev; +using JNPF.VisualDev.Interfaces; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using SqlSugar; +using Tnb.BasicData.Entities; +using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Consts; +using Tnb.WarehouseMgr.Entities.Dto.Inputs; +using Tnb.WarehouseMgr.Entities.Entity; +using Tnb.WarehouseMgr.Interfaces; + +namespace Tnb.WarehouseMgr +{ + /// + /// 调拨出库单(原材料) + /// + [OverideVisualDev(ModuleConsts.MODULE_WmsRawmatTransferoutstock_ID)] + public class WmsRawmatTransferoutstockService : BaseWareHouseService + { + private readonly ISqlSugarClient _db; + private readonly IUserManager _userManager; + private readonly IBillRullService _billRullService; + private readonly IRunService _runService; + private readonly IVisualDevService _visualDevService; + private readonly IWmsPDAScanInStockService _wmsPDAScanInStock; + public WmsRawmatTransferoutstockService( + ISqlSugarRepository repository, + IUserManager userManager, + IBillRullService billRullService, + IRunService runService, + IVisualDevService visualDevService, + IWmsPDAScanInStockService wmsPDAScanInStock) + { + _db = repository.AsSugarClient(); + _userManager = userManager; + _billRullService = billRullService; + _runService = runService; + _visualDevService = visualDevService; + _wmsPDAScanInStock = wmsPDAScanInStock; + } + + + /// + /// 人工扫码入库 + /// + /// + /// + /// + /// + [HttpPost] + public async Task ArtificialInstock(ArtificialInstockInput input) + { + try + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + await _db.Ado.BeginTranAsync(); + + BasLocation startlocationn = await _db.Queryable().Where(r => r.location_code == input.startlocation_code).FirstAsync(); + if (startlocationn == null) + { + throw new AppFriendlyException($"【ArtificialInstock】库位{input.startlocation_code}不存在", 500); + } + if (startlocationn.is_lock == 1) + { + throw new AppFriendlyException($"【ArtificialInstock】库位{input.startlocation_code}已锁定", 500); + } + WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.carry_code == input.carry_code).FirstAsync(); + if (wmsCarryH == null) + { + throw new AppFriendlyException($"【ArtificialInstock】载具{input.carry_code}不存在", 500); + } + if (wmsCarryH.is_lock == 1) + { + throw new AppFriendlyException($"【ArtificialInstock】载具{input.carry_code}已锁定", 500); + } + if (wmsCarryH.carry_status != "1") + { + throw new AppFriendlyException($"【ArtificialInstock】载具{input.carry_code}未绑定物料", 500); + } + + BasLocation carrryLoc = await _db.Queryable().Where(r => r.id == wmsCarryH.location_id).FirstAsync(); + if (carrryLoc != null && carrryLoc.is_type == "0") + { + throw new Exception($"托盘{wmsCarryH.carry_code}在存储库位中,不能绑定!"); + } + + switch (input.warehouse_id) + { + case WmsWareHouseConst.WAREHOUSE_YCL_ID: + { + var WmsCarryCode = _db.Queryable().Where(it => it.carry_id == wmsCarryH.id).OrderByDescending(it => it.id).First(); + + if (WmsCarryCode != null) + { + VisualDevModelDataCrInput input2 = new VisualDevModelDataCrInput(); + input2.data = new Dictionary(); + input2.data.Add("barcode", input.carry_code); + input2.data.Add("codeqty", WmsCarryCode.codeqty);//条码数量 + input2.data.Add("material_code", WmsCarryCode.material_code); + input2.data.Add("extras", input.startlocation_code);//location_code + input2.data.Add("warehouse_id", "1");//TEST + input2.data.Add("bill_code", "");//采购收货单号 + input2.data.Add("code_batch", WmsCarryCode.code_batch!);//批次 + input2.data.Add("material_specification", WmsCarryCode.material_specification!);//规格型号 + input2.data.Add("container_no", WmsCarryCode.container_no!);//箱号 + input2.data.Add("material_id", WmsCarryCode.material_id); + input2.data.Add("物料条码", WmsCarryCode.barcode); + input2.data.Add("id", null); + _wmsPDAScanInStock.ScanInStockByRedis(input2, _db).Wait(); + + WmsArtificialInstock wmsArtificialInstock = new WmsArtificialInstock(); + wmsArtificialInstock.carry_id = wmsCarryH.id; + wmsArtificialInstock.carry_code = wmsCarryH.carry_code; + wmsArtificialInstock.org_id = input.org; + wmsArtificialInstock.create_id = input.create_id; + wmsArtificialInstock.create_time = DateTime.Now; + wmsArtificialInstock.location_id = startlocationn.id; + wmsArtificialInstock.location_code = startlocationn.location_code; + wmsArtificialInstock.warehouse_id = input.warehouse_id; + await _db.Insertable(wmsArtificialInstock).ExecuteCommandAsync(); + } + else + { + throw new AppFriendlyException($"【ArtificialInstock】载具 {input.carry_code} 未绑定物料条码!", 500); + } + break; + } + } + + await _db.Ado.CommitTranAsync(); + } + catch (Exception ex) + { + Logger.LogError($"【ArtificialInstock】 {ex.Message}"); + Logger.LogError($"【ArtificialInstock】 {ex.StackTrace}"); + await _db.Ado.RollbackTranAsync(); + throw new AppFriendlyException($"【ArtificialInstock】人工扫码入库失败 {ex.Message}", 500); + } + } + + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferInstockService.cs new file mode 100644 index 00000000..583de4dd --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferInstockService.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Aop.Api.Domain; +using JNPF.Common.Core.Manager; +using JNPF.Common.Dtos.VisualDev; +using JNPF.Common.Enums; +using JNPF.FriendlyException; +using JNPF.Systems.Interfaces.System; +using JNPF.VisualDev; +using JNPF.VisualDev.Interfaces; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using SqlSugar; +using Tnb.BasicData.Entities; +using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Consts; +using Tnb.WarehouseMgr.Entities.Dto.Inputs; +using Tnb.WarehouseMgr.Entities.Entity; +using Tnb.WarehouseMgr.Interfaces; + +namespace Tnb.WarehouseMgr +{ + /// + /// 调拨出库单(成品) + /// + [OverideVisualDev(ModuleConsts.MODULE_WmsTransferInstock_ID)] + public class WmsTransferInstockService : BaseWareHouseService + { + private readonly ISqlSugarClient _db; + private readonly IUserManager _userManager; + private readonly IBillRullService _billRullService; + private readonly IRunService _runService; + private readonly IVisualDevService _visualDevService; + private readonly IWmsPDAScanInStockService _wmsPDAScanInStock; + public WmsTransferInstockService( + ISqlSugarRepository repository, + IUserManager userManager, + IBillRullService billRullService, + IRunService runService, + IVisualDevService visualDevService, + IWmsPDAScanInStockService wmsPDAScanInStock) + { + _db = repository.AsSugarClient(); + _userManager = userManager; + _billRullService = billRullService; + _runService = runService; + _visualDevService = visualDevService; + _wmsPDAScanInStock = wmsPDAScanInStock; + } + + + /// + /// 人工扫码入库 + /// + /// + /// + /// + /// + [HttpPost] + public async Task ArtificialInstock(ArtificialInstockInput input) + { + try + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + await _db.Ado.BeginTranAsync(); + + BasLocation startlocationn = await _db.Queryable().Where(r => r.location_code == input.startlocation_code).FirstAsync(); + if (startlocationn == null) + { + throw new AppFriendlyException($"【ArtificialInstock】库位{input.startlocation_code}不存在", 500); + } + if (startlocationn.is_lock == 1) + { + throw new AppFriendlyException($"【ArtificialInstock】库位{input.startlocation_code}已锁定", 500); + } + WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.carry_code == input.carry_code).FirstAsync(); + if (wmsCarryH == null) + { + throw new AppFriendlyException($"【ArtificialInstock】载具{input.carry_code}不存在", 500); + } + if (wmsCarryH.is_lock == 1) + { + throw new AppFriendlyException($"【ArtificialInstock】载具{input.carry_code}已锁定", 500); + } + if (wmsCarryH.carry_status != "1") + { + throw new AppFriendlyException($"【ArtificialInstock】载具{input.carry_code}未绑定物料", 500); + } + + BasLocation carrryLoc = await _db.Queryable().Where(r => r.id == wmsCarryH.location_id).FirstAsync(); + if (carrryLoc != null && carrryLoc.is_type == "0") + { + throw new Exception($"托盘{wmsCarryH.carry_code}在存储库位中,不能绑定!"); + } + + switch (input.warehouse_id) + { + case WmsWareHouseConst.WAREHOUSE_YCL_ID: + { + var WmsCarryCode = _db.Queryable().Where(it => it.carry_id == wmsCarryH.id).OrderByDescending(it => it.id).First(); + + if (WmsCarryCode != null) + { + VisualDevModelDataCrInput input2 = new VisualDevModelDataCrInput(); + input2.data = new Dictionary(); + input2.data.Add("barcode", input.carry_code); + input2.data.Add("codeqty", WmsCarryCode.codeqty);//条码数量 + input2.data.Add("material_code", WmsCarryCode.material_code); + input2.data.Add("extras", input.startlocation_code);//location_code + input2.data.Add("warehouse_id", "1");//TEST + input2.data.Add("bill_code", "");//采购收货单号 + input2.data.Add("code_batch", WmsCarryCode.code_batch!);//批次 + input2.data.Add("material_specification", WmsCarryCode.material_specification!);//规格型号 + input2.data.Add("container_no", WmsCarryCode.container_no!);//箱号 + input2.data.Add("material_id", WmsCarryCode.material_id); + input2.data.Add("物料条码", WmsCarryCode.barcode); + input2.data.Add("id", null); + _wmsPDAScanInStock.ScanInStockByRedis(input2, _db).Wait(); + + WmsArtificialInstock wmsArtificialInstock = new WmsArtificialInstock(); + wmsArtificialInstock.carry_id = wmsCarryH.id; + wmsArtificialInstock.carry_code = wmsCarryH.carry_code; + wmsArtificialInstock.org_id = input.org; + wmsArtificialInstock.create_id = input.create_id; + wmsArtificialInstock.create_time = DateTime.Now; + wmsArtificialInstock.location_id = startlocationn.id; + wmsArtificialInstock.location_code = startlocationn.location_code; + wmsArtificialInstock.warehouse_id = input.warehouse_id; + await _db.Insertable(wmsArtificialInstock).ExecuteCommandAsync(); + } + else + { + throw new AppFriendlyException($"【ArtificialInstock】载具 {input.carry_code} 未绑定物料条码!", 500); + } + break; + } + } + + await _db.Ado.CommitTranAsync(); + } + catch (Exception ex) + { + Logger.LogError($"【ArtificialInstock】 {ex.Message}"); + Logger.LogError($"【ArtificialInstock】 {ex.StackTrace}"); + await _db.Ado.RollbackTranAsync(); + throw new AppFriendlyException($"【ArtificialInstock】人工扫码入库失败 {ex.Message}", 500); + } + } + + } +}