From c1b4d60778f8366bd6fc293edf08fdf275b0906f Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Thu, 12 Sep 2024 14:07:03 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=B0=E5=9C=BA=E9=97=AE=E9=A2=98=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.ProductionMgr/RedisBackGround.cs | 40 +-- .../IWareHouseService.cs | 2 + .../Tnb.WarehouseMgr/DeviceProviderService.cs | 7 +- .../Tnb.WarehouseMgr/ErpToWmsService.cs | 280 +++++++++++++++++- .../Tnb.WarehouseMgr/WareHouseService.cs | 64 ++-- .../Tnb.WarehouseMgr/WmsCarryBindService.cs | 1 + .../WmsCarryStockReportService.cs | 86 +++--- .../WmsEmptyOutstockService .cs | 5 +- .../WmsMaterialTransferService.cs | 9 +- .../Tnb.WarehouseMgr/WmsPDADeliveryService.cs | 12 +- 10 files changed, 406 insertions(+), 100 deletions(-) diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index 17dc335d..c4a90176 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -2085,10 +2085,10 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA if (s_agvElevatortaskDic.CurrentCount == 0) return; + await s_agvElevatortaskDic.WaitAsync(); var floor3outstock = await db_agvElevatorTaskExceptionHandles.Queryable().Where(p => p.key == "floor3outstock").FirstAsync(); if (floor3outstock != null && floor3outstock.value == "0") return; - await s_agvElevatortaskDic.WaitAsync(); try { @@ -2218,28 +2218,28 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA // 检查有没有同时从同个暂存区分区发到同个电梯任务 - if (wmsElevatorH.task_nums + wmsElevatorH.carry_count > 0) - { - List currentAreaLocs = await db_agvElevatorTaskExceptionHandles.Queryable().Where(r => r.name == 切换发货区).Select(r => r.location_code).ToListAsync(); - // 同个暂存分区同个电梯的托盘 - List _carrys = await db_agvElevatorTaskExceptionHandles.Queryable() - .InnerJoin((a, b) => currentAreaLocs.Contains(a.startlocation_code) && a.carry_code == b.carry_code - && a.endlocation_code == b.startlocation_code && a.endlocation_code == $"DT-3-{elevatorSno}") - .Where((a, b) => (a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID && a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID) - || (b.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID && b.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID)).Select((a, b) => a.carry_code).ToListAsync(); + //if (wmsElevatorH.task_nums + wmsElevatorH.carry_count > 0) + //{ + // List currentAreaLocs = await db_agvElevatorTaskExceptionHandles.Queryable().Where(r => r.name == 切换发货区).Select(r => r.location_code).ToListAsync(); + // // 同个暂存分区同个电梯的托盘 + // List _carrys = await db_agvElevatorTaskExceptionHandles.Queryable() + // .InnerJoin((a, b) => currentAreaLocs.Contains(a.startlocation_code) && a.carry_code == b.carry_code + // && a.endlocation_code == b.startlocation_code && a.endlocation_code == $"DT-3-{elevatorSno}") + // .Where((a, b) => (a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID && a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID) + // || (b.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID && b.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID)).Select((a, b) => a.carry_code).ToListAsync(); - if (_carrys.Count > 0) - { - LoggerAgvElevatorTask.LogInformation($"出现同时从同个暂存区分区发到同个电梯{wmsElevatorH.elevator_code}的托盘{string.Join(',', _carrys)},等待托盘任务完成"); - continue; - } - } + // if (_carrys.Count > 0) + // { + // LoggerAgvElevatorTask.LogInformation($"出现同时从同个暂存区分区发到同个电梯{wmsElevatorH.elevator_code}的托盘{string.Join(',', _carrys)},等待托盘任务完成"); + // continue; + // } + //} floor3FirstSelectElevatorTasknums.value = (int.Parse(floor3FirstSelectElevatorTasknums.value) - 1).ToString(); if (floor3FirstSelectElevatorTasknums.value == "0") { - LoggerAgvElevatorTask.LogInformation($"重置首选电梯为{(wmsElevatorH.elevator_code == "Elevator3" ? "Elevator4" : "Elevator3")}"); + LoggerAgvElevatorTask.LogInformation($"下次任务下发后重置首选电梯为{(wmsElevatorH.elevator_code == "Elevator3" ? "Elevator4" : "Elevator3")}"); // 选择另一个电梯座位首选电梯 await db_agvElevatorTaskExceptionHandles.Updateable().SetColumns(r => r.value == (r.value == "Elevator3" ? "Elevator4" : "Elevator3")) .Where(r => r.key == "floor3FirstSelectElevator").ExecuteCommandAsync(); @@ -2309,7 +2309,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA if (isOk) { LoggerAgvElevatorTask.LogInformation($"成功下发预任务 {string.Join(',', preTasks.Select(r => r.bill_code))}"); - LoggerAgvElevatorTask.LogInformation($"成功下发载具 {string.Join(',', preTasks.Select(r => r.carry_code))}"); + LoggerAgvElevatorTask.LogInformation($"成功下发载具 {string.Join(',', preTasks.Distinct().Select(r => r.carry_code))}"); //查询库位表 BasLocation location = await db_agvElevatorTaskExceptionHandles.Queryable().SingleAsync(it => it.id == startloc.id); { @@ -2992,8 +2992,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA 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)); - agvelevatorTimer = new Timer(AgvelevatorTimerTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20)); + elevatorTimer = new Timer(ElevatorTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10)); + agvelevatorTimer = new Timer(AgvelevatorTimerTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10)); return Task.CompletedTask; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs index da180542..523cb980 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs @@ -236,5 +236,7 @@ namespace Tnb.WarehouseMgr.Interfaces Task FindElevatorFromPars(ElevagorInfoQuery input); Task CreateCodeRules(string prefix, string custom, int watercodeLength); + + public Task CallingLanding(List agvDTTasks); } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index 0446da03..7150463b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -92,9 +92,9 @@ namespace Tnb.WarehouseMgr { Logger.Information($"【LoadConfirm】接收到WCS取货确认信号.................. {JsonConvert.SerializeObject(input)}"); + var dis = _db.Queryable().Where(P => P.bill_code == input.taskCode).First(); try { - var dis = _db.Queryable().Where(P => P.bill_code == input.taskCode).First(); if (dis.area_code == "ZSCJ001") { var flag = await _wareHouseService.Check(dis.startlocation_code, "LOAD"); @@ -900,6 +900,11 @@ namespace Tnb.WarehouseMgr _ = await _db.Deleteable(elevatorQueueItem).ExecuteCommandAsync(); } + // 三楼出库取货完成时呼叫电梯 + if (disTask.area_code == "FC") + { + _wareHouseService.CallingLanding(new List() { disTask }); + } // 中储仓KIVA取货确认后不需要再发送信号给输送线 if (disTask.startlocation_code == "ZSSSXCTU01" || disTask.startlocation_code == "ZSSSXCTU02") diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs index 82ba6289..171f124d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs @@ -939,7 +939,284 @@ namespace Tnb.WarehouseMgr } } + /// + /// 转库单 + /// + [HttpPost, NonUnify, AllowAnonymous] + public async Task MaterialTransferBatch(List inputs) + { + LoggerErp2Mes.LogInformation($"【MaterialTransfer】ERP传入数据:{JsonConvert.SerializeObject(inputs)}"); + var db = _repository.AsSugarClient(); + List error_erpbillcodes = new List(); + foreach (MaterialTransferInput input in inputs) + { + try + { + WmsErpWarehouserelaH wmsErpWarehouserelaHout = await db.Queryable().Where(r => r.erp_warehousecode == input.warehouse_outstock).FirstAsync(); + if (wmsErpWarehouserelaHout == null) + { + _LoggerErp2Mes.LogWarning($@"【TransferOrder】不存在erp仓库类型{input.warehouse_outstock}对应wms系统的映射关系!"); + throw new AppFriendlyException($@"不存在erp仓库类型{input.warehouse_outstock}对应wms系统的映射关系!", 500); + } + + WmsErpWarehouserelaH wmsErpWarehouserelaHin = await db.Queryable().Where(r => r.erp_warehousecode == input.warehouse_instock).FirstAsync(); + if (wmsErpWarehouserelaHin == null) + { + _LoggerErp2Mes.LogWarning($@"【TransferOrder】不存在erp仓库类型{input.warehouse_instock}对应wms系统的映射关系!"); + throw new AppFriendlyException($@"不存在erp仓库类型{input.warehouse_instock}对应wms系统的映射关系!", 500); + } + + string warehouse_outstock_code = wmsErpWarehouserelaHout.wms_warehousecode; + string warehouse_instock_code = wmsErpWarehouserelaHin.wms_warehousecode; + + BasWarehouse warehouse_outstock = await db.Queryable().Where(r => r.whcode == warehouse_outstock_code).FirstAsync(); + BasWarehouse warehouse_instock = await db.Queryable().Where(r => r.whcode == warehouse_instock_code).FirstAsync(); + if (warehouse_outstock == null) + { + _LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到出库仓库{input.warehouse_outstock}的档案记录!"); + throw new AppFriendlyException($"无法查询到出库仓库{input.warehouse_outstock}的档案记录!", 500); + } + if (warehouse_instock == null) + { + _LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到入库仓库{input.warehouse_instock}的档案记录!"); + throw new AppFriendlyException($"无法查询到入库仓库{input.warehouse_instock}的档案记录!", 500); + } + + if (string.IsNullOrEmpty(input.erp_pk)) + { + _LoggerErp2Mes.LogWarning($"【MaterialTransfer】主表主键不能为空!"); + throw new AppFriendlyException($@"主表主键不能为空!", 500); + } + + int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count(); + if (count_erp_line_pk > 0) + { + _LoggerErp2Mes.LogWarning($@"【MaterialTransfer】子表主键不能为空!"); + throw new AppFriendlyException($@"子表主键不能为空!", 500); + } + + string transfer_type = ""; + // 中储仓到暂存仓 + if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID + && (warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZCC_ID || warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_HCC_ID)) + { + int count = input.details.Where(r => string.IsNullOrEmpty(r.station_code)).Count(); + if (count > 0) + { + _LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在未填写工位的明细!"); + throw new AppFriendlyException($@"表体存在未填写工位的明细!", 500); + } + + transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CGCK_CODE; + } + else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_CP_ID) + { + transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBRK_CODE; + } + else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_JZGL_ID) + { + transfer_type = WmsWareHouseConst.MATERIALTRANSFER_JZGLRK_CODE; + } + else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_ID) + { + transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CROSSLAYER_CODE; + } + + // 暂时其他情况都算齐套出入库类型(未定) + else + { + int count = input.details.Where(r => string.IsNullOrEmpty(r.station_code)).Count(); + if (count > 0) + { + _LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在未填写工位的明细!"); + throw new AppFriendlyException($@"表体存在未填写工位的明细!", 500); + } + + transfer_type = WmsWareHouseConst.MATERIALTRANSFER_QTCRK_CODE; + } + + + //var wmsMaterialTransferdsDistinct = input.details.Select(r => new + //{ + // material_id = r.material_code, + // code_batch = r.code_batch, + //}).Distinct(); + //if (wmsMaterialTransferdsDistinct.Count() < input.details.Count) + //{ + // _LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在物料和批号重复的明细!"); + // throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500); + //} + + await db.Ado.BeginTranAsync(); + + // 判断是否重复传输 + WmsMaterialTransfer wmsMaterialTransferRep = await db.Queryable().Where(r => r.erp_bill_code == input.bill_code).FirstAsync(); + if (wmsMaterialTransferRep != null) + { + // 判断单据是否已经下发 + List _wmsMaterialTransferDs = await db.Queryable().Where(r => r.bill_id == wmsMaterialTransferRep.id).ToListAsync(); + bool isxf = _wmsMaterialTransferDs.Where(r => r.yxfqty > 0).Any(); + if (isxf) + { + _LoggerErp2Mes.LogWarning($@"【TransferOutstock】wms已下发使用转库单{input.bill_code}!"); + throw new AppFriendlyException($@"wms已下发使用转库单{input.bill_code}!", 500); + } + else // 删除数据重新插入 + { + await db.Deleteable().Where(r => r.id == wmsMaterialTransferRep.id).ExecuteCommandAsync(); + await db.Deleteable().Where(r => r.bill_id == wmsMaterialTransferRep.id).ExecuteCommandAsync(); + } + } + + List details = input.details.Where(r => r.qty > 0).ToList(); + List details_return = input.details.Where(r => r.qty < 0).ToList(); + + if (details.Count > 0) + { + WmsMaterialTransfer wmsMaterialTransfer = new WmsMaterialTransfer(); + string Code = await _billRuleService.GetBillNumber("MaterialTransfer"); + wmsMaterialTransfer.bill_code = Code; + wmsMaterialTransfer.status = WmsWareHouseConst.BILLSTATUS_ADD_ID; + wmsMaterialTransfer.bill_date = DateTime.Now; + wmsMaterialTransfer.warehouse_outstock = warehouse_outstock.id; + wmsMaterialTransfer.warehouse_instock = warehouse_instock.id; + wmsMaterialTransfer.biller_out = input.biller_out; + wmsMaterialTransfer.depart_out = input.depart_out; + wmsMaterialTransfer.biller_in = input.biller_in; + wmsMaterialTransfer.depart_in = input.depart_in; + wmsMaterialTransfer.deliver_date = input.deliver_date; + wmsMaterialTransfer.arrival_date = input.arrival_date; + wmsMaterialTransfer.create_id = WmsWareHouseConst.ErpUserId; + wmsMaterialTransfer.create_time = DateTime.Now; + wmsMaterialTransfer.org_id = WmsWareHouseConst.AdministratorOrgId; + wmsMaterialTransfer.erp_bill_code = input.bill_code; + wmsMaterialTransfer.type = transfer_type; + wmsMaterialTransfer.erp_pk = input.erp_pk; + + await db.Insertable(wmsMaterialTransfer).ExecuteCommandAsync(); + + List wmsMaterialTransferDs = new List(); + foreach (var detail in details) + { + WmsMaterialTransferD wmsMaterialTransferD = new WmsMaterialTransferD(); + wmsMaterialTransferD.lineno = detail.lineno; + wmsMaterialTransferD.material_code = detail.material_code; + wmsMaterialTransferD.code_batch = detail.code_batch; + wmsMaterialTransferD.station_code = detail.station_code; + wmsMaterialTransferD.qty = detail.qty; + wmsMaterialTransferD.bill_id = wmsMaterialTransfer.id; + + wmsMaterialTransferD.yxfqty = 0; + wmsMaterialTransferD.yzqty = 0; + wmsMaterialTransferD.yxfqty_rk = 0; + wmsMaterialTransferD.yzqty_rk = 0; + wmsMaterialTransferD.erp_line_pk = detail.erp_line_pk; + + var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); + if (material != null) + { + wmsMaterialTransferD.material_id = material.id; + wmsMaterialTransferD.material_specification = material.material_specification; + } + + + 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) + { + wmsMaterialTransferD.unit_id = erpExtendField.Id; + wmsMaterialTransferD.unit_code = erpExtendField.EnCode; + } + else + { + _LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体明细中单位{detail.unit_code}在wms系统中未找到!"); + throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500); + } + + wmsMaterialTransferDs.Add(wmsMaterialTransferD); + } + + await db.Insertable(wmsMaterialTransferDs).ExecuteCommandAsync(); + LoggerErp2Mes.LogInformation($"【MaterialTransfer】成功生成单据:{Code}"); + } + + if (details_return.Count > 0) + { + WmsPrdReturnH wmsPrdReturnH = new WmsPrdReturnH(); + string Code = await _billRuleService.GetBillNumber("WMSPRDRETURN"); + wmsPrdReturnH.bill_code = Code; + wmsPrdReturnH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID; + wmsPrdReturnH.warehouse_id = warehouse_instock.id; + wmsPrdReturnH.create_id = WmsWareHouseConst.ErpUserId; + wmsPrdReturnH.create_time = DateTime.Now; + wmsPrdReturnH.erp_bill_code = input.bill_code; + wmsPrdReturnH.transfer_type = transfer_type; + wmsPrdReturnH.erp_pk = input.erp_pk; + + await db.Insertable(wmsPrdReturnH).ExecuteCommandAsync(); + + List wmsPrdReturnDs = new List(); + foreach (var detail in details_return) + { + WmsPrdReturnD wmsPrdReturnD = new WmsPrdReturnD(); + wmsPrdReturnD.lineno = detail.lineno; + wmsPrdReturnD.material_code = detail.material_code; + wmsPrdReturnD.code_batch = detail.code_batch; + wmsPrdReturnD.qty = -detail.qty; + wmsPrdReturnD.bill_id = wmsPrdReturnH.id; + + wmsPrdReturnD.ytqty = 0; + wmsPrdReturnD.erp_line_pk = detail.erp_line_pk; + + var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); + if (material != null) + { + wmsPrdReturnD.material_id = material.id; + wmsPrdReturnD.material_code = material.code; + wmsPrdReturnD.material_name = material.name; + } + + 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) + { + wmsPrdReturnD.unit_id = erpExtendField.Id; + } + else + { + _LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体明细中单位{detail.unit_code}在wms系统中未找到!"); + throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500); + } + + wmsPrdReturnDs.Add(wmsPrdReturnD); + } + + await db.Insertable(wmsPrdReturnDs).ExecuteCommandAsync(); + LoggerErp2Mes.LogInformation($"【MaterialTransfer】成功生成单据:{Code}"); + } + + await db.Ado.CommitTranAsync(); + + } + catch (Exception ex) + { + error_erpbillcodes.Add($"bip单据号{input.bill_code}: {ex.Message}"); + LoggerErp2Mes.LogWarning($"【MaterialTransfer】{ex.Message}"); + LoggerErp2Mes.LogWarning($"【MaterialTransfer】{ex.StackTrace}"); + await db.Ado.RollbackTranAsync(); + } + finally + { + + } + } + + if (error_erpbillcodes.Count > 0) + { + LoggerErp2Mes.LogWarning($"同步失败信息:{string.Join(',', error_erpbillcodes)}"); + return await ToApiResult(HttpStatusCode.InternalServerError, $"同步失败信息:{string.Join(',', error_erpbillcodes)}"); + } + return await ToApiResult(HttpStatusCode.OK, "成功"); + } /// /// 销售发货单 /// @@ -1017,6 +1294,7 @@ namespace Tnb.WarehouseMgr string Code = await _billRuleService.GetBillNumber("WmsSale"); wmsSaleH.bill_code = Code; + wmsSaleH.org_id = WmsWareHouseConst.AdministratorOrgId; wmsSaleH.erp_bill_code = input.bill_code; wmsSaleH.bill_type = "25103439022357";//销售出库单 wmsSaleH.audit_status = 0; @@ -1032,7 +1310,7 @@ namespace Tnb.WarehouseMgr wmsSaleH.customer_name = customer.customer_name; } - wmsSaleH.ship_date = input.ship_date.Value; + //wmsSaleH.ship_date = input.ship_date.Value; wmsSaleH.erp_pk = input.erp_pk; wmsSaleH.create_id = WmsWareHouseConst.ErpUserId; wmsSaleH.create_time = DateTime.Now; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index f6f04172..f9f4adf8 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -1871,26 +1871,8 @@ namespace Tnb.WarehouseMgr task.device_id = e.device_id; } } + _ = CallingLanding(agvDTTasks); - Logger.Information($"【GenTaskExecute】呼梯任务数:{agvDTTasks.Count}"); - List<(string endlocation_code, string device_id, string id, int start_floor)> endLocCodes = agvDTTasks.Where(r => !string.IsNullOrEmpty(r.device_id)) - .Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList(); - var callLiftCnt = endLocCodes?.Count ?? 0; - Logger.Information($"【GenTaskExecute】实际可呼梯任务数:{callLiftCnt}"); - - if (endLocCodes?.Count > 0) - { - if (endLocCodes.Select(x => x.device_id).All(x => !x.IsNullOrWhiteSpace())) - { - Logger.Information("【GenTaskExecute】呼梯操作"); - _ = CallingLanding(endLocCodes); - } - else - { - Logger.Error("【GenTaskExecute】呼梯失败,没有设备ID"); - return; - } - } //执行电梯任务 List? elevatorTasks = disTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList(); @@ -1994,6 +1976,7 @@ namespace Tnb.WarehouseMgr } + /// /// 获取电梯根据任务单号 /// @@ -2398,8 +2381,28 @@ namespace Tnb.WarehouseMgr /// /// /// - private async Task CallingLanding(List<(string endlocation_code, string device_id, string id, int floorNO)> endLocCodes) + public async Task CallingLanding(List agvDTTasks) { + Logger.Information($"【GenTaskExecute】呼梯任务数:{agvDTTasks.Count}"); + List<(string endlocation_code, string device_id, string id, int start_floor)> endLocCodes = agvDTTasks.Where(r => !string.IsNullOrEmpty(r.device_id)) + .Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList(); + var callLiftCnt = endLocCodes?.Count ?? 0; + Logger.Information($"【GenTaskExecute】实际可呼梯任务数:{callLiftCnt}"); + + if (endLocCodes?.Count > 0) + { + if (endLocCodes.Select(x => x.device_id).All(x => !x.IsNullOrWhiteSpace())) + { + Logger.Information("【GenTaskExecute】呼梯操作"); + // todo + } + else + { + Logger.Error("【GenTaskExecute】呼梯失败,没有设备ID"); + return; + } + } + Logger.Information($"【CallingLanding】 开始呼梯操作............."); try { @@ -2561,15 +2564,15 @@ namespace Tnb.WarehouseMgr #region 电梯第三次改动 // 一托下的时候切换首选电梯 - if (disTaskIds.Count == 1) - { - // 选择另一个电梯座位首选电梯 - await db.Updateable().SetColumns(r => r.value == (r.value == "Elevator3" ? "Elevator4" : "Elevator3")) - .Where(r => r.key == "floor3FirstSelectElevator").ExecuteCommandAsync(); - // 剩余可放托数 - await db.Updateable().SetColumns(r => r.value == "2") - .Where(r => r.key == "floor3FirstSelectElevatorTasknums").ExecuteCommandAsync(); - } + //if (disTaskIds.Count == 1) + //{ + // 选择另一个电梯座位首选电梯 + await db.Updateable().SetColumns(r => r.value == (r.value == "Elevator3" ? "Elevator4" : "Elevator3")) + .Where(r => r.key == "floor3FirstSelectElevator").ExecuteCommandAsync(); + // 剩余可放托数 + await db.Updateable().SetColumns(r => r.value == "2") + .Where(r => r.key == "floor3FirstSelectElevatorTasknums").ExecuteCommandAsync(); + //} #endregion } @@ -4396,6 +4399,7 @@ namespace Tnb.WarehouseMgr public SemaphoreSlim GetSemaphore(string type, string warehouse_id, string region_id = "") { + Logger.LogInformation($"【GetSemaphore】type:{type} warehouse_id:{warehouse_id} region_id:{region_id}"); SemaphoreSlim result = null; switch (warehouse_id) { @@ -4465,7 +4469,7 @@ namespace Tnb.WarehouseMgr break; } } - return _s_taskExecuteSemaphore_F1ZCCOutstock; + return result; } #endregion diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs index 86de9d57..4d8ad1a1 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs @@ -451,6 +451,7 @@ namespace Tnb.WarehouseMgr foreach (var detail in WmsCarryCodes) { var wmsCarrybindCode = detail.Adapt(); + wmsCarrybindCode.id = SnowflakeIdHelper.NextId(); wmsCarrybindCode.membercarry_id = input.membercarry_id; wmsCarrybindCode.membercarry_code = input.membercarry_code; wmsCarrybindCode.carrybind_id = wmsCarrybindH.id; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs index 7322f5c5..f8b1ae72 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs @@ -59,8 +59,7 @@ namespace Tnb.WarehouseMgr .LeftJoin((a, b, c, d) => d.id == b.carrystd_id) .LeftJoin((a, b, c, d, e) => e.carry_id == b.id) .LeftJoin((a, b, c, d, e, f) => f.id == e.material_id) - .Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.存储库位).ToString() - && ((!string.IsNullOrEmpty(b.carry_code) && b.carry_status != "0" && b.carry_status != "6") || string.IsNullOrEmpty(b.carry_code))) + .Where((a, b, c, d, e) => ((!string.IsNullOrEmpty(b.carry_code) && b.carry_status != "0" && b.carry_status != "6") || string.IsNullOrEmpty(b.carry_code))) .WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id) .WhereIF(!string.IsNullOrEmpty(carry_code), (a, b, c, d) => b.carry_code.Contains(carry_code)) .WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => e.material_code.Contains(material_code)) @@ -71,8 +70,8 @@ namespace Tnb.WarehouseMgr { warehouse_name = c.whname, carry_id = b.id, - carry_code = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_code, - carry_name = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_name, + carry_code = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) && c.id == WmsWareHouseConst.WAREHOUSE_YCL_ID ? "空托盘堆垛" : b.carry_code, + carry_name = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) && c.id == WmsWareHouseConst.WAREHOUSE_YCL_ID ? "空托盘堆垛" : b.carry_name, carry_status = b.is_lock == 1 ? "锁定" : "未锁定", carry_type = d.carrystd_name, location_code = a.location_code, @@ -101,7 +100,7 @@ namespace Tnb.WarehouseMgr .InnerJoin((a, b, c, d, e, f) => f.carry_id == e.membercarry_id) .InnerJoin((a, b, c, d, e, f, g) => g.id == f.material_id) .InnerJoin((a, b, c, d, e, f, g, h) => h.id == e.membercarry_id) - .Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.存储库位).ToString() && b.carry_status != "0" && b.carry_status != "6") + .Where((a, b, c, d, e) => b.carry_status != "0" && b.carry_status != "6") .WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id) .WhereIF(!string.IsNullOrEmpty(carry_code), (a, b, c, d, e, f, g, h) => b.carry_code.Contains(carry_code)|| h.carry_code.Contains(carry_code)) .WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f, g) => g.code.Contains(material_code)) @@ -205,51 +204,56 @@ namespace Tnb.WarehouseMgr var warehouse_id = ""; var carry_code = ""; var material_code = ""; + var container_no = ""; + var code_batch = ""; if (!input.queryJson.IsNullOrWhiteSpace()) { warehouse_id = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.warehouse_id)); carry_code = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.carry_code)); material_code = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.material_code)); + code_batch = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.code_batch)); + container_no = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.container_no)); } List items = await _db.Queryable() - .LeftJoin((a, b) => b.location_id == a.id) - .InnerJoin((a, b, c) => a.wh_id == c.id) - .LeftJoin((a, b, c, d) => d.id == b.carrystd_id) - .LeftJoin((a, b, c, d, e) => e.carry_id == b.id) - .LeftJoin((a, b, c, d, e, f) => f.id == e.material_id) - .Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.存储库位).ToString() && a.is_use == "1" - && ((!string.IsNullOrEmpty(b.carry_code) && b.carry_status != "0" && b.carry_status != "6") || string.IsNullOrEmpty(b.carry_code))) - .WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id) - .WhereIF(!string.IsNullOrEmpty(carry_code), (a, b, c, d) => b.carry_code.Contains(carry_code)) - .WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => e.material_code.Contains(material_code)) - .OrderByDescending((a, b, c, d, e, f) => b.carry_code) - .Select((a, b, c, d, e, f) => new WmsCarryStockReport - { - warehouse_name = c.whname, - carry_id = b.id, - carry_code = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_code, - carry_name = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_name, - carry_status = b.is_lock == 1 ? "锁定" : "未锁定", - carry_type = d.carrystd_name, - location_code = a.location_code, - location_name = a.location_name, - location_status = a.is_lock == 1 ? "锁定" : "未锁定", - instock_time = b.instock_time != null ? b.instock_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", - barcode = e.barcode, - code_batch = e.code_batch, - qty = e.codeqty, - material_id = e.material_id, - material_code = e.material_code, - material_name = f.name, - unit = e.unit_id, - creator = e.create_id, - bind_time = e.create_time != null ? e.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : "" - }) - .OrderBy((a) => a.location_code) - .ToListAsync(); + .LeftJoin((a, b) => b.location_id == a.id) + .InnerJoin((a, b, c) => a.wh_id == c.id) + .LeftJoin((a, b, c, d) => d.id == b.carrystd_id) + .LeftJoin((a, b, c, d, e) => e.carry_id == b.id) + .LeftJoin((a, b, c, d, e, f) => f.id == e.material_id) + .Where((a, b, c, d, e) => ((!string.IsNullOrEmpty(b.carry_code) && b.carry_status != "0" && b.carry_status != "6") || string.IsNullOrEmpty(b.carry_code))) + .WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id) + .WhereIF(!string.IsNullOrEmpty(carry_code), (a, b, c, d) => b.carry_code.Contains(carry_code)) + .WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => e.material_code.Contains(material_code)) + .WhereIF(!string.IsNullOrEmpty(code_batch), (a, b, c, d, e, f) => e.code_batch.Contains(code_batch)) + .WhereIF(!string.IsNullOrEmpty(container_no), (a, b, c, d, e, f) => f.container_no.Contains(container_no)) + .OrderByDescending((a, b, c, d, e, f) => b.carry_code) + .Select((a, b, c, d, e, f) => new WmsCarryStockReport + { + warehouse_name = c.whname, + carry_id = b.id, + carry_code = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) && c.id == WmsWareHouseConst.WAREHOUSE_YCL_ID ? "空托盘堆垛" : b.carry_code, + carry_name = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) && c.id == WmsWareHouseConst.WAREHOUSE_YCL_ID ? "空托盘堆垛" : b.carry_name, + carry_status = b.is_lock == 1 ? "锁定" : "未锁定", + carry_type = d.carrystd_name, + location_code = a.location_code, + location_name = a.location_name, + location_status = a.is_lock == 1 ? "锁定" : "未锁定", + instock_time = b.instock_time != null ? b.instock_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", + barcode = e.barcode, + code_batch = e.code_batch, + qty = e.codeqty, + material_id = e.material_id, + material_code = e.material_code, + material_name = f.name, + unit = e.unit_id, + creator = e.create_id, + bind_time = e.create_time != null ? e.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : "" + }) + .OrderBy((a) => a.location_code) + .ToListAsync(); // 料架 List items_LJ = await _db.Queryable() @@ -264,6 +268,8 @@ namespace Tnb.WarehouseMgr .WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id) .WhereIF(!string.IsNullOrEmpty(carry_code), (a, b, c, d, e, f, g, h) => b.carry_code.Contains(carry_code) || h.carry_code.Contains(carry_code)) .WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f, g) => g.code.Contains(material_code)) + .WhereIF(!string.IsNullOrEmpty(code_batch), (a, b, c, d, e, f, g) => f.code_batch.Contains(code_batch)) + .WhereIF(!string.IsNullOrEmpty(container_no), (a, b, c, d, e, f, g) => g.container_no.Contains(container_no)) .Select((a, b, c, d, e, f, g, h) => new WmsCarryStockReport { warehouse_name = c.whname, diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs index c2a9483c..e7cd47e7 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs @@ -11,6 +11,7 @@ using JNPF.VisualDev; using JNPF.VisualDev.Entitys; using JNPF.VisualDev.Interfaces; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using SqlSugar; using Tnb.BasicData.Entities; @@ -255,8 +256,8 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Logger.Information($"空载具出库错误", ex.Message); - Logger.Information($"空载具出库错误", ex.StackTrace); + Logger.LogWarning($"空载具出库错误 {ex.Message}"); + Logger.LogWarning($"空载具出库错误 {ex.StackTrace}"); await _db.Ado.RollbackTranAsync(); throw; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs index 8d8c8132..745cc018 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs @@ -108,7 +108,6 @@ namespace Tnb.WarehouseMgr { queryJson = JObject.Parse(input.queryJson); } - SqlSugarPagedList result = await _db.Queryable() .InnerJoin((a, b) => a.status == b.Id) @@ -117,7 +116,7 @@ namespace Tnb.WarehouseMgr .InnerJoin((a, b, c, d, e) => e.id == a.warehouse_instock) .LeftJoin((a, b, c, d, e, f) => a.type == f.EnCode) // 只显示未完成的单据 - .Where(a => a.status != "25065149810453") + //.Where(a => a.status != "25065149810453") .WhereIF(queryJson != null && queryJson["type"] != null, a => a.type == queryJson["type"].ToString()) .WhereIF(queryJson != null && queryJson["bill_code"] != null, a => a.bill_code.Contains(queryJson["bill_code"].ToString())) .Select((a, b, c, d, e, f) => new WmsMaterialTransfer @@ -195,7 +194,6 @@ namespace Tnb.WarehouseMgr } } - /// /// 获取物料库存 /// @@ -787,8 +785,10 @@ namespace Tnb.WarehouseMgr { semaphoreSlimOutStock = _wareHouseService.GetSemaphore("outstock", WmsWareHouseConst.WAREHOUSE_BCK_ID); await semaphoreSlimOutStock.WaitAsync(); + Logger.LogInformation($"开始执行下发到包材库1"); semaphoreSlimInStock = _wareHouseService.GetSemaphore("instock", WmsWareHouseConst.WAREHOUSE_F2BCQ_ID); await semaphoreSlimInStock.WaitAsync(); + Logger.LogInformation($"开始执行下发到包材库2"); if (string.IsNullOrEmpty(input.source_id)) { throw new AppFriendlyException("来源单据id不可为空", 500); @@ -1127,6 +1127,7 @@ namespace Tnb.WarehouseMgr { await _s_taskExecuteSemaphore_F1ZCCOutstock.WaitAsync(); + Logger.LogInformation($"中储仓下发到二楼暂存仓"); try { WmsMaterialTransfer wmsMaterialTransfer = _db.Queryable().Where(r => r.id == input.source_id).First(); @@ -1269,7 +1270,7 @@ namespace Tnb.WarehouseMgr public async Task DistributeZCCToYCL(MaterialTransferDistributeToZCCInput input) { await _s_taskExecuteSemaphore_F1ZCCOutstock.WaitAsync(); - + Logger.LogInformation($"开始执行中储仓退料到原材料仓"); try { WmsMaterialTransfer wmsMaterialTransfer = _db.Queryable().Where(r => r.id == input.source_id).First(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs index b0332c48..56513564 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs @@ -120,11 +120,12 @@ namespace Tnb.WarehouseMgr } if (input.data.ContainsKey(nameof(WmsTransfer.endlocation_id))) { - ePoint = await _db!.Queryable().FirstAsync(it => it.location_id == input.data[nameof(WmsTransfer.endlocation_id)].ToString()); + ePoint = await _db!.Queryable().FirstAsync(it => it.location_code == input.data[nameof(WmsTransfer.endlocation_id)].ToString()); } if (sPoint != null && ePoint != null) { + Logger.LogError($"【PDADelivery】起点 {sPoint.point_code} 终点 {ePoint.point_code}"); List points = new List(); if (sPoint.area_code != ePoint.area_code) { @@ -198,10 +199,17 @@ namespace Tnb.WarehouseMgr _ = await _db.Updateable().SetColumns(it => new BasLocation { is_lock = 1 }).Where(it => ids.Contains(it.id)).ExecuteCommandAsync(); } } + else + { + throw new AppFriendlyException($"【PDADelivery】生成预任务失败", 500); + } } } - + else + { + throw new AppFriendlyException($"【PDADelivery】点位不存在", 500); + } await _db.Ado.CommitTranAsync(); } catch (Exception ex)