diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/WmsSortingtaskListOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/WmsSortingtaskListOutput.cs new file mode 100644 index 00000000..727fd056 --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/WmsSortingtaskListOutput.cs @@ -0,0 +1,8 @@ +using JNPF.Common.Filter; + +namespace Tnb.ProductionMgr.Entities.Dto.PrdManage +{ + public class WmsSortingtaskListOutput : PageInputBase + { + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index 66a6a2d2..00d25d31 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -1167,7 +1167,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA target = targetConfigs.First(); // 计算当前料架区的满托数量 - int? maxnum = ckdRemainBindRackNum > target.maxracknum ? ckdRemainBindRackNum % target.maxracknum : ckdRemainBindRackNum; + int? maxnum = ckdRemainBindRackNum > target.maxracknum ? target.maxracknum : ckdRemainBindRackNum; // 更新 转库单、满托数量 LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】为条码 {barcode} 所在的转库单 {ckdCode} 占用了一个空闲料架"); @@ -2724,6 +2724,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA stopwatch.Start(); try { + var WmsMaterialkit = await db_WmsMaterialkit.Queryable().Where(p => p.key == "WmsMaterialkit").FirstAsync(); + // 0则不进行移转 + if (WmsMaterialkit != null && WmsMaterialkit.value == "0") + { + return; + } Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行生成物料齐套配送记录"); LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行生成物料齐套配送记录"); @@ -2743,7 +2749,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } await db_WmsMaterialkit.Ado.BeginTranAsync(); - WmsMaterialkitRecordH wmsMaterialkitRecordH = await db_WmsMaterialkit.Queryable().Where(r => (r.status == WmsWareHouseConst.BILLSTATUS_ADD_ID || r.status == WmsWareHouseConst.BILLSTATUS_ON_ID) + WmsMaterialkitRecordH wmsMaterialkitRecordH = await db_WmsMaterialkit.Queryable().Where(r => (r.status == WmsWareHouseConst.BILLSTATUS_ADD_ID || r.status == WmsWareHouseConst.BILLSTATUS_ON_ID || r.status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID) && r.workstation_id == prdMoTask.workstation_id).FirstAsync(); LoggerWmsMaterialkit.LogInformation($"查找任务单{prdMoTask.mo_task_code}的物料配送记录:{JsonConvert.SerializeObject(wmsMaterialkitRecordH)}"); @@ -2779,23 +2785,24 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA wmsMaterialkitRecordH.times = 0; wmsMaterialkitRecordH.total_time = 0; - BasMbom basMbom = await db_WmsMaterialkit.Queryable().Where(r => r.id == prdMoTask.bom_id).FirstAsync(); - if (basMbom == null) + WmsStationBom wmsStationBom = await db_WmsMaterialkit.Queryable().Where(r => r.product_id == prdMoTask.material_id + && r.station_id == prdMoTask.workstation_id).FirstAsync(); + if (wmsStationBom == null) { - LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的生产Bom id{prdMoTask.bom_id}找不到对应的生产Bom资料"); + LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的工位{workstaiondic[prdMoTask.workstation_id]}以及物料id{prdMoTask.material_id}找不到对应的工位Bom资料"); continue; } - List basMbomInputs = await db_WmsMaterialkit.Queryable().Where(r => r.mbom_id == basMbom.id).ToListAsync(); - List materials = await db_WmsMaterialkit.Queryable().Where(r => basMbomInputs.Select(x => x.material_id).Contains(r.id)).ToListAsync(); - LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的生产Bom{prdMoTask.bom_id}找到对应的生产Bom清单{string.Join(',', basMbomInputs.Select(r => r.material_id))}"); + List wmsStationBomD = await db_WmsMaterialkit.Queryable().Where(r => r.p_id == wmsStationBom.id).ToListAsync(); + List materials = await db_WmsMaterialkit.Queryable().Where(r => wmsStationBomD.Select(x => x.material_id).Contains(r.id)).ToListAsync(); + LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的工位{workstaiondic[prdMoTask.workstation_id]}找到对应的工位Bom清单{string.Join(',', wmsStationBomD.Select(r => r.material_id))}"); List wmsMaterialkitRecordDs = new List(); - foreach (BasMbomInput input in basMbomInputs) + foreach (WmsStationBomD input in wmsStationBomD) { BasMaterial material = materials.Where(r => r.id == input.material_id).First(); if (material == null) { - LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的生产Bom id{prdMoTask.bom_id}下的物料id{input.material_id}在物料档案中不存在"); + LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的工位Bom 产品{wmsStationBom.product_code} 工位 {wmsStationBom.station_code} 下的明细物料id{input.material_id}在物料档案中不存在"); continue; } @@ -2874,7 +2881,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA return newinventory; }); - // 查询已有库存 (多工单情况下要考虑库存是否被其它工单预留 暂定) decimal? exists_qty = inventory.Sum(r => r.codeqty); @@ -2925,6 +2931,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA .Where(r => wmsMaterialTransfers.Select(x => x.id).Contains(r.bill_id) && r.station_code == workstaiondic[wmsMaterialkitRecord.workstation_id].ToString()).OrderBy(r => r.id).ToListAsync(); List wmsMaterialkitRecordDs = await db_WmsMaterialkit.Queryable() .Where(r => r.bill_id == wmsMaterialkitRecord.id && r.status != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID && r.status != WmsWareHouseConst.BILLSTATUS_CANCEL_ID).ToListAsync(); + + List wmsMaterialkitRecordTs = new List(); foreach (WmsMaterialkitRecordD wmsMaterialkitRecordD in wmsMaterialkitRecordDs) { Stopwatch stopwatch2 = new Stopwatch(); @@ -2936,10 +2944,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA List _wmsMaterialTransferDs = wmsMaterialTransferDs.Where(r => r.material_id == wmsMaterialkitRecordD.material_id).ToList(); await db_WmsMaterialkit.Ado.BeginTranAsync(); decimal? xf_qty = 0; + LoggerWmsMaterialkit.LogWarning($"物料齐套计划{wmsMaterialkitRecord.bill_code} 绑定工位{workstaiondic[wmsMaterialkitRecord.workstation_id].ToString()}的料箱物料{wmsMaterialkitRecordD.material_code} 可使用转库单明细为{string.Join(',', _wmsMaterialTransferDs.Select(r => r.id))}"); foreach (WmsMaterialTransferD _wmsMaterialTransferD in _wmsMaterialTransferDs) { if (need_qty <= 0) break; + DateTime startTime = DateTime.Now; // 转库单可以下发的数量 decimal? zkcan_qty = _wmsMaterialTransferD.qty - _wmsMaterialTransferD.yxfqty; // 可以下发的数量 @@ -2948,21 +2958,37 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA can_qty = zkcan_qty < need_qty ? zkcan_qty : need_qty; // 查询库存是否有可以下发数量的库存(同批次) // 中储仓库存 - OutStockStrategyQuery outStockStrategyInput = new() + OutStockStrategyZCC2Floor2Query OutStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID, material_id = _wmsMaterialTransferD.material_id, - code_batch = _wmsMaterialTransferD.code_batch + code_batch = _wmsMaterialTransferD.code_batch, + needOut = can_qty, + material_code = _wmsMaterialTransferD.material_code, + endlocations = new string[2] { WmsWareHouseConst.ZZCSSX121009, WmsWareHouseConst.ZZCSSX121010 } }; - List items = await _wareHouseService.OutStockStrategy(outStockStrategyInput); - List wmsCarryCodes = await db_WmsMaterialkit.Queryable() - .Where(r => r.material_id == _wmsMaterialTransferD.material_id && r.code_batch == _wmsMaterialTransferD.code_batch + + List>? carrys = null; + try + { + carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput); + } + catch(Exception ex) + { + LoggerWmsMaterialkit.LogWarning($"物料齐套计划{wmsMaterialkitRecord.bill_code} 绑定工位{workstaiondic[wmsMaterialkitRecord.workstation_id].ToString()}的料箱{ex.Message}"); + continue; + } + List items = carrys.Select(r => r.Item1).ToList(); + List wmsCarryCodes = await db_WmsMaterialkit.Queryable() + .Where(r => r.material_id == _wmsMaterialTransferD.material_id && r.code_batch == _wmsMaterialTransferD.code_batch && items.Select(x => x.id).Contains(r.carry_id)).ToListAsync(); - decimal? inv_qty = wmsCarryCodes.Sum(r => r.codeqty); + decimal? inv_qty = carrys.Sum(r => r.Item2); can_qty = inv_qty > can_qty ? can_qty : inv_qty; - LoggerWmsMaterialkit.LogWarning($"转库单id{_wmsMaterialTransferD.bill_id} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时可出数量为{can_qty}"); + WmsMaterialTransfer wmsMaterialTransfer = await db_WmsMaterialkit.Queryable().Where(r => r.id == _wmsMaterialTransferD.bill_id).FirstAsync(); + LoggerWmsMaterialkit.LogWarning($"转库单{wmsMaterialTransfer.bill_code} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时出库的物料数量为{carrys.Sum(r => r.Item2)}其中需要的数量为{inv_qty}"); if (can_qty <= 0) { + LoggerWmsMaterialkit.LogWarning($"物料齐套计划{wmsMaterialkitRecord.bill_code} 绑定工位{workstaiondic[wmsMaterialkitRecord.workstation_id].ToString()}的料箱物料{_wmsMaterialTransferD.material_code} 可下发数量为0"); continue; } MaterialTransferDDistributeToZCCInput input = new MaterialTransferDDistributeToZCCInput(); @@ -2972,15 +2998,45 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA WarehouseMgr.Entities.Dto.Outputs.Result result = await _wmsMaterialTransferService.DistributeDetailToZCC(input); if (result.code.ToString() != "OK") { - LoggerWmsMaterialkit.LogWarning($"转库单id{_wmsMaterialTransferD.bill_id} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时数量不匹配!"); + LoggerWmsMaterialkit.LogWarning($"转库单{wmsMaterialTransfer.bill_code} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时数量不匹配!"); continue; } + LoggerWmsMaterialkit.LogWarning($"转库单{wmsMaterialTransfer.bill_code} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库料箱为{string.Join(',', items.Select(x => x.carry_code))}"); + + + DateTime endTime = DateTime.Now; + WmsMaterialkitRecordT wmsMaterialkitRecordT = new WmsMaterialkitRecordT(); + wmsMaterialkitRecordT.create_id = WmsWareHouseConst.AdministratorUserId; + wmsMaterialkitRecordT.create_time = DateTime.Now; + wmsMaterialkitRecordT.bill_id = wmsMaterialkitRecord.id; + wmsMaterialkitRecordT.bill_d_id = _wmsMaterialTransferD.id; + wmsMaterialkitRecordT.materialtransfer_id = wmsMaterialTransfer.id; + wmsMaterialkitRecordT.materialtransfer_billcode = wmsMaterialTransfer.bill_code; + wmsMaterialkitRecordT.materialtransfer_d_id = _wmsMaterialTransferD.id; + wmsMaterialkitRecordT.oldqty = wmsMaterialkitRecordD.yxf_qty; + wmsMaterialkitRecordT.newqty = wmsMaterialkitRecordD.yxf_qty + can_qty; + wmsMaterialkitRecordT.material_id = _wmsMaterialTransferD.material_id; + wmsMaterialkitRecordT.material_code = _wmsMaterialTransferD.material_code; + wmsMaterialkitRecordT.material_name = _wmsMaterialTransferD.material_ex; + wmsMaterialkitRecordT.material_specification = _wmsMaterialTransferD.material_specification; + wmsMaterialkitRecordT.code_batch = _wmsMaterialTransferD.code_batch; + wmsMaterialkitRecordT.unit_code = _wmsMaterialTransferD.unit_code; + wmsMaterialkitRecordT.xf_qty = can_qty; + wmsMaterialkitRecordT.start_time = startTime; + wmsMaterialkitRecordT.end_time = endTime; + wmsMaterialkitRecordT.total_time = (int)(endTime - startTime).TotalMilliseconds; + + wmsMaterialkitRecordTs.Add(wmsMaterialkitRecordT); + xf_qty += can_qty; need_qty = need_qty - can_qty; + } + await db_WmsMaterialkit.Insertable(wmsMaterialkitRecordTs).ExecuteCommandAsync(); + stopwatch2.Stop(); - + await db_WmsMaterialkit.Updateable().SetColumns(r => new WmsMaterialkitRecordD { yxf_qty = r.yxf_qty + xf_qty, @@ -3077,7 +3133,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA elevatorTimer = new Timer(ElevatorTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10)); agvelevatorTimer = new Timer(AgvelevatorTimerTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10)); - //WmsMaterialkittimer = new Timer(WmsMaterialkit, null, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20)); + WmsMaterialkittimer = new Timer(WmsMaterialkit, null, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(300)); return Task.CompletedTask; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs index 73db23ef..adac2709 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs @@ -58,6 +58,10 @@ /// 四楼灭菌仓 /// public const string WAREHOUSE_MJC_ID = "35412482304021"; + /// + /// 外包装缓存仓 + /// + public const string WAREHOUSE_WBZHHC_ID = "27209786980373"; /// /// 二楼包材区 diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/OutsourceOrderInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/OutsourceOrderInput.cs index 7671ad91..725a41f4 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/OutsourceOrderInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/OutsourceOrderInput.cs @@ -86,5 +86,10 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs /// 子表主键 /// public string erp_line_pk { get; set; } + + /// + /// 供应商(辅助属性) + /// + public string? auxprop_gys { get; set; } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/PurchaseOrderInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/PurchaseOrderInput.cs index 7455f78f..20cae2ae 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/PurchaseOrderInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/PurchaseOrderInput.cs @@ -95,5 +95,10 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs /// 供应商(辅助属性) /// public string auxprop_gys { get; set; } + + /// + /// 生产单位(厂商) + /// + public string? production_unit { get; set; } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyQuery.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyQuery.cs index e088f99b..61fb4bf2 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyQuery.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyQuery.cs @@ -55,7 +55,6 @@ namespace Tnb.WarehouseMgr.Entities.Dto // 策略编号 public string PolicyCode { get; set; } - // 策略编号 public ISqlSugarClient dbConn { get; set; } = null; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyZCC2Floor2Query.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyZCC2Floor2Query.cs index 943c39eb..cdb8ae79 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyZCC2Floor2Query.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyZCC2Floor2Query.cs @@ -1,4 +1,6 @@ -namespace Tnb.WarehouseMgr.Entities.Dto +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Dto { public class OutStockStrategyZCC2Floor2Query { @@ -54,5 +56,6 @@ /// public string[] endlocations { get; set; } + public ISqlSugarClient dbConn { get; set; } = null; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs index 7b1e0ebe..bc1d618a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs @@ -119,4 +119,14 @@ public partial class WmsOutsourceD : BaseEntity /// public decimal? bind_qty { get; set; } + /// + /// 辅助属性(小批号) + /// + public string? auxprop_xph { get; set; } + + /// + /// 供应商(辅助属性) + /// + public string? auxprop_gys { get; set; } + } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs index 97a27097..11eb940b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs @@ -128,4 +128,9 @@ public partial class WmsOutsourceOrderD : BaseEntity /// 行号 /// public string? lineno { get; set; } + + /// + /// 供应商(辅助属性) + /// + public string? auxprop_gys { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseD.cs index 9e8faf59..e4e1451f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseD.cs @@ -155,5 +155,9 @@ public partial class WmsPurchaseD : BaseEntity /// public string? auxprop_gys { get; set; } + /// + /// 生产单位(厂商) + /// + public string? production_unit { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseOrderD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseOrderD.cs index b1c701ab..b9f03a6e 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseOrderD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseOrderD.cs @@ -139,4 +139,9 @@ public partial class WmsPurchaseOrderD : BaseEntity /// public string? auxprop_gys { get; set; } + /// + /// 生产单位(厂商) + /// + public string? production_unit { get; set; } + } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSortingtask.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSortingtask.cs index 1e5f5422..8d2832f8 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSortingtask.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSortingtask.cs @@ -74,4 +74,21 @@ public partial class WmsSortingtask : BaseEntity /// public string source_id { get; set; } = string.Empty; + [SugarColumn(IsIgnore = true)] + public string material_id { get; set; } + + [SugarColumn(IsIgnore = true)] + public string material_code { get; set; } + + [SugarColumn(IsIgnore = true)] + public string material_name { get; set; } + + [SugarColumn(IsIgnore = true)] + public string material_specification { get; set; } + + [SugarColumn(IsIgnore = true)] + public string code_batch { get; set; } + + [SugarColumn(IsIgnore = true)] + public string erp_bill_code { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStationBom.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStationBom.cs new file mode 100644 index 00000000..3a18ff47 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStationBom.cs @@ -0,0 +1,82 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 工位BOM +/// +[SugarTable("wms_station_bom")] +public partial class WmsStationBom : BaseEntity +{ + public WmsStationBom() + { + 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? station_id { get; set; } + + /// + /// 工位编号 + /// + public string? station_code { get; set; } + + /// + /// 产品id + /// + public string? product_id { get; set; } + + /// + /// 产品编号 + /// + public string? product_code { get; set; } + + /// + /// 产品名称 + /// + public string? product_name { get; set; } + + /// + /// 排序 + /// + public long? ordinal { get; set; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 流程任务Id + /// + public string? f_flowtaskid { get; set; } + + /// + /// 流程引擎Id + /// + public string? f_flowid { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStationBomD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStationBomD.cs new file mode 100644 index 00000000..e55b49b7 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStationBomD.cs @@ -0,0 +1,57 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 工位BOM字表 +/// +[SugarTable("wms_station_bom_d")] +public partial class WmsStationBomD : BaseEntity +{ + public WmsStationBomD() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 工位BOM表ID + /// + public string? p_id { get; set; } + + /// + /// 物料ID + /// + public string? material_id { get; set; } + + /// + /// 物料编号 + /// + public string? material_code { get; set; } + + /// + /// 物料名称 + /// + public string? material_name { get; set; } + + /// + /// 单位 + /// + public string? unit { get; set; } + + /// + /// 投入数量 + /// + public decimal? molecule { get; set; } + + /// + /// 产出数量 + /// + public decimal? denominator { get; set; } + + /// + /// 单位编码 + /// + public string? unit_code { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs index 3a539887..97b0a74e 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs @@ -431,6 +431,7 @@ namespace Tnb.WarehouseMgr wmsPurchaseOrderD.actual_quantity = 0; wmsPurchaseOrderD.lineno = detail.lineno; wmsPurchaseOrderD.gift = detail.gift; + wmsPurchaseOrderD.production_unit = detail.production_unit; var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); if (material != null) @@ -647,6 +648,7 @@ namespace Tnb.WarehouseMgr wmsOutsourceOrderD.matcode_id = material.id; wmsOutsourceOrderD.matspecification = material.material_specification; } + wmsOutsourceOrderD.auxprop_gys = detail.auxprop_gys; wmsOutsourceOrderDs.Add(wmsOutsourceOrderD); } @@ -991,44 +993,38 @@ namespace Tnb.WarehouseMgr } string transfer_type = ""; - // 中储仓到暂存仓 + #region 转库类型 + // 齐套出入库 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); - } - + //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; } + // 外协调拨入库 + else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZC_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 if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_BCK_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_F2BCQ_ID) + transfer_type = WmsWareHouseConst.MATERIALTRANSFER_PACKING_CODE; + // 长管出库 + else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_HCC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_ID) + transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CGCK_CODE; + // 外协调拨出库 + else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID) + transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBOUTWAREHOUSE_CODE; + #endregion //var wmsMaterialTransferdsDistinct = input.details.Select(r => new @@ -1774,6 +1770,78 @@ namespace Tnb.WarehouseMgr //break; } + case WmsWareHouseConst.WAREHOUSE_BCK_ID: + { + + WmsPackInstockH wmsPackInstockH = new WmsPackInstockH(); + Code = await _billRuleService.GetBillNumber("WMSPACKINSTOCK"); + + wmsPackInstockH.bill_code = Code; + wmsPackInstockH.erp_bill_code = input.transfer_order; + var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_id).FirstAsync(); + if (org_erpExtendField != null) + { + wmsPackInstockH.outstockorg_id = org_erpExtendField.pk_org_v; + wmsPackInstockH.outstockorg_code = org_erpExtendField.pk_org; + } + else + { + _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_id}在wms系统中未找到!"); + throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_id}在wms系统中未找到!", 500); + } + wmsPackInstockH.incoming_ware = warehouse_instock.id; + wmsPackInstockH.org_id = WmsWareHouseConst.AdministratorOrgId; + wmsPackInstockH.erp_pk = input.erp_pk; + wmsPackInstockH.create_id = WmsWareHouseConst.ErpUserId; + wmsPackInstockH.bill_date = DateTime.Now; + wmsPackInstockH.create_time = DateTime.Now; + wmsPackInstockH.erp_wh_type = input.warehouse_instock; + await db.Insertable(wmsPackInstockH).ExecuteCommandAsync(); + + List wmsPackInstockDs = new List(); + foreach (var detail in input.details) + { + WmsPackInstockD wmsPackInstockD = new WmsPackInstockD(); + + wmsPackInstockD.bill_id = wmsPackInstockH.id; + wmsPackInstockD.material_code = detail.material_code; + + 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) + { + wmsPackInstockD.unit_id = erpExtendField.Id; + wmsPackInstockD.unit_code = erpExtendField.EnCode; + } + else + { + _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体明细中单位{detail.unit_code}在wms系统中未找到!"); + throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500); + } + wmsPackInstockD.pr_qty = detail.qty; + wmsPackInstockD.pi_code = detail.code_batch; + wmsPackInstockD.erp_line_pk = detail.erp_line_pk; + wmsPackInstockD.create_id = WmsWareHouseConst.ErpUserId; + wmsPackInstockD.create_time = DateTime.Now; + wmsPackInstockD.xf_qty = 0; + wmsPackInstockD.qty = 0; + wmsPackInstockD.lineno = detail.lineno; + var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); + if (material != null) + { + wmsPackInstockD.material_id = material.id; + wmsPackInstockD.material_code = material.code; + wmsPackInstockD.material_desc = material.material_specification; + } + wmsPackInstockD.auxprop_gys = detail.auxprop_gys; + wmsPackInstockD.auxprop_xph = detail.auxprop_xph; + + wmsPackInstockDs.Add(wmsPackInstockD); + } + + await db.Insertable(wmsPackInstockDs).ExecuteCommandAsync(); + + break; + } } await db.Ado.CommitTranAsync(); @@ -2420,16 +2488,16 @@ namespace Tnb.WarehouseMgr throw new AppFriendlyException($@"子表主键不能为空!", 500); } - var wmsInventorychecksDistinct = input.details.Select(r => new - { - material_id = r.material_code, - code_batch = r.code_batch, - }).Distinct(); - if (wmsInventorychecksDistinct.Count() < input.details.Count) - { - _LoggerErp2Mes.LogWarning($@"【Inventorycheck】表体存在物料和批号重复的明细!"); - throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500); - } + //var wmsInventorychecksDistinct = input.details.Select(r => new + //{ + // material_id = r.material_code, + // code_batch = r.code_batch, + //}).Distinct(); + //if (wmsInventorychecksDistinct.Count() < input.details.Count) + //{ + // _LoggerErp2Mes.LogWarning($@"【Inventorycheck】表体存在物料和批号重复的明细!"); + // throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500); + //} WmsErpWarehouserelaH wmsErpWarehouserelaH = await db.Queryable().Where(r => r.erp_warehousecode == input.warehouse_code).FirstAsync(); if (wmsErpWarehouserelaH == null) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 664ba479..a63c07bb 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -504,7 +504,7 @@ namespace Tnb.WarehouseMgr .LeftJoin((a, b, c) => a.location_id == c.id) .Where(whereExpr) //.OrderByIF((a,b,c)=>SqlFunc.IsNullOrEmpty()) - .OrderBy("a.location_code,layers,loc_line,loc_column") + .OrderBy("b.codeqty desc") .Select((a, b, c) => new { WmsCarryH = a, @@ -656,6 +656,11 @@ namespace Tnb.WarehouseMgr /// public async Task>> OutStockStrategyZCC2Floor2([FromQuery] OutStockStrategyZCC2Floor2Query input) { + var cyDb = input.dbConn; + if (input.dbConn == null) + { + cyDb = _db.CopyNew(); + } Expressionable whereExprable = Expressionable.Create() .And((a, b, c) => a.is_lock == 0 && c.is_lock == 0) .And((a, b, c) => !string.IsNullOrEmpty(a.location_id)) @@ -673,7 +678,6 @@ namespace Tnb.WarehouseMgr _ = whereExprable.And(carryStatusFilterExp); Expression> whereExpr = whereExprable.ToExpression(); - SqlSugarClient cyDb = _db.CopyNew(); WmsInstockPolicies policy = await cyDb.Queryable().Where(it => it.status == 1).FirstAsync(); if (policy == null) { @@ -730,7 +734,7 @@ namespace Tnb.WarehouseMgr // 每6个重新获取一次终点 if (i % move_num == 0) { - endlocation_ssx = await _db.Queryable().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); + endlocation_ssx = await cyDb.Queryable().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); } // 查找是否有一个料箱可以正好满足剩余需求数量(目前只做这个额外判断,其它情形不考虑) @@ -743,7 +747,7 @@ namespace Tnb.WarehouseMgr needOut -= _wmsCarryCode.codeqty; WmsCarryH _wmsCarryH = itemsDESC[j].wmsCarryH; - await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); + await cyDb.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); carrysDESC.Add(new Tuple(_wmsCarryH, _wmsCarryCode.codeqty, endlocation_ssx)); @@ -758,7 +762,7 @@ namespace Tnb.WarehouseMgr // 目前只支持一个料箱只有一个物料 needOut -= wmsCarryCode.codeqty; - await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); + await cyDb.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); carrysDESC.Add(new Tuple(wmsCarryH, wmsCarryCode.codeqty, endlocation_ssx)); } @@ -787,7 +791,7 @@ namespace Tnb.WarehouseMgr // 每6个重新获取一次终点 if (i % move_num == 0) { - endlocation_ssx = await _db.Queryable().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); + endlocation_ssx = await cyDb.Queryable().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); } // 查找是否有一个料箱可以正好满足剩余需求数量(目前只做这个额外判断,其它情形不考虑) @@ -800,7 +804,7 @@ namespace Tnb.WarehouseMgr needOut -= _wmsCarryCode.codeqty; WmsCarryH _wmsCarryH = itemsASC[j].wmsCarryH; - await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); + await cyDb.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); carrysASC.Add(new Tuple(_wmsCarryH, _wmsCarryCode.codeqty, endlocation_ssx)); @@ -815,7 +819,7 @@ namespace Tnb.WarehouseMgr // 目前只支持一个料箱只有一个物料 needOut -= wmsCarryCode.codeqty; - await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); + await cyDb.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); carrysASC.Add(new Tuple(wmsCarryH, wmsCarryCode.codeqty, endlocation_ssx)); } @@ -957,11 +961,11 @@ namespace Tnb.WarehouseMgr //putdic.Add("ZS-A06-1", new string[] { "hxjA", "A8允许入空箱", }); //getdic.Add("ZS-A06-2", new string[] { "hxjA", "A8允许取满箱" }); - //putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9允许入空箱", }); - //getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9允许取满箱" }); + putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9允许入空箱", }); + getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9允许取满箱" }); - //putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10允许入空箱", }); - //getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10允许取满箱" }); + putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10允许入空箱", }); + getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10允许取满箱" }); putdic.Add("ZS-D01-1", new string[] { "hxjA", "A1允许入空箱", }); getdic.Add("ZS-D01-2", new string[] { "hxjA", "A1允许取满箱" }); @@ -1090,8 +1094,8 @@ namespace Tnb.WarehouseMgr //getdic.Add("ZS-D06-2", new string[] { "hxjA", "A6AGV允许入满箱", "true" }); //getdic.Add("ZS-A05-2", new string[] { "hxjA", "A7AGV允许入满箱", "true" }); //getdic.Add("ZS-A06-2", new string[] { "hxjA", "A8AGV允许入满箱", "true" }); - //getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9AGV允许入满箱", "true" }); - //getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10AGV允许入满箱", "true" }); + getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9AGV允许入满箱", "true" }); + getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10AGV允许入满箱", "true" }); getdic.Add("ZS-A09-2", new string[] { "hxjA", "A11AGV允许入满箱", "true" }); getdic.Add("ZS-A10-2", new string[] { "hxjA", "A12AGV允许入满箱", "true" }); getdic.Add("ZS-A11-2", new string[] { "hxjA", "A13AGV允许入满箱", "true" }); @@ -1234,8 +1238,8 @@ namespace Tnb.WarehouseMgr //getdic.Add("ZS-D06-2", new string[] { "hxjA", "A6AGV允许入满箱", "true" }); //getdic.Add("ZS-A05-2", new string[] { "hxjA", "A7AGV允许入满箱", "true" }); //getdic.Add("ZS-A06-2", new string[] { "hxjA", "A8AGV允许入满箱", "true" }); - //getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9AGV允许入满箱", "true" }); - //getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10AGV允许入满箱", "true" }); + getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9AGV允许入满箱", "true" }); + getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10AGV允许入满箱", "true" }); getdic.Add("ZS-A09-2", new string[] { "hxjA", "A11AGV允许入满箱", "true" }); getdic.Add("ZS-A10-2", new string[] { "hxjA", "A12AGV允许入满箱", "true" }); getdic.Add("ZS-A11-2", new string[] { "hxjA", "A13AGV允许入满箱", "true" }); @@ -1282,8 +1286,8 @@ namespace Tnb.WarehouseMgr //putdic.Add("ZS-D06-1", new string[] { "hxjA", "A6AGV允许出空箱", "false" }); //putdic.Add("ZS-A05-1", new string[] { "hxjA", "A7AGV允许出空箱", "true" }); //putdic.Add("ZS-A06-1", new string[] { "hxjA", "A8AGV允许出空箱", "true" }); - //putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9AGV允许出空箱", "true" }); - //putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10AGV允许出空箱", "true" }); + putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9AGV允许出空箱", "true" }); + putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10AGV允许出空箱", "true" }); putdic.Add("ZS-A09-1", new string[] { "hxjA", "A11AGV允许出空箱", "true" }); putdic.Add("ZS-A10-1", new string[] { "hxjA", "A12AGV允许出空箱", "true" }); putdic.Add("ZS-A11-1", new string[] { "hxjA", "A13AGV允许出空箱", "false" }); @@ -2639,8 +2643,8 @@ namespace Tnb.WarehouseMgr #region 电梯第三次改动 var _floor3FirstSelectElevator = await db_agvElevatorTaskExceptionHandles.Queryable().Where(p => p.key == "floor3FirstSelectElevator").FirstAsync(); - // 一托下且当前电梯还没有后续任务且首选电梯为当前电梯的情况下,切换首选电梯为另一部 - int task_nums = db.Queryable().Where(r => r.elevator_code == devName).Sum(r => r.task_nums); + // 一托下且当前电梯组还没有后续任务且首选电梯为当前电梯的情况下,切换首选电梯为另一部 + int task_nums = db.Queryable().Where(r => r.elevator_group == "2").Sum(r => r.task_nums); if (disTaskIds.Count == 1 && task_nums == 1 && devName == _floor3FirstSelectElevator.value) { await ChangeSelectedElevator(db); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs index 4d8ad1a1..743406d4 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs @@ -205,7 +205,7 @@ namespace Tnb.WarehouseMgr throw new Exception($"条码{string.Join(',', input.details.Select(r => r.barcode))}来源采购收货明细不存在!"); } // 收货质检之后不能绑定 - if (!string.IsNullOrEmpty(wmsPurchaseD.qc_res)) + if (!string.IsNullOrEmpty(wmsPurchaseD.qc_res) && wmsPurchaseD.qc_res != "await") { WmsPurchaseH wmsPurchaseH = await _db.Queryable().Where(r => r.id == wmsPurchaseD.bill_id).FirstAsync(); throw new Exception($"采购收货单{wmsPurchaseH.bill_code}中物料为 {wmsPurchaseD.material_code} 批次为{wmsPurchaseD.code_batch}的明细已进行过收货质检,此明细不能再绑定物料!"); @@ -312,7 +312,7 @@ namespace Tnb.WarehouseMgr }).Where(r => r.id == carry.id).ExecuteCommandAsync(); if (rows == 0) { - throw new Exception($"物料列表为空,不能提交绑定,可能的原因;1.需要检查扫码设置(新PDA) 2.未扫到有效的二维码 详细信息:接收到{input.details.Count}个条码 但是成功绑定的条码数量为0个!"); + throw new Exception($"物料列表为空,不能提交绑定,可能的原因;1.需要检查扫码设置(新PDA) 2.未扫到有效的二维码 详细信息:接收到{input.details.Count}个条码 成功绑定的条码数量为0个!"); } } @@ -386,7 +386,7 @@ namespace Tnb.WarehouseMgr } if (rows == 0) { - throw new Exception($"物料列表为空,不能提交绑定,可能的原因;1.需要检查扫码设置(新PDA) 2.未扫到有效的二维码 详细信息:接收到{input.details.Count}个条码 但是成功绑定的条码数量为0个!"); + throw new Exception($"物料列表为空,不能提交绑定,可能的原因;1.需要检查扫码设置(新PDA) 2.未扫到有效的二维码 详细信息:接收到{input.details.Count}个条码 成功绑定的条码数量为0个!"); } } catch (PostgresException ex) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs index 48de3e0f..2364337c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs @@ -335,7 +335,7 @@ namespace Tnb.WarehouseMgr int rows = await _db.Insertable(wmsCarryCode).ExecuteCommandAsync(); if (rows == 0) { - throw new Exception($"接收到1个条码 但是成功绑定的条码数量为0个!"); + throw new Exception($"接收到1个条码 成功绑定的条码数量为0个!"); } await _db.Updateable().SetColumns(r => r.carry_status == ((int)EnumCarryStatus.占用).ToString()).Where(r => r.id == input.carry_id).ExecuteCommandAsync(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs index f2f3c5bd..115f79ad 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs @@ -303,172 +303,182 @@ namespace Tnb.WarehouseMgr if (instock.bill_type == WmsWareHouseConst.BILLTYPE_MATERIALINSTOCK_ID) { WmsPurchaseD wmsPurchaseD = await _db.Queryable().SingleAsync(x => x.id == input.wmsDistaskH.source_id); - - await _db.Updateable().SetColumns(r => new WmsCarryCode + string purchaseHId = wmsPurchaseD?.bill_id ?? ""; + WmsPurchaseH wmsPurchaseH = await _db.Queryable().SingleAsync(x => x.id == purchaseHId); + int row =await _db.Updateable().SetColumns(r => new WmsCarryCode { auxprop_gys = wmsPurchaseD.auxprop_gys, auxprop_xph = wmsPurchaseD.auxprop_xph }).Where(r => r.carry_id == input.wmsDistaskH.carry_id).ExecuteCommandAsync(); - - if (instock.sync_status != WmsWareHouseConst.SYNC_STATUS_NONEEDSYNC) + if (wmsPurchaseH.make_method == "自制") { - //如果是自动单据,需要回更上层系统 - Dictionary pars = new() { { nameof(WmsInstockH.source_id), instock?.source_id ?? string.Empty } }; - dynamic callBackRes = await _prdInstockService.SyncInstock(pars); - instock!.sync_status = callBackRes == true ? WmsWareHouseConst.SYNC_STATUS__SYNCCOMPLETE : WmsWareHouseConst.SYNC_STATUS__SYNCFAILED; - _ = await _db.Updateable(instock).UpdateColumns(it => it.sync_status).ExecuteCommandAsync(); - } - List allInstockDetails = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); - if (allInstockDetails.All(x => x.line_status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)) - { - instock.status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID; - } - else - { - //任务没有结束,更新状态为工作中 - instock.status = WmsWareHouseConst.BILLSTATUS_ON_ID; - } - _ = await _db.Updateable(instock).UpdateColumns(it => it.status).ExecuteCommandAsync(); - - - - WmsTempCode wmsTempCode = await _db.Queryable() - .LeftJoin((a, b) => a.barcode == b.barcode) - .Where((a, b) => a.carry_id == input.wmsDistaskH.carry_id) - .Select((a, b) => b) - .FirstAsync(); - - string purchaseDId = wmsTempCode?.require_id ?? ""; - //WmsPurchaseD wmsPurchaseD = await _db.Queryable().SingleAsync(x => x.id == purchaseDId); - string purchaseHId = wmsPurchaseD?.bill_id ?? ""; - WmsPurchaseH wmsPurchaseH = await _db.Queryable().SingleAsync(x => x.id == purchaseHId); - string wmsPurchaseOrderHId = wmsPurchaseH?.erp_bill_code ?? ""; - WmsPurchaseOrderH wmsPurchaseOrderH = await _db.Queryable().SingleAsync(x => x.id == wmsPurchaseOrderHId); - WmsPurchaseOrderD wmsPurchaseOrderDs = await _db.Queryable().FirstAsync(x => x.fk_wms_purchase_order_id == wmsPurchaseOrderHId); - BasWarehouse basWarehouse = await _db.Queryable().SingleAsync(x=>x.id==instock.warehouse_id); - - List materialIds = allInstockDetails.Select(x => x.material_id).Distinct().ToList(); - List unitCodes = allInstockDetails.Select(x => x.unit_id).Distinct().ToList(); - List unitDatas = await _db.Queryable() - .LeftJoin((x, y) => x.Id == y.DictionaryTypeId) - .Where((x, y) => x.EnCode == DictConst.MeasurementUnit && unitCodes.Contains(y.EnCode)) - .Select((x, y) => y) - .ToListAsync(); - List erpWarehouserelaHs = await _db.Queryable().Where(x=>x.id!=null).ToListAsync(); - - DictionaryDataEntity tranType = await _db.Queryable().Where(x=>x.DictionaryTypeId=="25043925951909" && x.EnCode==wmsPurchaseH.transaction_type).FirstAsync(); - string tranTypeId = tranType?.Id ?? ""; - string supplierId = wmsPurchaseOrderH?.supplier_id ?? ""; - List tableIds = new List(); - tableIds.Add(_userManager.UserId); - tableIds.Add(WmsWareHouseConst.AdministratorOrgId); - tableIds.Add(instock.warehouse_id); - tableIds.AddRange(materialIds); - tableIds.Add(supplierId); - tableIds.Add(tranTypeId); - tableIds.AddRange(unitDatas.Select(x => x.Id).ToList()); - - List erpExtendFields = await _db.Queryable().Where(x => tableIds.Contains(x.table_id)).ToListAsync(); - // string erpCreateId = erpExtendFields.Find(x => x.table_id == instock.create_id)?.user_id ?? ""; - string erpCreateId = WmsWareHouseConst.ERPUSERID; - ErpExtendField erpOrg = erpExtendFields.Find(x => x.table_id == (WmsWareHouseConst.AdministratorOrgId)); - string nowStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - - List> requestData = new List>(); - Dictionary erpRequestData = new Dictionary(); - erpRequestData.Add("approver", erpCreateId); - erpRequestData.Add("billmaker", erpCreateId); - erpRequestData.Add("bitinbill", false); - erpRequestData.Add("cgeneralhid", null); - erpRequestData.Add("corpoid", erpOrg.corpoid); - erpRequestData.Add("corpvid", erpOrg.corpvid); - erpRequestData.Add("creationtime", nowStr); - erpRequestData.Add("creator", erpCreateId); - erpRequestData.Add("ctrantypeid", erpExtendFields.Find(x => x.table_id == tranTypeId)?.transaction_type_id ?? ""); - erpRequestData.Add("cvendorid", erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? ""); - erpRequestData.Add("cvendorvid", erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_vid ?? ""); - // erpRequestData.Add("cwarehouseid", erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "");//类型视图里取 - // erpRequestData.Add("cwarehouseid", erpWarehouserelaHs.Find(x => x.erp_warehousecode == wmsPurchaseD.erp_wh_type)?.erp_warehouseid ?? "");//类型视图里取 - // erpRequestData.Add("cwarehouseid", "1001A11000000002OOGU");//类型视图里取 - erpRequestData.Add("cwarehouseid", wmsPurchaseD?.erp_wh_type ?? "1001A11000000002OOGU"); - erpRequestData.Add("dbilldate", nowStr); - erpRequestData.Add("dmakedate", nowStr); - erpRequestData.Add("fbillflag", 2); - erpRequestData.Add("fbuysellflag", 2); - erpRequestData.Add("ntotalnum", allInstockDetails.Sum(x => x.qty)); - erpRequestData.Add("pk_org", erpOrg.pk_org); - erpRequestData.Add("pk_org_v", erpOrg.pk_org_v); - erpRequestData.Add("pk_group", erpOrg.pk_group); - erpRequestData.Add("vbillcode", instock.bill_code); - erpRequestData.Add("vtrantypecode", tranType?.EnCode ?? ""); - erpRequestData.Add("csourcebillhid", wmsPurchaseH?.erp_arriveorder_pk ?? ""); - - List> erpRequestDataDetails = new List>(); - foreach (WmsInstockD item in allInstockDetails) - { - erpRequestDataDetails.Add(new Dictionary() + if (instock.sync_status != WmsWareHouseConst.SYNC_STATUS_NONEEDSYNC) { - ["castunitid"] = erpExtendFields.Find(x => x.table_id == (unitDatas.Find(x => x.EnCode == item.unit_id)?.Id ?? ""))?.cunitid ?? "", - ["cbodytranstypecode"] = erpExtendFields.Find(x => x.table_id == tranTypeId)?.transaction_type_id ?? "", - // ["cbodywarehouseid"] = erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "", - // ["cbodywarehouseid"] = "1001A11000000002OOGU", - ["cbodywarehouseid"] = wmsPurchaseD?.erp_wh_type ?? "1001A11000000002OOGU", - ["cgeneralbid"] = null, - ["cgeneralhid"] = null, - ["cmaterialoid"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialoid ?? "", - ["cmaterialvid"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialvid ?? "", - ["corpoid"] = erpOrg.corpoid, - ["corpvid"] = erpOrg.corpvid, - ["crowno"] = (allInstockDetails.FindIndex(x => x.id == item.id) + 1) * 10, - ["cunitid"] = erpExtendFields.Find(x => x.table_id == (unitDatas.Find(x => x.EnCode == item.unit_id)?.Id ?? ""))?.cunitid ?? "", - ["cvendorid"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? "", - ["cvendorvid"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_vid ?? "", - ["dbizdate"] = instock.create_time.ToString("yyyy-MM-dd HH:mm:ss"), - ["nnum"] = item.qty, - ["nshouldnum"] = item.pr_qty, - // ["pk_creqwareid"] = erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "", - // ["pk_creqwareid"] = erpWarehouserelaHs.Find(x => x.erp_warehousecode == basWarehouse.whcode)?.erp_warehouseid ?? "", - // ["pk_creqwareid"] = "1001A11000000002OOGU", - ["pk_creqwareid"] = wmsPurchaseD?.erp_wh_type ?? "1001A11000000002OOGU", - ["pk_group"] = erpOrg.pk_group, - ["pk_org"] = erpOrg.pk_org, - ["pk_org_v"] = erpOrg.pk_org_v, - ["pseudocolumn"] = (allInstockDetails.FindIndex(x => x.id == item.id) + 1) * 10, - ["vbatchcode"] = item.code_batch, - ["csourcebillhid"] = wmsPurchaseH?.erp_arriveorder_pk ?? "", - ["csourcebillbid"] = wmsPurchaseD?.erp_arriveorder_b_pk ?? "", - ["vsourcebillcode"] = wmsPurchaseH?.bill_code ?? "", - ["lineno"] = wmsPurchaseOrderDs?.lineno ?? "", - ["vfree1"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? "", - ["bpresent"] = wmsPurchaseD.gift==1, - ["ntaxprice"] = wmsPurchaseD.price, - - }); - } - erpRequestData.Add("dtls", erpRequestDataDetails); - requestData.Add(erpRequestData); - BasFactoryConfig config = await _db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.BIPURL); - - ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord(); - thirdWebapiRecord.id = SnowflakeIdHelper.NextId(); - thirdWebapiRecord.third_name = WmsWareHouseConst.BIP; - thirdWebapiRecord.name = "采购入库"; - thirdWebapiRecord.method = "POST"; - // thirdWebapiRecord.url = config.value + "uapws/rest/purchaseIn/save"; - thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN + "uapws/rest/purchaseIn/save"; - thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData); - thirdWebapiRecord.create_time = DateTime.Now; - thirdWebapiRecord.remark = "采购收货单号:" + (wmsPurchaseH?.bill_code ?? "") + ",erp采购订单号:"+(wmsPurchaseOrderH?.erp_bill_code ?? ""); - await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync(); - BasFactoryConfig callErp = await _db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.CALLERP); - if(callErp.value=="1"){ - await _thirdApiRecordService.Send(new List { thirdWebapiRecord }, "自动", _db); + //如果是自动单据,需要回更上层系统 + Dictionary pars = new() { { nameof(WmsInstockH.source_id), instock?.source_id ?? string.Empty } }; + dynamic callBackRes = await _prdInstockService.SyncInstock(pars); + instock!.sync_status = callBackRes == true ? WmsWareHouseConst.SYNC_STATUS__SYNCCOMPLETE : WmsWareHouseConst.SYNC_STATUS__SYNCFAILED; + _ = await _db.Updateable(instock).UpdateColumns(it => it.sync_status).ExecuteCommandAsync(); + } + List allInstockDetails = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); + if (allInstockDetails.All(x => x.line_status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)) + { + instock.status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID; + } + else + { + //任务没有结束,更新状态为工作中 + instock.status = WmsWareHouseConst.BILLSTATUS_ON_ID; + } + _ = await _db.Updateable(instock).UpdateColumns(it => it.status).ExecuteCommandAsync(); + + + + WmsTempCode wmsTempCode = await _db.Queryable() + .LeftJoin((a, b) => a.barcode == b.barcode) + .Where((a, b) => a.carry_id == input.wmsDistaskH.carry_id) + .Select((a, b) => b) + .FirstAsync(); + + string purchaseDId = wmsTempCode?.require_id ?? ""; + //WmsPurchaseD wmsPurchaseD = await _db.Queryable().SingleAsync(x => x.id == purchaseDId); + string wmsPurchaseOrderHId = wmsPurchaseH?.erp_bill_code ?? ""; + WmsPurchaseOrderH wmsPurchaseOrderH = await _db.Queryable().SingleAsync(x => x.id == wmsPurchaseOrderHId); + WmsPurchaseOrderD wmsPurchaseOrderDs = await _db.Queryable().FirstAsync(x => x.fk_wms_purchase_order_id == wmsPurchaseOrderHId); + BasWarehouse basWarehouse = await _db.Queryable().SingleAsync(x => x.id == instock.warehouse_id); + + List materialIds = allInstockDetails.Select(x => x.material_id).Distinct().ToList(); + List unitCodes = allInstockDetails.Select(x => x.unit_id).Distinct().ToList(); + List unitDatas = await _db.Queryable() + .LeftJoin((x, y) => x.Id == y.DictionaryTypeId) + .Where((x, y) => x.EnCode == DictConst.MeasurementUnit && unitCodes.Contains(y.EnCode)) + .Select((x, y) => y) + .ToListAsync(); + List erpWarehouserelaHs = await _db.Queryable().Where(x => x.id != null).ToListAsync(); + + DictionaryDataEntity tranType = await _db.Queryable().Where(x => x.DictionaryTypeId == "25043925951909" && x.EnCode == wmsPurchaseH.transaction_type).FirstAsync(); + string tranTypeId = tranType?.Id ?? ""; + string supplierId = wmsPurchaseOrderH?.supplier_id ?? ""; + List tableIds = new List(); + tableIds.Add(_userManager.UserId); + tableIds.Add(WmsWareHouseConst.AdministratorOrgId); + tableIds.Add(instock.warehouse_id); + tableIds.AddRange(materialIds); + tableIds.Add(supplierId); + tableIds.Add(tranTypeId); + tableIds.AddRange(unitDatas.Select(x => x.Id).ToList()); + + List erpExtendFields = await _db.Queryable().Where(x => tableIds.Contains(x.table_id)).ToListAsync(); + // string erpCreateId = erpExtendFields.Find(x => x.table_id == instock.create_id)?.user_id ?? ""; + string erpCreateId = WmsWareHouseConst.ERPUSERID; + ErpExtendField erpOrg = erpExtendFields.Find(x => x.table_id == (WmsWareHouseConst.AdministratorOrgId)); + string nowStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + + List> requestData = new List>(); + Dictionary erpRequestData = new Dictionary(); + erpRequestData.Add("approver", erpCreateId); + erpRequestData.Add("billmaker", erpCreateId); + erpRequestData.Add("bitinbill", false); + erpRequestData.Add("cgeneralhid", null); + erpRequestData.Add("corpoid", erpOrg.corpoid); + erpRequestData.Add("corpvid", erpOrg.corpvid); + erpRequestData.Add("creationtime", nowStr); + erpRequestData.Add("creator", erpCreateId); + erpRequestData.Add("ctrantypeid", erpExtendFields.Find(x => x.table_id == tranTypeId)?.transaction_type_id ?? ""); + erpRequestData.Add("cvendorid", erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? ""); + erpRequestData.Add("cvendorvid", erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_vid ?? ""); + // erpRequestData.Add("cwarehouseid", erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "");//类型视图里取 + // erpRequestData.Add("cwarehouseid", erpWarehouserelaHs.Find(x => x.erp_warehousecode == wmsPurchaseD.erp_wh_type)?.erp_warehouseid ?? "");//类型视图里取 + // erpRequestData.Add("cwarehouseid", "1001A11000000002OOGU");//类型视图里取 + erpRequestData.Add("cwarehouseid", wmsPurchaseD?.erp_wh_type ?? "1001A11000000002OOGU"); + erpRequestData.Add("dbilldate", nowStr); + erpRequestData.Add("dmakedate", nowStr); + erpRequestData.Add("fbillflag", 2); + erpRequestData.Add("fbuysellflag", 2); + erpRequestData.Add("ntotalnum", allInstockDetails.Sum(x => x.qty)); + erpRequestData.Add("pk_org", erpOrg.pk_org); + erpRequestData.Add("pk_org_v", erpOrg.pk_org_v); + erpRequestData.Add("pk_group", erpOrg.pk_group); + erpRequestData.Add("vbillcode", instock.bill_code); + erpRequestData.Add("vtrantypecode", tranType?.EnCode ?? ""); + erpRequestData.Add("csourcebillhid", wmsPurchaseH?.erp_arriveorder_pk ?? ""); + + List> erpRequestDataDetails = new List>(); + foreach (WmsInstockD item in allInstockDetails) + { + erpRequestDataDetails.Add(new Dictionary() + { + ["castunitid"] = erpExtendFields.Find(x => x.table_id == (unitDatas.Find(x => x.EnCode == item.unit_id)?.Id ?? ""))?.cunitid ?? "", + ["cbodytranstypecode"] = erpExtendFields.Find(x => x.table_id == tranTypeId)?.transaction_type_id ?? "", + // ["cbodywarehouseid"] = erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "", + // ["cbodywarehouseid"] = "1001A11000000002OOGU", + ["cbodywarehouseid"] = wmsPurchaseD?.erp_wh_type ?? "1001A11000000002OOGU", + ["cgeneralbid"] = null, + ["cgeneralhid"] = null, + ["cmaterialoid"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialoid ?? "", + ["cmaterialvid"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialvid ?? "", + ["corpoid"] = erpOrg.corpoid, + ["corpvid"] = erpOrg.corpvid, + ["crowno"] = (allInstockDetails.FindIndex(x => x.id == item.id) + 1) * 10, + ["cunitid"] = erpExtendFields.Find(x => x.table_id == (unitDatas.Find(x => x.EnCode == item.unit_id)?.Id ?? ""))?.cunitid ?? "", + ["cvendorid"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? "", + ["cvendorvid"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_vid ?? "", + ["dbizdate"] = instock.create_time.ToString("yyyy-MM-dd HH:mm:ss"), + ["nnum"] = item.qty, + ["nshouldnum"] = item.pr_qty, + // ["pk_creqwareid"] = erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "", + // ["pk_creqwareid"] = erpWarehouserelaHs.Find(x => x.erp_warehousecode == basWarehouse.whcode)?.erp_warehouseid ?? "", + // ["pk_creqwareid"] = "1001A11000000002OOGU", + ["pk_creqwareid"] = wmsPurchaseD?.erp_wh_type ?? "1001A11000000002OOGU", + ["pk_group"] = erpOrg.pk_group, + ["pk_org"] = erpOrg.pk_org, + ["pk_org_v"] = erpOrg.pk_org_v, + ["pseudocolumn"] = (allInstockDetails.FindIndex(x => x.id == item.id) + 1) * 10, + ["vbatchcode"] = item.code_batch, + ["csourcebillhid"] = wmsPurchaseH?.erp_arriveorder_pk ?? "", + ["csourcebillbid"] = wmsPurchaseD?.erp_arriveorder_b_pk ?? "", + ["vsourcebillcode"] = wmsPurchaseH?.bill_code ?? "", + ["lineno"] = wmsPurchaseOrderDs?.lineno ?? "", + ["vfree1"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? "", + ["bpresent"] = wmsPurchaseD.gift == 1, + ["ntaxprice"] = wmsPurchaseD.price, + + }); + } + erpRequestData.Add("dtls", erpRequestDataDetails); + requestData.Add(erpRequestData); + BasFactoryConfig config = await _db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.BIPURL); + + ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord(); + thirdWebapiRecord.id = SnowflakeIdHelper.NextId(); + thirdWebapiRecord.third_name = WmsWareHouseConst.BIP; + thirdWebapiRecord.name = "采购入库"; + thirdWebapiRecord.method = "POST"; + // thirdWebapiRecord.url = config.value + "uapws/rest/purchaseIn/save"; + thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN + "uapws/rest/purchaseIn/save"; + thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData); + thirdWebapiRecord.create_time = DateTime.Now; + thirdWebapiRecord.remark = "采购收货单号:" + (wmsPurchaseH?.bill_code ?? "") + ",erp采购订单号:" + (wmsPurchaseOrderH?.erp_bill_code ?? ""); + await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync(); + BasFactoryConfig callErp = await _db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.CALLERP); + if (callErp.value == "1") + { + await _thirdApiRecordService.Send(new List { thirdWebapiRecord }, "自动", _db); + } } } // 委外入库 else if (instock.bill_type == WmsWareHouseConst.BILLTYPE_OUTSOURCEINSTOCK_ID) { - + WmsOutsourceD wmsOutsourceD = await _db.Queryable().SingleAsync(x => x.id == input.wmsDistaskH.source_id); + //string wmsOutsourceDId = wmsOutsourceD?.fk_wms_outsource_order_id ?? ""; + //WmsOutsourceH wWmsOutsourceH = await _db.Queryable().SingleAsync(x => x.id == wmsOutsourceDId); + int row = await _db.Updateable().SetColumns(r => new WmsCarryCode + { + auxprop_gys = wmsOutsourceD.auxprop_gys, + auxprop_xph = wmsOutsourceD.auxprop_xph + }).Where(r => r.carry_id == input.wmsDistaskH.carry_id).ExecuteCommandAsync(); + } // 调拨入库 else if (instock.bill_type == WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs index 691b231f..a23463ed 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs @@ -331,10 +331,10 @@ namespace Tnb.WarehouseMgr WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable().FirstAsync(it => it.id == input.source_id); WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable().FirstAsync(it => it.id == wmsMaterialTransferD.bill_id); - //if (wmsMaterialTransferD.yxfqty >= wmsMaterialTransferD.qty) - //{ - // throw new AppFriendlyException("已下发数量已达到转库数量", 500); - //} + if (wmsMaterialTransferD.yxfqty >= wmsMaterialTransferD.qty) + { + throw new AppFriendlyException("已下发数量已达到转库数量", 500); + } await _db.Ado.BeginTranAsync(); @@ -363,7 +363,7 @@ namespace Tnb.WarehouseMgr List endLocations = new List(); // 集中供料区三工位 - if (wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_JZGL_ID) + if (wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_JZGL_ID|| wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_WBZHHC_ID) { // 根据三工位任务数平均分配任务 暂定 endLocations = _db.Queryable().Where(r => _wareHouseService.GetFloor1GLSGWOutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0") @@ -376,6 +376,11 @@ namespace Tnb.WarehouseMgr endLocations = _db.Queryable().Where(r => _wareHouseService.GetFloor1WXSGWOutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0") .OrderBy("is_lock, task_nums, location_code").ToList(); } + else + { + BasWarehouse basWarehouse = await _db.Queryable().Where(r => r.id == wmsMaterialTransfer.warehouse_instock).FirstAsync(); + throw new AppFriendlyException($@"当前不允许到转库单{wmsMaterialTransfer.bill_code}入库仓库{basWarehouse.whname}的转库操作", 500); + } if (endLocations.Count() < input.palletCount) { @@ -388,7 +393,7 @@ namespace Tnb.WarehouseMgr BasLocation endLocation = null; // 集中供料区三工位 - if (wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_JZGL_ID) + if (wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_JZGL_ID || wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_WBZHHC_ID) { // 根据三工位任务数平均分配任务 暂定 endLocation = await _db.Queryable().Where(r => _wareHouseService.GetFloor1GLSGWOutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0").OrderBy("is_lock, task_nums, location_code").FirstAsync(); @@ -530,6 +535,11 @@ namespace Tnb.WarehouseMgr throw new AppFriendlyException($"下发数量{qty}已超过可下发数量{wmsMaterialTransferD.qty - wmsMaterialTransferD.yxfqty_rk}", 500); } + if (qty > otherOutstockD_first.qty - otherOutstockD_first.rk_qty) + { + throw new AppFriendlyException($"下发数量{qty}已超过其它出库单{otherOutstockH.bill_code}中物料{otherOutstockD_first.material_code}的可下发数量{otherOutstockD_first.qty - otherOutstockD_first.rk_qty}", 500); + } + await _db.Ado.BeginTranAsync(); //入库取终点 //出库起点 InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID, Size = input.details.Count }; @@ -545,6 +555,8 @@ namespace Tnb.WarehouseMgr throw new AppFriendlyException("可用的入库库位数量少于扫描的料箱数量", 500); } + await _db.Updateable().SetColumns(r => r.rk_qty == otherOutstockD_first.rk_qty + qty).Where(r => r.id == otherOutstockD_first.id).ExecuteCommandAsync(); + int index = 0; List wmsCarryHs = await _db.Queryable().Where(r => input.details.Select(x => x.carry_code).Contains(r.carry_code)).ToListAsync(); @@ -988,9 +1000,9 @@ namespace Tnb.WarehouseMgr #region 更新已转数量 // 8线到中储仓入库或三工位退回原材料操作时回写数量 - if ((wmsMaterialTransfer.warehouse_outstock == WmsWareHouseConst.WAREHOUSE_YCL_ID && wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_ZC_ID) + if (((wmsMaterialTransfer.warehouse_outstock == WmsWareHouseConst.WAREHOUSE_YCL_ID && wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_ZC_ID) || (wmsMaterialTransfer.warehouse_outstock == WmsWareHouseConst.WAREHOUSE_ZC_ID && wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_YCL_ID) - && input.wmsDistaskH.task_type == WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID) + )&& input.wmsDistaskH.task_type == WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID) { // 更新已转数量(入库) isOk = await _db.Updateable().SetColumns(it => new WmsMaterialTransferD { yzqty_rk = it.yzqty_rk + wmsCarryCodes.Sum(r => r.codeqty) }) @@ -998,7 +1010,7 @@ namespace Tnb.WarehouseMgr } else { - // 中储仓到8线后自动解绑物料 + // 中储仓到7线后自动解绑物料 if ((wmsMaterialTransfer.warehouse_outstock == WmsWareHouseConst.WAREHOUSE_ZC_ID && wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_YCL_ID) && input.wmsDistaskH.task_type == WmsWareHouseConst.WMS_PRETASK_TRANSFER_TYPE_ID) { @@ -1326,16 +1338,16 @@ namespace Tnb.WarehouseMgr throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在未填写工位的明细!", 500); } - var wmsMaterialTransferdsDistinct = wmsMaterialTransferds.Select(r => new - { - material_id = r.material_id, - code_batch = r.code_batch, - }).Distinct(); - if (wmsMaterialTransferdsDistinct.Count() < wmsMaterialTransferds.Count) - { - Logger.LogWarning($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!"); - throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!", 500); - } + //var wmsMaterialTransferdsDistinct = wmsMaterialTransferds.Select(r => new + //{ + // material_id = r.material_id, + // code_batch = r.code_batch, + //}).Distinct(); + //if (wmsMaterialTransferdsDistinct.Count() < wmsMaterialTransferds.Count) + //{ + // Logger.LogWarning($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!"); + // throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!", 500); + //} // 转库单载具子表 List wmsMaterialTransferCarrys = new List(); @@ -1480,7 +1492,7 @@ namespace Tnb.WarehouseMgr //出库取起点,获取所有符合输入的载具规格的载具 OutStockStrategyZCC2Floor2Query OutStockStrategyInput = new() { - warehouse_id = "2", + warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID, material_id = wmsMaterialTransferD.material_id, code_batch = wmsMaterialTransferD.code_batch, needOut = needOut, @@ -1598,16 +1610,16 @@ namespace Tnb.WarehouseMgr List wmsMaterialTransferds = _db.Queryable().Where(r => r.bill_id == input.source_id).ToList(); - var wmsMaterialTransferdsDistinct = wmsMaterialTransferds.Select(r => new - { - material_id = r.material_id, - code_batch = r.code_batch, - }).Distinct(); - if (wmsMaterialTransferdsDistinct.Count() < wmsMaterialTransferds.Count) - { - Logger.LogWarning($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!"); - throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!", 500); - } + //var wmsMaterialTransferdsDistinct = wmsMaterialTransferds.Select(r => new + //{ + // material_id = r.material_id, + // code_batch = r.code_batch, + //}).Distinct(); + //if (wmsMaterialTransferdsDistinct.Count() < wmsMaterialTransferds.Count) + //{ + // Logger.LogWarning($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!"); + // throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!", 500); + //} // 转库单载具子表 List wmsMaterialTransferCarrys = new List(); @@ -1787,9 +1799,14 @@ namespace Tnb.WarehouseMgr { throw new AppFriendlyException($"本次下发数量{input.qty}已超过可下发数量{wmsMaterialTransferD.yzqty - wmsMaterialTransferD.yxfqty_rk}", 500); } + if (input.qty > otherOutstockD_first.qty - otherOutstockD_first.rk_qty) + { + throw new AppFriendlyException($"下发数量{input.qty}已超过其它出库单{otherOutstockH.bill_code}中物料{otherOutstockD_first.material_code}的可下发数量{otherOutstockD_first.qty - otherOutstockD_first.rk_qty}", 500); + } + await _s_taskExecuteSemaphore_YCLInstock.WaitAsync(); await _db.Ado.BeginTranAsync(); - + await _db.Updateable().SetColumns(r => r.rk_qty == otherOutstockD_first.rk_qty + input.qty).Where(r => r.id == otherOutstockD_first.id).ExecuteCommandAsync(); InStockStrategyQuery inStockStrategyInput = new() { @@ -2000,7 +2017,8 @@ namespace Tnb.WarehouseMgr { try { - List wmsCarryHs = _db.Queryable().Where(r => r.work_station == input.work_station && r.is_lock == 0 + List wmsCarryHs = _db.Queryable().Where(r => r.work_station == input.work_station && r.is_lock == 0 + && (r.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID || r.carrystd_id == WmsWareHouseConst.CARRY_ZYLJSTD_ID|| r.carrystd_id == WmsWareHouseConst.CARRY_ZYXCSTD_ID) && (r.carry_status == ((int)(EnumCarryStatus.占用)).ToString() || r.carry_status == ((int)(EnumCarryStatus.齐套)).ToString())).ToList(); if (string.IsNullOrEmpty(input.work_station)) { @@ -2481,10 +2499,15 @@ namespace Tnb.WarehouseMgr { throw new AppFriendlyException($"本次下发数量{input.qty}已超过可下发数量{wmsMaterialTransferD.yzqty - wmsMaterialTransferD.yxfqty_rk}", 500); } + if (input.qty > otherOutstockD_first.qty - otherOutstockD_first.rk_qty) + { + throw new AppFriendlyException($"下发数量{input.qty}已超过其它出库单{otherOutstockH.bill_code}中物料{otherOutstockD_first.material_code}的可下发数量{otherOutstockD_first.qty - otherOutstockD_first.rk_qty}", 500); + } await _s_taskExecuteSemaphore_YCLInstock.WaitAsync(); await _db.Ado.BeginTranAsync(); + await _db.Updateable().SetColumns(r => r.rk_qty == otherOutstockD_first.rk_qty + input.qty).Where(r => r.id == otherOutstockD_first.id).ExecuteCommandAsync(); InStockStrategyQuery inStockStrategyInput = new() { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPackInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPackInstockService.cs index 63f33a0d..42ec0b47 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPackInstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPackInstockService.cs @@ -79,14 +79,27 @@ namespace Tnb.WarehouseMgr { WmsCarryCode wmsCarryCode = await _db.Queryable().Where(r => r.carry_id == input.wmsDistaskH.carry_id).FirstAsync(); await _db.Updateable().SetColumns(r => r.qty == r.qty + wmsCarryCode.codeqty).Where(r => r.id == input.wmsDistaskH.require_id).ExecuteCommandAsync(); + WmsPackInstockD wmsPackInstockD = await _db.Queryable().Where(r => r.id == input.wmsDistaskH.require_id).FirstAsync(); + if (wmsPackInstockD != null) + { + int row = await _db.Updateable().SetColumns(r => new WmsCarryCode + { + auxprop_gys = wmsPackInstockD.auxprop_gys, + auxprop_xph = wmsPackInstockD.auxprop_xph + }).Where(r => r.carry_id == input.wmsDistaskH.carry_id).ExecuteCommandAsync(); + } + else + { + throw new Exception($"【WmsPackInstockService ModifyAsync】id为{input.wmsDistaskH.require_id}的包材入库明细在系统中不存在"); + } } await _db.Ado.CommitTranAsync(); } catch (Exception ex) { - Logger.LogError("【WmsPackInstockService ModifyAsync】" + ex.Message); - Logger.LogError("【WmsPackInstockService ModifyAsync】" + ex.StackTrace); + Logger.LogWarning("【WmsPackInstockService ModifyAsync】" + ex.Message); + Logger.LogWarning("【WmsPackInstockService ModifyAsync】" + ex.StackTrace); await _db.Ado.RollbackTranAsync(); } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs index 8eef3a01..976f13fe 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs @@ -363,10 +363,6 @@ namespace Tnb.WarehouseMgr InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = "1", Size = 1, AvoidBusyPassage = true, Region_id = WmsWareHouseConst.REGION_YCLCache_ID }; List endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); - if (endLocations.Count == 0) - { - throw new AppFriendlyException("没有可以回库的库位", 500); - } if (endLocations.Count() == 0) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseDService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseDService.cs index fdda90fc..a967d1d9 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseDService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseDService.cs @@ -71,10 +71,7 @@ namespace Tnb.WarehouseMgr WmsPurchaseD wmsPurchaseD = await _db.Queryable().SingleAsync(x => x.id == id); string purchaseHId = wmsPurchaseD?.bill_id ?? ""; WmsPurchaseH wmsPurchaseH = await _db.Queryable().SingleAsync(x => x.id == purchaseHId); - if (wmsPurchaseH.make_method == "自制") - { - throw Oops.Bah("自制采购收货单不需要操作此按钮"); - } + #region 插入质检记录 string? create_id = _userManager.User.Id; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs index 0d56efdd..274204eb 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs @@ -94,6 +94,8 @@ namespace Tnb.WarehouseMgr await _db.Updateable().SetColumns(r => r.make_method == "同步").Where(r => r.id == id).ExecuteCommandAsync(); } + await _db.Updateable().SetColumns(r => r.qc_res == "await").Where(r => r.bill_id == id).ExecuteCommandAsync(); + return "保存成功"; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs index f372af58..4ea2e980 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSortingtaskService.cs @@ -2,6 +2,8 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; +using JNPF.Common.Filter; +using JNPF.Common.Security; using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; @@ -13,6 +15,7 @@ using Microsoft.AspNetCore.Mvc; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.BasicData.Interfaces; +using Tnb.ProductionMgr.Entities.Dto.PrdManage; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Entities.Attributes; using Tnb.WarehouseMgr.Entities.Consts; @@ -89,5 +92,42 @@ namespace Tnb.WarehouseMgr } } + [HttpPost] + public async Task WmsSourtingtaskList(WmsSortingtaskListOutput input) + { + Dictionary queryJson = string.IsNullOrEmpty(input.queryJson) ? new Dictionary() : input.queryJson.ToObject>(); + string? status = queryJson.ContainsKey("status") ? queryJson["status"].ToString() : ""; + if (string.IsNullOrEmpty(input.sidx)) + { + input.sidx = "a.id"; + } + else + { + input.sidx = input.sidx.Replace("create_time", "a.create_time").Replace("erp_bill_code", "e.erp_bill_code"); + + } + SqlSugarPagedList result = await _db.Queryable() + .InnerJoin((a, b) => a.carry_id == b.carry_id) + .InnerJoin((a, b, c) => b.material_id == c.id) + .InnerJoin((a, b, c, d) => a.source_id == d.id) + .InnerJoin((a, b, c, d, e) => e.id == d.bill_id) + .WhereIF(!string.IsNullOrEmpty(status), (a, b, c, d, e) => a.status == status) + .Select((a, b, c, d, e) => new WmsSortingtask + { + create_time = DateTime.Parse(a.create_time.ToString("yyyy-MM-dd HH:mm:ss")), + material_id = c.id, + material_code =c.code , + material_name = c.name, + material_specification =c.material_specification, + code_batch = b.code_batch, + erp_bill_code = e.erp_bill_code + }, true) + .OrderBy($"{input.sidx} {input.sort}") + .ToPagedListAsync(input.currentPage, input.pageSize); + + return PageResult.SqlSugarPageResult(result); + + } + } } diff --git a/apihost/Tnb.API.Entry/Configurations/AppSetting.json b/apihost/Tnb.API.Entry/Configurations/AppSetting.json index 283832df..fe348af8 100644 --- a/apihost/Tnb.API.Entry/Configurations/AppSetting.json +++ b/apihost/Tnb.API.Entry/Configurations/AppSetting.json @@ -1,6 +1,6 @@ { "AppSettings": { - "InjectMiniProfiler": true, + "InjectMiniProfiler": false, "SupportPackageNamePrefixs": [ "Tnb" ] }, "Kestrel": {