添加定时向 wms 发送堆垛机状态的定时器

This commit is contained in:
葛林强 2024-08-28 13:35:44 +08:00
parent 79fc895f4a
commit 9e1af92672
3 changed files with 114 additions and 2 deletions

View File

@ -55,7 +55,7 @@ public class WebApiPost
/// <param name="method"></param>
/// <param name="time"></param>
/// <returns></returns>
public ApiResponseInfo<TResponse> HttpPost<TRequest, TResponse>(TRequest requestEntity, string method = "", int time = 10000) where TRequest : class where TResponse : class, new()
public ApiResponseInfo<TResponse> HttpPost<TRequest, TResponse>(TRequest requestEntity, string method = "", int time = 10000, bool executeAction = true) where TRequest : class where TResponse : class, new()
{
ApiResponseInfo<TResponse> 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;
}

View File

@ -0,0 +1,44 @@
using Newtonsoft.Json;
namespace WcsMain.ApiClient.DataEntity.WmsEntity;
/// <summary>
/// 上传堆垛机是否报错的请求实体
/// </summary>
public class UploadStackerStatusRequest
{
/// <summary>
/// 设备号
/// </summary>
[JsonProperty("equipment")]
public int? Equipment { get; set; }
/// <summary>
/// 是否报错 --- 0不报错1不可用
/// </summary>
[JsonProperty("error")]
public int? Error { get; set; }
/*
[
{
"equipment":1,
"error":0
},
{
"equipment":2,
"error":1
}
]
*/
}

View File

@ -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;
/// <summary>
/// 上传堆垛机可用状态给wms
/// </summary>
[Circulation]
public class UploadStackerStatus(StackerOperation stackerOperation, WmsWebApiPost wmsWebApiPost)
{
List<int?> StackerNotOpen = [];
[Circulation("上传堆垛机报错状态给WMS")]
public bool Uplaod()
{
List<UploadStackerStatusRequest> 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<List<UploadStackerStatusRequest>, WmsResponse>(uploadStackerStatusRequests, CommonData.AppApiBaseInfos.GetAddress("uploadStackerStatus") ?? "", time: 500, executeAction: false);
return true;
}
}