diff --git a/Tools/ApiTool/WebApiPost.cs b/Tools/ApiTool/WebApiPost.cs index 17c395a..489dbc0 100644 --- a/Tools/ApiTool/WebApiPost.cs +++ b/Tools/ApiTool/WebApiPost.cs @@ -55,7 +55,7 @@ public class WebApiPost /// /// /// - public ApiResponseInfo HttpPost(TRequest requestEntity, string method = "", int time = 10000) where TRequest : class where TResponse : class, new() + public ApiResponseInfo HttpPost(TRequest requestEntity, string method = "", int time = 10000, bool executeAction = true) where TRequest : class where TResponse : class, new() { ApiResponseInfo result = new() { @@ -112,7 +112,10 @@ public class WebApiPost result.ResponseTime = DateTime.Now; TimeSpan ts = sw.Elapsed; result.UseTime = ts.TotalMilliseconds; - _apiAction?.Invoke(result); + if(executeAction) + { + _apiAction?.Invoke(result); + } return result; } diff --git a/WcsMain/ApiClient/DataEntity/WmsEntity/UploadStackerStatusRequest.cs b/WcsMain/ApiClient/DataEntity/WmsEntity/UploadStackerStatusRequest.cs new file mode 100644 index 0000000..101ad66 --- /dev/null +++ b/WcsMain/ApiClient/DataEntity/WmsEntity/UploadStackerStatusRequest.cs @@ -0,0 +1,44 @@ +using Newtonsoft.Json; + +namespace WcsMain.ApiClient.DataEntity.WmsEntity; + +/// +/// 上传堆垛机是否报错的请求实体 +/// +public class UploadStackerStatusRequest +{ + /// + /// 设备号 + /// + [JsonProperty("equipment")] + public int? Equipment { get; set; } + + /// + /// 是否报错 --- 0:不报错;1:不可用 + /// + [JsonProperty("error")] + public int? Error { get; set; } + + /* + + + [ + { + "equipment":1, + "error":0 + }, + { + "equipment":2, + "error":1 + } + ] + + + + + */ + + + + +} diff --git a/WcsMain/Business/CirculationTask/Stacker/UploadStackerStatus.cs b/WcsMain/Business/CirculationTask/Stacker/UploadStackerStatus.cs new file mode 100644 index 0000000..89eeee6 --- /dev/null +++ b/WcsMain/Business/CirculationTask/Stacker/UploadStackerStatus.cs @@ -0,0 +1,65 @@ +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 (errMsg != null || 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; + } + + +}