fix: GetCarStateInfo 空引用与枚举解析
holdingLocks/blockedBy/enums 为空时不再抛异常,CurrNodeCode 在无站点时返回 0。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2580,7 +2580,6 @@ namespace StandardScene
|
||||
);
|
||||
}
|
||||
|
||||
var carId = singleCar.id;
|
||||
var alarmsList = new List<CarAlarm>();
|
||||
if (
|
||||
singleCar.status.enums.ContainsKey("AlarmInfo")
|
||||
@@ -2599,16 +2598,18 @@ namespace StandardScene
|
||||
}
|
||||
}
|
||||
|
||||
var currentSite = SimpleLib.GetSite(singleCar.status.holdingLocks.FirstOrDefault());
|
||||
var blockedBy = singleCar.status.blockedBy.ToHashSet();
|
||||
var holdingLocks = singleCar.status.holdingLocks;
|
||||
var currentSite = SimpleLib.GetSite(holdingLocks?.FirstOrDefault() ?? 0);
|
||||
var blockedBy = (singleCar.status.blockedBy ?? Array.Empty<(int, int)>())
|
||||
.ToHashSet();
|
||||
List<BlockedByItem> blockedByItems = new List<BlockedByItem>();
|
||||
for (int i = 0; i < blockedBy.Count; i++)
|
||||
foreach (var pair in blockedBy)
|
||||
{
|
||||
blockedByItems.Add(
|
||||
new BlockedByItem
|
||||
{
|
||||
CarCode = blockedBy.ElementAt(i).Item1.ToString(),
|
||||
Type = blockedBy.ElementAt(i).Item2
|
||||
CarCode = pair.Item1.ToString(),
|
||||
Type = pair.Item2
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -2635,40 +2636,28 @@ namespace StandardScene
|
||||
carState = $"被{string.Join("、", blockerNames)}车交管";
|
||||
}
|
||||
|
||||
var enums = singleCar.status.enums;
|
||||
return new CarStateInfo()
|
||||
{
|
||||
Code = carCode,
|
||||
Name = singleCar.name,
|
||||
CurrState = carState,
|
||||
IsOnline = isOnline,
|
||||
Battery = singleCar.status.enums.ContainsKey("Soc")
|
||||
? int.Parse(singleCar.status.enums["Soc"])
|
||||
: 100,
|
||||
Voltage = singleCar.status.enums.ContainsKey("Voltage")
|
||||
? double.Parse(singleCar.status.enums["Voltage"])
|
||||
: 0,
|
||||
ElectricCurrent = singleCar.status.enums.ContainsKey("ElectricCurrent")
|
||||
? double.Parse(singleCar.status.enums["ElectricCurrent"])
|
||||
: 0,
|
||||
Battery = TryParseEnumInt(enums, "Soc", 100),
|
||||
Voltage = TryParseEnumDouble(enums, "Voltage", 0),
|
||||
ElectricCurrent = TryParseEnumDouble(enums, "ElectricCurrent", 0),
|
||||
X = singleCar.x,
|
||||
Y = singleCar.y,
|
||||
Theta = singleCar.th,
|
||||
Speed = singleCar.status.enums.ContainsKey("ActualLeftWheelVelocity")
|
||||
? double.Parse(
|
||||
SimpleLib.GetCar(carId).status.enums["ActualLeftWheelVelocity"]
|
||||
)
|
||||
: singleCar.speed,
|
||||
//CurrNodeCode = currentSite.fields.ContainsKey("code") ? currentSite.fields["code"] : currentSite.id.ToString(),
|
||||
Load = singleCar.status.enums.TryGetValue("loadStatus", out var statusEnum)
|
||||
? int.Parse(statusEnum)
|
||||
: 0,
|
||||
CurrNodeCode = currentSite.id.ToString(),
|
||||
Speed = TryParseEnumDouble(enums, "ActualLeftWheelVelocity", singleCar.speed),
|
||||
Load = TryParseEnumInt(enums, "loadStatus", 0),
|
||||
CurrNodeCode = currentSite != null ? currentSite.id.ToString() : "0",
|
||||
StartNodeCode = "0",
|
||||
EndNodeCode = "0",
|
||||
StartEdgeCode = "0",
|
||||
EndEdgeCode = "0",
|
||||
HoldingLocks = singleCar.status.holdingLocks.ToList(),
|
||||
PendingLocks = singleCar.status.pendingLocks.ToList(),
|
||||
HoldingLocks = holdingLocks?.ToList() ?? new List<int>(),
|
||||
PendingLocks = singleCar.status.pendingLocks?.ToList() ?? new List<int>(),
|
||||
BlockedBy = blockedByItems,
|
||||
// BlockingTime = singleCar.status.blockingTime.ToString("yyyy-MM-dd HH:mm:ss"),//没有了
|
||||
TrafficMessage = singleCar.status.TCStat.ToString(),
|
||||
@@ -2686,6 +2675,20 @@ namespace StandardScene
|
||||
}
|
||||
}
|
||||
|
||||
static int TryParseEnumInt(IDictionary<string, string> enums, string key, int fallback)
|
||||
{
|
||||
if (enums != null && enums.TryGetValue(key, out var text) && int.TryParse(text, out var value))
|
||||
return value;
|
||||
return fallback;
|
||||
}
|
||||
|
||||
static double TryParseEnumDouble(IDictionary<string, string> enums, string key, double fallback)
|
||||
{
|
||||
if (enums != null && enums.TryGetValue(key, out var text) && double.TryParse(text, out var value))
|
||||
return value;
|
||||
return fallback;
|
||||
}
|
||||
|
||||
public string SwitchCarState(Car car, ref bool isOnline)
|
||||
{
|
||||
string state = "Stopping";
|
||||
|
||||
Reference in New Issue
Block a user