This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1,282 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTS.Common.Enums.Hardware;
using DTS.Common.Interface.DASFactory.Diagnostics.HardwareList;
namespace HardareList.Model
{
public class SLICE6TreeNode : DTS.Common.Base.BasePropertyChanged, ISLICE6TreeNode
{
/// <summary>
/// Id in DAS table in db
/// </summary>
public int DASId { get; set; }
/// <summary>
/// serial number for given das
/// </summary>
public string SerialNumber { get; set; }
/// <summary>
/// port on the S6DB
/// </summary>
public int Port { get; set; }
/// <summary>
/// string version of the port, this is just here for easier converting of invalid values
/// </summary>
public string PortString => Port < 0 ? "---" : Port.ToString();
/// <summary>
/// the order of the das on the S6DB
/// </summary>
public int Number { get; set; }
/// <summary>
/// the order on the chain on a given port
/// </summary>
public int PositionOnChain { get; set; }
/// <summary>
/// string version of PositionOnChain, just for easier converting of invalid values
/// </summary>
public string PositionOnChainString => PositionOnChain < 0 ? "---" : PositionOnChain.ToString();
public SLICE6TreeNode(int dasId, string serialNumber, int port, int number, int positionOnChain)
{
DASId = dasId;
SerialNumber = serialNumber;
Port = port;
Number = number;
PositionOnChain = positionOnChain;
}
/// <summary>
/// returns all S6 that are not associated with a given S6DB
/// </summary>
/// <param name="serialNumberParent"></param>
/// <returns></returns>
public static ISLICE6TreeNode[] GetAvailableTreeNodes(string serialNumberParent)
{
var nodes = new List<ISLICE6TreeNode>();
if (string.IsNullOrWhiteSpace(serialNumberParent))
{
return nodes.ToArray();
}
using (var cmd = DTS.Common.Storage.DbOperations.GetSQLCommand())
{
try
{
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = $"SELECT [DASId], [SerialNumber], [PositionOnDistributor], [PositionOnChain], [Port] FROM [DAS] WHERE [ParentDAS]<>@ParentDAS AND [Type]={(int)HardwareTypes.SLICE6_Base} AND [Position] <> 'Prototype'";
cmd.Parameters.Add(
new System.Data.SqlClient.SqlParameter("@ParentDAS", System.Data.SqlDbType.NVarChar, 50)
{ Value = serialNumberParent });
var reader = cmd.ExecuteReader();
while (reader.Read())
{
var dasId = Convert.ToInt32(reader["DASId"]);
var serialNumber = Convert.ToString(reader["SerialNumber"]);
var positionOnDistributor = Convert.ToInt32(reader["PositionOnDistributor"]);
var positionOnChain = Convert.ToInt32(reader["PositionOnChain"]);
var port = Convert.ToInt32(reader["Port"]);
nodes.Add(new SLICE6TreeNode(dasId, serialNumber, port, positionOnDistributor, positionOnChain));
}
}
finally
{
cmd.Connection.Dispose();
}
}
nodes.Sort((a, b) => a.SerialNumber.CompareTo(b.SerialNumber));
return nodes.ToArray();
}
/// <summary>
/// returns all SL6 associated with a given S6DB
/// </summary>
/// <param name="serialNumberParent"></param>
/// <returns></returns>
public static ISLICE6TreeNode[] GetTreeNodes(string serialNumberParent)
{
var nodes = new List<ISLICE6TreeNode>();
if (!string.IsNullOrWhiteSpace(serialNumberParent))
{
using (var cmd = DTS.Common.Storage.DbOperations.GetSQLCommand())
{
try
{
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "SELECT [DASId], [SerialNumber], [PositionOnDistributor], [PositionOnChain], [Port] FROM [DAS] WHERE [ParentDAS]=@ParentDAS";
cmd.Parameters.Add(
new System.Data.SqlClient.SqlParameter("@ParentDAS", System.Data.SqlDbType.NVarChar, 50)
{ Value = serialNumberParent });
var reader = cmd.ExecuteReader();
while (reader.Read())
{
var dasId = Convert.ToInt32(reader["DASId"]);
var serialNumber = Convert.ToString(reader["SerialNumber"]);
var positionOnDistributor = Convert.ToInt32(reader["PositionOnDistributor"]);
var positionOnChain = Convert.ToInt32(reader["PositionOnChain"]);
var port = Convert.ToInt32(reader["Port"]);
nodes.Add(new SLICE6TreeNode(dasId, serialNumber, port, positionOnDistributor,
positionOnChain));
}
}
finally
{
cmd.Connection.Dispose();
}
}
nodes.Sort((a, b) => a.Number.CompareTo(b.Number));
}
return nodes.ToArray();
}
/// <summary>
/// swaps the children das from one distributor to another in the db
/// </summary>
public static void SwapNodes(string serialNumberA, string serialNumberB)
{
var listA = new List<int>();
var listB = new List<int>();
using (var sql = DTS.Common.Storage.DbOperations.GetSQLCommand(true))
{
try
{
sql.CommandType = System.Data.CommandType.Text;
sql.CommandText = $"SELECT [DASId], [ParentDAS] FROM [DAS] WHERE [ParentDAS] in (@serialNumberA, @serialNumberB)";
sql.Parameters.Add(new System.Data.SqlClient.SqlParameter("@serialNumberA", System.Data.SqlDbType.NVarChar)
{ Value = serialNumberA });
sql.Parameters.Add(new System.Data.SqlClient.SqlParameter("@serialNumberB", System.Data.SqlDbType.NVarChar)
{ Value = serialNumberB });
var reader = sql.ExecuteReader();
while (reader.Read())
{
var dasId = Convert.ToInt32(reader["DASId"]);
var parentDAS = Convert.ToString(reader["ParentDAS"]).ToUpper();
if (parentDAS == serialNumberA)
{
listA.Add(dasId);
}
else
{
listB.Add(dasId);
}
}
}
finally
{
sql.Connection.Dispose();
}
}
if (listA.Any())
{
Associate(serialNumberB, listA.ToArray());
}
if (listB.Any())
{
Associate(serialNumberB, listB.ToArray());
}
}
/// <summary>
/// associates given das ids with a specific das
/// </summary>
private static void Associate(string parentDAS, int[] dasId)
{
using (var sql = DTS.Common.Storage.DbOperations.GetSQLCommand(true))
{
try
{
sql.CommandType = System.Data.CommandType.Text;
sql.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ParentDAS", System.Data.SqlDbType.NVarChar)
{ Value = parentDAS });
var sb = new StringBuilder();
sb.Append("UPDATE [DAS] SET [ParentDAS]=@ParentDAS WHERE DASId in (");
for (var i = 0; i < dasId.Length; i++)
{
if (i > 0)
{
sb.Append(", ");
}
sb.Append($"@{i + 1}");
sql.Parameters.Add(
new System.Data.SqlClient.SqlParameter($"@{i + 1}", System.Data.SqlDbType.NVarChar, 50)
{ Value = dasId[i] });
}
sb.Append(")");
sql.CommandText = sb.ToString();
sql.ExecuteNonQuery();
}
finally
{
sql.Connection.Dispose();
}
}
}
/// <summary>
/// commits any changes for associations for a S6DB to the Db
/// </summary>
/// <param name="serialNumber">serial number of S6DB</param>
/// <param name="attachedSLICE6">all SL6 that should be associated with S6DB</param>
public static void SaveAssociations(string serialNumber, ISLICE6TreeNode[] attachedSLICE6)
{
//step1, remove all associations, step 2, add any associations needed
using (var sql = DTS.Common.Storage.DbOperations.GetSQLCommand())
{
try
{
sql.CommandType = System.Data.CommandType.Text;
sql.CommandText =
"UPDATE [DAS] SET [IsModule]=0, [PositionOnDistributor]=-1, [PositionOnChain]=-1, [Port]=-1, [ParentDAS]='' WHERE [ParentDAS]=@serialNumber";
sql.Parameters.Add(
new System.Data.SqlClient.SqlParameter("@serialNumber", System.Data.SqlDbType.NVarChar, 50)
{ Value = serialNumber });
sql.ExecuteNonQuery();
}
finally
{
sql.Connection.Dispose();
}
}
//step 2 create new associations
foreach (var slice6 in attachedSLICE6)
{
using (var sql = DTS.Common.Storage.DbOperations.GetSQLCommand())
{
try
{
sql.CommandType = System.Data.CommandType.Text;
sql.CommandText =
"UPDATE [DAS] SET [IsModule]=1, [PositionOnDistributor]=@positionOnDistributor, [PositionOnChain]=@positionOnChain, [Port]=@Port, [ParentDAS]=@serialNumber WHERE [DASId]=@DASId";
sql.Parameters.Add(
new System.Data.SqlClient.SqlParameter("@serialNumber", System.Data.SqlDbType.NVarChar, 50)
{ Value = serialNumber });
sql.Parameters.Add(
new System.Data.SqlClient.SqlParameter("@positionOnDistributor", System.Data.SqlDbType.Int)
{ Value = slice6.Number });
sql.Parameters.Add(
new System.Data.SqlClient.SqlParameter("@positionOnChain", System.Data.SqlDbType.Int)
{ Value = slice6.PositionOnChain });
sql.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Port", System.Data.SqlDbType.Int)
{ Value = slice6.Port });
sql.Parameters.Add(new System.Data.SqlClient.SqlParameter("@DASId", System.Data.SqlDbType.Int)
{ Value = slice6.DASId });
sql.ExecuteNonQuery();
}
finally
{
sql.Connection.Dispose();
}
}
}
}
}
}