Compare commits
3 Commits
8fa07593ac
...
ed968f39f9
Author | SHA1 | Date | |
---|---|---|---|
ed968f39f9 | |||
cde4be8f13 | |||
63ab9f2a4a |
3
.gitignore
vendored
3
.gitignore
vendored
@ -1110,3 +1110,6 @@ newFront/c#前端/.vs/
|
|||||||
/newFront/c#前端/.vs/SWS.CAD/FileContentIndex/f03e1583-e8e0-43b7-9dbb-a1896ce4b92d.vsidx
|
/newFront/c#前端/.vs/SWS.CAD/FileContentIndex/f03e1583-e8e0-43b7-9dbb-a1896ce4b92d.vsidx
|
||||||
/newFront/c#前端/.vs/SWS.CAD/FileContentIndex/f2e37380-e651-406b-9320-af642620eee9.vsidx
|
/newFront/c#前端/.vs/SWS.CAD/FileContentIndex/f2e37380-e651-406b-9320-af642620eee9.vsidx
|
||||||
/SWSDBSchemeUpgradeTool/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
|
/SWSDBSchemeUpgradeTool/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
|
||||||
|
/Learun.Framework.Module/Learun.Db/Learun.DataBase.EF.Oracle/obj/Debug/Learun.DataBase.Oracle.csproj.AssemblyReference.cache
|
||||||
|
/Learun.Framework.Module/Learun.Db/Learun.DataBase.EF.Sqlserver/obj/Debug/Learun.DataBase.SqlServer.csproj.AssemblyReference.cache
|
||||||
|
/Learun.Framework.Module/Learun.Db/Learun.DataBase.MySql/obj/Debug/Learun.DataBase.MySqlEx.csproj.AssemblyReference.cache
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -48,36 +48,117 @@ namespace Learun.Application.Web.AppApi
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 找到某一个预分配箱子 附近的某一个箱子
|
/// 找到某一个预分配箱子 附近的某一个箱子
|
||||||
|
/// <param name="curPanelId"/>
|
||||||
/// <param name="frameLists"/>
|
/// <param name="frameLists"/>
|
||||||
/// <param name="allPanel"/>
|
/// <param name="allPanel"/>
|
||||||
|
/// <param name="allPanelProps">所有柜子的属性</param>
|
||||||
/// <param name="IOTypeOnCable">Digital,4-20mA,10v,pt100,pulse</param>
|
/// <param name="IOTypeOnCable">Digital,4-20mA,10v,pt100,pulse</param>
|
||||||
/// <param name="PreAssignPanelID"/>
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
private ec_PanelEntity FindPanelNearby(List<FrameBll.FrameList> frameLists, List<ec_PanelEntity> allPanel, List<ec_enginedata_propertyEntity> allPanelProps
|
private ec_PanelEntity FindPanelNearby(string curPanelId, List<FrameBll.FrameList> frameLists, List<ec_PanelEntity> allPanel,
|
||||||
, string IOTypeOnCable)
|
Dictionary<string, List<ec_enginedata_propertyEntity>> allPanelProps, string IOTypeOnCable)
|
||||||
{
|
{
|
||||||
|
double GetPanelXYDistance2Target(string panelId, double targetX, double targetY)
|
||||||
|
{
|
||||||
|
var nearPanel = allPanel.FirstOrDefault(x => x.PanelID == panelId);
|
||||||
|
var nearPanelProps = allPanelProps[nearPanel.EngineerDataID];
|
||||||
|
var X = nearPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_Frame)?.PropertyValue;
|
||||||
|
X = X.Split(new string[] { GlobalObject.enum_separator }, StringSplitOptions.None)[0];//插件端对于下拉列表 都是 name || nameEN
|
||||||
|
var validFrme2 = frameLists.FirstOrDefault(f => f.Num == X);
|
||||||
|
if (validFrme2 == null)
|
||||||
|
{
|
||||||
|
return -1;//无效的肋位号导致的
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var XValue = validFrme2.Value;
|
||||||
|
|
||||||
|
if (XValue < 400)//null也没事
|
||||||
|
{
|
||||||
|
// 小于400,我几乎可以认为此时肋位号用的是m这个单位。因为如果用的是mm,400mm的肋位号似乎也太小了。
|
||||||
|
XValue = 1000 * XValue; // 转成mm
|
||||||
|
}
|
||||||
|
if (double.TryParse(nearPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_FrameOff)?.PropertyValue,
|
||||||
|
out double XOffValue))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return -1;//无效的x off导致的
|
||||||
|
}
|
||||||
|
if (double.TryParse(nearPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_YOff)?.PropertyValue,
|
||||||
|
, out double YOffValue))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return -1;//无效的y off导致的
|
||||||
|
}
|
||||||
|
|
||||||
|
var distance = Math.Sqrt(Math.Pow(targetX - XValue - XOffValue, 2) + Math.Pow(targetY - YOffValue, 2));
|
||||||
|
return distance;
|
||||||
|
}
|
||||||
|
var curPanel = allPanel.FirstOrDefault(x => x.PanelID == curPanelId);
|
||||||
|
var curPanelProps = allPanelProps[curPanel.EngineerDataID];
|
||||||
//当前预分配的箱子的位置
|
//当前预分配的箱子的位置
|
||||||
var AssignPanelX = allPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_Frame)?.PropertyValue;
|
var AssignPanelX = curPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_Frame)?.PropertyValue;
|
||||||
AssignPanelX = AssignPanelX.Split(new string[] { GlobalObject.enum_separator }, StringSplitOptions.None)[0];//插件端对于下拉列表 都是 name || nameEN
|
AssignPanelX = AssignPanelX.Split(new string[] { GlobalObject.enum_separator }, StringSplitOptions.None)[0];//插件端对于下拉列表 都是 name || nameEN
|
||||||
var AssignPanelXValue = frameLists.FirstOrDefault(X => X.Num == AssignPanelX)?.Value;
|
var validFrme = frameLists.FirstOrDefault(X => X.Num == AssignPanelX);
|
||||||
|
if (validFrme == null)
|
||||||
|
{
|
||||||
|
return null;//无效的肋位号导致的
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var AssignPanelXValue = validFrme.Value;
|
||||||
|
|
||||||
if (AssignPanelXValue < 400)//null也没事
|
if (AssignPanelXValue < 400)//null也没事
|
||||||
{
|
{
|
||||||
// 小于400,我几乎可以认为此时肋位号用的是m这个单位。因为如果用的是mm,400mm的肋位号似乎也太小了。
|
// 小于400,我几乎可以认为此时肋位号用的是m这个单位。因为如果用的是mm,400mm的肋位号似乎也太小了。
|
||||||
AssignPanelXValue = 1000 * AssignPanelXValue; // 转成mm
|
AssignPanelXValue = 1000 * AssignPanelXValue; // 转成mm
|
||||||
}
|
}
|
||||||
var AssignPanelXOff = allPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_FrameOff)?.PropertyValue;
|
if (double.TryParse(curPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_FrameOff)?.PropertyValue,
|
||||||
|
out double AssignPanelXOffValue))
|
||||||
var AssignPanelY = allPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_YOff)?.PropertyValue;
|
|
||||||
|
|
||||||
foreach (var panel in allPanel)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;//无效的x off导致的
|
||||||
|
}
|
||||||
|
if (double.TryParse(curPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_YOff)?.PropertyValue,
|
||||||
|
, out double AssignPanelYValue))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;//无效的y off导致的
|
||||||
|
}
|
||||||
|
double minDistance = 0.1; ec_PanelEntity nearestPanel = null;
|
||||||
|
foreach (var panel in allPanel.Where(x => x.PanelID != curPanelId))
|
||||||
|
{
|
||||||
|
#region io
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
#region distance
|
||||||
//拿到每一个的xy属性
|
//拿到每一个的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;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
//根据电缆上的信号,去找匹配的排序第一位(已经按照距离排序过)的箱子
|
//根据电缆上的信号,去找匹配的排序第一位(已经按照距离排序过)的箱子
|
||||||
switch (IOTypeOnCable.ToUpper())
|
switch (IOTypeOnCable.ToUpper())
|
||||||
{
|
{
|
||||||
@ -87,7 +168,7 @@ namespace Learun.Application.Web.AppApi
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return null;
|
return nearestPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -282,6 +363,8 @@ namespace Learun.Application.Web.AppApi
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ICache redisObj = CacheFactory.CaChe();
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 自动分配通道(点表信号自动分配)。
|
/// 自动分配通道(点表信号自动分配)。
|
||||||
///
|
///
|
||||||
@ -334,15 +417,21 @@ namespace Learun.Application.Web.AppApi
|
|||||||
if (AcceptNearbyPanel)//允许进行
|
if (AcceptNearbyPanel)//允许进行
|
||||||
{
|
{
|
||||||
//有不匹配的,但是用户允许继续
|
//有不匹配的,但是用户允许继续
|
||||||
//在之后的自动分配过程中会自动寻找匹配的采集箱,原则上从就近的开始找,如果没有匹配的采集箱,则提示“未找到具有XX类型的采集箱,请新增后再次分配,是否取消自动分配进程?”
|
//如果选是,则在之后的自动分配过程中会自动寻找匹配的采集箱,原则上从就近的开始找,如果没有匹配的采集箱,则提示“未找到具有XX类型的采集箱,请新增后再次分配,是否取消自动分配进程?”
|
||||||
bool nearbyFound = false;
|
bool nearbyFound = false;
|
||||||
foreach (var cable in cablesNotMatchIO)
|
foreach (var cable in cablesNotMatchIO)
|
||||||
{
|
{
|
||||||
var nearPanel = FindPanelNearby(allFrames, allPanel, allPanelProp[cable.ToPanel.EngineerDataID], cable.PreAssignIOType);
|
var nearPanel = FindPanelNearby(cable.PanelID, allFrames, allPanel, allPanelProp, cable.PreAssignIOType);
|
||||||
if (nearPanel == null)
|
if (nearPanel == null)
|
||||||
{
|
{
|
||||||
nearbyFound = false;
|
nearbyFound = false;
|
||||||
|
//必要的数据存入redis,以便后续步骤使用
|
||||||
|
redisObj.Remove("IOModule_AutoAssign2Ch_" + projId, CacheId.IOModule_AutoAssign2Ch);
|
||||||
|
redisObj.Write<List<ec_CableEntity>>("IOModule_AutoAssign2Ch_" + projId, cablesNeedAssigned, CacheId.IOModule_AutoAssign2Ch);
|
||||||
return Fail($"在附近未找到具有{cable.PreAssignIOType}类型的采集箱,请新增后再次分配,是否取消自动分配进程?");
|
return Fail($"在附近未找到具有{cable.PreAssignIOType}类型的采集箱,请新增后再次分配,是否取消自动分配进程?");
|
||||||
|
//之后插件端进行选择。
|
||||||
|
//如果不想新增,则选择否,继续自动分配,没有分配到的信号在备注上填写由于何种原因没有被分配,弹出未被分配的信号列表供查看。
|
||||||
|
//也就是这里要等所有循环结束后才能return结果,而不是目前一个nearByFound = false时就退出了。
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -355,7 +444,7 @@ namespace Learun.Application.Web.AppApi
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//不继续自动分配,中断进程,等添加完正确的模块后再继续自动分配
|
//如果选否,则不继续自动分配,中断进程,等添加完正确的模块后再继续自动分配
|
||||||
var cableNamesNotMatched = string.Join(",", cablesNotMatchIO.Select(x => x.TagNumber).ToList());
|
var cableNamesNotMatched = string.Join(",", cablesNotMatchIO.Select(x => x.TagNumber).ToList());
|
||||||
var panelIOMissing = new List<string>();
|
var panelIOMissing = new List<string>();
|
||||||
foreach (ec_CableEntity cableNotMatchIO in cablesNotMatchIO)
|
foreach (ec_CableEntity cableNotMatchIO in cablesNotMatchIO)
|
||||||
@ -373,7 +462,6 @@ namespace Learun.Application.Web.AppApi
|
|||||||
|
|
||||||
}
|
}
|
||||||
//必要的数据存入redis,以便后续步骤使用
|
//必要的数据存入redis,以便后续步骤使用
|
||||||
ICache redisObj = CacheFactory.CaChe();
|
|
||||||
redisObj.Remove("IOModule_AutoAssign2Ch_" + projId, CacheId.IOModule_AutoAssign2Ch);
|
redisObj.Remove("IOModule_AutoAssign2Ch_" + projId, CacheId.IOModule_AutoAssign2Ch);
|
||||||
redisObj.Write<List<ec_CableEntity>>("IOModule_AutoAssign2Ch_" + projId, cablesNeedAssigned, CacheId.IOModule_AutoAssign2Ch);
|
redisObj.Write<List<ec_CableEntity>>("IOModule_AutoAssign2Ch_" + projId, cablesNeedAssigned, CacheId.IOModule_AutoAssign2Ch);
|
||||||
|
|
||||||
@ -385,18 +473,36 @@ namespace Learun.Application.Web.AppApi
|
|||||||
|
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
/// 根据step1的初步采集箱判断情况,来进行分配预览。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="projId"></param>
|
/// <param name="projId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
public IHttpActionResult AutoAssignCable2Channel_step2(string projId)
|
public IHttpActionResult AutoAssignCable2Channel_step2(string projId)
|
||||||
{
|
{
|
||||||
ICache redisObj = CacheFactory.CaChe();
|
ICache redisObj = CacheFactory.CaChe();
|
||||||
var cablesNeedAssigned = redisObj.Read<List<ec_CableEntity>>("IOModule_AutoAssign2Ch_" + projId, CacheId.IOModule_AutoAssign2Ch);
|
var cablesNeedAssigned = redisObj.Read<List<ec_CableEntity>>("IOModule_AutoAssign2Ch_" + projId, CacheId.IOModule_AutoAssign2Ch);
|
||||||
|
|
||||||
//#region 1.2
|
//#region 1.2 开始自动分配(不保存到数据库)
|
||||||
#region 先分组 1.2.2
|
#region 先分组 1.2.2
|
||||||
cablesNeedAssigned = cablesNeedAssigned.OrderBy(x => new { x.PanelID, x.PreAssignIOType, x.System }).ToList();
|
var cablesGrouped = cablesNeedAssigned.OrderBy(x => x.PanelID).ThenBy(x => x.PreAssignIOType).ThenBy(x => x.System).ToList();
|
||||||
|
|
||||||
|
foreach (var item in cablesNeedAssigned)
|
||||||
|
{
|
||||||
|
if (item.Sets == null || item.Sets.Count() == 0)
|
||||||
|
{
|
||||||
|
//也归类到未成功
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var set in item.Sets)
|
||||||
|
{
|
||||||
|
set.ConnectionInfo = $"采集箱:{item.ToPanel.TagNumber}/模块(端子排):{"test_ts"}/通道:{"test_ch"}";
|
||||||
|
set.AssignedTerms = set.Wires.Select(x => x.PreAssignChannelTermNo).ToList();// new List<string>() { "test_term1", "test_term2" };//假数据
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
//var curPanel = new ec_PanelEntity();
|
//var curPanel = new ec_PanelEntity();
|
||||||
//curPanel = panelsNeed.FirstOrDefault(x => x.PanelID == cablesNeedAssigned[0].PanelID);//先定位到第一个电缆所在的箱子
|
//curPanel = panelsNeed.FirstOrDefault(x => x.PanelID == cablesNeedAssigned[0].PanelID);//先定位到第一个电缆所在的箱子
|
||||||
//curPanel.strips = stripsNeed.Where(x => x.PanelID == curPanel.PanelID).ToList();
|
//curPanel.strips = stripsNeed.Where(x => x.PanelID == curPanel.PanelID).ToList();
|
||||||
@ -430,7 +536,22 @@ namespace Learun.Application.Web.AppApi
|
|||||||
|
|
||||||
//}
|
//}
|
||||||
//#endregion
|
//#endregion
|
||||||
return Success("自动关联完成");
|
return Success(cablesNeedAssigned);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据step2的预分配结果,进行实际的分配,修改数据库。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="projId"></param>
|
||||||
|
/// <param name="cables">传入有效的cable即可,未成功分配的cable不需要</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
|
public IHttpActionResult AutoAssignCable2Channel_step3(string projId, [FromBody] List<ec_CableEntity> cables)
|
||||||
|
{
|
||||||
|
//大原则:同一根电缆的信号不能跨采集箱,跨模块可以。
|
||||||
|
return Success(cables);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -631,13 +631,10 @@ namespace Learun.Application.Web.AppApi
|
|||||||
//每个位号的属性信息
|
//每个位号的属性信息
|
||||||
foreach (var tag in objectType.tags)
|
foreach (var tag in objectType.tags)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(tag.CreateUserID))
|
if (userDict.TryGetValue(tag.CreateUserID, out string createUserName))
|
||||||
{
|
{
|
||||||
tag.CreateUserName = string.Empty;
|
tag.CreateUserName = createUserName;// allUser.FirstOrDefault(x => x.F_UserId == item.CreateUserID)?.F_RealName;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tag.CreateUserName = userDict[tag.CreateUserID];// allUser.FirstOrDefault(x => x.F_UserId == item.CreateUserID)?.F_RealName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tag.EngineDataProperty = tagPropDictByTag[tag.EngineDataID];// tagPropAll.Where(x => x.EngineDataID == tag.EngineDataID).ToList();
|
tag.EngineDataProperty = tagPropDictByTag[tag.EngineDataID];// tagPropAll.Where(x => x.EngineDataID == tag.EngineDataID).ToList();
|
||||||
|
@ -81,7 +81,29 @@ namespace Learun.Application.Web.AppApi
|
|||||||
{
|
{
|
||||||
var tagProps = propAll.FindAll(x => x.EngineDataID == pointTag.EngineDataID);
|
var tagProps = propAll.FindAll(x => x.EngineDataID == pointTag.EngineDataID);
|
||||||
var Prop_Frame = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_Frame)?.PropertyValue;
|
var Prop_Frame = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_Frame)?.PropertyValue;
|
||||||
|
if (Prop_Frame != null)
|
||||||
|
{
|
||||||
Prop_Frame = Prop_Frame.Split(new string[] { GlobalObject.enum_separator }, StringSplitOptions.None)[0];//插件端对于下拉列表 都是 name || nameEN
|
Prop_Frame = Prop_Frame.Split(new string[] { GlobalObject.enum_separator }, StringSplitOptions.None)[0];//插件端对于下拉列表 都是 name || nameEN
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var matchedFrame = frameLists.FirstOrDefault(X => X.Num == Prop_Frame);
|
||||||
|
if (matchedFrame == null)
|
||||||
|
{
|
||||||
|
//没有
|
||||||
|
//无效的基点
|
||||||
|
var layoutTagInvalid = new layoutTagInfoBrief()
|
||||||
|
{
|
||||||
|
|
||||||
|
EngineDataID = pointTag.EngineDataID,
|
||||||
|
FileId = "",
|
||||||
|
PixelOnDwg = pointsOnDwg.FirstOrDefault(x => x.EngineDataID == pointTag.EngineDataID)?.PixelCode,
|
||||||
|
TagNumber = pointTag.TagNumber,
|
||||||
|
area = "ERR"
|
||||||
|
};
|
||||||
|
res.Add(layoutTagInvalid);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
var xValue = frameLists.FirstOrDefault(X => X.Num == Prop_Frame).Value;
|
var xValue = frameLists.FirstOrDefault(X => X.Num == Prop_Frame).Value;
|
||||||
if (xValue < 400)
|
if (xValue < 400)
|
||||||
{
|
{
|
||||||
@ -126,26 +148,28 @@ namespace Learun.Application.Web.AppApi
|
|||||||
|
|
||||||
//这里要考虑下拉列表 带 ||的问题
|
//这里要考虑下拉列表 带 ||的问题
|
||||||
List<string> matchedTagIds = new List<string>();
|
List<string> matchedTagIds = new List<string>();
|
||||||
if (keyProp == GlobalObject.propName_System)
|
//if (keyProp == GlobalObject.propName_System)
|
||||||
{
|
//{
|
||||||
//#task 9536
|
//#task 9536
|
||||||
// 筛选出所有以 "a||" 或 "b||" 开头的元素
|
// 筛选出所有以 "a||" 或 "b||" 开头的元素
|
||||||
var validSystems = keyValue.Split().ToList();
|
var validSystems = keyValue.Split(';').ToList();
|
||||||
matchedTagIds = propAll.Where(item =>
|
matchedTagIds = propAll.Where(item =>
|
||||||
|
item.PropertyName == keyProp &&
|
||||||
validSystems.Any(prefix => item.PropertyValue == prefix) || validSystems.Any(prefix => item.PropertyValue.StartsWith(prefix + GlobalObject.enum_separator))
|
validSystems.Any(prefix => item.PropertyValue == prefix) || validSystems.Any(prefix => item.PropertyValue.StartsWith(prefix + GlobalObject.enum_separator))
|
||||||
).Select(X => X.EngineDataID).Distinct().ToList();
|
).Select(X => X.EngineDataID).Distinct().ToList();
|
||||||
}
|
//}
|
||||||
else
|
//else
|
||||||
{
|
//{
|
||||||
matchedTagIds = propAll.Where(x => x.PropertyName == keyProp
|
// matchedTagIds = propAll.Where(x => x.PropertyName == keyProp
|
||||||
&& (x.PropertyValue == keyValue || x.PropertyValue.StartsWith(keyValue + GlobalObject.enum_separator))).
|
// && (x.PropertyValue == keyValue || x.PropertyValue.StartsWith(keyValue + GlobalObject.enum_separator))).
|
||||||
Select(X => X.EngineDataID).Distinct().ToList();
|
// Select(X => X.EngineDataID).Distinct().ToList();
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
//有效范围的设备
|
//有效范围的设备
|
||||||
var matchedTags = SqlSugarHelper.Db.Queryable<ec_enginedataEntity>().AS(tagTbName).
|
var matchedTags = SqlSugarHelper.Db.Queryable<ec_enginedataEntity>().AS(tagTbName).
|
||||||
InnerJoin<ec_objecttypeEntity>((a, b) => a.ObjectTypeID == b.ObjectTypeID).AS<ec_objecttypeEntity>(typeTbName).
|
InnerJoin<ec_objecttypeEntity>((a, b) => a.ObjectTypeID == b.ObjectTypeID).AS<ec_objecttypeEntity>(typeTbName).
|
||||||
|
|
||||||
Where(a => matchedTagIds.Contains(a.EngineDataID)
|
Where(a => matchedTagIds.Contains(a.EngineDataID)
|
||||||
&& a.ObjectTypeID != pointType.ObjectTypeID)
|
&& a.ObjectTypeID != pointType.ObjectTypeID)
|
||||||
.Select((a, b) => new { a.EngineDataID, a.TagNumber, a.ObjectTypeID, b.DefaultLayoutLibFileID })
|
.Select((a, b) => new { a.EngineDataID, a.TagNumber, a.ObjectTypeID, b.DefaultLayoutLibFileID })
|
||||||
@ -164,9 +188,26 @@ namespace Learun.Application.Web.AppApi
|
|||||||
|
|
||||||
foreach (var matchPointTagId in matchPointTagIds)
|
foreach (var matchPointTagId in matchPointTagIds)
|
||||||
{
|
{
|
||||||
|
var tagInfo = matchedTags.FirstOrDefault(X => X.EngineDataID == matchPointTagId);
|
||||||
var tagProps = EquipPropAll.Where(x => x.EngineDataID == matchPointTagId).ToList();
|
var tagProps = EquipPropAll.Where(x => x.EngineDataID == matchPointTagId).ToList();
|
||||||
var Prop_Frame = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_Frame)?.PropertyValue;
|
var Prop_Frame = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_Frame)?.PropertyValue;
|
||||||
|
if (Prop_Frame != null)
|
||||||
|
{
|
||||||
Prop_Frame = Prop_Frame.Split(new string[] { GlobalObject.enum_separator }, StringSplitOptions.None)[0];//插件端对于下拉列表 都是 name || nameEN
|
Prop_Frame = Prop_Frame.Split(new string[] { GlobalObject.enum_separator }, StringSplitOptions.None)[0];//插件端对于下拉列表 都是 name || nameEN
|
||||||
|
}
|
||||||
|
var matchedFrame = frameLists.FirstOrDefault(X => X.Num == Prop_Frame);
|
||||||
|
if (matchedFrame == null)
|
||||||
|
{
|
||||||
|
var layoutTagInfoInvalid = new layoutTagInfoBrief()
|
||||||
|
{
|
||||||
|
EngineDataID = matchPointTagId,
|
||||||
|
PixelOnDwg = "",
|
||||||
|
TagNumber = tagInfo.TagNumber,
|
||||||
|
area = "ERR",
|
||||||
|
};
|
||||||
|
basePoint.Tags.Add(layoutTagInfoInvalid);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
var xValue = frameLists.FirstOrDefault(X => X.Num == Prop_Frame).Value;
|
var xValue = frameLists.FirstOrDefault(X => X.Num == Prop_Frame).Value;
|
||||||
if (xValue < 400)
|
if (xValue < 400)
|
||||||
{
|
{
|
||||||
@ -176,7 +217,7 @@ namespace Learun.Application.Web.AppApi
|
|||||||
var Prop_FrameOff = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_FrameOff)?.PropertyValue;
|
var Prop_FrameOff = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_FrameOff)?.PropertyValue;
|
||||||
var Prop_YOff = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_YOff)?.PropertyValue;
|
var Prop_YOff = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_YOff)?.PropertyValue;
|
||||||
|
|
||||||
var tagInfo = matchedTags.FirstOrDefault(X => X.EngineDataID == matchPointTagId);
|
|
||||||
var systemProp = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_System)?.PropertyValue;
|
var systemProp = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_System)?.PropertyValue;
|
||||||
var tagProp = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_Tag)?.PropertyValue;
|
var tagProp = tagProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_Tag)?.PropertyValue;
|
||||||
#region 判断是否满足特定条件
|
#region 判断是否满足特定条件
|
||||||
@ -243,13 +284,13 @@ namespace Learun.Application.Web.AppApi
|
|||||||
var lastDashPos = tagInfo.TagNumber.LastIndexOf('-');//最后一个'-'的位置
|
var lastDashPos = tagInfo.TagNumber.LastIndexOf('-');//最后一个'-'的位置
|
||||||
if (lastDashPos > 0 && lastDashPos < tagInfo.TagNumber.Length - 1)
|
if (lastDashPos > 0 && lastDashPos < tagInfo.TagNumber.Length - 1)
|
||||||
{
|
{
|
||||||
TagNumber_Upper = tagInfo.TagNumber.Substring(0, lastDashPos);
|
TagNumber_Upper = tagInfo.TagNumber.Substring(lastDashPos + 1);//tag
|
||||||
TagNumber_Lower = tagInfo.TagNumber.Substring(lastDashPos + 1);
|
TagNumber_Lower = tagInfo.TagNumber.Substring(0, lastDashPos);//system
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TagNumber_Upper = tagInfo.TagNumber;
|
TagNumber_Upper = tagInfo.TagNumber;//tag
|
||||||
TagNumber_Lower = "";
|
TagNumber_Lower = ""; //system
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
var layoutTagInfo = new layoutTagInfoBrief()
|
var layoutTagInfo = new layoutTagInfoBrief()
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -254,8 +254,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
|||||||
Where(x => panels.Select(xx => xx.EngineerDataID).Contains(x.EngineDataID)).ToList().ToDictionary(x => x.EngineDataID);
|
Where(x => panels.Select(xx => xx.EngineerDataID).Contains(x.EngineDataID)).ToList().ToDictionary(x => x.EngineDataID);
|
||||||
var FromRels = new Dictionary<string, string>();//key是cable,value是from设备的id
|
var FromRels = new Dictionary<string, string>();//key是cable,value是from设备的id
|
||||||
var allpropOnFrom = new List<ec_enginedata_propertyEntity>();
|
var allpropOnFrom = new List<ec_enginedata_propertyEntity>();
|
||||||
if (needProp)
|
|
||||||
{
|
|
||||||
var relTypeObj = SqlSugarHelper.Db.Queryable<ec_reltypeEntity>().AS(relTypeTable).ToList().
|
var relTypeObj = SqlSugarHelper.Db.Queryable<ec_reltypeEntity>().AS(relTypeTable).ToList().
|
||||||
FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆);
|
FirstOrDefault(x => x.RelType == enum_RelType.设备_电缆);
|
||||||
|
|
||||||
@ -266,7 +265,8 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
|||||||
|
|
||||||
//设备上的属性
|
//设备上的属性
|
||||||
//电缆在2,因为1.2.2里用于取的是from端的设备(设备在1,电缆在2)
|
//电缆在2,因为1.2.2里用于取的是from端的设备(设备在1,电缆在2)
|
||||||
|
if (needProp)
|
||||||
|
{
|
||||||
allpropOnFrom = SqlSugarHelper.Db.Queryable<ec_enginedata_propertyEntity>().AS(propTable).
|
allpropOnFrom = SqlSugarHelper.Db.Queryable<ec_enginedata_propertyEntity>().AS(propTable).
|
||||||
Where(x => FromRels.Values.Contains(x.EngineDataID)).ToList();
|
Where(x => FromRels.Values.Contains(x.EngineDataID)).ToList();
|
||||||
|
|
||||||
@ -284,23 +284,29 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
|||||||
|
|
||||||
|
|
||||||
cable.TagNumber = tags[cable.EngineerDataID]?.TagNumber;
|
cable.TagNumber = tags[cable.EngineerDataID]?.TagNumber;
|
||||||
var panelObj = panelDict[cable.PanelID];
|
ec_PanelEntity panelObj;
|
||||||
if (panelObj == null)
|
if (panelDict.TryGetValue(cable.PanelID, out panelObj))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
continue;//分配就已经不合理了
|
continue;//分配就已经不合理了
|
||||||
}
|
}
|
||||||
else if (panelObj != null)
|
|
||||||
{
|
|
||||||
panelObj.TagNumber = panelTags[panelObj.EngineerDataID]?.TagNumber;
|
panelObj.TagNumber = panelTags[panelObj.EngineerDataID]?.TagNumber;
|
||||||
|
|
||||||
//1.2.2 系统属性从电缆的from端上的设备中取设备的系统
|
//1.2.2 系统属性从电缆的from端上的设备中取设备的系统
|
||||||
var panelId = FromRels[cable.EngineerDataID];
|
var panelId = FromRels[cable.EngineerDataID];
|
||||||
|
if (needProp)
|
||||||
|
{
|
||||||
var panelProps = allPropOnFromDict[panelId];
|
var panelProps = allPropOnFromDict[panelId];
|
||||||
cable.System = panelProps[GlobalObject.propName_System]?.PropertyValue;
|
cable.System = panelProps[GlobalObject.propName_System]?.PropertyValue;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cable.ToPanel = panelObj;//暂用一下topanel属性,相当于电缆预分配的采集箱背后的Panel对象。
|
cable.ToPanel = panelObj;//暂用一下topanel属性,相当于电缆预分配的采集箱背后的Panel对象。
|
||||||
|
|
||||||
var IOsOnPanel = panelObj.allowedIOTypes.Split(',').ToList();
|
var IOsOnPanel = panelObj.allowedIOTypes.Split(',').ToList();
|
||||||
|
@ -152,6 +152,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
|||||||
[SugarColumn(IsIgnore = true)]
|
[SugarColumn(IsIgnore = true)]
|
||||||
public ec_PanelEntity ToPanel { set; get; }
|
public ec_PanelEntity ToPanel { set; get; }
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,6 +160,11 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[SugarColumn(IsIgnore = true)]
|
[SugarColumn(IsIgnore = true)]
|
||||||
public bool DeleteFlg { set; get; } = false;
|
public bool DeleteFlg { set; get; } = false;
|
||||||
|
|
||||||
|
#region 预分配后的结果
|
||||||
|
public List<string> AssignedTerms;
|
||||||
|
#endregion
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public ec_CableSetEntity()
|
public ec_CableSetEntity()
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -4,3 +4,9 @@ C:\repo\CODE\009\Server\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\o
|
|||||||
C:\repo\CODE\009\Server\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\obj\Release\Learun.Cache.Base.csproj.CoreCompileInputs.cache
|
C:\repo\CODE\009\Server\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\obj\Release\Learun.Cache.Base.csproj.CoreCompileInputs.cache
|
||||||
C:\repo\CODE\009\Server\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\obj\Release\Learun.Cache.Base.dll
|
C:\repo\CODE\009\Server\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\obj\Release\Learun.Cache.Base.dll
|
||||||
C:\repo\CODE\009\Server\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\obj\Release\Learun.Cache.Base.pdb
|
C:\repo\CODE\009\Server\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\obj\Release\Learun.Cache.Base.pdb
|
||||||
|
C:\repo\CODE\009_DI-Elec\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\bin\Release\Learun.Cache.Base.dll
|
||||||
|
C:\repo\CODE\009_DI-Elec\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\bin\Release\Learun.Cache.Base.pdb
|
||||||
|
C:\repo\CODE\009_DI-Elec\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\obj\Release\Learun.Cache.Base.csproj.AssemblyReference.cache
|
||||||
|
C:\repo\CODE\009_DI-Elec\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\obj\Release\Learun.Cache.Base.csproj.CoreCompileInputs.cache
|
||||||
|
C:\repo\CODE\009_DI-Elec\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\obj\Release\Learun.Cache.Base.dll
|
||||||
|
C:\repo\CODE\009_DI-Elec\Learun.Framework.Module\Learun.Cache\Learun.Cache.Base\obj\Release\Learun.Cache.Base.pdb
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user