1
This commit is contained in:
parent
1f6ac157b7
commit
e6d949afe9
@ -1,6 +1,7 @@
|
||||
using DocumentFormat.OpenXml.Drawing.Spreadsheet;
|
||||
using Learun.Application.Organization;
|
||||
using Learun.Application.TwoDevelopment.ZZDT_EC;
|
||||
using Learun.Application.TwoDevelopment.ZZDT_EC.Frame;
|
||||
using Learun.Loger;
|
||||
using Learun.Util;
|
||||
using Learun.Util.SqlSugar;
|
||||
@ -14,6 +15,7 @@ using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Web.Http;
|
||||
using static Learun.Application.TwoDevelopment.ZZDT_EC.GlobalEnum;
|
||||
using static Learun.Application.TwoDevelopment.ZZDT_EC.IO_WorkFlowService;
|
||||
|
||||
namespace Learun.Application.Web.AppApi
|
||||
@ -236,6 +238,129 @@ namespace Learun.Application.Web.AppApi
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 找到某一个预分配箱子 附近的某一个箱子
|
||||
/// <param name="frameLists"/>
|
||||
/// <param name="allPanel"/>
|
||||
/// <param name="IOTypeOnCable">Digital,4-20mA,10v,pt100,pulse</param>
|
||||
/// <param name="PreAssignPanelID"/>
|
||||
/// </summary>
|
||||
|
||||
private ec_PanelEntity FindPanelNearby(List<FrameBll.FrameList> frameLists, List<ec_PanelEntity> allPanel, List<ec_enginedata_propertyEntity> allPanelProps
|
||||
, string IOTypeOnCable, string PreAssignPanelID)
|
||||
{
|
||||
//当前预分配的箱子的位置
|
||||
var AssignPanelProps = allPanelProps.Where(x => x.EngineDataID == PreAssignPanelID).ToList();
|
||||
var AssignPanelX = AssignPanelProps.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)
|
||||
{
|
||||
// 小于400,我几乎可以认为此时肋位号用的是m这个单位。因为如果用的是mm,400mm的肋位号似乎也太小了。
|
||||
AssignPanelXValue = 1000 * AssignPanelXValue; // 转成mm
|
||||
}
|
||||
var AssignPanelXOff = AssignPanelProps.FirstOrDefault(x => x.PropertyName == GlobalObject.propName_FrameOff)?.PropertyValue;
|
||||
|
||||
var AssignPanelY = AssignPanelProps.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;
|
||||
}
|
||||
/// <summary>
|
||||
/// 自动分配通道(点表信号自动分配)
|
||||
/// </summary>
|
||||
/// <param name="projId"></param>
|
||||
/// <param name="AcceptUnmatchedPanel">如果没有匹配的采集箱,则提示“未找到具有XX类型的采集箱,请新增后再次分配,是否取消自动分配进程?</param>
|
||||
/// <returns></returns>
|
||||
public IHttpActionResult AutoAssignCable2Channel(string projId, bool AcceptUnmatchedPanel)
|
||||
{
|
||||
#region 数据准备
|
||||
var cbll = new ec_CableBLL();
|
||||
var panelTable = ProjectSugar.TableName<ec_PanelEntity>(projId);
|
||||
var stripTable = ProjectSugar.TableName<ec_PanelStripEntity>(projId);
|
||||
#endregion
|
||||
#region 先要知道有哪些待分配的信号
|
||||
|
||||
var cablesNeedAssigned = cbll.GetCablesPreAssign(projId, true);
|
||||
|
||||
#endregion
|
||||
//涉及到哪些箱子
|
||||
var panelsNeed = SqlSugarHelper.Db.Queryable<ec_PanelEntity>().AS(panelTable).
|
||||
Where(x => cablesNeedAssigned.Select(xx => xx.PanelID).Contains(x.PanelID)).ToList();
|
||||
var stripsNeed = SqlSugarHelper.Db.Queryable<ec_PanelStripEntity>().AS(stripTable).
|
||||
Where(x => panelsNeed.Select(xx => xx.PanelID).Contains(x.PanelID)).
|
||||
ToList();
|
||||
#region 1.1判断(信号预分配选择的采集箱可能并没有该电缆需要的信号类型)
|
||||
var cablesNotMatchIO = cablesNeedAssigned.Where(x => !x.IOTypeMatch).ToList(); // GetCablesPreAssign 查询时已经处理过io是否匹配了
|
||||
if (cablesNotMatchIO != null && cablesNotMatchIO.Count > 0)
|
||||
{
|
||||
if (!AcceptUnmatchedPanel)//允许进行
|
||||
{
|
||||
//???
|
||||
}
|
||||
else
|
||||
{
|
||||
//不继续自动分配,中断进程,等添加完正确的模块后再继续自动分配
|
||||
return Fail("等电缆的预分配IO类型和其预分配的采集箱的IO类型无法匹配。等添加完正确的模块后再继续自动分配。");
|
||||
|
||||
}
|
||||
}
|
||||
#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
|
||||
return Success("自动关联完成");
|
||||
}
|
||||
/// <summary>
|
||||
/// 把电缆分配到空余的模块的通道上。
|
||||
/// </summary>
|
||||
/// <param name="projId"></param>
|
||||
|
@ -1,4 +1,5 @@
|
||||
using Learun.Application.TwoDevelopment.ZZDT_EC;
|
||||
using Learun.Application.TwoDevelopment.ZZDT_EC.Frame;
|
||||
using Learun.Util;
|
||||
using Learun.Util.SqlSugar;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
@ -54,36 +55,11 @@ namespace Learun.Application.Web.AppApi
|
||||
return Fail("找不到基点这个对象类型。");
|
||||
}
|
||||
#region frame
|
||||
List<FrameList> frameLists = new List<FrameList>();
|
||||
frameLists.Add(new FrameList()
|
||||
{ Num = "", Value = 0 });
|
||||
var settings = new ec_projectSettingsBLL();
|
||||
var ec_dataitemBLL = new ec_dataitemBLL();
|
||||
|
||||
var FrameListFlg = settings.GetEntity(GlobalObject.projSetting_enumlist_Frame, ProjectId);
|
||||
|
||||
if (FrameListFlg != null)
|
||||
var frameBll = new FrameBll();
|
||||
var frameLists = frameBll.GetFrameList(ProjectId);
|
||||
if (frameLists == null)
|
||||
{
|
||||
|
||||
var FrameDetail = ec_dataitemBLL.GetDetailList(FrameListFlg.SettingValue, "", ProjectId, false);
|
||||
if (FrameDetail == null)
|
||||
{
|
||||
return Fail("项目数据字典中,没有找到【肋位号】的下拉项中。");// 或者 无法从数据字典中找到对应的那个下拉
|
||||
}
|
||||
foreach (var item in FrameDetail)
|
||||
{
|
||||
double value;
|
||||
if (double.TryParse(item.DataItemCode, out value))
|
||||
{
|
||||
frameLists.Add(new FrameList() { Num = item.DataItemName, Value = value });
|
||||
}
|
||||
}
|
||||
|
||||
frameLists = frameLists.OrderBy(t => t.Value).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
return Fail("项目设置中(projectSettings表),没有找到【肋位号】的设置项。");// 或者 无法从数据字典中找到对应的那个下拉
|
||||
return Fail("项目数据字典中,没有找到【肋位号】的下拉项中。");// 或者 无法从数据字典中找到对应的那个下拉
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -361,40 +337,21 @@ namespace Learun.Application.Web.AppApi
|
||||
[HttpGet]
|
||||
public IHttpActionResult GetFrameList(string ProjectId)
|
||||
{
|
||||
var ec_dataitemBLL = new ec_dataitemBLL();
|
||||
var settings = new ec_projectSettingsBLL();
|
||||
|
||||
var FrameListFlg = settings.GetEntity(GlobalObject.projSetting_enumlist_Frame, ProjectId);
|
||||
|
||||
if (FrameListFlg != null)
|
||||
var bll = new FrameBll();
|
||||
var res = bll.GetFrameList(ProjectId);
|
||||
if (res == null)
|
||||
{
|
||||
List<FrameList> frameLists = new List<FrameList>();
|
||||
return Fail("项目设置中(projectSettings表),没有找到【肋位号】的设置项中,对应的那个下拉。");// 或者 无法从数据字典中找到对应的那个下拉
|
||||
|
||||
|
||||
var res = ec_dataitemBLL.GetDetailList(FrameListFlg.SettingValue, "", ProjectId, false);
|
||||
if (res == null)
|
||||
{
|
||||
return Fail("项目设置中(projectSettings表),没有找到【肋位号】的设置项中,对应的那个下拉。");// 或者 无法从数据字典中找到对应的那个下拉
|
||||
}
|
||||
foreach (var item in res)
|
||||
{
|
||||
double value;
|
||||
if (double.TryParse(item.DataItemCode, out value))
|
||||
{
|
||||
frameLists.Add(new FrameList() { Num = item.DataItemName, Value = value });
|
||||
}
|
||||
}
|
||||
|
||||
frameLists = frameLists.OrderBy(t => t.Value).ToList();
|
||||
return Success(frameLists);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Fail("项目设置中(projectSettings表),没有找到【肋位号】的设置项。");// 或者 无法从数据字典中找到对应的那个下拉
|
||||
return Success(res);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 根据ObjectTypeID,查绘制布置图时的图例
|
||||
/// </summary>
|
||||
@ -467,20 +424,6 @@ namespace Learun.Application.Web.AppApi
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 肋位号
|
||||
/// </summary>
|
||||
public class FrameList
|
||||
{
|
||||
/// <summary>
|
||||
/// 号
|
||||
/// </summary>
|
||||
public string Num { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 值。单位是m
|
||||
/// </summary>
|
||||
public double Value { get; set; }
|
||||
}
|
||||
|
||||
}
|
@ -28,6 +28,7 @@ using System.Text.RegularExpressions;
|
||||
using System.Web.Helpers;
|
||||
using System.Web.Mvc;
|
||||
using static Learun.Application.TwoDevelopment.ZZDT_EC.ec_enginedata_pixelService;
|
||||
using static Learun.Application.TwoDevelopment.ZZDT_EC.GlobalEnum;
|
||||
using SystemIO = System.IO;
|
||||
|
||||
namespace Learun.Application.Web.Areas.ZZDT_EC.Controllers
|
||||
|
File diff suppressed because one or more lines are too long
@ -274,6 +274,7 @@
|
||||
<Compile Include="ZZDT_EC\ec_operate_log\ec_operate_logIBLL.cs" />
|
||||
<Compile Include="ZZDT_EC\ec_operate_log\ec_operate_logBLL.cs" />
|
||||
<Compile Include="ZZDT_EC\ec_Wire_Group\signalGroup.cs" />
|
||||
<Compile Include="ZZDT_EC\Frame\FrameBll.cs" />
|
||||
<Compile Include="ZZDT_EC\GlobalEnum.cs" />
|
||||
<Compile Include="ZZDT_EC\GlobalObject.cs" />
|
||||
<Compile Include="ZZDT_EC\ec_template_catalogue\ec_template_catalogueEntity.cs" />
|
||||
|
@ -0,0 +1,64 @@
|
||||
using DocumentFormat.OpenXml.Bibliography;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Learun.Application.TwoDevelopment.ZZDT_EC.Frame
|
||||
{
|
||||
public class FrameBll
|
||||
{
|
||||
/// <summary>
|
||||
/// 肋位号
|
||||
/// </summary>
|
||||
public class FrameList
|
||||
{
|
||||
/// <summary>
|
||||
/// 号
|
||||
/// </summary>
|
||||
public string Num { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 值。单位是m
|
||||
/// </summary>
|
||||
public double Value { get; set; }
|
||||
}
|
||||
public List<FrameList> GetFrameList(string ProjectId)
|
||||
{
|
||||
var ec_dataitemBLL = new ec_dataitemBLL();
|
||||
var settings = new ec_projectSettingsBLL();
|
||||
|
||||
var FrameListFlg = settings.GetEntity(GlobalObject.projSetting_enumlist_Frame, ProjectId);
|
||||
|
||||
if (FrameListFlg != null)
|
||||
{
|
||||
List<FrameList> frameLists = new List<FrameList>();
|
||||
|
||||
|
||||
var res = ec_dataitemBLL.GetDetailList(FrameListFlg.SettingValue, "", ProjectId, false);
|
||||
if (res == null)
|
||||
{
|
||||
return null;// 或者 无法从数据字典中找到对应的那个下拉
|
||||
}
|
||||
foreach (var item in res)
|
||||
{
|
||||
double value;
|
||||
if (double.TryParse(item.DataItemCode, out value))
|
||||
{
|
||||
frameLists.Add(new FrameList() { Num = item.DataItemName, Value = value });
|
||||
}
|
||||
}
|
||||
|
||||
frameLists = frameLists.OrderBy(t => t.Value).ToList();
|
||||
return frameLists;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;// 或者 无法从数据字典中找到对应的那个下拉
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -246,7 +246,51 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
||||
|
||||
//剩下的感觉都可以是set上的参数?
|
||||
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 (IOsOnPanel.Contains(set.IOType.ToString()))
|
||||
{
|
||||
set.IOTypeMatch = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
set.IOTypeMatch = false;
|
||||
}
|
||||
#endregion
|
||||
var wires = Wires.Where(x => x.CableSetID == set.CableSetID);
|
||||
set.Wires = wires.ToList();
|
||||
}
|
||||
|
@ -129,6 +129,16 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
||||
|
||||
#region 扩展字段
|
||||
/// <summary>
|
||||
/// 根据<see cref="PreAssignInOrOut"/> 和 <see cref="ec_CableEntity.PreAssignIOType"/> 算出来的(比如4-20mA + 输入)得到AI
|
||||
/// </summary>
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public GlobalEnum.IOType IOType { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public bool IOTypeMatch { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
|
Loading…
x
Reference in New Issue
Block a user