114 lines
4.1 KiB
C#
114 lines
4.1 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
public class FaultOptions//HQB 故障信息数据结构
|
||
{
|
||
public class L2Info
|
||
{
|
||
public string L2name = "";//二级现象名称
|
||
public List<string> L2Limitation = new List<string>();//二级现象的互斥
|
||
}
|
||
public class FaultSituationL1
|
||
{
|
||
public string name = "";
|
||
public List<L2Info> dataFaultSituationL2 = new List<L2Info>();
|
||
}
|
||
public class FaultType
|
||
{
|
||
public string name = "";
|
||
public List<FaultSituationL1> dataFaultSituationL1 = new List<FaultSituationL1>();
|
||
}
|
||
public string FaultDevice = "";
|
||
public List<FaultType> dataFaultType = new List<FaultType>();
|
||
|
||
public L2Info GetL2Info(string targetName)
|
||
{
|
||
foreach (var item in dataFaultType)
|
||
{
|
||
foreach (var item1 in item.dataFaultSituationL1)
|
||
{
|
||
foreach (var item2 in item1.dataFaultSituationL2)
|
||
{
|
||
if (item2.L2name.Equals(targetName))
|
||
return item2;
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
return null;
|
||
}
|
||
public (string FaultTypeName, string FaultSituationL1Name) GetFaultInfoByL2Name(string targetName)
|
||
{
|
||
foreach (var faultType in dataFaultType)
|
||
{
|
||
foreach (var faultSituationL1 in faultType.dataFaultSituationL1)
|
||
{
|
||
foreach (var l2Info in faultSituationL1.dataFaultSituationL2)
|
||
{
|
||
if (l2Info.L2name.Equals(targetName))
|
||
{
|
||
return (faultType.name, faultSituationL1.name);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 如果没有找到匹配的L2名称,则返回默认值或抛出异常
|
||
// 这里返回空字符串作为示例,但您可能希望根据实际情况进行处理
|
||
return (string.Empty, string.Empty); // 或者 throw new Exception("L2名称未找到");
|
||
}
|
||
|
||
public FaultOptions GetSelectedFaultOptions(List<string> L2names)
|
||
{
|
||
FaultOptions faultOptions = new FaultOptions();
|
||
List<string> addedFaultType = new List<string>();
|
||
List<string> addedFaultSituationL1 = new List<string>();
|
||
foreach (var item in L2names)
|
||
{
|
||
L2Info l2Info = GetL2Info(item);
|
||
(string FaultTypeName, string FaultSituationL1Name) ff = GetFaultInfoByL2Name(item);
|
||
if (!addedFaultSituationL1.Contains(ff.FaultSituationL1Name) && !addedFaultType.Contains(ff.FaultTypeName))
|
||
{
|
||
faultOptions.dataFaultType.Add(new FaultType
|
||
{
|
||
name = ff.FaultTypeName,
|
||
dataFaultSituationL1 = new List<FaultSituationL1> {
|
||
new FaultSituationL1 { name = ff.FaultSituationL1Name, dataFaultSituationL2 = new List<L2Info>{l2Info } } }
|
||
});
|
||
addedFaultType.Add(ff.FaultTypeName);
|
||
addedFaultSituationL1.Add(ff.FaultSituationL1Name);
|
||
}
|
||
else if (!addedFaultSituationL1.Contains(ff.FaultSituationL1Name))
|
||
{
|
||
foreach (var item1 in faultOptions.dataFaultType)
|
||
{
|
||
if (item1.name == ff.FaultTypeName)
|
||
{
|
||
item1.dataFaultSituationL1.Add(new FaultSituationL1 { name = ff.FaultSituationL1Name, dataFaultSituationL2 = new List<L2Info> { l2Info } });
|
||
}
|
||
}
|
||
addedFaultSituationL1.Add(ff.FaultSituationL1Name);
|
||
}
|
||
else
|
||
{
|
||
foreach (var item1 in faultOptions.dataFaultType)
|
||
{
|
||
if (item1.name == ff.FaultTypeName)
|
||
{
|
||
foreach (var item2 in item1.dataFaultSituationL1)
|
||
{
|
||
if (item2.name == ff.FaultSituationL1Name)
|
||
{
|
||
item2.dataFaultSituationL2.Add(l2Info);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return faultOptions;
|
||
}
|
||
}
|