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 { /// /// 扫描全图带 tag 的站点生成二维码地图(码值 → 坐标/角度),写入 /// 供 /api/QrMap 下发,并通知带 QrCar 标记的在线车辆刷新。 /// 自 Core StandardCADTool.cs 迁入(scene.qrlidar 平台专属能力)。 /// [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()"); } } } }