using CirculateTool.Attribute; using WcsMain.Business.Convey.HistoryDataHandler; using WcsMain.DataBase.Dao; using WcsMain.DataBase.TableEntity; using WcsMain.DataService; using WcsMain.Enum.General; using WcsMain.EquipOperation.Convey; namespace WcsMain.Business.CirculationTask.Convey; /// /// 箱式线读取扫码信息 /// [Circulation] public class ReadScanCode(AppRouterMethodDao routerMethodDao, ConveyOperation conveyOperation, HistoryConveyDataHander historyConveyDataHandler, AppScanRecordDao scanRecordDao, DataBaseData dataBaseData) { private static List? _routers; /// /// 读取扫码数据 /// /// [Circulation("读取扫码数据", 300)] public bool ReadData() { if(_routers == null) { _routers = routerMethodDao.Query(new AppRouterMethod() { RouterStatus = (int)TrueFalseEnum.TRUE }); return true; } List tasks = []; tasks.AddRange(_routers.Select(router => Task.Factory.StartNew(() => { var (readErrText, scanOk, code) = conveyOperation.ReadScanInfo(router.Area); if (!string.IsNullOrEmpty(readErrText)) { ConsoleLog.Exception($"【异常】读取扫码:{router.Area} 数据异常,信息:{readErrText}"); Thread.Sleep(5000); return; // 不读了,估计网断了 } if (scanOk != (short)TrueFalseEnum.TRUE) return; var clearErrText = conveyOperation.ClearScanStatus(router.Area); if (!string.IsNullOrEmpty(clearErrText)) { ConsoleLog.Exception($"【异常】扫码:{router.Area} 清理读码信号异常,信息:{clearErrText}"); } else { ConsoleLog.Success($"扫码:{router.Area} 清理读码信号成功,点位:{router.Area}"); } historyConveyDataHandler.GetData("-", code, router.Area ?? ""); scanRecordDao.Insert(new AppScanRecord() { RecordId = dataBaseData.GetNewUUID2(), ScanId = router.Area, Code = code, ScanTime = DateTime.Now }); }))); Task.WaitAll([.. tasks]); return true; } }