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