将 StandardScene 各插件的配置/监控窗体从 WinForms 迁移到 CycleGUI(删除 .Designer.cs/.resx,重写为 PanelBuilder 立即模式 UI,新增 CycleUiHelper 统一对话框)。 同时修复代码审核中的问题: - 后台文件写入加锁 + try/catch(ButtonBoxManager / DoorManager,对齐 LoopViewer.SaveTasks 模式) - CoderFieldsMetadata.cs 启用 #nullable enable,消除 CS8632 警告 - DummyCar 移除已废弃的 rightClickAction()/SetPosition() - CarRemoteHelper.OpenVehicleWebPage 的 Process.Start 加 try/catch - 重命名名不副实的 Mstsc()(现为打开网页) - 统一弃元命名为 _ - TrafficInterlockViewer 改用稳定 Id(GUID)做选择/编辑,替代行索引 - csproj 改用 $(CGUILibDir) 解析 CycleGUI,绝对路径收敛到 Directory.Build.props 构建:dotnet build StandardScene.sln → 0 错误,30 警告(均为历史遗留)。 注:static 单例状态重构(审核第 8 项)暂未处理,留待单独任务。
50 lines
1.9 KiB
C#
50 lines
1.9 KiB
C#
using System;
|
|
using System.Linq;
|
|
using StandardScene.Utils;
|
|
using Newtonsoft.Json;
|
|
using SimpleCore;
|
|
using SimpleLite.CADTools;
|
|
using SimpleLite.RCS.CarTypes;
|
|
using StandardScene;
|
|
using StandardScene.Model;
|
|
|
|
namespace StandardScene.QrLidar.Cad
|
|
{
|
|
/// <summary>
|
|
/// 扫描全图带 tag 的站点生成二维码地图(码值 → 坐标/角度),写入 <see cref="ApiController.QrMap"/>
|
|
/// 供 <c>/api/QrMap</c> 下发,并通知带 QrCar 标记的在线车辆刷新。
|
|
/// 自 Core StandardCADTool.cs 迁入(scene.qrlidar 平台专属能力)。
|
|
/// </summary>
|
|
[CADToolDescriptor(name = "同步二维码地图到小车")]
|
|
public class SyncQrMap : CADTool
|
|
{
|
|
public override async void Invoke()
|
|
{
|
|
var tagSites = SimpleLib.GetAllSites().Where(p => p.fields.ContainsKey("tag"));
|
|
ApiController.QrMap.Clear();
|
|
foreach (var tagSite in tagSites)
|
|
{
|
|
var tag = int.Parse(tagSite.fields["tag"]);
|
|
var tagX = tagSite.x;
|
|
var tagY = tagSite.y;
|
|
var tagTh = tagSite.fields.TryGetValue("th", out var field) ? float.Parse(field) : 0f;
|
|
if (ApiController.QrMap.ContainsKey(tag))
|
|
{
|
|
CycleUiHelper.Alert("错误", $@"存在重复码值:{tag} 站点id为:{tagSite.id}");
|
|
return;
|
|
}
|
|
|
|
ApiController.QrMap[tag] = (tagX, tagY, tagTh);
|
|
}
|
|
|
|
ApiController.QrMapJson = JsonConvert.SerializeObject(ApiController.QrMap);
|
|
var qrCars = SimpleLib.GetAllCars().Where(p => p.fields.ContainsKey("QrCar"));
|
|
foreach (var qrCar in qrCars)
|
|
{
|
|
if(Commons.GetVehicleStatus((Car)qrCar) is VehicleStatus.Normal or VehicleStatus.NeedInit)
|
|
((ClumsyCar)qrCar).ImmediateCommand("pilot.GetUpdateQrMap()");
|
|
}
|
|
}
|
|
}
|
|
}
|