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;
+ }
+
+
+}