using CirculateTool.Attribute; using WcsMain.ApiClient.DataEntity.WmsEntity; using WcsMain.Common; using WcsMain.EquipOperation.Stacker; using WcsMain.ExtendMethod; using WcsMain.Plugins; namespace WcsMain.Business.CirculationTask.Stacker; /// /// 上传堆垛机可用状态给wms /// [Circulation] public class UploadStackerStatus(StackerOperation stackerOperation, WmsWebApiPost wmsWebApiPost) { List StackerNotOpen = []; [Circulation("上传堆垛机报错状态给WMS")] public bool Uplaod() { List uploadStackerStatusRequests = []; // 需要上报给WMS的状态 var allStackers = CommonData.AppStackers; foreach (var stacker in allStackers) { if(!StackerNotOpen.Contains(stacker.StackerId)) { /* 检查堆垛机是否开放 */ var canUse = stacker.StackerStatus; if (canUse == null || canUse == 0) { StackerNotOpen.Add(stacker.StackerId); uploadStackerStatusRequests.Add(new UploadStackerStatusRequest { Equipment = stacker.StackerId, Error = 1, }); continue; } } /* 检查设备是否可用 ---- 从设备通讯拉取 */ Thread.Sleep(200); var (errMsg, stackerInfo) = stackerOperation.GetStackerInfo((int)stacker.StackerId!); if (!string.IsNullOrEmpty(errMsg) || stackerInfo == null) // 报错 { uploadStackerStatusRequests.Add(new UploadStackerStatusRequest { Equipment = stacker.StackerId, Error = 1, }); continue; } int canUse2 = (stackerInfo.ErrCode == 0 && stackerInfo.ControlModel == Enum.Stacker.StackerControlModeEnum.online && stackerInfo.StackerStatus != Enum.Stacker.StackerStatusEnum.offline) ? 1 : 0; uploadStackerStatusRequests.Add(new UploadStackerStatusRequest { Equipment = stacker.StackerId, Error = canUse2 == 0 ? 1 : 0, }); } // 上报 WMS wmsWebApiPost.HttpPost, WmsResponse>(uploadStackerStatusRequests, CommonData.AppApiBaseInfos.GetAddress("uploadStackerStatus") ?? "", time: 500, executeAction: false); return true; } }