自动分配(就近找采集箱逻辑完成)
This commit is contained in:
parent
b37d04a1e6
commit
2e665e9f3d
@ -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
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 找到某一个预分配箱子 附近的某一个箱子
|
||||
/// 找到某一个预分配箱子 附近的某一个箱子。且io类型能匹配上
|
||||
/// <param name="curPanelId"/>
|
||||
/// <param name="frameLists"/>
|
||||
/// <param name="allPanel"/>
|
||||
@ -55,9 +56,10 @@ namespace Learun.Application.Web.AppApi
|
||||
/// <param name="IOTypeOnCable">Digital,4-20mA,10v,pt100,pulse</param>
|
||||
/// </summary>
|
||||
|
||||
private ec_PanelEntity FindPanelNearby(string curPanelId, List<FrameBll.FrameList> frameLists, List<ec_PanelEntity> allPanel,
|
||||
private ec_PanelEntity FindPanelNearby(ec_CableEntity cableObj, List<FrameBll.FrameList> frameLists, List<ec_PanelEntity> allPanel,
|
||||
Dictionary<string, List<ec_enginedata_propertyEntity>> 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,32 +143,48 @@ namespace Learun.Application.Web.AppApi
|
||||
foreach (var panel in allPanel.Where(x => x.PanelID != curPanelId))
|
||||
{
|
||||
#region io
|
||||
|
||||
#endregion
|
||||
#region distance
|
||||
//拿到每一个的xy属性
|
||||
//然后和预分配箱子进行对比
|
||||
var DISTANCE = GetPanelXYDistance2Target(panel.PanelID, AssignPanelXValue + AssignPanelXOffValue, AssignPanelYValue);
|
||||
|
||||
if (0.1 == minDistance && DISTANCE > 0)
|
||||
var IOMatched = true;
|
||||
var IOsOnPanel = panel.allowedIOTypes.Split(',').ToList();
|
||||
//剩下的感觉都可以是set上的参数?
|
||||
foreach (var set in cableObj.Sets)
|
||||
{
|
||||
minDistance = DISTANCE; nearestPanel = panel;
|
||||
}
|
||||
else if (DISTANCE < minDistance && DISTANCE > 0)
|
||||
{
|
||||
minDistance = DISTANCE; nearestPanel = panel;
|
||||
#region 判断下io匹配程度
|
||||
var setNew = ec_CableBLL.SetIOMatchPanel(cableObj.PreAssignIOType, set, IOsOnPanel);
|
||||
|
||||
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);
|
||||
|
||||
if (0.1 == minDistance && DISTANCE > 0)
|
||||
{
|
||||
minDistance = DISTANCE; nearestPanel = panel;
|
||||
}
|
||||
else if (DISTANCE < minDistance && DISTANCE > 0)
|
||||
{
|
||||
minDistance = DISTANCE; nearestPanel = panel;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//根据电缆上的信号,去找匹配的排序第一位(已经按照距离排序过)的箱子
|
||||
switch (IOTypeOnCable.ToUpper())
|
||||
{
|
||||
case "DIGITAL":
|
||||
//其他就近箱子的 allowIOTypes里有DI DO
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
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;
|
||||
|
@ -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")
|
||||
{
|
||||
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
|
||||
{
|
||||
var setNew = SetIOMatchPanel(cable.PreAssignIOType, set, IOsOnPanel);
|
||||
|
||||
}
|
||||
|
||||
if (IOsOnPanel.Contains(set.IOType.ToString()))
|
||||
if (IOsOnPanel.Contains(setNew.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); }
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 预分配的电缆上的io,是否和电缆上的io能匹配
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static ec_CableSetEntity SetIOMatchPanel(string signalOnCable, ec_CableSetEntity set, List<string> 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;
|
||||
}
|
||||
/// <summary>
|
||||
/// 保存实体数据(新增、修改)
|
||||
/// <param name="keyValue">主键</param>
|
||||
|
@ -147,7 +147,8 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// From连接处的工程位号信息。同时,也表达下预分配电缆panelid对应的柜子信息。
|
||||
/// From连接处的工程位号信息。
|
||||
/// 同时,也表达下预分配电缆panelid对应的柜子信息。
|
||||
/// </summary>
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public ec_PanelEntity ToPanel { set; get; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user