From 5cbe089b1012486c78a4161aebdc5464d5862e93 Mon Sep 17 00:00:00 2001 From: FanLian Date: Thu, 27 Jul 2023 14:30:31 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E7=94=B5=E6=A2=AF=E7=9A=84?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E5=88=A4=E6=96=AD=E4=B8=8E=E5=B9=B3=E5=9D=87?= =?UTF-8?q?=E5=88=86=E9=85=8D=202.=E8=BD=BD=E5=85=B7=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=8A=9B=E5=87=BA=203.=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E7=9A=84=E5=AD=90=E8=A1=A8=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E6=97=B6=EF=BC=8C=E7=BC=96=E8=BE=91=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=97=B6bug,=E4=BE=8B=E5=A6=82"=5Fpoint=5Fcode=5F"?= =?UTF-8?q?=E5=9C=A8dictionary=E4=B8=AD=20=E4=B8=8D=E5=AD=98=E5=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entity/WmsElevatorD.cs | 87 ++++++++++++++++++ .../Entity/WmsElevatorH.cs | 92 +++++++++++++++++++ .../Tnb.WarehouseMgr/WareHouseService.cs | 40 ++++++++ .../Tnb.WarehouseMgr/WmsCarryQueryService.cs | 3 +- .../WmsEmptyInstockService.cs | 8 +- .../WmsEmptyOutstockService .cs | 9 +- .../Tnb.WarehouseMgr/WmsOutStockService.cs | 4 - visualdev/Tnb.VisualDev/RunService.cs | 6 +- 8 files changed, 240 insertions(+), 9 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorD.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorD.cs new file mode 100644 index 00000000..383ebf48 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorD.cs @@ -0,0 +1,87 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// WMS电梯设定明细表 +/// +[SugarTable("wms_elevator_d")] +public partial class WmsElevatorD : BaseEntity +{ + public WmsElevatorD() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 所属组织 + /// + public string? org_id { get; set; } + + /// + /// 上级表单ID + /// + public string bill_id { get; set; } = string.Empty; + + /// + /// 库位ID + /// + public string location_id { get; set; } = string.Empty; + + /// + /// 库位编号 + /// + public string location_code { get; set; } = string.Empty; + + /// + /// 点位ID + /// + public string point_id { get; set; } = string.Empty; + + /// + /// 点位编号 + /// + public string point_code { get; set; } = string.Empty; + + /// + /// 楼层 + /// + public int floor { get; set; } + + /// + /// 创建用户 + /// + public string create_id { get; set; } = string.Empty; + + /// + /// 创建时间 + /// + public DateTime create_time { get; set; } = DateTime.Now; + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 扩展 + /// + public string? extras { get; set; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 时间戳(用于并发控制) + /// + public DateTime? timestamp { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.cs new file mode 100644 index 00000000..d4f6730b --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.cs @@ -0,0 +1,92 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities; + +/// +/// WMS电梯设定主表 +/// +[SugarTable("wms_elevator_h")] +public partial class WmsElevatorH : BaseEntity +{ + public WmsElevatorH() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 所属组织 + /// + public string? org_id { get; set; } + + /// + /// 电梯ID + /// + public string elevator_id { get; set; } = string.Empty; + + /// + /// 电梯编号 + /// + public string elevator_code { get; set; } = string.Empty; + + /// + /// 管理区ID + /// + public string area_id { get; set; } = string.Empty; + + /// + /// 管理区编号 + /// + public string area_code { get; set; } = string.Empty; + + /// + /// 电梯组 + /// + public string elevator_group { get; set; } = string.Empty; + + /// + /// 状态 + /// + public int status { get; set; } + + /// + /// 任务数量 + /// + public int task_nums { get; set; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 创建用户 + /// + public string create_id { get; set; } = string.Empty; + + /// + /// 创建时间 + /// + public DateTime create_time { get; set; } = DateTime.Now; + + /// + /// 最后修改人员 + /// + public string? modify_id { get; set; } + + /// + /// 最后修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 扩展字段 + /// + public string? extras { get; set; } + + /// + /// 时间戳(用于并发控制) + /// + public DateTime? timestamp { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 0b6a3f23..adf7ae9d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -554,6 +554,46 @@ namespace Tnb.WarehouseMgr { var roads = await _db.Queryable().ToListAsync(); var points = await LocPathCalcAlgorithms(pStartId, pEndId, roads); + + if (points.FindAll(x => x.location_code != null && x.location_code.Contains("ELE")).Count > 0) + {//查询当前电梯点 + var curElePts = await _db.Queryable().Where(it => points.Select(x => x.id).Contains(it.point_id)).ToListAsync(); + //如果有电梯点,则会进行电梯的均匀分配 + if (curElePts.Count > 0) + { + //当前电梯 + var curEle = await _db.Queryable().SingleAsync(it => it.id == curElePts.First().bill_id); + //同电梯组电梯 + var sGpEle = await _db.Queryable().Where(it => it.elevator_group == curEle.elevator_group && it.id != curEle.id).ToListAsync(); + //判断电梯组中各电梯任务数 + if (sGpEle.FindAll(x => x.task_nums < curEle.task_nums + 1)?.Count > 0) + { + var sGpPts = await _db.Queryable().Where(it => it.bill_id == sGpEle.First().id).ToListAsync(); + if (sGpPts.Count > 0) + { + var sGpPoints = await _db.Queryable().Where(it => sGpPts.Select(x => x.point_id).Contains(it.id)).ToListAsync(); + var sFEndId = sGpPts.Single(x => x.floor == curElePts.First().floor).point_id; + var eFStartId = sGpPts.Single(x => x.floor == curElePts.Last().floor).point_id; + var sFPoints = await LocPathCalcAlgorithms(pStartId, sFEndId, roads); + List elePoints = new(); + foreach (var pt in curElePts) + { + var elePoint = sGpPoints.Find(x => x.floor == pt.floor); + if (elePoint != null) + elePoints.Add(elePoint); + } + var eFPoints = await LocPathCalcAlgorithms(eFStartId, pEndId, roads); + elePoints.Remove(elePoints.First()); + elePoints.Remove(elePoints.Last()); + points.Clear(); + points.AddRange(sFPoints); + points.AddRange(elePoints); + points.AddRange(eFPoints); + } + } + } + } + return points; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryQueryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryQueryService.cs index e5b17a29..372c4088 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryQueryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryQueryService.cs @@ -76,6 +76,7 @@ namespace Tnb.WarehouseMgr { var mIds = carryDsLst.Select(it => it.membercarry_id).ToList(); carryCodes = await _db.Queryable().Where(it => mIds.Contains(it.carry_id)).ToListAsync(); + if (carryCodes.Count < mIds.Count) throw new AppFriendlyException("载具条码数据异常,有料箱为空",500); for (int i = 0, cnt = mIds.Count; i < cnt; i++) { carryCodes[i].member_carrycode = carryDsLst.Find(x => x.membercarry_id == mIds[i])?.membercarry_code ?? string.Empty; @@ -87,11 +88,11 @@ namespace Tnb.WarehouseMgr } data = carry.Adapt(); data.wmsCarryCodes = carryCodes.Adapt>(); - } catch (Exception) { await _db.Ado.RollbackTranAsync(); + throw ; } return data; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs index cb64b15e..d719fe04 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs @@ -85,7 +85,7 @@ namespace Tnb.WarehouseMgr if (!isMatch) throw new AppFriendlyException("库位与载具规格不匹配", 500); ePoint = await _db.Queryable().FirstAsync(it => it.location_id == endLocations[0].id); } - + //在线开发 VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSEMPTYINSTOCK_ID, true); await _runService.Create(templateEntity, input); @@ -125,6 +125,12 @@ namespace Tnb.WarehouseMgr return preTask; }).ToList(); var isOk = await _wareHouseService.GenPreTask(preTasks, null!); + //更新电梯任务数量 + var eleP = points.Find(x => x.area_code.Contains("ELE")); + if (eleP != null) + { + await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => it.area_code == eleP.area_code).ExecuteCommandAsync(); + } if (isOk) { var preTaskUpInput = new GenPreTaskUpInput(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs index 5ea04629..e6cfb620 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs @@ -23,6 +23,7 @@ using Tnb.WarehouseMgr.Entities.Attributes; using Tnb.WarehouseMgr.Entities.Consts; using Tnb.WarehouseMgr.Entities.Dto; using Tnb.WarehouseMgr.Entities.Dto.Inputs; +using Tnb.WarehouseMgr.Entities.Entity; using Tnb.WarehouseMgr.Entities.Enums; using Tnb.WarehouseMgr.Interfaces; @@ -155,8 +156,14 @@ namespace Tnb.WarehouseMgr preTasks[^1].is_sign = 0; // 修改最后一个元素的是否签收值 } isOk = await _wareHouseService.GenPreTask(preTasks, null!); + //更新电梯任务数量 + var eleP = points.Find(x => x.area_code.Contains("ELE")); + if (eleP != null) + { + await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => it.area_code == eleP.area_code).ExecuteCommandAsync(); + } } - if (isOk) + if(isOk) { GenPreTaskUpInput preTaskUpInput = new() { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs index d6c26e3a..b278eeb6 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs @@ -81,10 +81,6 @@ namespace Tnb.WarehouseMgr //判断目标库位是否自动签收 var loc = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsPointH.location_id)].ToString()); - - - - var carryIds = new List(); //tablefield120 出库物料明细 if (input.data.ContainsKey("tablefield120") && input.data["tablefield120"].IsNotEmptyOrNull()) diff --git a/visualdev/Tnb.VisualDev/RunService.cs b/visualdev/Tnb.VisualDev/RunService.cs index 214bb0df..3bef9517 100644 --- a/visualdev/Tnb.VisualDev/RunService.cs +++ b/visualdev/Tnb.VisualDev/RunService.cs @@ -3635,8 +3635,10 @@ public class RunService : IRunService, ITransient { var relationValueId = dataItem[item.__vModel__].ToString(); // 获取关联表单id - // 添加到 子表 列 - model.__config__.children.Where(x => x.relationField.ReplaceRegex(@"_jnpfTable_(\w+)", string.Empty) == item.__vModel__).ToList().ForEach(citem => + + // 添加到 子表 列 + // 配置弹窗关联控件会将弹窗选择控件一起配置,导致报错,将弹窗选择控件移除 增加 && x.__vModel__ != item.__vModel__ --modified by lianFan 20230727 + model.__config__.children.Where(x => x.relationField.ReplaceRegex(@"_jnpfTable_(\w+)", string.Empty) == item.__vModel__ && x.__vModel__ != item.__vModel__).ToList().ForEach(citem => { citem.__vModel__ = item.__vModel__ + "_" + citem.showField; var value = pDataList.Where(x => x.Values.Contains(dataItem[item.__vModel__].ToString())).FirstOrDefault();