From 2e665e9f3d652cc306f545046069c2e1e49294f2 Mon Sep 17 00:00:00 2001 From: xingheng Date: Mon, 22 Sep 2025 15:44:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=88=86=E9=85=8D=EF=BC=88?= =?UTF-8?q?=E5=B0=B1=E8=BF=91=E6=89=BE=E9=87=87=E9=9B=86=E7=AE=B1=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=AE=8C=E6=88=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppApi/IOModuleApiController.cs | 74 ++++++----- .../ZZDT_EC/ec_cable/ec_CableBLL.cs | 119 ++++++++++-------- .../ZZDT_EC/ec_cable/ec_CableEntity.cs | 3 +- 3 files changed, 113 insertions(+), 83 deletions(-) diff --git a/Learun.Application.Web/AppApi/IOModuleApiController.cs b/Learun.Application.Web/AppApi/IOModuleApiController.cs index 95e49413..8582a605 100644 --- a/Learun.Application.Web/AppApi/IOModuleApiController.cs +++ b/Learun.Application.Web/AppApi/IOModuleApiController.cs @@ -1,4 +1,5 @@ using DocumentFormat.OpenXml.Drawing.Spreadsheet; +using DocumentFormat.OpenXml.Spreadsheet; using Learun.Application.Organization; using Learun.Application.TwoDevelopment.ZZDT_EC; using Learun.Application.TwoDevelopment.ZZDT_EC.Frame; @@ -47,7 +48,7 @@ namespace Learun.Application.Web.AppApi /// - /// 找到某一个预分配箱子 附近的某一个箱子 + /// 找到某一个预分配箱子 附近的某一个箱子。且io类型能匹配上 /// /// /// @@ -55,9 +56,10 @@ namespace Learun.Application.Web.AppApi /// Digital,4-20mA,10v,pt100,pulse /// - private ec_PanelEntity FindPanelNearby(string curPanelId, List frameLists, List allPanel, + private ec_PanelEntity FindPanelNearby(ec_CableEntity cableObj, List frameLists, List allPanel, Dictionary> allPanelProps, string IOTypeOnCable) { + var curPanelId = cableObj.PanelID; double GetPanelXYDistance2Target(string panelId, double targetX, double targetY) { var nearPanel = allPanel.FirstOrDefault(x => x.PanelID == panelId); @@ -88,7 +90,7 @@ namespace Learun.Application.Web.AppApi return -1;//无效的x off导致的 } if (double.TryParse(nearPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_YOff)?.PropertyValue, - , out double YOffValue)) + out double YOffValue)) { } @@ -129,7 +131,7 @@ namespace Learun.Application.Web.AppApi return null;//无效的x off导致的 } if (double.TryParse(curPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_YOff)?.PropertyValue, -, out double AssignPanelYValue)) + out double AssignPanelYValue)) { } @@ -141,33 +143,49 @@ namespace Learun.Application.Web.AppApi foreach (var panel in allPanel.Where(x => x.PanelID != curPanelId)) { #region io + var IOMatched = true; + var IOsOnPanel = panel.allowedIOTypes.Split(',').ToList(); + //剩下的感觉都可以是set上的参数? + foreach (var set in cableObj.Sets) + { + #region 判断下io匹配程度 + var setNew = ec_CableBLL.SetIOMatchPanel(cableObj.PreAssignIOType, set, IOsOnPanel); - #endregion - #region distance - //拿到每一个的xy属性 - //然后和预分配箱子进行对比 - var DISTANCE = GetPanelXYDistance2Target(panel.PanelID, AssignPanelXValue + AssignPanelXOffValue, AssignPanelYValue); - - if (0.1 == minDistance && DISTANCE > 0) - { - minDistance = DISTANCE; nearestPanel = panel; - } - else if (DISTANCE < minDistance && DISTANCE > 0) - { - minDistance = DISTANCE; nearestPanel = panel; + if (IOsOnPanel.Contains(setNew.IOType.ToString())) + { + setNew.IOTypeMatch = true; + + } + else + { + setNew.IOTypeMatch = false; IOMatched = false; + //不匹配 + break; + } + #endregion } #endregion + if (IOMatched) + { + //如果io匹配了,再找附近的 + #region distance + //拿到每一个的xy属性 + //然后和预分配箱子进行对比 + var DISTANCE = GetPanelXYDistance2Target(panel.PanelID, AssignPanelXValue + AssignPanelXOffValue, AssignPanelYValue); - } - //根据电缆上的信号,去找匹配的排序第一位(已经按照距离排序过)的箱子 - switch (IOTypeOnCable.ToUpper()) - { - case "DIGITAL": - //其他就近箱子的 allowIOTypes里有DI DO - break; - default: - break; - } + if (0.1 == minDistance && DISTANCE > 0) + { + minDistance = DISTANCE; nearestPanel = panel; + } + else if (DISTANCE < minDistance && DISTANCE > 0) + { + minDistance = DISTANCE; nearestPanel = panel; + } + #endregion + } + + + } return nearestPanel; } @@ -421,7 +439,7 @@ namespace Learun.Application.Web.AppApi bool nearbyFound = false; foreach (var cable in cablesNotMatchIO) { - var nearPanel = FindPanelNearby(cable.PanelID, allFrames, allPanel, allPanelProp, cable.PreAssignIOType); + var nearPanel = FindPanelNearby(cable, allFrames, allPanel, allPanelProp, cable.PreAssignIOType); if (nearPanel == null) { nearbyFound = false; diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableBLL.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableBLL.cs index 46cc3663..b79e078b 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableBLL.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableBLL.cs @@ -1,4 +1,5 @@ using DocumentFormat.OpenXml.Drawing.Spreadsheet; +using DocumentFormat.OpenXml.Spreadsheet; using Learun.Util; using Learun.Util.SqlSugar; using SqlSugar; @@ -7,6 +8,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Linq; +using System.Windows; namespace Learun.Application.TwoDevelopment.ZZDT_EC { @@ -314,70 +316,27 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC foreach (var set in sets) { #region 判断下io匹配程度 - if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输入.ToString() && cable.PreAssignIOType.ToLower() == "digital") + var setNew = SetIOMatchPanel(cable.PreAssignIOType, set, IOsOnPanel); + + if (IOsOnPanel.Contains(setNew.IOType.ToString())) { - set.IOType = GlobalEnum.IOType.DI; - } - else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输出.ToString() && cable.PreAssignIOType.ToLower() == "digital") - { - set.IOType = GlobalEnum.IOType.DO; - } - else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输入.ToString() && cable.PreAssignIOType == "4~20mA") - { - set.IOType = GlobalEnum.IOType.AI; - } - else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输出.ToString() && cable.PreAssignIOType == "4~20mA") - { - set.IOType = GlobalEnum.IOType.AO; - } - else if (cable.PreAssignIOType == "10v") - { - set.IOType = GlobalEnum.IOType.TenVolt; - } - else if (cable.PreAssignIOType == GlobalEnum.signalType.PT100.ToString()) - { - set.IOType = GlobalEnum.IOType.PT100; - } - else if (cable.PreAssignIOType.ToUpper() == GlobalEnum.signalType.PULSE.ToString()) - { - set.IOType = GlobalEnum.IOType.PULSE; - } - else if (cable.PreAssignIOType == GlobalEnum.signalType.PT100.ToString()) - { - set.IOType = GlobalEnum.IOType.PT100; - } - //下面是通讯的 - else - { - - } - - if (IOsOnPanel.Contains(set.IOType.ToString())) - { - set.IOTypeMatch = true; + setNew.IOTypeMatch = true; } else { - set.IOTypeMatch = false; - cable.IOTypesNotMatchedList.Add(set.IOType.ToString());//从电缆上就能知道哪些io是匹配补上的 + setNew.IOTypeMatch = false; + cable.IOTypesNotMatchedList.Add(setNew.IOType.ToString());//从电缆上就能知道哪些io是匹配补上的 } #endregion - var wires = Wires.Where(x => x.CableSetID == set.CableSetID); - set.Wires = wires.ToList(); + var wires = Wires.Where(x => x.CableSetID == setNew.CableSetID); + setNew.Wires = wires.ToList(); + cable.Sets.Add(setNew); } - cable.Sets = sets; - //if (cable.Sets.Any(x => !x.IOTypeMatch)) - //{ - // cable.IOTypeMatch = true; - //} - //else - //{ - // cable.IOTypeMatch = false; - //} + //cable.Sets = sets; } - //分组 + //排序 preAssignedCables = preAssignedCables.OrderBy(x => x.PreAssignIOType).ToList(); @@ -397,7 +356,59 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC else { ec_CableService.DeleteEntity(ProjectId, CableID); } } + /// + /// 预分配的电缆上的io,是否和电缆上的io能匹配 + /// + /// + public static ec_CableSetEntity SetIOMatchPanel(string signalOnCable, ec_CableSetEntity set, List IOsOnPanel) + { + //var IOsOnPanel = panelObj.allowedIOTypes.Split(',').ToList(); + //剩下的感觉都可以是set上的参数? + + + #region 判断下io匹配程度 + if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输入.ToString() && signalOnCable.ToLower() == "digital") + { + set.IOType = GlobalEnum.IOType.DI; + } + else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输出.ToString() && signalOnCable.ToLower() == "digital") + { + set.IOType = GlobalEnum.IOType.DO; + } + else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输入.ToString() && signalOnCable == "4~20mA") + { + set.IOType = GlobalEnum.IOType.AI; + } + else if (set.PreAssignInOrOut == GlobalEnum.inOrOut.输出.ToString() && signalOnCable == "4~20mA") + { + set.IOType = GlobalEnum.IOType.AO; + } + else if (signalOnCable == "10v") + { + set.IOType = GlobalEnum.IOType.TenVolt; + } + else if (signalOnCable == GlobalEnum.signalType.PT100.ToString()) + { + set.IOType = GlobalEnum.IOType.PT100; + } + else if (signalOnCable.ToUpper() == GlobalEnum.signalType.PULSE.ToString()) + { + set.IOType = GlobalEnum.IOType.PULSE; + } + else if (signalOnCable == GlobalEnum.signalType.PT100.ToString()) + { + set.IOType = GlobalEnum.IOType.PT100; + } + //下面是通讯的 + else + { + } + + #endregion + + return set; + } /// /// 保存实体数据(新增、修改) /// 主键 diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableEntity.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableEntity.cs index bea6c0f0..f9bf1f49 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableEntity.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_cable/ec_CableEntity.cs @@ -147,7 +147,8 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC /// - /// From连接处的工程位号信息。同时,也表达下预分配电缆panelid对应的柜子信息。 + /// From连接处的工程位号信息。 + /// 同时,也表达下预分配电缆panelid对应的柜子信息。 /// [SugarColumn(IsIgnore = true)] public ec_PanelEntity ToPanel { set; get; }