From 1393661a4f59fb30aea8e5893fdd8c85331b32d1 Mon Sep 17 00:00:00 2001 From: czw <selecti@yeah.net> Date: 星期三, 09 七月 2025 08:33:16 +0800 Subject: [PATCH] 1 --- HnSx/Build/Project/代码/VS自定义类/AutoThread.cs | 1433 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 1,387 insertions(+), 46 deletions(-) diff --git "a/HnSx/Build/Project/\344\273\243\347\240\201/VS\350\207\252\345\256\232\344\271\211\347\261\273/AutoThread.cs" "b/HnSx/Build/Project/\344\273\243\347\240\201/VS\350\207\252\345\256\232\344\271\211\347\261\273/AutoThread.cs" index c35ed3a..cee9ccc 100644 --- "a/HnSx/Build/Project/\344\273\243\347\240\201/VS\350\207\252\345\256\232\344\271\211\347\261\273/AutoThread.cs" +++ "b/HnSx/Build/Project/\344\273\243\347\240\201/VS\350\207\252\345\256\232\344\271\211\347\261\273/AutoThread.cs" @@ -27,6 +27,20 @@ using NLog.Targets; using NLog; using ServiceStack.Messaging.Rcon; +using System.Runtime.ExceptionServices; +using System.Runtime.InteropServices; +using System.Security.RightsManagement; +using static GZ.Projects.HnSx.Clloc.sendTask; +using static GZ.Projects.HnSx.Clloc.modifyTaskPriority; +using static GZ.Projects.HnSx.Clloc.stockInException; +using static GZ.Projects.HnSx.Clloc.taskFeedback; +using static GZ.Projects.HnSx.Clloc.stockInInteraction; +using static GZ.Projects.HnSx.Clloc.cancelTask; +using static GZ.Projects.HnSx.Clloc.palletStackerInteraction; +using static GZ.Projects.HnSx.Clloc.putConveyorTask; +using static GZ.Projects.HnSx.Clloc.reportWeightinfo; +using System.Threading.Channels; +using static GZ.Projects.HnSx.Clloc; namespace GZ.Projects.HnSx { @@ -104,11 +118,62 @@ /// </summary> /// <param name="tag"></param> /// <param name="action"></param> - public void ThreadSettingInit(Tag tag, Action action) + public void ThreadSettingInit(Tag tag) { - } - public void TaskEverythingRun() + + public async void ThreadwebSoc() + { + //read Alldata from database + //灏嗘暟鎹紦瀛樺埌鍐呭瓨銆�+ try + { + Thread.Sleep(1000); + while (true) + { + if (/*list.Count > 0 && */WebSocketClientWithReconnect.GetWebSocketState() == WebSocketState.Open) + for (int i = 0; i < 70000; i++) + { + Thread.Sleep(1000); + Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")}>>>鍙戦� 绗�{i} 鏉�); + //LogHelper.Info($"Hello Server {i}"); + var req = new ReportWeightInfoRequest + { + data = new ReportWeightInfoData + { + header = new ReportWeightInfoHeader + { + deliveryNo = "F0000" + i, + grossWeight = i, + cube = i, + addTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), + addWho = "WCS" + } + } + }; + var b = WebSocketClientWithReconnect.Instance?.SendAsync(JsonConvert.SerializeObject(req)).Result; + Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")}>>鍙戦�瀹屾垚锛侊紒" + b); + if (b == true) + { + // 绛夊緟鐗瑰畾鍝嶅簲 + + var rr = reportWeightinfo.GetChinnnl().Result; + + //LogHelper.Info($" {DateTime.Now.ToString("HH:mm:ss.fff")}>> 鎺ユ敹" + JsonConvert.SerializeObject(rr)); + //} + Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")}>>" + JsonConvert.SerializeObject(rr)); + } + else Console.WriteLine("鍙戦�澶辫触銆�); + } + Thread.Sleep(1000); + } + } + catch (Exception ex) + { + LogHelper.Error(ex.Message, ex); + } + } + public async Task TaskEverythingRun() { var host = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()); foreach (var ip in host.AddressList) @@ -116,38 +181,26 @@ if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { Console.WriteLine($"ip= {ip.ToString()}"); - //new HttpServer(ip.ToString()).HttpServerRun(); + new HttpServer(ip.ToString()).HttpServerRun(); //new TcpServer(ip.ToString()); - //var server = new EnhancedWebSocketServer($"http://{ip.ToString()}:8809/").StartAsync(); - var client = new WebSocketClientWithReconnect($"ws://{ip.ToString()}:8809/socket")/*.StartAsync()*/; - //Task.Run(async () => - //{ - client.StartAsync(); - Task.Run(async () => + //var server = new EnhancedWebSocketServer($"http://{ip.ToString()}:8809/").StartAsync(); http://10.20.66.121:18080 + new WebSocketClientWithReconnect($"ws://10.20.66.121:20001/socket").StartAsync(); + //new WebSocketClientWithReconnect($"ws://{ip.ToString()}:8809/socket").StartAsync(); + WebSocketClientWithReconnect.Instance.OnMessageReceived += (msg) => { - while (true) + //reportWeightinfo.channel.Writer.TryWrite(JsonConvert.DeserializeObject<ReportWeightInfoResponse>(msg)); + reportWeightinfo.channel.Writer.TryWrite(new ReportWeightInfoResponse { - for (int i = 0; i < 10000; i++) + Response = new ReportWeightInfoResponseData { - Thread.Sleep(1000); - Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")}>>>Server{i}"); - await client.SendAsync($"Hello Server{i}!"); + Return = new ReportWeightInfoReturnInfo + { + returnCode = "0000", + sortingChute = msg + } } - } - }); - //Task.Run(async () => - //{ - // while (true) - // { - // for (int i = 60000; i < 70000; i++) - // { - // Thread.Sleep(1000); - // Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")}>>>GGG{i}"); - // await client.SendAsync($"Hello GGG{i}!"); - // } - // } - //}); - //}); + }); + }; break; } } @@ -158,12 +211,13 @@ } public class HttpServer { + public static readonly HttpHelper apiHelper = new HttpHelper(); System.Net.HttpListener HttpSvcHost = null; public static string _listenerPrefix = ""; public HttpServer(string ip) { - _listenerPrefix = $"http://{ip}:8807/"; + _listenerPrefix = $"http://{ip}:8808/"; } public void HttpServerRun() { @@ -226,6 +280,9 @@ Console.WriteLine(apth + "<<>>" + DateTime.Now.Subtract(data).TotalMilliseconds); } } + public static List<SendTaskHeader> lstr = new List<SendTaskHeader>(); + public static List<PutConveyorTaskHeader> putConveyorTasks = new List<PutConveyorTaskHeader>(); + private System.String HttpSvcListenerCallback_he(System.String method, System.String path, System.String requestJson, out System.Net.HttpStatusCode statusCode) { try @@ -236,71 +293,480 @@ { switch (path) { + case "/api/Wcs/GetTask": + { + statusCode = System.Net.HttpStatusCode.OK; + return JsonConvert.SerializeObject(new + { + 鍑哄叆绉诲簱浠诲姟 = lstr, + 绠变綋鍒嗗彂浠诲姟 = putConveyorTasks + }); + break; + } + case "/api/Wcs/RemoveTask": + { + statusCode = System.Net.HttpStatusCode.OK; + lstr.RemoveAll(x => x.palletId == requestJson); + putConveyorTasks.RemoveAll(x => x.palletId == requestJson); + break; + } ///浠诲姟涓嬪彂--WMS-->WC case "/api/Wcs/sendTask": { statusCode = System.Net.HttpStatusCode.OK; + var req = JsonConvert.DeserializeObject<SendTaskRequest>(requestJson); + if (req == null || req.data == null || lstr.Find(x => x.groupTaskSequence == req.data.header.groupTaskSequence && x.groupTaskId == req.data.header.groupTaskId) != null) + { + if (req == null || req.data == null) - return JsonConvert.SerializeObject(""); + return JsonConvert.SerializeObject(new SendTaskResponse + { + Response = new ResponseData + { + Return = new ReturnInfo + { + returnCode = "0001", + returnDesc = req?.data == null ? "鏃犱换鍔′笅鍙戯紒" : "浠诲姟閲嶅涓嬪彂锛�, + returnFlag = "0" + } + } + }); + else + return JsonConvert.SerializeObject(new SendTaskResponse + { + Response = new ResponseData + { + Return = new ReturnInfo + { + returnCode = "0000", + returnDesc = "浠诲姟閲嶅涓嬪彂锛�, + returnFlag = "1" + } + } + }); + } + lstr.Add(req.data.header); + return JsonConvert.SerializeObject(new SendTaskResponse + { + Response = new ResponseData + { + Return = new ReturnInfo + { + returnCode = "0000", + returnDesc = "ok", + returnFlag = "1" + } + } + }); } ///鍏ュ簱寮傚父涓婃姤銆�WCS-->WMS case "/api/Wcs/stockInException": { statusCode = System.Net.HttpStatusCode.OK; + var f = string.IsNullOrEmpty(requestJson) ? lstr.FirstOrDefault() : lstr.Find(x => x.palletId == requestJson); + var str = apiHelper.Post("http://10.20.66.121:18080/datahubjson/wcs/?method=STOCKINEXCEP", JsonConvert.SerializeObject(new StockInExceptionRequest + { + data = new StockInExceptionData + { + header = new StockInExceptionHeader + { + organizationId = f.organizationId, + warehouseId = f.warehouseId, + groupTaskId = f.groupTaskId, + groupTaskSequence = f.groupTaskSequence, + palletId = f.palletId, + addTime = f.addTime.ToString("yyyy-MM-dd HH:mm:ss"), + addWho = f.addWho, + reason = "搴撲綅鏈夎揣涓嶅彲鐢�, + reasonCode = "01" + } + } + })); - return JsonConvert.SerializeObject(""); + var strres = JsonConvert.DeserializeObject<StockInExceptionResponse>(str); + if (strres.Response.Return.returnCode == "0000") + { + f.toPosition = strres.Response.Return.toPosition; + f.toLocation = strres.Response.Return.toLocation; + } + return str; } ///浠诲姟鐘舵�鍙嶉 WCS-->WM case "/api/Wcs/taskFeedback": { statusCode = System.Net.HttpStatusCode.OK; - + //foreach (var statu in new List<string> { "", "" }) + { + var f = string.IsNullOrEmpty(requestJson) ? lstr.FirstOrDefault() : lstr.Find(x => x.palletId == requestJson); + var str = apiHelper.Post("http://10.20.66.121:18080/datahubjson/wcs/?method=TASKFEEDBACK", JsonConvert.SerializeObject(new TaskFeedbackRequest + { + data = new TaskFeedbackData + { + header = new TaskFeedbackHeader + { + organizationId = f.organizationId, + warehouseId = f.warehouseId, + groupTaskId = f.groupTaskId, + groupTaskSequence = f.groupTaskSequence, + palletId = f.palletId, + fmLocation = f.fmLocation, + fmPosition = f.fmPosition, + toLocation = f.toLocation, + toPosition = f.toPosition, + taskStatus = "80", + taskType = f.taskType, + closeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + closeWho = f.addWho + } + } + })); + } return JsonConvert.SerializeObject(""); } ///鍏ュ簱浜や簰 銆俉CS-->WMS case "/api/Wcs/stockInInteraction": { statusCode = System.Net.HttpStatusCode.OK; + var req = JsonConvert.DeserializeObject<StockInInteractionRequest>(requestJson); - return JsonConvert.SerializeObject(""); + var str = apiHelper.Post("http://10.20.66.121:18080/datahubjson/wcs/?method=STOCKININTERACTION", requestJson); + //var str = @"{""Response"":{""return"":{""returnCode"":""0000"",""returnDesc"":""Success"",""returnFlag"":""1"",""groupTaskId"":""GT250708000001"",""groupTaskSequence"":""1"",""taskStatus"":""00"",""taskType"":""PA"",""priority"":""3"",""toLocation"":""5A070101"",""toPosition"":""01""}}}"; + var res = JsonConvert.DeserializeObject<StockInInteractionResponse>(str); + if (res.Response.Return.returnCode == "0000") + { + var from = req.data.header; + var resss = res.Response.Return; + lstr.Add(new SendTaskHeader + { + groupTaskId = resss.groupTaskId, + groupTaskSequence = resss.groupTaskSequence, + fmLocation = from.fmLocation, + fmPosition = from.fmPosition, + palletId = from.palletId, + taskStatus = resss.taskStatus, + taskType = resss.taskType, + priority = resss.priority, + toLocation = resss.toLocation, + toPosition = resss.toPosition, + addTime = DateTime.Now, + addWho = from.addWho, + }); + } + return str;// + JsonConvert.SerializeObject(lstr); + var str1 = apiHelper.Post("http://10.20.66.121:18080/datahubjson/wcs/?method=STOCKININTERACTION", JsonConvert.SerializeObject(new StockInInteractionRequest + { + data = new StockInInteractionData + { + header = new StockInInteractionHeader + { + palletId = "TP9901", + grossWeight = 99, + palletWidth = 99, + fmLocation = "", + fmPosition = "", + addTime = DateTime.Now, + addWho = "" + } + } + })); + return str1; + } + ///鍏ュ簱浜や簰 銆俉CS-->WMS + case "/api/Wcs/stockInInteraction2": + { + statusCode = System.Net.HttpStatusCode.OK; + var req = JsonConvert.DeserializeObject<StockInInteractionRequest>(requestJson); + + var str = apiHelper.Post("http://10.20.66.121:18080/datahubjson/wcs/?method=STOCKININTERACTION", requestJson); + //var str = @"{""Response"":{""return"":{""returnCode"":""0000"",""returnDesc"":""Success"",""returnFlag"":""1"",""groupTaskId"":""GT250708000001"",""groupTaskSequence"":""1"",""taskStatus"":""00"",""taskType"":""PA"",""priority"":""3"",""toLocation"":""5A070101"",""toPosition"":""01""}}}"; + var res = JsonConvert.DeserializeObject<StockInInteractionResponse>(str); + if (res.Response.Return.returnCode == "0000") + { + var from = req.data.header; + var resss = res.Response.Return; + lstr.Add(new SendTaskHeader + { + groupTaskId = resss.groupTaskId, + groupTaskSequence = resss.groupTaskSequence, + fmLocation = from.fmLocation, + fmPosition = from.fmPosition, + palletId = from.palletId, + taskStatus = resss.taskStatus, + taskType = resss.taskType, + priority = resss.priority, + toLocation = resss.toLocation, + toPosition = resss.toPosition, + addTime = DateTime.Now, + addWho = from.addWho, + }); + } + return str;// + JsonConvert.SerializeObject(lstr); + var str1 = apiHelper.Post("http://10.20.66.121:18080/datahubjson/wcs/?method=STOCKININTERACTION", JsonConvert.SerializeObject(new StockInInteractionRequest + { + data = new StockInInteractionData + { + header = new StockInInteractionHeader + { + palletId = "TP9901", + grossWeight = 99, + palletWidth = 99, + fmLocation = "", + fmPosition = "", + addTime = DateTime.Now, + addWho = "" + } + } + })); + return str1; } ///浠诲姟鍙栨秷銆�WMS-->WCS case "/api/Wcs/cancelTask": { statusCode = System.Net.HttpStatusCode.OK; - - return JsonConvert.SerializeObject(""); + var req = JsonConvert.DeserializeObject<CancelTaskRequest>(requestJson); + var task = lstr.Find(x => x.groupTaskId == req.data.header.groupTaskId && x.groupTaskSequence == req.data.header.groupTaskSequence); + if (task == null) + return JsonConvert.SerializeObject(new CancelTaskResponse + { + Response = new ResponseData + { + Return = new ReturnInfo + { + returnCode = "0001", + returnDesc = "浠诲姟涓嶅瓨鍦紒锛侊紒", + returnFlag = "0" + } + } + }); + lstr.Remove(task); + return JsonConvert.SerializeObject(new CancelTaskResponse + { + Response = new ResponseData + { + Return = new ReturnInfo + { + returnCode = "0000", + returnDesc = "", + returnFlag = "1" + } + } + }); } /// 纰熺洏鏈虹敵璇蜂换鍔°� WCS-->WMS case "/api/Wcs/palletStackerInteraction": { statusCode = System.Net.HttpStatusCode.OK; - return JsonConvert.SerializeObject(""); + var str = apiHelper.Post("http://10.20.66.121:18080/datahubjson/wcs/?method=PALLETSTACKERINTERACTION", !string.IsNullOrEmpty(requestJson) ? requestJson : JsonConvert.SerializeObject(new PalletStackerInteractionRequest + { + data = new PalletStackerInteractionData + { + header = new PalletStackerInteractionHeader + { + palletId = "TP9901", + taskId = $"X{DateTime.Now.ToString("yyyyMMdd")}001", + taskType = "PI", + fmLocation = "2FC1076", + addTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + addWho = "wcs" + } + } + })); + return str; + //return JsonConvert.SerializeObject(""); } ///淇敼浠诲姟浼樺厛绾�銆�WMS - WCS case "/api/Wcs/modifyTaskPriority": { statusCode = System.Net.HttpStatusCode.OK; + var req = JsonConvert.DeserializeObject<ModifyTaskPriorityRequest>(requestJson); + List<TaskErrorInfo> taskErrorInfos = new List<TaskErrorInfo>(); + if (req != null) + { + foreach (var item in req.data.header) + { + var task = lstr.Find(x => x.groupTaskSequence == item.groupTaskSequence && x.groupTaskId == item.groupTaskId); + if (task != null) + { + task.priority = item.priority; + } + else + { + taskErrorInfos.Add(new TaskErrorInfo + { + groupTaskId = item.groupTaskId, + groupTaskSequence = item.groupTaskSequence, + errorCode = "0001", + errorDesc = "娌¤繖涓换鍔� + }); + } + } - return JsonConvert.SerializeObject(""); + } + + if (req == null || req.data.header.Count == taskErrorInfos.Count) + return JsonConvert.SerializeObject(new ModifyTaskPriorityResponse + { + Response = new ModifyTaskPriorityResponseData + { + Return = new ModifyTaskPriorityReturnInfo + { + returnCode = "0001", + returnDesc = "娌℃湁浠诲姟鍙洿鏀�, + returnFlag = "0" + } + } + }); + else + { + if (taskErrorInfos.Count == 0) + return JsonConvert.SerializeObject(new ModifyTaskPriorityResponse + { + Response = new ModifyTaskPriorityResponseData + { + Return = new ModifyTaskPriorityReturnInfo + { + returnCode = "0000", + returnFlag = "1", + returnDesc="ok" + } + } + }); + else + { + return JsonConvert.SerializeObject(new ModifyTaskPriorityResponse + { + Response = new ModifyTaskPriorityResponseData + { + Return = new ModifyTaskPriorityReturnInfo + { + returnCode = "0001", + returnDesc = "閮ㄥ垎浠诲姟鍙洿鏀�, + returnFlag = "2", + resultInfo = taskErrorInfos + } + } + }); + } + } + } /// 杈撻�绾夸换鍔℃帹閫併� WMS-->WCS -- 璁板綍绠卞彿鏁版嵁锛屽垎鎷d笅绾垮悗鏍规嵁鎯冲ソ杩涘叆瀵瑰簲鐨勫尯鍩熴� case "/api/Wcs/putConveyorTask": { statusCode = System.Net.HttpStatusCode.OK; + var req = JsonConvert.DeserializeObject<PutConveyorTaskRequest>(requestJson); + List<TaskErrorInfo> taskErrorInfos = new List<TaskErrorInfo>(); + if (req != null) + { + foreach (var item in req.data.header) + { + var task = putConveyorTasks.Find(x => x.groupTaskSequence == item.groupTaskSequence && x.groupTaskId == item.groupTaskId); + if (task == null) + { + putConveyorTasks.Add(item); + } + else + { + taskErrorInfos.Add(new TaskErrorInfo + { + groupTaskId = item.groupTaskId, + groupTaskSequence = item.groupTaskSequence, + errorCode = "0001", + errorDesc = "閲嶅" + }); + } + } - return JsonConvert.SerializeObject(""); + } + + if (req == null || req.data.header.Count == taskErrorInfos.Count) + return JsonConvert.SerializeObject(new PutConveyorTaskResponse + { + Response = new PutConveyorTaskResponseData + { + Return = new PutConveyorTaskReturnInfo + { + returnCode = "0001", + returnDesc = "鍏ㄩ儴閲嶅", + returnFlag = "0" + } + } + }); + else + { + if (taskErrorInfos.Count == 0) + return JsonConvert.SerializeObject(new PutConveyorTaskResponse + { + Response = new PutConveyorTaskResponseData + { + Return = new PutConveyorTaskReturnInfo + { + returnCode = "0000", + returnFlag = "1" + } + } + }); + else + { + return JsonConvert.SerializeObject(new PutConveyorTaskResponse + { + Response = new PutConveyorTaskResponseData + { + Return = new PutConveyorTaskReturnInfo + { + returnCode = "0001", + returnDesc = "閮ㄥ垎閲嶅", + returnFlag = "2", + resultInfo = taskErrorInfos + } + } + }); + } + } } ///涓婃姤绉伴噸灏哄 - websocket .杩欓噷鍐欑潃浣滀负璁板綍 case "/api/Wcs/reportWeightinfo": { statusCode = System.Net.HttpStatusCode.OK; + if (/*list.Count > 0 && */WebSocketClientWithReconnect.GetWebSocketState() == WebSocketState.Open) + //for (int i = 60000; i < 70000; i++) + { + //Thread.Sleep(1000); + var req = new ReportWeightInfoRequest + { + data = new ReportWeightInfoData + { + header = new ReportWeightInfoHeader + { + deliveryNo = "F00001", + grossWeight = 99, + cube = 66, + addTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), + addWho = "WCS" + } + } + }; + //Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")}>>>GGG{i}"); + LogHelper.Info(JsonConvert.SerializeObject(req)); + var b = WebSocketClientWithReconnect.Instance?.SendAsync(JsonConvert.SerializeObject(req)).Result; + Console.WriteLine(req.data.header.deliveryNo + "鍙戦�瀹屾垚锛侊紒" + b); + if (b == true) + { + // 绛夊緟鐗瑰畾鍝嶅簲 - return JsonConvert.SerializeObject(""); + var rr = reportWeightinfo.GetChinnnl().Result; + + LogHelper.Info("鎺ユ敹" + JsonConvert.SerializeObject(rr)); + //} + return JsonConvert.SerializeObject(rr); + } + else return "鍙戦�澶辫触銆�; + } } + break; } break; } @@ -470,14 +936,17 @@ public class WebSocketClientWithReconnect { - private ClientWebSocket _webSocket; + //public static List<object> SendList = new List<object>(); + + public static ClientWebSocket _webSocket; + private static WebSocketClientWithReconnect _instance; private readonly Uri _serverUri; private readonly CancellationTokenSource _cts = new CancellationTokenSource(); private readonly int _reconnectDelayMs; public event Action<string> OnMessageReceived = msg => Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")}>>>Received: {msg}"); public event Action OnConnected = () => Console.WriteLine("Connected to server"); - public event Action OnDisconnected = () => Console.WriteLine("Disconnected from server"); + public event Action OnDisconnected = () => Console.WriteLine("Disconnected from webSocket server"); public event Action<Exception> OnError = ex => Console.WriteLine($"Error: {ex.Message}"); public WebSocketClientWithReconnect(string serverUrl, int reconnectDelayMs = 5000) @@ -485,9 +954,18 @@ _serverUri = new Uri(serverUrl); _reconnectDelayMs = reconnectDelayMs; } + public static WebSocketClientWithReconnect Instance + { + get + { + return _instance; + } + } + public static WebSocketState GetWebSocketState() => _webSocket != null ? _webSocket.State : WebSocketState.Closed; public async Task StartAsync() { + _instance = this; while (!_cts.IsCancellationRequested) { try @@ -570,7 +1048,7 @@ } } - public async Task SendAsync(string message) + public async Task<bool> SendAsync(string message) { if (_webSocket?.State != WebSocketState.Open) { @@ -579,7 +1057,7 @@ var bytes = System.Text.Encoding.UTF8.GetBytes(message); await _webSocket.SendAsync(new ArraySegment<byte>(bytes), WebSocketMessageType.Text, true, _cts.Token); - + return true; } } @@ -849,7 +1327,7 @@ else { logger = LogFactory.CreateLogger(name); - if (logger != null) + if (logger != null && !loggers.Keys.Contains(name)) { loggers.Add(name, logger); } @@ -960,5 +1438,868 @@ #endregion [鑷畾涔夌被][20250323145505759][LogFactory] } + + public class HttpHelper + { + #region [鑷畾涔夌被][20250325095622918][HttpHelper] + public string Post(string url, string postData, string contentType = "application/json", string sessionId = "") + { + LogHelper.Info(url + "+" + postData); + WebRequest request = WebRequest.Create(url); + request.Method = "POST"; + byte[] byteArray = Encoding.UTF8.GetBytes(postData); + request.ContentType = contentType; + request.ContentLength = byteArray.Length; + request.Timeout = 15000; + if (sessionId != "") + { + request.Headers.Set("ASP.NET_SessionId", sessionId); + } + + //Authorization: UApGP6WW9FsBUqAlzxRGOw == + request.Headers.Set("Authorization", "UApGP6WW9FsBUqAlzxRGOw=="); + StreamReader reader = null; + Stream stream = null; + WebResponse rsp = null; + try + { + stream = request.GetRequestStream(); + stream.Write(byteArray, 0, byteArray.Length); + stream.Close(); + rsp = request.GetResponse(); + stream = rsp.GetResponseStream(); + reader = new StreamReader(stream); + string rrend = reader.ReadToEnd(); + LogHelper.Info($"{url} response={rrend}"); + return rrend; + } + catch (Exception ex) + { + LogHelper.Info($"{url} err={ex.Message}"); + return ""; + } + finally + { + // 閲婃斁璧勬簮 + if (reader != null) reader.Close(); + if (stream != null) stream.Close(); + if (rsp != null) rsp.Close(); + } + + } + #endregion [鑷畾涔夌被][20250325095622918][HttpHelper] + } + public class Clloc + { + public class sendTask + { + /// <summary> + /// 浠诲姟涓嬪彂璇锋眰 + /// </summary> + public class SendTaskRequest + { + /// <summary> + /// 璇锋眰鏁版嵁 + /// </summary> + public SendTaskData data { get; set; } + } + + public class SendTaskData + { + /// <summary> + /// 璇锋眰澶翠俊鎭�+ /// </summary> + public SendTaskHeader header { get; set; } + } + + public class SendTaskHeader + { + /// <summary> + /// 缁勭粐缂栧彿 - 涓婚敭锛岄粯璁ERCURY + /// </summary> + public string organizationId { get; set; } = "MERCURY"; + + /// <summary> + /// 浠撳簱缂栧彿 - 涓婚敭锛岄粯璁N02 + /// </summary> + public string warehouseId { get; set; } = "HN02"; + + /// <summary> + /// 浠诲姟缁勭紪鍙�- 涓婚敭 + /// </summary> + public string groupTaskId { get; set; } + + /// <summary> + /// 浠诲姟缁勫簭鍙�- 涓婚敭 + /// </summary> + public int groupTaskSequence { get; set; } + + /// <summary> + /// 鎵樼洏鍙�+ /// </summary> + public string palletId { get; set; } + + /// <summary> + /// 鏉ユ簮搴撲綅 + /// </summary> + public string fmLocation { get; set; } + + /// <summary> + /// 鏉ユ簮鐐逛綅 + /// </summary> + public string fmPosition { get; set; } + + /// <summary> + /// 鐩爣搴撲綅鍙�+ /// </summary> + public string toLocation { get; set; } + + /// <summary> + /// 鐩爣鐐逛綅 + /// </summary> + public string toPosition { get; set; } + + /// <summary> + /// 鐘舵� - 00:鍒涘缓 + /// </summary> + public string taskStatus { get; set; } = "00"; + + /// <summary> + /// 浠诲姟绫诲瀷 - PA:鍏ュ簱(涓婃灦/鍥炲簱/绉诲簱), PK:鍑哄簱(鎷h揣/绉诲簱/琛ヨ揣/鐩樼偣), MV:鍊掑簱 + /// </summary> + public string taskType { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public DateTime addTime { get; set; } + + /// <summary> + /// 鍒涘缓浜�+ /// </summary> + public string addWho { get; set; } + + /// <summary> + /// 浼樺厛绾�- 1-5(1鏈�珮,5鏈�綆),榛樿3 + /// </summary> + public string priority { get; set; } = "3"; + + } + + /// <summary> + /// 浠诲姟涓嬪彂鍝嶅簲 + /// </summary> + public class SendTaskResponse + { + public ResponseData Response { get; set; } + } + + public class ResponseData + { + [JsonProperty("return")] + public ReturnInfo Return { get; set; } + } + + public class ReturnInfo + { + /// <summary> + /// 杩斿洖浠g爜 - 0000:鎴愬姛, 鍏朵粬:澶辫触 + /// </summary> + public string returnCode { get; set; } + + /// <summary> + /// 杩斿洖鎻忚堪 + /// </summary> + public string returnDesc { get; set; } + + /// <summary> + /// 杩斿洖鏍囪 - 1:鎴愬姛, 0:澶辫触 + /// </summary> + public string returnFlag { get; set; } + } + } + + public class stockInException + { + /// <summary> + /// 鍏ュ簱寮傚父璇锋眰 + /// </summary> + public class StockInExceptionRequest + { + public StockInExceptionData data { get; set; } + } + + public class StockInExceptionData + { + public StockInExceptionHeader header { get; set; } + } + + public class StockInExceptionHeader + { + /// <summary> + /// 缁勭粐缂栧彿 - 涓婚敭锛岄粯璁ERCURY + /// </summary> + public string organizationId { get; set; } = "MERCURY"; + + /// <summary> + /// 浠撳簱缂栧彿 - 涓婚敭锛岄粯璁N02 + /// </summary> + public string warehouseId { get; set; } = "HN02"; + + /// <summary> + /// 浠诲姟缁勭紪鍙�- 涓婚敭 + /// </summary> + public string groupTaskId { get; set; } + + /// <summary> + /// 浠诲姟缁勫簭鍙�- 涓婚敭 + /// </summary> + public int groupTaskSequence { get; set; } + + /// <summary> + /// 鎵樼洏鍙�+ /// </summary> + public string palletId { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public string addTime { get; set; } + + /// <summary> + /// 鍒涘缓璁惧 + /// </summary> + public string addWho { get; set; } + + /// <summary> + /// 寮傚父鍘熷洜鎻忚堪 + /// </summary> + public string reason { get; set; } + + /// <summary> + /// 寮傚父鍘熷洜浠g爜 - 01:搴撲綅鏈夎揣涓嶅彲鐢� 03:鍏ュ唴浼镐綅澶栦几浣嶆湁璐�+ /// </summary> + public string reasonCode { get; set; } + + // ... UDF瀛楁 + } + + /// <summary> + /// 鍏ュ簱寮傚父鍝嶅簲 + /// </summary> + public class StockInExceptionResponse + { + public StockInExceptionResponseData Response { get; set; } + } + + public class StockInExceptionResponseData + { + [JsonProperty("return")] + public StockInExceptionReturnInfo Return { get; set; } + } + + public class StockInExceptionReturnInfo : ReturnInfo + { + /// <summary> + /// 鏂板垎閰嶇殑鐩爣搴撲綅 + /// </summary> + public string toLocation { get; set; } + + /// <summary> + /// 鏂板垎閰嶇殑鐩爣鐐逛綅 + /// </summary> + public string toPosition { get; set; } + } + } + + public class taskFeedback + { + /// <summary> + /// 浠诲姟鍙嶉璇锋眰 + /// </summary> + public class TaskFeedbackRequest + { + public TaskFeedbackData data { get; set; } + } + + public class TaskFeedbackData + { + public TaskFeedbackHeader header { get; set; } + } + + public class TaskFeedbackHeader + { + /// <summary> + /// 缁勭粐缂栧彿 - 涓婚敭锛岄粯璁ERCURY + /// </summary> + public string organizationId { get; set; } = "MERCURY"; + + /// <summary> + /// 浠撳簱缂栧彿 - 涓婚敭锛岄粯璁N02 + /// </summary> + public string warehouseId { get; set; } = "HN02"; + + /// <summary> + /// 浠诲姟缁勭紪鍙�- 涓婚敭 + /// </summary> + public string groupTaskId { get; set; } + + /// <summary> + /// 浠诲姟缁勫簭鍙�- 涓婚敭 + /// </summary> + public int groupTaskSequence { get; set; } + + /// <summary> + /// 鎵樼洏鍙�+ /// </summary> + public string palletId { get; set; } + + /// <summary> + /// 鏉ユ簮搴撲綅 + /// </summary> + public string fmLocation { get; set; } + + /// <summary> + /// 鏉ユ簮鐐逛綅 + /// </summary> + public string fmPosition { get; set; } + + /// <summary> + /// 鐩爣搴撲綅鍙�+ /// </summary> + public string toLocation { get; set; } + + /// <summary> + /// 鐩爣鐐逛綅 + /// </summary> + public string toPosition { get; set; } + + /// <summary> + /// 鐘舵� - 80:瀹屾垚, 98:寮傚父(鍙栬揣鏃犺揣) + /// </summary> + public string taskStatus { get; set; } + + /// <summary> + /// 浠诲姟绫诲瀷 - PA:鍏ュ簱, PK:鍑哄簱, MV:鍊掑簱 + /// </summary> + public string taskType { get; set; } + + /// <summary> + /// 瀹屾垚鏃堕棿 + /// </summary> + public string closeTime { get; set; } + + /// <summary> + /// 瀹屾垚浜哄憳 + /// </summary> + public string closeWho { get; set; } + + // ... UDF瀛楁 + } + } + public class stockInInteraction + { + /// <summary> + /// 鍏ュ簱浜や簰璇锋眰 + /// </summary> + public class StockInInteractionRequest + { + public StockInInteractionData data { get; set; } + } + + public class StockInInteractionData + { + public StockInInteractionHeader header { get; set; } + } + + public class StockInInteractionHeader + { + /// <summary> + /// 缁勭粐缂栧彿 - 涓婚敭锛岄粯璁ERCURY + /// </summary> + public string organizationId { get; set; } = "MERCURY"; + + /// <summary> + /// 浠撳簱缂栧彿 - 涓婚敭锛岄粯璁N02 + /// </summary> + public string warehouseId { get; set; } = "HN02"; + + /// <summary> + /// 鎵樼洏鍙�- 涓婚敭 + /// </summary> + public string palletId { get; set; } + + /// <summary> + /// 鎬婚噸閲�kg) + /// </summary> + public decimal grossWeight { get; set; } + + /// <summary> + /// 鐮佺洏瀹藉害(cm) + /// </summary> + public decimal palletWidth { get; set; } + + /// <summary> + /// 鏉ユ簮搴撲綅 + /// </summary> + public string fmLocation { get; set; } + + /// <summary> + /// 鏉ユ簮鐐逛綅 + /// </summary> + public string fmPosition { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public DateTime addTime { get; set; } + + /// <summary> + /// 鍒涘缓浜�+ /// </summary> + public string addWho { get; set; } + + // ... UDF01-UDF10 + } + + /// <summary> + /// 鍏ュ簱浜や簰鍝嶅簲 + /// </summary> + public class StockInInteractionResponse + { + public StockInInteractionResponseData Response { get; set; } + } + + public class StockInInteractionResponseData + { + [JsonProperty("return")] + public StockInInteractionReturnInfo Return { get; set; } + } + + public class StockInInteractionReturnInfo : ReturnInfo + { + /// <summary> + /// 浠诲姟缁勭紪鍙�+ /// </summary> + public string groupTaskId { get; set; } + + /// <summary> + /// 浠诲姟缁勫簭鍙�+ /// </summary> + public int groupTaskSequence { get; set; } + + /// <summary> + /// 鐘舵� - 00:鍒涘缓 + /// </summary> + public string taskStatus { get; set; } + + /// <summary> + /// 浠诲姟绫诲瀷 - PA:鍏ュ簱 + /// </summary> + public string taskType { get; set; } + + /// <summary> + /// 浼樺厛绾�- 1-5(1鏈�珮) + /// </summary> + public string priority { get; set; } + + /// <summary> + /// 鐩爣搴撲綅鍙�+ /// </summary> + public string toLocation { get; set; } + + /// <summary> + /// 鐩爣鐐逛綅 + /// </summary> + public string toPosition { get; set; } + } + } + public class cancelTask + { + /// <summary> + /// 浠诲姟鍙栨秷璇锋眰 + /// </summary> + public class CancelTaskRequest + { + public CancelTaskData data { get; set; } + } + + public class CancelTaskData + { + public CancelTaskHeader header { get; set; } + } + + public class CancelTaskHeader + { + /// <summary> + /// 缁勭粐缂栧彿 - 涓婚敭锛岄粯璁ERCURY + /// </summary> + public string organizationId { get; set; } = "MERCURY"; + + /// <summary> + /// 浠撳簱缂栧彿 - 涓婚敭锛岄粯璁N02 + /// </summary> + public string warehouseId { get; set; } = "HN02"; + + /// <summary> + /// 浠诲姟缁勭紪鍙�- 涓婚敭 + /// </summary> + public string groupTaskId { get; set; } + + /// <summary> + /// 浠诲姟缁勫簭鍙�- 涓婚敭 + /// </summary> + public int groupTaskSequence { get; set; } + } + + /// <summary> + /// 浠诲姟鍙栨秷鍝嶅簲 + /// </summary> + public class CancelTaskResponse + { + public ResponseData Response { get; set; } + } + } + public class palletStackerInteraction + { + /// <summary> + /// 鍙犵洏鏈轰氦浜掕姹�+ /// </summary> + public class PalletStackerInteractionRequest + { + public PalletStackerInteractionData data { get; set; } + } + + public class PalletStackerInteractionData + { + public PalletStackerInteractionHeader header { get; set; } + } + + public class PalletStackerInteractionHeader + { + /// <summary> + /// 缁勭粐缂栧彿 - 涓婚敭锛岄粯璁ERCURY + /// </summary> + public string organizationId { get; set; } = "MERCURY"; + + /// <summary> + /// 浠撳簱缂栧彿 - 涓婚敭锛岄粯璁N02 + /// </summary> + public string warehouseId { get; set; } = "HN02"; + + /// <summary> + /// 浠诲姟缂栧彿 - 涓婚敭锛岃澶囧彂鍑虹殑璇锋眰ID + /// </summary> + public string taskId { get; set; } + + /// <summary> + /// 鎵樼洏鍙�+ /// </summary> + public string palletId { get; set; } + + /// <summary> + /// 绫诲瀷 - PI:鍏ュ簱, PT:鍑哄簱(褰撳墠鏃犲嚭搴撳満鏅� + /// </summary> + public string taskType { get; set; } + + /// <summary> + /// 璧峰搴撲綅 - 鍙犵洏鏈虹墿鐞嗚捣濮嬩綅缃�+ /// </summary> + public string fmLocation { get; set; } + + /// <summary> + /// 浼樺厛绾�- 1-5(1鏈�珮) + /// </summary> + public string priority { get; set; } = "3"; + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public string addTime { get; set; } + + /// <summary> + /// 鍒涘缓璁惧 + /// </summary> + public string addWho { get; set; } + + // ... UDF01-UDF10 + } + + /// <summary> + /// 鍙犵洏鏈轰氦浜掑搷搴�+ /// </summary> + public class PalletStackerInteractionResponse + { + public ResponseData Response { get; set; } + } + + } + public class modifyTaskPriority + { + /// <summary> + /// 淇敼浠诲姟浼樺厛绾ц姹�+ /// </summary> + public class ModifyTaskPriorityRequest + { + public ModifyTaskPriorityData data { get; set; } + } + + public class ModifyTaskPriorityData + { + public List<ModifyTaskPriorityHeader> header { get; set; } + } + + public class ModifyTaskPriorityHeader + { + /// <summary> + /// 缁勭粐缂栧彿 - 涓婚敭锛岄粯璁ERCURY + /// </summary> + public string organizationId { get; set; } = "MERCURY"; + + /// <summary> + /// 浠撳簱缂栧彿 - 涓婚敭锛岄粯璁N02 + /// </summary> + public string warehouseId { get; set; } = "HN02"; + + /// <summary> + /// 浠诲姟缁勭紪鍙�- 涓婚敭 + /// </summary> + public string groupTaskId { get; set; } + + /// <summary> + /// 浠诲姟缁勫簭鍙�- 涓婚敭 + /// </summary> + public int groupTaskSequence { get; set; } + + /// <summary> + /// 浼樺厛绾�- 1-5(1鏈�珮) + /// </summary> + public string priority { get; set; } + } + + /// <summary> + /// 淇敼浠诲姟浼樺厛绾у搷搴�鏀寔閮ㄥ垎鎴愬姛) + /// </summary> + public class ModifyTaskPriorityResponse + { + public ModifyTaskPriorityResponseData Response { get; set; } + } + + public class ModifyTaskPriorityResponseData + { + [JsonProperty("return")] + public ModifyTaskPriorityReturnInfo Return { get; set; } + } + + public class ModifyTaskPriorityReturnInfo : ReturnInfo + { + /// <summary> + /// 閮ㄥ垎鎴愬姛鏃剁殑閿欒璇︽儏 + /// </summary> + public List<TaskErrorInfo> resultInfo { get; set; } + } + + public class TaskErrorInfo + { + /// <summary> + /// 浠诲姟缁勭紪鍙�+ /// </summary> + public string groupTaskId { get; set; } + + /// <summary> + /// 浠诲姟缁勫簭鍙�+ /// </summary> + public int groupTaskSequence { get; set; } + + /// <summary> + /// 閿欒浠g爜 + /// </summary> + public string errorCode { get; set; } + + /// <summary> + /// 閿欒鍘熷洜 + /// </summary> + public string errorDesc { get; set; } + } + } + public class putConveyorTask + { + /// <summary> + /// 杈撻�绾夸换鍔℃帹閫佽姹�+ /// </summary> + public class PutConveyorTaskRequest + { + public PutConveyorTaskData data { get; set; } + } + + public class PutConveyorTaskData + { + public List<PutConveyorTaskHeader> header { get; set; } + } + + public class PutConveyorTaskHeader + { + /// <summary> + /// 缁勭粐缂栧彿 - 涓婚敭锛岄粯璁ERCURY + /// </summary> + public string organizationId { get; set; } = "MERCURY"; + + /// <summary> + /// 浠撳簱缂栧彿 - 涓婚敭锛岄粯璁N02 + /// </summary> + public string warehouseId { get; set; } = "HN02"; + + /// <summary> + /// 浠诲姟缁勭紪鍙�- 涓婚敭 + /// </summary> + public string groupTaskId { get; set; } + + /// <summary> + /// 浠诲姟缁勫簭鍙�- 涓婚敭 + /// </summary> + public int groupTaskSequence { get; set; } + + /// <summary> + /// 绠卞彿 + /// </summary> + public string palletId { get; set; } + + /// <summary> + /// 绠卞瀷 - 澶х/灏忕/鍛ㄨ浆绠辩紪鐮�+ /// </summary> + public string palletIdType { get; set; } + + /// <summary> + /// 璐存爣鏍囪 - Y:闇�璐存爣, N:涓嶉渶瑕�+ /// </summary> + public string syncFlag { get; set; } + + /// <summary> + /// 鐩爣鍖哄煙/閬撳彛 - 鐗╃悊浣嶇疆閬撳彛缂栫爜鎴朆2C澶嶆牳鍙板尯鍩熺紪鐮�+ /// </summary> + public string dLocation { get; set; } + + // ... UDF01-UDF10 + } + + /// <summary> + /// 杈撻�绾夸换鍔℃帹閫佸搷搴�鏀寔閮ㄥ垎鎴愬姛) + /// </summary> + public class PutConveyorTaskResponse + { + public PutConveyorTaskResponseData Response { get; set; } + } + + public class PutConveyorTaskResponseData + { + [JsonProperty("return")] + public PutConveyorTaskReturnInfo Return { get; set; } + } + + public class PutConveyorTaskReturnInfo : ReturnInfo + { + /// <summary> + /// 閮ㄥ垎鎴愬姛鏃剁殑閿欒璇︽儏 + /// </summary> + public List<TaskErrorInfo> resultInfo { get; set; } + } + } + public class reportWeightinfo + { + public static Channel<ReportWeightInfoResponse> channel = Channel.CreateUnbounded<ReportWeightInfoResponse>(); + + internal static async Task<ReportWeightInfoReturnInfo> GetChinnnl() + { + //var response = await reportWeightinfo.channel.Reader.ReadAllAsync();// foreach (var response in reportWeightinfo.channel.Reader.ReadAllAsync()) + //{ + // return response?.Response?.Return ?? new ReportWeightInfoReturnInfo { ReturnCode = "0001", SortingChute = "0", ReturnDesc = "杩斿洖涓虹┖銆� }; + //} + while (await reportWeightinfo.channel.Reader.WaitToReadAsync(CancellationToken.None)) + { + while (reportWeightinfo.channel.Reader.TryRead(out var response)) + { + return response?.Response?.Return ?? new ReportWeightInfoReturnInfo { returnCode = "0001", sortingChute = "0", returnDesc = "杩斿洖涓虹┖銆� }; + } + } + return new ReportWeightInfoReturnInfo { returnCode = "0001", sortingChute = "0", returnDesc = "杩斿洖涓虹┖銆� }; + } + + /// <summary> + /// 涓婃姤绉伴噸淇℃伅璇锋眰 + /// </summary> + public class ReportWeightInfoRequest + { + public ReportWeightInfoData data { get; set; } + } + + public class ReportWeightInfoData + { + public ReportWeightInfoHeader header { get; set; } + } + + public class ReportWeightInfoHeader + { + /// <summary> + /// 缁勭粐缂栧彿 - 涓婚敭锛岄粯璁ERCURY + /// </summary> + public string organizationId { get; set; } = "MERCURY"; + + /// <summary> + /// 浠撳簱缂栧彿 - 涓婚敭锛岄粯璁N02 + /// </summary> + public string warehouseId { get; set; } = "HN02"; + + /// <summary> + /// 闈㈠崟鍙�- 涓婚敭 + /// </summary> + public string deliveryNo { get; set; } + + /// <summary> + /// 閲嶉噺(kg) + /// </summary> + public decimal grossWeight { get; set; } + + /// <summary> + /// 浣撶Н(绔嬫柟鍘樼背) + /// </summary> + public decimal cube { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public string addTime { get; set; } + + /// <summary> + /// 鍒涘缓璁惧 + /// </summary> + public string addWho { get; set; } + + // ... UDF瀛楁 + } + + /// <summary> + /// 涓婃姤绉伴噸淇℃伅鍝嶅簲 + /// </summary> + public class ReportWeightInfoResponse + { + public ReportWeightInfoResponseData Response { get; set; } + } + + public class ReportWeightInfoResponseData + { + [JsonProperty("return")] + public ReportWeightInfoReturnInfo Return { get; set; } + } + + public class ReportWeightInfoReturnInfo : ReturnInfo + { + /// <summary> + /// 鍒嗘嫞閬撳彛 - 杈撻�绾垮揩閫熷垎鎷i亾鍙g紪鐮�+ /// </summary> + public string sortingChute { get; set; } + } + } + + } } #endregion [鑷畾涔夌被-VS][20250701112200484][AutoThread] \ No newline at end of file -- Gitblit v1.9.1