From 4c55f4c7f235dced4ec1155b48af44ca56a2e996 Mon Sep 17 00:00:00 2001 From: xingheng Date: Thu, 18 Sep 2025 00:04:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=A7=8B=E5=BC=84=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=88=86=E9=85=8D=E7=9A=84step2=EF=BC=88step1=E9=87=8C?= =?UTF-8?q?=E8=BF=98=E6=9C=89=E6=9F=A5=E6=89=BE=E5=91=A8=E8=BE=B9=E9=87=87?= =?UTF-8?q?=E9=9B=86=E7=AE=B1=E5=87=BD=E6=95=B0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppApi/EnginedataApiController.cs | 6 +- .../AppApi/IOModuleApiController.cs | 249 ++++++++++-------- .../AppApi/PlotLayoutApiController.cs | 1 + .../Controllers/ec_report_fileController.cs | 2 +- .../ZZDT_EC/ec_cable/ec_CableBLL.cs | 68 +++-- .../ZZDT_EC/ec_cable/ec_CableEntity.cs | 4 +- .../ec_drawing_file/ec_drawing_fileBLL.cs | 6 +- .../ZZDT_EC/ec_enginedata/ec_enginedataBLL.cs | 5 +- .../ec_enginedata_rel/ec_enginedata_relBLL.cs | 18 +- .../ec_enginedata_relService.cs | 2 +- .../ec_panel_channel/ec_PanelChannelBLL.cs | 4 +- .../ZZDT_EC/ec_reltype/ec_reltypeBLL.cs | 7 +- .../ZZDT_EC/ec_reltype/ec_reltypeEntity.cs | 2 +- .../Learun.Cache/Learun.Cache.Base/CacheId.cs | 1 + 14 files changed, 219 insertions(+), 156 deletions(-) diff --git a/Learun.Application.Web/AppApi/EnginedataApiController.cs b/Learun.Application.Web/AppApi/EnginedataApiController.cs index 3b44e02f..28d7a910 100644 --- a/Learun.Application.Web/AppApi/EnginedataApiController.cs +++ b/Learun.Application.Web/AppApi/EnginedataApiController.cs @@ -184,7 +184,7 @@ namespace Learun.Application.Web.AppApi Where(x => x.DeleteFlg != 1).ToList(); var relTypeTbName = ProjectSugar.TableName(projectId); - var relType = SqlSugarHelper.Db.Queryable().AS(relTypeTbName).ToList().FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var relType = SqlSugarHelper.Db.Queryable().AS(relTypeTbName).ToList().FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); var propBll = new ec_enginedata_propertyBLL(); var allTagProps = SqlSugarHelper.Db.Queryable().AS(propTbName).ToList(); @@ -265,7 +265,7 @@ namespace Learun.Application.Web.AppApi Where(x => x.DeleteFlg != 1).ToList(); var relTypeTbName = ProjectSugar.TableName(projectId); - var relType = SqlSugarHelper.Db.Queryable().AS(relTypeTbName).ToList().FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var relType = SqlSugarHelper.Db.Queryable().AS(relTypeTbName).ToList().FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); //var propBll = new ec_enginedata_propertyBLL(); var allTagProps = SqlSugarHelper.Db.Queryable().AS(propTBName).ToList(); @@ -312,7 +312,7 @@ namespace Learun.Application.Web.AppApi Where(x => x.DeleteFlg != 1).ToList(); var relTypeTbName = ProjectSugar.TableName(projectId); - var relType = SqlSugarHelper.Db.Queryable().AS(relTypeTbName).ToList().FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var relType = SqlSugarHelper.Db.Queryable().AS(relTypeTbName).ToList().FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); var propBll = new ec_enginedata_propertyBLL(); var CBs = allCBs.Where(x => x.PDBId == Enginedataid).ToList(); diff --git a/Learun.Application.Web/AppApi/IOModuleApiController.cs b/Learun.Application.Web/AppApi/IOModuleApiController.cs index b020d871..4c6149ea 100644 --- a/Learun.Application.Web/AppApi/IOModuleApiController.cs +++ b/Learun.Application.Web/AppApi/IOModuleApiController.cs @@ -1,6 +1,9 @@ using DocumentFormat.OpenXml.Drawing.Spreadsheet; using Learun.Application.Organization; using Learun.Application.TwoDevelopment.ZZDT_EC; +using Learun.Application.TwoDevelopment.ZZDT_EC.Frame; +using Learun.Cache.Base; +using Learun.Cache.Factory; using Learun.Loger; using Learun.Util; using Learun.Util.SqlSugar; @@ -9,8 +12,10 @@ using Microsoft.Practices.ObjectBuilder2; using Newtonsoft.Json; using Org.BouncyCastle.Bcpg.OpenPgp; using Pipelines.Sockets.Unofficial.Arenas; +using SqlSugar; using System; using System.Collections.Generic; +using System.Data.Entity.Infrastructure; using System.Diagnostics; using System.Linq; using System.Web.Http; @@ -41,7 +46,49 @@ namespace Learun.Application.Web.AppApi + /// + /// 找到某一个预分配箱子 附近的某一个箱子 + /// + /// + /// Digital,4-20mA,10v,pt100,pulse + /// + /// + private ec_PanelEntity FindPanelNearby(List frameLists, List allPanel, List allPanelProps + , string IOTypeOnCable) + { + //当前预分配的箱子的位置 + var AssignPanelX = allPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_Frame)?.PropertyValue; + AssignPanelX = AssignPanelX.Split(new string[] { GlobalObject.enum_separator }, StringSplitOptions.None)[0];//插件端对于下拉列表 都是 name || nameEN + var AssignPanelXValue = frameLists.FirstOrDefault(X => X.Num == AssignPanelX)?.Value; + if (AssignPanelXValue < 400)//null也没事 + { + // 小于400,我几乎可以认为此时肋位号用的是m这个单位。因为如果用的是mm,400mm的肋位号似乎也太小了。 + AssignPanelXValue = 1000 * AssignPanelXValue; // 转成mm + } + var AssignPanelXOff = allPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_FrameOff)?.PropertyValue; + + var AssignPanelY = allPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_YOff)?.PropertyValue; + + foreach (var panel in allPanel) + { + //拿到每一个的xy属性 + //然后和预分配箱子进行对比 + //这也太耗时了把 + } + //然后排序一次 + + //根据电缆上的信号,去找匹配的排序第一位(已经按照距离排序过)的箱子 + switch (IOTypeOnCable.ToUpper()) + { + case "DIGITAL": + //其他就近箱子的 allowIOTypes里有DI DO + break; + default: + break; + } + return null; + } /// /// IO分配主界面查询,查询所有的位置 - 采集箱 - 模块 - 通道 @@ -241,23 +288,42 @@ namespace Learun.Application.Web.AppApi /// /// /// + /// 需要分配的电缆cableid,不是enginedataId,逗号分开 /// - public IHttpActionResult AutoAssignCable2Channel_step1(string projId, bool AcceptNearbyPanel) + [HttpPost] + public IHttpActionResult AutoAssignCable2Channel_step1(string projId, bool AcceptNearbyPanel, [FromBody] List CableIds) { #region 数据准备 + var frameBll = new FrameBll(); + var allFrames = frameBll.GetFrameList(projId); var cbll = new ec_CableBLL(); var panelTable = ProjectSugar.TableName(projId); var stripTable = ProjectSugar.TableName(projId); + var tagTable = ProjectSugar.TableName(projId); + var propTable = ProjectSugar.TableName(projId); + var typeTable = ProjectSugar.TableName(projId); #endregion - #region 先要知道有哪些待分配的信号 - - var cablesNeedAssigned = cbll.GetCablesPreAssign(projId, true); - + #region 先要知道有哪些待分配的信号 端子排 + if (CableIds == null || CableIds.Count == 0) + { + return Success("OK"); + } + var cablesNeedAssigned = cbll.GetCablesPreAssign(projId, CableIds, true); + cablesNeedAssigned = cablesNeedAssigned.Where(x => CableIds.Contains(x.CableID)).ToList(); #endregion //涉及到哪些箱子 - var panelsNeed = SqlSugarHelper.Db.Queryable().AS(panelTable). - Where(x => cablesNeedAssigned.Select(xx => xx.PanelID).Contains(x.PanelID)).ToList(); + var allPanel = SqlSugarHelper.Db.Queryable().AS(panelTable). + InnerJoin((a, b) => a.EngineerDataID == b.EngineDataID).AS(tagTable). + InnerJoin((a, b, c) => b.ObjectTypeID == c.ObjectTypeID).AS(typeTable). + Where((a, b, c) => c.specialType == GlobalEnum.specialType.系统柜). + ToList();//这里要过滤一下,根据object type里的specialType,而不是所有的panel + + var allPanelProp = SqlSugarHelper.Db.Queryable().AS(propTable) + .Where(x => allPanel.Select(xx => xx.EngineerDataID).Contains(x.EngineDataID)) + .ToList().GroupBy(x => x.EngineDataID).ToDictionary(x => x.Key, x => x.ToList()); + var panelsNeed = allPanel.Where(x => cablesNeedAssigned.Select(xx => xx.PanelID).Contains(x.PanelID)).ToList();//用户指定的预分配的箱子 + var stripsNeed = SqlSugarHelper.Db.Queryable().AS(stripTable). Where(x => panelsNeed.Select(xx => xx.PanelID).Contains(x.PanelID)). ToList(); @@ -265,11 +331,27 @@ namespace Learun.Application.Web.AppApi var cablesNotMatchIO = cablesNeedAssigned.Where(x => x.IOTypesNotMatchedList.Count > 0).ToList(); // GetCablesPreAssign 查询时已经处理过io是否匹配了 if (cablesNotMatchIO != null && cablesNotMatchIO.Count > 0) { - if (!AcceptNearbyPanel)//允许进行 + if (AcceptNearbyPanel)//允许进行 { //有不匹配的,但是用户允许继续 //在之后的自动分配过程中会自动寻找匹配的采集箱,原则上从就近的开始找,如果没有匹配的采集箱,则提示“未找到具有XX类型的采集箱,请新增后再次分配,是否取消自动分配进程?” - return Success("OK"); + bool nearbyFound = false; + foreach (var cable in cablesNotMatchIO) + { + var nearPanel = FindPanelNearby(allFrames, allPanel, allPanelProp[cable.ToPanel.EngineerDataID], cable.PreAssignIOType); + if (nearPanel == null) + { + nearbyFound = false; + return Fail($"在附近未找到具有{cable.PreAssignIOType}类型的采集箱,请新增后再次分配,是否取消自动分配进程?"); + } + else + { + nearbyFound = true; + } + } + + + } else { @@ -288,47 +370,17 @@ namespace Learun.Application.Web.AppApi else { //没有不匹配的,可以继续进行 - return Success("OK"); - } - #endregion - - #region 1.2 - #region 先分组 1.2.2 - cablesNeedAssigned = cablesNeedAssigned.OrderBy(x => new { x.PreAssignIOType, x.System, x.PanelID }).ToList(); - var curPanel = new ec_PanelEntity(); - curPanel = panelsNeed.FirstOrDefault(x => x.PanelID == cablesNeedAssigned[0].PanelID);//先定位到第一个电缆所在的箱子 - curPanel.strips = stripsNeed.Where(x => x.PanelID == curPanel.PanelID).ToList(); - var curStrip = new ec_PanelStripEntity(); - #endregion - for (var i = 0; i < cablesNeedAssigned.Count; i++) - { - - #region 是否有端子排 1.2.1 - if (curPanel.PanelID != cablesNeedAssigned[i].PanelID) - { - curPanel = panelsNeed.FirstOrDefault(x => x.PanelID == cablesNeedAssigned[0].PanelID);//切换箱子 - curPanel.strips = stripsNeed.Where(x => x.PanelID == curPanel.PanelID).ToList(); - } - foreach (var set in cablesNeedAssigned[i].Sets) - { - var availableStrips = curPanel.strips.Where(x => x.IO_TYPE.ToUpper() == set.IOType.ToString().ToUpper()).ToList(); - - if (availableStrips != null && availableStrips.Count > 0) - { - //已经存在端子排 - } - else - { - //没有端子排,根据信号数里自动新建端子排,通道数里根据端子io模板的默认值获得 - //????????????????????????????????? - } - } - //可能要换一下循环主体,评估下是按照cable循环好,还是按strip循环好 - #endregion } + //必要的数据存入redis,以便后续步骤使用 + ICache redisObj = CacheFactory.CaChe(); + redisObj.Remove("IOModule_AutoAssign2Ch_" + projId, CacheId.IOModule_AutoAssign2Ch); + redisObj.Write>("IOModule_AutoAssign2Ch_" + projId, cablesNeedAssigned, CacheId.IOModule_AutoAssign2Ch); + + return Success("OK"); #endregion - return Success("自动关联完成"); + + } @@ -339,76 +391,45 @@ namespace Learun.Application.Web.AppApi /// public IHttpActionResult AutoAssignCable2Channel_step2(string projId) { - // #region 数据准备 - // var cbll = new ec_CableBLL(); - // var panelTable = ProjectSugar.TableName(projId); - // var stripTable = ProjectSugar.TableName(projId); - // #endregion + ICache redisObj = CacheFactory.CaChe(); + var cablesNeedAssigned = redisObj.Read>("IOModule_AutoAssign2Ch_" + projId, CacheId.IOModule_AutoAssign2Ch); - // #region 先要知道有哪些待分配的信号 + //#region 1.2 + #region 先分组 1.2.2 + cablesNeedAssigned = cablesNeedAssigned.OrderBy(x => new { x.PanelID, x.PreAssignIOType, x.System }).ToList(); + //var curPanel = new ec_PanelEntity(); + //curPanel = panelsNeed.FirstOrDefault(x => x.PanelID == cablesNeedAssigned[0].PanelID);//先定位到第一个电缆所在的箱子 + //curPanel.strips = stripsNeed.Where(x => x.PanelID == curPanel.PanelID).ToList(); + //var curStrip = new ec_PanelStripEntity(); + #endregion + //for (var i = 0; i < cablesNeedAssigned.Count; i++) + //{ - // var cablesNeedAssigned = cbll.GetCablesPreAssign(projId, true); + // #region 是否有端子排 1.2.1 + // if (curPanel.PanelID != cablesNeedAssigned[i].PanelID) + // { + // curPanel = panelsNeed.FirstOrDefault(x => x.PanelID == cablesNeedAssigned[0].PanelID);//切换箱子 + // curPanel.strips = stripsNeed.Where(x => x.PanelID == curPanel.PanelID).ToList(); + // } + // foreach (var set in cablesNeedAssigned[i].Sets) + // { + // var availableStrips = curPanel.strips.Where(x => x.IO_TYPE.ToUpper() == set.IOType.ToString().ToUpper()).ToList(); - // #endregion - // //涉及到哪些箱子 - // var panelsNeed = SqlSugarHelper.Db.Queryable().AS(panelTable). - //Where(x => cablesNeedAssigned.Select(xx => xx.PanelID).Contains(x.PanelID)).ToList(); - // var stripsNeed = SqlSugarHelper.Db.Queryable().AS(stripTable). - // Where(x => panelsNeed.Select(xx => xx.PanelID).Contains(x.PanelID)). - // ToList(); - // #region 1.1判断(信号预分配选择的采集箱可能并没有该电缆需要的信号类型) - // var cablesNotMatchIO = cablesNeedAssigned.Where(x => x.IOTypesNotMatchedList.Count > 0).ToList(); // GetCablesPreAssign 查询时已经处理过io是否匹配了 - // if (cablesNotMatchIO != null && cablesNotMatchIO.Count > 0) - // { - // if (!AcceptUnmatchedPanel)//允许进行 - // { - // //??? - // } - // else - // { - // //不继续自动分配,中断进程,等添加完正确的模块后再继续自动分配 - // return Fail("等电缆的预分配IO类型和其预分配的采集箱的IO类型无法匹配。等添加完正确的模块后再继续自动分配。"); + // if (availableStrips != null && availableStrips.Count > 0) + // { + // //已经存在端子排 + // } + // else + // { + // //没有端子排,根据信号数里自动新建端子排,通道数里根据端子io模板的默认值获得 + // //????????????????????????????????? + // } + // } + // //可能要换一下循环主体,评估下是按照cable循环好,还是按strip循环好 + // #endregion - // } - // } - // #endregion - - // #region 1.2 - // #region 先分组 1.2.2 - // cablesNeedAssigned = cablesNeedAssigned.OrderBy(x => new { x.PreAssignIOType, x.System, x.PanelID }).ToList(); - // var curPanel = new ec_PanelEntity(); - // curPanel = panelsNeed.FirstOrDefault(x => x.PanelID == cablesNeedAssigned[0].PanelID);//先定位到第一个电缆所在的箱子 - // curPanel.strips = stripsNeed.Where(x => x.PanelID == curPanel.PanelID).ToList(); - // var curStrip = new ec_PanelStripEntity(); - // #endregion - // for (var i = 0; i < cablesNeedAssigned.Count; i++) - // { - - // #region 是否有端子排 1.2.1 - // if (curPanel.PanelID != cablesNeedAssigned[i].PanelID) - // { - // curPanel = panelsNeed.FirstOrDefault(x => x.PanelID == cablesNeedAssigned[0].PanelID);//切换箱子 - // curPanel.strips = stripsNeed.Where(x => x.PanelID == curPanel.PanelID).ToList(); - // } - // foreach (var set in cablesNeedAssigned[i].Sets) - // { - // var availableStrips = curPanel.strips.Where(x => x.IO_TYPE.ToUpper() == set.IOType.ToString().ToUpper()).ToList(); - - // if (availableStrips != null && availableStrips.Count > 0) - // { - // //已经存在端子排 - // } - // else - // { - // //没有端子排,根据信号数里自动新建端子排,通道数里根据端子io模板的默认值获得 - // //????????????????????????????????? - // } - // } - // //可能要换一下循环主体,评估下是按照cable循环好,还是按strip循环好 - // #endregion - - // } - // #endregion + //} + //#endregion return Success("自动关联完成"); @@ -435,7 +456,7 @@ namespace Learun.Application.Web.AppApi public IHttpActionResult GetCablePreAssignPreview(string projId) { var bll = new ec_CableBLL(); - var res = bll.GetCablesPreAssign(projId); + var res = bll.GetCablesPreAssign(projId, null); return Success(res); diff --git a/Learun.Application.Web/AppApi/PlotLayoutApiController.cs b/Learun.Application.Web/AppApi/PlotLayoutApiController.cs index f74fdf3b..3f2d00b5 100644 --- a/Learun.Application.Web/AppApi/PlotLayoutApiController.cs +++ b/Learun.Application.Web/AppApi/PlotLayoutApiController.cs @@ -61,6 +61,7 @@ namespace Learun.Application.Web.AppApi { return Fail("项目数据字典中,没有找到【肋位号】的下拉项中。");// 或者 无法从数据字典中找到对应的那个下拉 } + #endregion var pointsOnDwg = SqlSugarHelper.Db.Queryable().AS(pixelTbName). diff --git a/Learun.Application.Web/Areas/ZZDT_EC/Controllers/ec_report_fileController.cs b/Learun.Application.Web/Areas/ZZDT_EC/Controllers/ec_report_fileController.cs index 221f4115..aae1c759 100644 --- a/Learun.Application.Web/Areas/ZZDT_EC/Controllers/ec_report_fileController.cs +++ b/Learun.Application.Web/Areas/ZZDT_EC/Controllers/ec_report_fileController.cs @@ -765,7 +765,7 @@ namespace Learun.Application.Web.Areas.ZZDT_EC.Controllers break; } - var cableFromToRel = SqlSugarHelper.Db.Queryable().AS(relTypeTableName).ToList().FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var cableFromToRel = SqlSugarHelper.Db.Queryable().AS(relTypeTableName).ToList().FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); if (cableFromToRel == null) { throw new Exception($"查不到【{enum_RelType.设备_电缆.ToString()}】这个关联类型。"); 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 2b9769b6..8a05f5be 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,6 +1,7 @@ using DocumentFormat.OpenXml.Drawing.Spreadsheet; using Learun.Util; using Learun.Util.SqlSugar; +using SqlSugar; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -122,7 +123,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC var panelStripTableName = ProjectSugar.TableName(ProjID); var allRelTypeDef = SqlSugarHelper.Db.Queryable().AS(relTypeTableName).ToList(); //var x2 = SqlSugarHelper.Db.Queryable().AS(relTypeTableName).ToList().FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); - var cableFromToRel = allRelTypeDef.FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var cableFromToRel = allRelTypeDef.FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); if (cableFromToRel == null) { throw new Exception($"查不到【{enum_RelType.设备_电缆.ToString()}】这个关联类型。"); @@ -220,36 +221,60 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC #region 还没有预配置 #endregion } - - public List GetCablesPreAssign(string projId, bool needProp = false) + /// + /// 所有的 + /// + /// + /// 按需指定某几个id + /// 是否需要带出电缆上的工程属性 + /// + public List GetCablesPreAssign(string projId, List range, bool needProp = false) { var table = ProjectSugar.TableName(projId); var tagTable = ProjectSugar.TableName(projId); var panelTable = ProjectSugar.TableName(projId); var propTable = ProjectSugar.TableName(projId); var relTable = ProjectSugar.TableName(projId); - + var relTypeTable = ProjectSugar.TableName(projId); var setServ = new ec_CableSetService(); var wireServ = new ec_CableSetWireService(); //先查出所有已经预分配的电缆 var preAssignedCables = SqlSugarHelper.Db.Queryable().AS(table). + WhereIF(range != null && range.Count() > 0, x => range.Contains(x.CableID)). Where(x => !string.IsNullOrEmpty(x.PanelID)).ToList(); var tags = SqlSugarHelper.Db.Queryable().AS(tagTable). - Where(x => preAssignedCables.Select(xx => xx.EngineerDataID).Contains(x.EngineDataID)).ToList(); - var allpropOnFrom = new List(); + Where(x => preAssignedCables.Select(xx => xx.EngineerDataID).Contains(x.EngineDataID)).ToList(). + ToDictionary(x => x.EngineDataID); + //var allpropOnFrom = new List(); var panels = SqlSugarHelper.Db.Queryable().AS(panelTable). Where(x => preAssignedCables.Select(xx => xx.PanelID).Contains(x.PanelID)).ToList(); + var panelDict = panels.ToDictionary(x => x.PanelID); var panelTags = SqlSugarHelper.Db.Queryable().AS(tagTable). - Where(x => panels.Select(xx => xx.EngineerDataID).Contains(x.EngineDataID)).ToList(); + Where(x => panels.Select(xx => xx.EngineerDataID).Contains(x.EngineDataID)).ToList().ToDictionary(x => x.EngineDataID); + var FromRels = new Dictionary();//key是cable,value是from设备的id + var allpropOnFrom = new List(); if (needProp) { - var FromRels = SqlSugarHelper.Db.Queryable().AS(relTable). - Where(x => preAssignedCables.Select(y => y.EngineerDataID).Contains(x.RelEngineData2ID) - && x.RelTypeID == ((int)enum_RelType.设备_电缆).ToString()).ToList(); + var relTypeObj = SqlSugarHelper.Db.Queryable().AS(relTypeTable).ToList(). + FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); + + FromRels = SqlSugarHelper.Db.Queryable().AS(relTable). + Where(x => x.RelTypeID == relTypeObj.RelTypeID && preAssignedCables.Select(c => c.EngineerDataID).Contains(x.RelEngineData2ID)). + Distinct(). + ToList().ToDictionary(x => x.RelEngineData2ID, x => x.RelEngineData1ID); + + //设备上的属性 + //电缆在2,因为1.2.2里用于取的是from端的设备(设备在1,电缆在2) + allpropOnFrom = SqlSugarHelper.Db.Queryable().AS(propTable). - Where(x => FromRels.Select(xx => xx.RelEngineData2ID).Distinct().Contains(x.EngineDataID)).ToList(); + Where(x => FromRels.Values.Contains(x.EngineDataID)).ToList(); + } + var allPropOnFromDict = allpropOnFrom.GroupBy(x => x.EngineDataID).ToDictionary(x => x.Key, + groupValue => groupValue.ToDictionary( + item => item.PropertyName, // 内层字典的键:比如 PropertyID + item => item)); // 内层字典的值:整个对象或其某个属性); foreach (var cable in preAssignedCables) { var sets = setServ.GetList(projId, cable.CableID); @@ -258,23 +283,26 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC - cable.TagNumber = tags.FirstOrDefault(x => x.EngineDataID == cable.EngineerDataID)?.TagNumber; - var panelObj = panels.FirstOrDefault(x => x.PanelID == cable.PanelID); + cable.TagNumber = tags[cable.EngineerDataID]?.TagNumber; + var panelObj = panelDict[cable.PanelID]; if (panelObj == null) { continue;//分配就已经不合理了 } else if (panelObj != null) { - panelObj.TagNumber = panelTags.FirstOrDefault(x => x.EngineDataID == panelObj.EngineerDataID)?.TagNumber; + panelObj.TagNumber = panelTags[panelObj.EngineerDataID]?.TagNumber; - //1.2.1 系统属性从电缆的from端上的设备中取设备的系统 - cable.System = allpropOnFrom.FirstOrDefault(x => x.EngineDataID == cable.PanelID && x.PropertyName == GlobalObject.propName_System)?.PropertyValue; + //1.2.2 系统属性从电缆的from端上的设备中取设备的系统 + var panelId = FromRels[cable.EngineerDataID]; + var panelProps = allPropOnFromDict[panelId]; + cable.System = panelProps[GlobalObject.propName_System]?.PropertyValue; } - cable.ToPanel = panelObj; + cable.ToPanel = panelObj;//暂用一下topanel属性,相当于电缆预分配的采集箱背后的Panel对象。 + var IOsOnPanel = panelObj.allowedIOTypes.Split(',').ToList(); //剩下的感觉都可以是set上的参数? foreach (var set in sets) @@ -300,15 +328,15 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC { set.IOType = GlobalEnum.IOType.TenVolt; } - else if (cable.PreAssignIOType == GlobalEnum.IOType.PT100.ToString()) + else if (cable.PreAssignIOType == GlobalEnum.signalType.PT100.ToString()) { set.IOType = GlobalEnum.IOType.PT100; } - else if (cable.PreAssignIOType.ToUpper() == GlobalEnum.IOType.PULSE.ToString()) + else if (cable.PreAssignIOType.ToUpper() == GlobalEnum.signalType.PULSE.ToString()) { set.IOType = GlobalEnum.IOType.PULSE; } - else if (cable.PreAssignIOType == GlobalEnum.IOType.PT100.ToString()) + else if (cable.PreAssignIOType == GlobalEnum.signalType.PT100.ToString()) { set.IOType = GlobalEnum.IOType.PT100; } 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 8ff39406..5e4bbd34 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 @@ -42,7 +42,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC public string CableClass { get; set; } = ""; /// - /// 即里面走的信号的信号类型? + /// 即里面走的信号的信号类型?。然后加上,才是 /// RS485 RS422 TCP/IP MQTT(如果是通讯母线,通讯类型是什么。) /// Digital 4-20mA Pulse Pt100(如果是非母线,IO类型是什么。) /// @@ -104,7 +104,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC /// /// 是否和 里的匹配。 /// - public List IOTypesNotMatchedList = new List(); + public HashSet IOTypesNotMatchedList = new HashSet(); /// /// /// diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_drawing_file/ec_drawing_fileBLL.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_drawing_file/ec_drawing_fileBLL.cs index d311aa34..fb143fc1 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_drawing_file/ec_drawing_fileBLL.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_drawing_file/ec_drawing_fileBLL.cs @@ -586,7 +586,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC List ArchiveRels = new List(); var tbRelType = ProjectSugar.TableName(targetProjId); - var RelTypeCableFromTo = SqlSugarHelper.Db.Queryable().AS(tbRelType).ToList().FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var RelTypeCableFromTo = SqlSugarHelper.Db.Queryable().AS(tbRelType).ToList().FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); //图上的pixel内容 @@ -824,7 +824,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC var sourceTermAll = Db.Queryable().AS($"ec_Panel_Strip_Term_{sourceProject.ProjectIndex}").ToList(); var sourceChAll = Db.Queryable().AS($"ec_Panel_Channel_{sourceProject.ProjectIndex}").ToList(); var sourceCBAll = Db.Queryable().AS($"ec_CircuitBreaker_{sourceProject.ProjectIndex}").ToList(); - var sourceConnRelType = Db.Queryable().AS($"ec_reltype_{sourceProject.ProjectIndex}").ToList().FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var sourceConnRelType = Db.Queryable().AS($"ec_reltype_{sourceProject.ProjectIndex}").ToList().FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); if (sourceConnRelType == null) { return "原始项目中,找不到 设备-电缆 的连接关系(RelType)定义。"; @@ -859,7 +859,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC var targetTypeAll = objectTypeBll.GetList("{ProjectId:\"" + ProjectId + "\"}").ToList(); var TargetDrawingFile = drawingBll.GetList("{ProjectId:\"" + ProjectId + "\"}").ToList(); var targetTags = ec_enginedataService.GetListSingleTable(ProjectId, null); - var targetConnRelType = Db.Queryable().AS($"ec_reltype_{targetProject.ProjectIndex}").ToList().FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var targetConnRelType = Db.Queryable().AS($"ec_reltype_{targetProject.ProjectIndex}").ToList().FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); if (targetConnRelType == null) { return "当前项目中,找不到 设备-电缆 的连接关系(RelType)定义。"; diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata/ec_enginedataBLL.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata/ec_enginedataBLL.cs index 9177b899..7e5b2bb5 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata/ec_enginedataBLL.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata/ec_enginedataBLL.cs @@ -1813,8 +1813,9 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC { //句柄换位号主体了 //原本句柄相关的rel - var relObj = Db.Queryable().AS(relTableName).First(x => x.RelType == "0"); - if (relObj != null) { + var relObj = Db.Queryable().AS(relTableName).First(x => x.RelType == enum_RelType.设备_电缆); + if (relObj != null) + { var existCableConns = Db.Queryable().AS(reldataTableName). Where(x => x.RelTypeID == relObj.RelTypeID && x.OPCPixel == pixel.PixelCode && (x.RelEngineData1ID == oldTagId || x.RelEngineData2ID == oldTagId)).ToList(); //这里有问题。 diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata_rel/ec_enginedata_relBLL.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata_rel/ec_enginedata_relBLL.cs index 89f70779..0d013c96 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata_rel/ec_enginedata_relBLL.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata_rel/ec_enginedata_relBLL.cs @@ -79,7 +79,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC Where(x => x.DeleteFlg != 1).ToList(); var relTypeTbName = ProjectSugar.TableName(projId); - var relType = Db.Queryable().AS(relTypeTbName).ToList().FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var relType = Db.Queryable().AS(relTypeTbName).ToList().FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); var propBll = new ec_enginedata_propertyBLL(); @@ -176,7 +176,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC Where(x => x.DeleteFlg != 1).ToList(); var relTypeTbName = ProjectSugar.TableName(projId); - var relType = Db.Queryable().AS(relTypeTbName).ToList().FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var relType = Db.Queryable().AS(relTypeTbName).ToList().FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); var allTagProps = SqlSugarHelper.Db.Queryable().AS(propTbName).ToList(); @@ -1483,6 +1483,11 @@ Select((a, b, c) => new var RelEngineData2ID = queryParam["RelEngineData2ID"]?.ToString(); var RelTypeName = queryParam["RelTypeName"]?.ToString(); var RelType = queryParam["RelType"]?.ToString(); + enum_RelType RelEnum = default; + if (!string.IsNullOrEmpty(RelType) && Enum.TryParse(RelType, out RelEnum)) + { + + } var TagNumber = queryParam["TagNumber"]?.ToString(); var tableName = TableName(ProjectId); @@ -1503,7 +1508,7 @@ Select((a, b, c) => new .WhereIF(!string.IsNullOrEmpty(RelEngineData1ID), a => a.RelEngineData1ID == RelEngineData1ID) .WhereIF(!string.IsNullOrEmpty(RelEngineData2ID), a => a.RelEngineData2ID == RelEngineData2ID) .WhereIF(!string.IsNullOrEmpty(RelTypeName), (a, b) => b.RelTypeName == RelTypeName) - .WhereIF(!string.IsNullOrEmpty(RelType), (a, b) => b.RelType == RelType) + .WhereIF(!string.IsNullOrEmpty(RelType), (a, b) => b.RelType == RelEnum) .Select((a, b, t1, t2, o1, o2) => new ec_enginedata_relEntity { EngineDataRelID = a.EngineDataRelID, @@ -1666,7 +1671,8 @@ Select((a, b, c) => new model.Create(); model.RelTypeID = RelTypeID; model.RelEngineData1ID = RelEngineData1ID; - model.RelEngineData2ID = item; + model.RelEngineData2ID = item; + model.OPCPixel = tagPixelId;//普通情况 engineDataRelAdd.Add(model); continue; } @@ -1685,6 +1691,7 @@ Select((a, b, c) => new model.RelTypeID = RelTypeID; model.RelEngineData1ID = RelEngineData1ID; model.RelEngineData2ID = item; + model.OPCPixel = tagPixelId;//普通情况 engineDataRelAdd.Add(model); continue; } @@ -1749,6 +1756,7 @@ Select((a, b, c) => new model.RelTypeID = RelTypeID; model.RelEngineData1ID = item; model.RelEngineData2ID = relEngineData2ID; + model.OPCPixel = tagPixelId;//普通情况 engineDataRelAdd.Add(model); continue; @@ -1771,7 +1779,7 @@ Select((a, b, c) => new model.RelTypeID = RelTypeID; model.RelEngineData1ID = item; model.RelEngineData2ID = relEngineData2ID; - model.OPCPixel = tagPixelId; + model.OPCPixel = tagPixelId;//普通情况 engineDataRelAdd.Add(model); continue; } diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata_rel/ec_enginedata_relService.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata_rel/ec_enginedata_relService.cs index a06229c8..8cfbcde0 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata_rel/ec_enginedata_relService.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata_rel/ec_enginedata_relService.cs @@ -201,7 +201,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC var relTb = ProjectSugar.TableName(ProjId); var relDataTb = ProjectSugar.TableName(ProjId); var relTypes = SqlSugarHelper.Db.Queryable().AS(relTb).ToList(); - var relType = relTypes.FirstOrDefault(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var relType = relTypes.FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆); if (relType != null) { foreach (var cableId in cableIds) diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_panel_channel/ec_PanelChannelBLL.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_panel_channel/ec_PanelChannelBLL.cs index c20dd98c..0ec9be92 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_panel_channel/ec_PanelChannelBLL.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_panel_channel/ec_PanelChannelBLL.cs @@ -170,7 +170,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC Where((a, b) => allPanelIds.Contains(b.PanelID)). Distinct().ToList(); - var relId = Db.Queryable().AS(relTypeTb).ToList().First(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var relId = Db.Queryable().AS(relTypeTb).ToList().First(x => x.RelType == enum_RelType.设备_电缆); var existRels = Db.Queryable().AS(relTb).Where(x => x.RelTypeID == relId.RelTypeID).ToList(); @@ -319,7 +319,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC var allEngineData = Db.Queryable().AS(tagTb).ToList(); var allPanels = Db.Queryable().AS(panelTb).ToList(); - var relId = Db.Queryable().AS(relTypeTb).ToList().First(x => x.RelType == ((int)enum_RelType.设备_电缆).ToString()); + var relId = Db.Queryable().AS(relTypeTb).ToList().First(x => x.RelType == enum_RelType.设备_电缆); var newWTCommits = new List(); var SignalCommits = new List(); diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_reltype/ec_reltypeBLL.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_reltype/ec_reltypeBLL.cs index b6ca06b1..0ed2fcc8 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_reltype/ec_reltypeBLL.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_reltype/ec_reltypeBLL.cs @@ -33,11 +33,14 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC var ProjectId = queryParam["ProjectId"]?.ToString(); var RelTypeName = queryParam["RelTypeName"]?.ToString(); var RelType = queryParam["RelType"]?.ToString(); - + enum_RelType RelEnum = default; + if (!string.IsNullOrEmpty(RelType) && Enum.TryParse(RelType, out RelEnum)) + { + } var tableName = TableName(ProjectId); var query = Db.Queryable().AS(tableName) .WhereIF(!string.IsNullOrEmpty(RelTypeName), x => x.RelTypeName.Contains(RelTypeName)) - .WhereIF(!string.IsNullOrEmpty(RelType), x => x.RelType == RelType) + .WhereIF(!string.IsNullOrEmpty(RelType), x => x.RelType == RelEnum) .OrderByDescending(x => x.CreateTime); List list; if (pagination == null) diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_reltype/ec_reltypeEntity.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_reltype/ec_reltypeEntity.cs index b231c403..e5a341e8 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_reltype/ec_reltypeEntity.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_reltype/ec_reltypeEntity.cs @@ -46,7 +46,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC /// 关联类型缩写 /// /// - public string RelType { get; set; } = ""; + public enum_RelType RelType { get; set; } /// /// 创建人 /// diff --git a/Learun.Framework.Module/Learun.Cache/Learun.Cache.Base/CacheId.cs b/Learun.Framework.Module/Learun.Cache/Learun.Cache.Base/CacheId.cs index 45f46cb5..d1e2d170 100644 --- a/Learun.Framework.Module/Learun.Cache/Learun.Cache.Base/CacheId.cs +++ b/Learun.Framework.Module/Learun.Cache/Learun.Cache.Base/CacheId.cs @@ -138,6 +138,7 @@ #endregion #region 8号库 + public static int IOModule_AutoAssign2Ch { get { return 8; } } #endregion #region 9号库