new_10009_YanCheng_Metrology/Assets/Template/Scripts/HQB/Fault/FaultOptions.cs

114 lines
4.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}