TEMP
This commit is contained in:
parent
b84f7d9d0f
commit
dc8b37ca6e
@ -53,6 +53,9 @@ namespace Learun.Application.Web.AppApi
|
|||||||
/// <param name="iOType"></param>
|
/// <param name="iOType"></param>
|
||||||
private ec_PanelStripEntity CreatePanelStripByProfile2(string projId, string TSname, string panelId, GlobalEnum.IOType iOType)
|
private ec_PanelStripEntity CreatePanelStripByProfile2(string projId, string TSname, string panelId, GlobalEnum.IOType iOType)
|
||||||
{
|
{
|
||||||
|
var setTb = ProjectSugar.TableName<ec_projectSettingsEntity>(projId);
|
||||||
|
var allSettings = SqlSugarHelper.Db.Queryable<ec_projectSettingsEntity>().AS(setTb).ToList();
|
||||||
|
//IO_CardProfile
|
||||||
return new ec_PanelStripEntity();
|
return new ec_PanelStripEntity();
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -525,7 +528,16 @@ namespace Learun.Application.Web.AppApi
|
|||||||
|
|
||||||
var signalTb = ProjectSugar.TableName<ec_Wire_GroupEntity>(projId);
|
var signalTb = ProjectSugar.TableName<ec_Wire_GroupEntity>(projId);
|
||||||
var allSignals = SqlSugarHelper.Db.Queryable<ec_Wire_GroupEntity>().AS(signalTb).ToList();
|
var allSignals = SqlSugarHelper.Db.Queryable<ec_Wire_GroupEntity>().AS(signalTb).ToList();
|
||||||
|
|
||||||
|
var connTb = ProjectSugar.TableName<ec_WireTerminalEntity>(projId);
|
||||||
|
var termTb = ProjectSugar.TableName<ec_PanelStripTermEntity>(projId);
|
||||||
|
var allConnedTerms = SqlSugarHelper.Db.Queryable<ec_WireTerminalEntity>().AS(connTb)
|
||||||
|
.InnerJoin<ec_PanelStripTermEntity>((a, b) => a.TermID == b.TermID).AS<ec_PanelStripTermEntity>(termTb)
|
||||||
|
.Select((a, b) => b.ChannelID).Distinct().ToList();
|
||||||
|
|
||||||
|
|
||||||
var allUsedCH = allSignals.Where(x => !string.IsNullOrEmpty(x.ChannelID)).Select(x => x.ChannelID).Distinct().ToList();
|
var allUsedCH = allSignals.Where(x => !string.IsNullOrEmpty(x.ChannelID)).Select(x => x.ChannelID).Distinct().ToList();
|
||||||
|
allUsedCH.AddRange(allConnedTerms);
|
||||||
//??这里有问题。通道是否被占用,需要看signal和set双重(在io分配界面)
|
//??这里有问题。通道是否被占用,需要看signal和set双重(在io分配界面)
|
||||||
//1. 信号有, 电缆set有,占了
|
//1. 信号有, 电缆set有,占了
|
||||||
//2.信号no,电缆set有,占了
|
//2.信号no,电缆set有,占了
|
||||||
@ -588,7 +600,11 @@ namespace Learun.Application.Web.AppApi
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region inputNew
|
#region inputNew
|
||||||
var resIn = AutoAssignCore(GlobalEnum.inOrOut.输入, setsIn, setsSpared);
|
if (setsIn.Count > 0)
|
||||||
|
{
|
||||||
|
var resIn = AutoAssignCore(GlobalEnum.inOrOut.输入, setsIn, setsSpared);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
#region input
|
#region input
|
||||||
//ec_PanelStripEntity curStrip = null;
|
//ec_PanelStripEntity curStrip = null;
|
||||||
@ -724,23 +740,19 @@ namespace Learun.Application.Web.AppApi
|
|||||||
//}
|
//}
|
||||||
#endregion
|
#endregion
|
||||||
#region output
|
#region output
|
||||||
var resOut = AutoAssignCore(GlobalEnum.inOrOut.输出, setsOut, setsSpared);
|
if (setsOut.Count > 0)
|
||||||
|
{
|
||||||
|
var resOut = AutoAssignCore(GlobalEnum.inOrOut.输出, setsOut, setsSpared);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
//in 和 out都会执行这个
|
//in 和 out都会执行这个
|
||||||
bool AutoAssignCore(GlobalEnum.inOrOut inOrOut, List<ec_CableSetEntity> sets, List<ec_CableSetEntity> sets_Spared)
|
bool AutoAssignCore(GlobalEnum.inOrOut inOrOut, List<ec_CableSetEntity> sets, List<ec_CableSetEntity> sets_Spared)
|
||||||
{
|
{
|
||||||
GlobalEnum.IOType ioTypeOnC = default;
|
GlobalEnum.IOType ioTypeOnC = default;
|
||||||
ec_PanelStripEntity curStrip = null;
|
|
||||||
var matchedStrips = curStrips.Where(x => x.IO_TYPE == ioTypeOnC.ToString()).ToList();
|
|
||||||
if (matchedStrips != null && lastUsedStrip != null && lastUsedStrip.IO_TYPE == ioTypeOnC.ToString())
|
|
||||||
{
|
|
||||||
//1.2.2 优先使用上一个模块,直到模块满了再用下一个模块。
|
|
||||||
matchedStrips.Insert(0, lastUsedStrip);
|
|
||||||
}
|
|
||||||
string PanelName = cable.AssignedPanel.TagNumber;//当前电缆预分配的箱子名称
|
|
||||||
switch (cable.PreAssignIOType.ToLower())
|
switch (cable.PreAssignIOType.ToLower())
|
||||||
{
|
{
|
||||||
case "digital":
|
case "digital":
|
||||||
@ -779,23 +791,22 @@ namespace Learun.Application.Web.AppApi
|
|||||||
//通讯类 485 422啥的
|
//通讯类 485 422啥的
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ec_PanelStripEntity curStrip = null;
|
||||||
|
var matchedStrips = curStrips.Where(x => x.IO_TYPE == ioTypeOnC.ToString()).ToList();
|
||||||
|
if (matchedStrips != null && lastUsedStrip != null && lastUsedStrip.IO_TYPE == ioTypeOnC.ToString())
|
||||||
|
{
|
||||||
|
//1.2.2 优先使用上一个模块,直到模块满了再用下一个模块。
|
||||||
|
matchedStrips.Insert(0, lastUsedStrip);
|
||||||
|
}
|
||||||
|
string PanelName = cable.AssignedPanel.TagNumber;//当前电缆预分配的箱子名称
|
||||||
if (sets.Count == 0)
|
if (sets.Count == 0)
|
||||||
{
|
{
|
||||||
//相当于没有
|
//相当于没有
|
||||||
}
|
}
|
||||||
//else if (sets.Count + setsSpared.Count() > 10)
|
|
||||||
//{
|
|
||||||
|
|
||||||
|
|
||||||
//}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var totalSets = sets.Count + setsSpared.Count();
|
var totalSets = sets.Count + setsSpared.Count();
|
||||||
//另外如果电缆对数大于10对,即像12*2*0.75这种,无论它预分配了多少根电缆对,永远预留4个以下的空白通道。
|
|
||||||
//意思就是一个模块里面够4个或4个以上空白通道就留4个空白通道,
|
|
||||||
//如果不够4个就留4个以下即可。
|
|
||||||
|
|
||||||
|
|
||||||
//1.2 流程图 箱子里是否已经存在端子排(io匹配)
|
//1.2 流程图 箱子里是否已经存在端子排(io匹配)
|
||||||
|
|
||||||
bool alreadyInsertNewTs = false;
|
bool alreadyInsertNewTs = false;
|
||||||
@ -822,7 +833,7 @@ namespace Learun.Application.Web.AppApi
|
|||||||
{
|
{
|
||||||
//1.2.3 (1) 非通讯,如果空的通道大于整个模块的5%,则可以利用,利用到小于5%了则停止利用,如果本身空通道数占的比例就小于5%,则不利用。
|
//1.2.3 (1) 非通讯,如果空的通道大于整个模块的5%,则可以利用,利用到小于5%了则停止利用,如果本身空通道数占的比例就小于5%,则不利用。
|
||||||
|
|
||||||
curStrip = FindNextAvailableTS(matchedStrips, allUsedCH);
|
curStrip = FindNextAvailableTS(cable.Sets.Count,totalSets, matchedStrips, allUsedCH);
|
||||||
|
|
||||||
if (curStrip == null)
|
if (curStrip == null)
|
||||||
{
|
{
|
||||||
@ -846,7 +857,7 @@ namespace Learun.Application.Web.AppApi
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//相当于前面5%的判断过了,但是呢放不下所有需要的set
|
//相当于前面5%的判断过了,但是呢放不下所有需要的set
|
||||||
var newTS = CreatePanelStripByProfile2(projId, "TS_" + ioTypeOnC.ToString() + "_" + newTSSeq++, curPanelId, ioTypeOnC);
|
var newTS = CreatePanelStripByProfile2(projId, "TS_" + ioTypeOnC.ToString() + "_" + newTSSeq++, curPanelId, ioTypeOnC);
|
||||||
alreadyInsertNewTs = true;
|
alreadyInsertNewTs = true;
|
||||||
@ -862,31 +873,23 @@ namespace Learun.Application.Web.AppApi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
lastUsedStrip = curStrip;
|
lastUsedStrip = curStrip;
|
||||||
//能放下
|
|
||||||
if (cable.Sets.Count > 10)
|
for (int i = 0; i < sets.Count; i++)
|
||||||
{
|
{
|
||||||
//另外如果电缆对数大于10对,即像12*2*0.75这种,无论它预分配了多少根电缆对,永远预留4个以下的空白通道。意思就是一个模块里面够4个或4个以上空白通道就留4个空白通道,如果不够4个就留4个以下即可
|
var set = sets[i];
|
||||||
|
var ch = notUsedChs[i];
|
||||||
|
set.ConnectionInfo = $"采集箱:{PanelName}/模块(端子排):{curStrip.StripName}/通道:{ch.ChannelName}";
|
||||||
|
//更新全局已使用通道
|
||||||
|
allUsedCH.Add(ch.ChannelID);
|
||||||
}
|
}
|
||||||
else
|
var chOffIdx = sets.Count;
|
||||||
|
for (int i = 0; i < setsSpared.Count(); i++)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < sets.Count; i++)
|
var set = setsSpared[i];
|
||||||
{
|
var ch = notUsedChs[chOffIdx + i];
|
||||||
var set = sets[i];
|
set.ConnectionInfo = $"采集箱:{PanelName}/模块(端子排):{curStrip.StripName}/通道:{ch.ChannelName}/冗余";
|
||||||
var ch = notUsedChs[i];
|
//更新全局已使用通道
|
||||||
set.ConnectionInfo = $"采集箱:{PanelName}/模块(端子排):{curStrip.StripName}/通道:{ch.ChannelName}";
|
allUsedCH.Add(ch.ChannelID);
|
||||||
//更新全局已使用通道
|
|
||||||
allUsedCH.Add(ch.ChannelID);
|
|
||||||
}
|
|
||||||
var chOffIdx = sets.Count;
|
|
||||||
for (int i = 0; i < setsSpared.Count(); i++)
|
|
||||||
{
|
|
||||||
var set = setsSpared[i];
|
|
||||||
var ch = notUsedChs[chOffIdx + i];
|
|
||||||
set.ConnectionInfo = $"采集箱:{PanelName}/模块(端子排):{curStrip.StripName}/通道:{ch.ChannelName}/冗余";
|
|
||||||
//更新全局已使用通道
|
|
||||||
allUsedCH.Add(ch.ChannelID);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -908,10 +911,11 @@ namespace Learun.Application.Web.AppApi
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 找到下一个可用的端子排
|
/// 找到下一个可用的端子排
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="setCount">电缆总set</param>
|
||||||
/// <param name="TSs">所有的端子排</param>
|
/// <param name="TSs">所有的端子排</param>
|
||||||
/// <param name="allUsedCH">使用过的channelId</param>
|
/// <param name="allUsedCH">使用过的channelId</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private ec_PanelStripEntity FindNextAvailableTS(List<ec_PanelStripEntity> TSs, List<string> allUsedCH)
|
private ec_PanelStripEntity FindNextAvailableTS(int setCount,int setPreAssigned, List<ec_PanelStripEntity> TSs, List<string> allUsedCH)
|
||||||
{
|
{
|
||||||
foreach (var TS in TSs)
|
foreach (var TS in TSs)
|
||||||
{
|
{
|
||||||
@ -921,14 +925,25 @@ namespace Learun.Application.Web.AppApi
|
|||||||
|
|
||||||
|
|
||||||
double sparedRate = notUsedChs.Count * 1.0 / validChs.Count * 1.0;
|
double sparedRate = notUsedChs.Count * 1.0 / validChs.Count * 1.0;
|
||||||
if (sparedRate < 0.05)
|
if (sparedRate < 0.05 || notUsedChs.Count < setPreAssigned)
|
||||||
{
|
{
|
||||||
//没有空闲通道 next
|
//没有空闲通道 next
|
||||||
|
//或者空闲通道不够放下这个电缆的所有set
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TS.Channels = validChs.OrderBy(X => X.Channel_Seq).ToList();
|
TS.Channels = validChs.OrderBy(X => X.Channel_Seq).ToList();
|
||||||
var seq = TSs.IndexOf(TS);
|
var seq = TSs.IndexOf(TS);
|
||||||
|
|
||||||
|
if (setCount > 10)
|
||||||
|
{
|
||||||
|
//另外如果电缆对数大于10对,即像12 * 2 * 0.75这种,无论它预分配了多少根电缆对,永远预留4个以下的空白通道。意思就是一个模块里面够4个或4个以上空白通道就留4个空白通道,如果不够4个就留4个以下即可。
|
||||||
|
if (notUsedChs.Count < 4)
|
||||||
|
{
|
||||||
|
//没有足够的空闲通道 next
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
return TS;//找到了
|
return TS;//找到了
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user