283 lines
12 KiB
C#
283 lines
12 KiB
C#
|
|
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();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|