diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index f32e02a8..77ef7fc3 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -2257,6 +2257,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// private async void Floor4MJX2MJC(object? args) { + BasLocation startlocation = await db_Floor4MJX2MJC.Queryable().Where(r => r.location_code == "MJQ-QU02").FirstAsync(); if (s_taskFloor4MJX2MJCService.CurrentCount == 0) return; await s_taskFloor4MJX2MJCService.WaitAsync(); @@ -2268,19 +2269,10 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼待灭菌线到灭菌仓"); Dictionary getdic = new Dictionary(); - getdic.Add("MJQ-QU02", new string[] { "4下上料输送西区", "下料工位2请求取盘", "下料工位2条码" }); - getdic.Add("MJQ-QU01", new string[] { "4下上料输送西区", "下料工位1请求取盘", "下料工位1条码" }); - - //List startLocations = db_Floor4MJX2MJC.Queryable().Where(r => r.wh_id == WmsWareHouseConst.WAREHOUSE_MJC_ID - //&& r.is_type == ((int)EnumLocationType.分拣库位).ToString() && r.is_lock == 0).ToList(); - - //Dictionary getdic = new Dictionary(); - - //foreach (BasLocation startLocation in getdic) - //{ - // getdic.Add(startLocation, new string[] { "", "" }); - //} + getdic.Add("MJQ-QU01", new string[] { "4楼下料输送西区", "下料工位1请求取盘", "下料工位1条码" }); + getdic.Add("MJQ-QU02", new string[] { "4楼下料输送西区", "下料工位2请求取盘", "下料工位2条码" }); + foreach (var key in getdic.Keys) { var strs = getdic.Where(p => p.Key == key).First().Value; @@ -2301,13 +2293,19 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA LoggerFloor4MJX2MJC.LogWarning($"【四楼待灭菌线到灭菌仓】 没有可以入库的库位"); break; } + var endlocation = items.First(); + await db_Floor4MJX2MJC.Ado.BeginTranAsync(); + startlocation = await db_Floor4MJX2MJC.Queryable().Where(r => r.location_code == key).FirstAsync(); - BasLocation startlocation = await db_Floor4DMJ2MJX.Queryable().Where(r => r.location_code == key).FirstAsync(); - BasLocation endlocation = items[0]; - - string carry_code = await GetStringTag(strs[0], strs[2]); + if (startlocation.is_lock == 1) + { + LoggerFloor4MJX2MJC.LogWarning($"【四楼待灭菌线到灭菌仓】 起点库位{startlocation.location_code}已锁定"); + continue; + } + string carry_code = (await GetStringTag(strs[0], strs[2])).Replace("\r", "").Replace(" ", ""); LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 下料点 {key} {strs[2]}采集到 {carry_code}"); + LoggerFloor4MJX2MJC.LogInformation($"【四楼待灭菌线到灭菌仓】 下料点 {key} {strs[2]}采集到长度 {carry_code.Length}"); WmsCarryH wmsCarryH = await db_Floor4MJX2MJC.Queryable().Where(r => r.carry_code == carry_code).FirstAsync(); //锁定起点库位 @@ -2441,9 +2439,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA BasLocation endlocation = items[0]; //锁定起点库位 - await db_Floor4MJX2MJC.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startlocation.id).ExecuteCommandAsync(); + await db_Floor4DMC2CPK.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startlocation.id).ExecuteCommandAsync(); //锁定终点库位 - await db_Floor4MJX2MJC.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endlocation.id).ExecuteCommandAsync(); + await db_Floor4DMC2CPK.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endlocation.id).ExecuteCommandAsync(); bool result_createPretask = await createPretask(startlocation.id, endlocation.id, wmsCarryH.id, wmsCarryH.carry_code, LoggerFloor4DMC2CPK, db_Floor4DMC2CPK, WmsWareHouseConst.BIZTYPE_WMSSTERILIZATIONINSTOCKCH_ID, "", wmsSterilizationInstockH.id); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index 8c95dbcc..a6180dbb 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -13,6 +13,7 @@ using JNPF.EventHandler; using JNPF.Logging; using JNPF.Systems.Entitys.System; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Newtonsoft.Json; @@ -382,11 +383,11 @@ namespace Tnb.WarehouseMgr return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!"); } - if (doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.占用) - { - Logger.Information($"【UnloadConfirm】 电梯当前在s_eleUseStatusDic中的状态为占用!"); - await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!"); - } + //if (doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.占用) + //{ + // Logger.Information($"【UnloadConfirm】 电梯当前在s_eleUseStatusDic中的状态为占用!"); + // await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!"); + //} //电梯到达目标楼层后,判断当前电梯门状态是否为开门到位保持状态 if (doorStatus != (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲 && curFloor == floorNo) //判断目标楼层与电梯所在楼层在同一层才可开门放货 { @@ -398,6 +399,17 @@ namespace Tnb.WarehouseMgr bool canEnter = false; if (devName == "Elevator3" || devName == "Elevator4") { + string sno = devName.Match(@"\d+"); + List elevatorTasks = _db.Queryable() + .Where(r => r.startlocation_code == $"DT-3-{sno}" && r.endlocation_code == $"DT-1-{sno}" && r.act_start_date == null && r.act_end_date == null + && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList(); + List elevatorTasks2 = _db.Queryable() + .Where(r => r.startlocation_code.Contains($"DT-3") && r.endlocation_code.Contains($"DT-1") && r.act_start_date == null && r.act_end_date == null + && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList(); + if (elevatorTasks.Count >= 2) + { + return await ToApiResult(HttpStatusCode.InternalServerError, "电梯内已有两托货!"); + } canEnter = true; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs index 940c3ef1..b40687b5 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs @@ -382,7 +382,7 @@ namespace Tnb.WarehouseMgr await db.Insertable(wmsPurchaseOrderH).ExecuteCommandAsync(); List wmsPurchaseOrderDs = new List(); - foreach (var detail in input.details) + foreach (var detail in details) { WmsPurchaseOrderD wmsPurchaseOrderD = new WmsPurchaseOrderD(); @@ -470,11 +470,11 @@ namespace Tnb.WarehouseMgr await db.Insertable(wmsPurchaseReturnH).ExecuteCommandAsync(); List wmsPurchaseReturnDs = new List(); - foreach (var detail in input.details) + foreach (var detail in details_return) { WmsPurchaseReturnD wmsPurchaseReturnD = new WmsPurchaseReturnD(); - wmsPurchaseReturnD.bill_id = wmsPurchaseReturnD.id; + wmsPurchaseReturnD.bill_id = wmsPurchaseReturnH.id; wmsPurchaseReturnD.matcode = detail.material_code; wmsPurchaseReturnD.unit = detail.unit_code; @@ -490,7 +490,7 @@ namespace Tnb.WarehouseMgr throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500); } - wmsPurchaseReturnD.qty = detail.purchase_quantity; + wmsPurchaseReturnD.qty = -detail.purchase_quantity; wmsPurchaseReturnD.code_batch = detail.code_batch; wmsPurchaseReturnD.erp_line_pk = detail.erp_line_pk; wmsPurchaseReturnD.create_id = WmsWareHouseConst.ErpUserId; @@ -733,70 +733,142 @@ namespace Tnb.WarehouseMgr } await db.Ado.BeginTranAsync(); - 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.transfer_type = transfer_type; - wmsMaterialTransfer.erp_pk = input.erp_pk; - await db.Insertable(wmsMaterialTransfer).ExecuteCommandAsync(); + List details = input.details.Where(r => r.qty > 0).ToList(); + List details_return = input.details.Where(r => r.qty < 0).ToList(); - List wmsMaterialTransferDs = new List(); - foreach (var detail in input.details) + if (details.Count > 0) { - 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; + 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.transfer_type = transfer_type; + wmsMaterialTransfer.erp_pk = input.erp_pk; - wmsMaterialTransferD.yxfqty = 0; - wmsMaterialTransferD.yzqty = 0; - wmsMaterialTransferD.erp_line_pk = detail.erp_line_pk; + await db.Insertable(wmsMaterialTransfer).ExecuteCommandAsync(); - var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); - if (material != null) + List wmsMaterialTransferDs = new List(); + foreach (var detail in input.details) { - wmsMaterialTransferD.material_id = material.id; - wmsMaterialTransferD.material_specification = material.material_specification; + 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.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) => b.EnCode == 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); } - 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) - { - 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}"); } - await db.Insertable(wmsMaterialTransferDs).ExecuteCommandAsync(); + 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.bill_date = DateTime.Now; + //wmsPrdReturnH.warehouse_outstock = warehouse_outstock.id; + //wmsPrdReturnH.warehouse_instock = warehouse_instock.id; + //wmsPrdReturnH.biller_out = input.biller_out; + //wmsPrdReturnH.depart_out = input.depart_out; + //wmsPrdReturnH.biller_in = input.biller_in; + //wmsPrdReturnH.depart_in = input.depart_in; + //wmsPrdReturnH.deliver_date = input.deliver_date; + //wmsPrdReturnH.arrival_date = input.arrival_date; + //wmsPrdReturnH.create_id = WmsWareHouseConst.ErpUserId; + //wmsPrdReturnH.create_time = DateTime.Now; + //wmsPrdReturnH.org_id = WmsWareHouseConst.AdministratorOrgId; + //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 input.details) + //{ + // WmsPrdReturnD wmsPrdReturnD = new WmsPrdReturnD(); + // wmsPrdReturnD.lineno = detail.lineno; + // wmsPrdReturnD.material_code = detail.material_code; + // wmsPrdReturnD.code_batch = detail.code_batch; + // wmsPrdReturnD.station_code = detail.station_code; + // wmsPrdReturnD.qty = detail.qty; + // wmsPrdReturnD.bill_id = wmsMaterialTransfer.id; + + // wmsPrdReturnD.yxfqty = 0; + // wmsPrdReturnD.yzqty = 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) => b.EnCode == 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(); - LoggerErp2Mes.LogInformation($"【MaterialTransfer】成功生成单据:{Code}"); return await ToApiResult(HttpStatusCode.OK, "成功"); } catch (Exception ex) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index da25f89b..797baceb 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -527,7 +527,6 @@ namespace Tnb.WarehouseMgr { throw new AppFriendlyException("没有可用策略", 500); } - List items = await cyDb.Queryable().LeftJoin((a, b) => a.id == b.carry_id) .LeftJoin((a, b, c) => a.location_id == c.id) .Where(whereExpr) @@ -2208,56 +2207,56 @@ namespace Tnb.WarehouseMgr Logger.Information($"当前:{devName.Match(@"\d+")}#梯"); - //var tags = new[] { "SysStatus", "RunStatus", "FloorNo", "DoorStatus", "AGVStatus" }; - //(int sysStatus, int runStatus, int curFloorNo, int doorStatus, int agvStatus) eleStatusMulti = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); - //if (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态) - //{ - // _ = await _elevatorControlService.WriteTagAsync(devName, ElevatorConsts.AGVControl, 1); - //} + var tags = new[] { "SysStatus", "RunStatus", "FloorNo", "DoorStatus", "AGVStatus" }; + (int sysStatus, int runStatus, int curFloorNo, int doorStatus, int agvStatus) eleStatusMulti = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); + if (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态) + { + _ = await _elevatorControlService.WriteTagAsync(devName, ElevatorConsts.AGVControl, 1); + } - //if (!_elevatorAgvCtlStatusMap.TryGetValue(disTask.id, out int agvCtlStatus) || agvCtlStatus != (int)EnumAgvStatus.AGV运行状态) - //{ - // do - // { - // eleStatusMulti = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); - // Logger.Information($"{devName.Match(@"\d+")}#, 当前Agv状态:{eleStatusMulti.agvStatus.ToEnum()}"); - // await Task.Delay(1000); - // } while (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态); - // Logger.Information($"{devName.Match(@"\d+")}#, 当前Agv状态:{eleStatusMulti.agvStatus.ToEnum()}"); - // _elevatorAgvCtlStatusMap[disTask.id] = eleStatusMulti.agvStatus; - //} + if (!_elevatorAgvCtlStatusMap.TryGetValue(disTask.id, out int agvCtlStatus) || agvCtlStatus != (int)EnumAgvStatus.AGV运行状态) + { + do + { + eleStatusMulti = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); + Logger.Information($"{devName.Match(@"\d+")}#, 当前Agv状态:{eleStatusMulti.agvStatus.ToEnum()}"); + await Task.Delay(1000); + } while (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态); + Logger.Information($"{devName.Match(@"\d+")}#, 当前Agv状态:{eleStatusMulti.agvStatus.ToEnum()}"); + _elevatorAgvCtlStatusMap[disTask.id] = eleStatusMulti.agvStatus; + } - //int doorStatus = -1; - //bool closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(devName, 4); //向电梯发送前门关门指令 - //Logger.Information($"关门结果:{closeDoorRes}"); - //do - //{ - // doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus); - // Logger.Information($"当前门状态:{doorStatus}"); - // await Task.Delay(1000); - //} while (doorStatus != 4); - //Logger.Information($"当前门状态:{doorStatus}"); + int doorStatus = -1; + bool closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(devName, 4); //向电梯发送前门关门指令 + Logger.Information($"关门结果:{closeDoorRes}"); + do + { + doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus); + Logger.Information($"当前门状态:{doorStatus}"); + await Task.Delay(1000); + } while (doorStatus != 4); + Logger.Information($"当前门状态:{doorStatus}"); - //int floor = await GetRealFloor(devName, disTask.end_floor); + int floor = await GetRealFloor(devName, disTask.end_floor); - ////电梯任务手动执行任务状态上报 - //(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1); - //tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); - //Logger.Information($"目标楼层:{floor} 当前楼层:{tuple.floorNo}"); + //电梯任务手动执行任务状态上报 + (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1); + tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); + Logger.Information($"目标楼层:{floor} 当前楼层:{tuple.floorNo}"); - //Logger.Information($"开始呼梯 {devName}到{floor}"); - ////发送到目标楼的指令 - //dynamic result = await _elevatorControlService.WriteTagAsync(devName, ElevatorConsts.FloorExecute, floor); + Logger.Information($"开始呼梯 {devName}到{floor}"); + //发送到目标楼的指令 + dynamic result = await _elevatorControlService.WriteTagAsync(devName, ElevatorConsts.FloorExecute, floor); - //do - //{ - // tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); - // await Task.Delay(1000); - //} while (tuple.sysStatus != 3 || tuple.runStatus != 0 || floor != tuple.floorNo); + do + { + tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); + await Task.Delay(1000); + } while (tuple.sysStatus != 3 || tuple.runStatus != 0 || floor != tuple.floorNo); - //Logger.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},当前楼层floorNo:{tuple.floorNo},目标楼层disTask.end_floor={floor}"); + Logger.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},当前楼层floorNo:{tuple.floorNo},目标楼层disTask.end_floor={floor}"); - //if (tuple.sysStatus.ToEnum() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum() == EnumRunStatus.停梯) + if (tuple.sysStatus.ToEnum() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum() == EnumRunStatus.停梯) { Logger.Information($"disTask.require_id={disTask.require_id}"); List disTaskIds = new() { disTasks[0].id }; @@ -3728,6 +3727,14 @@ namespace Tnb.WarehouseMgr qty = wmsRawmatOutstockD.qty - wmsRawmatOutstockD.actual_outstock_qty; break; } + case WmsWareHouseConst.BIZTYPE_WmsPurchaseReturn_ID: + { + WmsPurchaseReturnD wmsPurchaseReturnD = await _db.Queryable().Where(r => r.id == input.source_id).FirstAsync(); + if (wmsPurchaseReturnD == null) + throw new AppFriendlyException($"来源单据{input.source_id}不存在", 500); + qty = wmsPurchaseReturnD.qty - wmsPurchaseReturnD.actual_qty; + break; + } } switch (basWarehouse.id) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs index 78a93c9b..050733ff 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs @@ -222,7 +222,7 @@ namespace Tnb.WarehouseMgr decimal? sum = group.Select(r => r.codeqty).Sum(); WmsOutsourceD wmsOutsourceD = await _db.Queryable().Where(r => r.id == group.Key.require_id).FirstAsync(); decimal? bind_qty = wmsOutsourceD.bind_qty ?? 0; - if (sum + bind_qty > wmsOutsourceD.actual_quantity) + if (sum + bind_qty > wmsOutsourceD.outsource_quantity) { throw new Exception($"托盘{input.carrycode} 物料{wmsOutsourceD.matcode} 当前绑定数量为{sum} 剩余可绑定数量为{wmsOutsourceD.actual_quantity - bind_qty}!"); } @@ -235,7 +235,7 @@ namespace Tnb.WarehouseMgr decimal? sum = group.Select(r => r.codeqty).Sum(); WmsRawmatTransferinstockD wmsRawmatTransferinstockD = await _db.Queryable().Where(r => r.id == group.Key.require_id).FirstAsync(); decimal? bind_qty = wmsRawmatTransferinstockD.bind_qty ?? 0; - if (sum + bind_qty > wmsRawmatTransferinstockD.actual_qty) + if (sum + bind_qty > wmsRawmatTransferinstockD.qty) { throw new Exception($"托盘{input.carrycode} 物料{wmsRawmatTransferinstockD.matcode} 当前绑定数量为{sum} 剩余可绑定数量为{wmsRawmatTransferinstockD.actual_qty - bind_qty}!"); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs index fdc68a70..48de3e0f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs @@ -466,6 +466,35 @@ namespace Tnb.WarehouseMgr } } + break; + } + case WmsWareHouseConst.BIZTYPE_WmsPurchaseReturn_ID: + { + WmsPurchaseReturnC wmsPurchaseReturnC = await _db.Queryable() + .Where(r => r.mat_bill_id == wmsDistaskH.source_id && r.carry_id == wmsCarryH.id).FirstAsync(); + if (wmsPurchaseReturnC != null) + { + // 返回默认签收数量 + if (wmsPurchaseReturnC.sign_qty > 0) + { + List _wmsCarryCodes = wmsCarryCodes.Where(r => r.carry_id == wmsCarryH.id).ToList(); + foreach (WmsCarryCode wmsCarryCode in _wmsCarryCodes) + { + wmsCarryCode.carry_code = wmsCarryH.carry_code; + wmsCarryCode.biz_type = wmsDistaskH.biz_type; + if (wmsCarryCode.codeqty < wmsPurchaseReturnC.sign_qty) + { + wmsCarryCode.sign_qty = wmsCarryCode.codeqty; + wmsPurchaseReturnC.sign_qty -= wmsCarryCode.codeqty; + } + else + { + wmsCarryCode.sign_qty = wmsPurchaseReturnC.sign_qty; + } + } + } + } + break; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs index cc9e55eb..ad47ad6b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs @@ -86,7 +86,7 @@ namespace Tnb.WarehouseMgr WmsRawmatTransferinstockD WmsRawmatTransferinstockD = await _db.Queryable().Where(it => input.BillId == it.id).FirstAsync(); WmsRawmatTransferinstockH WmsRawmatTransferinstockH = await _db.Queryable().Where(it => WmsRawmatTransferinstockD.bill_id == it.id).FirstAsync(); - if (WmsRawmatTransferinstockD.actual_qty == 0) + if (WmsRawmatTransferinstockD.qty == 0) { throw new AppFriendlyException("到货数量为0,没有物料可以打印", 500); }; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs index 71f02e74..07e7319f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs @@ -40,12 +40,14 @@ namespace Tnb.WarehouseMgr var code_batch = ""; var material_specification = ""; var container_no = ""; + var material_code = ""; if (!input.queryJson.IsNullOrWhiteSpace()) { supplier_code = JObject.Parse(input.queryJson).Value("supplier_code"); code_batch = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.code_batch)); material_specification = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.material_specification)); container_no = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.container_no)); + material_code = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.material_code)); } List result = new List(); @@ -53,13 +55,14 @@ namespace Tnb.WarehouseMgr { List items = await _db.Queryable().InnerJoin((a, b) => a.carry_id == b.id) .InnerJoin((a, b, c) => b.location_id == c.id).InnerJoin((a, b, c, d) => c.wh_id == d.id) - .InnerJoin((a, b, c, d, e) => e.barcode == a.barcode) - .InnerJoin((a, b, c, d, e, f) => f.id == e.material_id) + .LeftJoin((a, b, c, d, e) => e.barcode == a.barcode) + .InnerJoin((a, b, c, d, e, f) => f.id == a.material_id) .LeftJoin((a, b, c, d, e, f, g) => e.require_id == g.id) .LeftJoin((a, b, c, d, e, f, g, h) => h.id == g.bill_id) .WhereIF(!string.IsNullOrEmpty(material_specification), (a, b, c, d, e, f) => f.material_specification.Contains(material_specification)) .WhereIF(!string.IsNullOrEmpty(code_batch), (a, b, c, d, e, f) => a.code_batch.Contains(code_batch)) .WhereIF(!string.IsNullOrEmpty(container_no), (a, b, c, d, e, f) => f.container_no.Contains(container_no)) + .WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => f.code.Contains(material_code)) .Select((a, b, c, d, e, f, g, h) => new WmsStockReportH { org_id = e.org_id, @@ -76,6 +79,18 @@ namespace Tnb.WarehouseMgr supplier_name = "", }, true).ToListAsync(); + + string ssssss = _db.Queryable().InnerJoin((a, b) => a.carry_id == b.id) + .InnerJoin((a, b, c) => b.location_id == c.id).InnerJoin((a, b, c, d) => c.wh_id == d.id) + .LeftJoin((a, b, c, d, e) => e.barcode == a.barcode) + .InnerJoin((a, b, c, d, e, f) => f.id == a.material_id) + .LeftJoin((a, b, c, d, e, f, g) => e.require_id == g.id) + .LeftJoin((a, b, c, d, e, f, g, h) => h.id == g.bill_id) + .WhereIF(!string.IsNullOrEmpty(material_specification), (a, b, c, d, e, f) => f.material_specification.Contains(material_specification)) + .WhereIF(!string.IsNullOrEmpty(code_batch), (a, b, c, d, e, f) => a.code_batch.Contains(code_batch)) + .WhereIF(!string.IsNullOrEmpty(container_no), (a, b, c, d, e, f) => f.container_no.Contains(container_no)) + .WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => f.code.Contains(material_code)).ToSqlString(); + List carryCodes = await _db.Queryable().ToListAsync(); var storeMap = items.DistinctBy(x => new { x.warehouse_id, x.material_id, x.code_batch }).ToDictionary(x => new { x.warehouse_id, x.material_id, x.code_batch }, x => x); @@ -115,14 +130,15 @@ namespace Tnb.WarehouseMgr { List items = await _db.Queryable().InnerJoin((a, b) => a.carry_id == b.id) .InnerJoin((a, b, c) => b.location_id == c.id).InnerJoin((a, b, c, d) => c.wh_id == d.id) - .InnerJoin((a, b, c, d, e) => e.barcode == a.barcode) - .InnerJoin((a, b, c, d, e, f) => f.id == e.material_id) + .LeftJoin((a, b, c, d, e) => e.barcode == a.barcode) + .InnerJoin((a, b, c, d, e, f) => f.id == a.material_id) .LeftJoin((a, b, c, d, e, f, g) => e.require_id == g.id) .LeftJoin((a, b, c, d, e, f, g, h) => h.id == g.bill_id) .WhereIF(!string.IsNullOrEmpty(material_specification), (a, b, c, d, e, f) => f.material_specification.Contains(material_specification)) .WhereIF(!string.IsNullOrEmpty(code_batch), (a, b, c, d, e, f) => a.code_batch.Contains(code_batch)) .WhereIF(!string.IsNullOrEmpty(supplier_code), (a, b, c, d, e, f, g, h) => h.supplier_code.Contains(supplier_code)) .WhereIF(!string.IsNullOrEmpty(container_no), (a, b, c, d, e, f, g, h) => f.container_no.Contains(container_no)) + .WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => f.code.Contains(material_code)) .Select((a, b, c, d, e, f, g, h) => new WmsStockReportH { org_id = e.org_id, diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferInstockService.cs index f4b87cee..f7ccbcd9 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferInstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferInstockService.cs @@ -25,7 +25,7 @@ using Tnb.WarehouseMgr.Interfaces; namespace Tnb.WarehouseMgr { /// - /// 调拨出库单(成品) + /// 调拨入库单(成品) /// [OverideVisualDev(ModuleConsts.MODULE_WmsTransferInstock_ID)] public class WmsTransferInstockService : BaseWareHouseService diff --git a/apihost/Tnb.API.Entry/Configurations/AgvRequestCfgUrl.json b/apihost/Tnb.API.Entry/Configurations/AgvRequestCfgUrl.json index a15fe34b..697ba175 100644 --- a/apihost/Tnb.API.Entry/Configurations/AgvRequestCfgUrl.json +++ b/apihost/Tnb.API.Entry/Configurations/AgvRequestCfgUrl.json @@ -1,6 +1,6 @@ { "AgvRequestUrls": { - "CreateTaskChainUrl": "http://192.168.11.104:1880/api/task-chain/create", + "CreateTaskChainUrl": "http://10.147.19.104:5013/api/task-chain/create", "CancelTaskChainUrl": "http://192.168.11.104:1880/api/task-chain/cancel" } } \ No newline at end of file