1
czw
8 天以前 28accb402ff845f554493c0e0d6a3e5234d00628
HnSx/Build/Project/´úÂë/VS×Ô¶¨ÒåÀà/AutoThread.cs
@@ -29,6 +29,18 @@
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
{
@@ -106,29 +118,55 @@
        /// </summary>
        /// <param name="tag"></param>
        /// <param name="action"></param>
        public void ThreadSettingInit(Tag tag, Action action)
        public void ThreadSettingInit(Tag tag)
        {
        }
        public async void ThreadwebSoc()
        {
            List<object> list = new List<object>();
            //read Alldata from database
            //将数据缓存到内存。
            try
            {
                return;
                Thread.Sleep(1000);
                while (true)
                {
                    if (/*list.Count > 0 && */WebSocketClientWithReconnect.GetWebSocketState() == WebSocketState.Open)
                        for (int i = 60000; i < 70000; i++)
                        for (int i = 0; i < 70000; i++)
                        {
                            Thread.Sleep(1000);
                            Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")}>>>GGG{i}");
                            var b = WebSocketClientWithReconnect.Instance?.SendAsync($"He >>GGG{i}").Result;
                            Console.WriteLine("发送完成!!" + b);
                            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)
@@ -144,11 +182,27 @@
                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();
                    new WebSocketClientWithReconnect($"ws://{ip.ToString()}:8809/socket").StartAsync();
                    //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://10.20.66.121:20001/datahubjson/websocket/").StartAsync();
                    //new WebSocketClientWithReconnect($"ws://{ip.ToString()}:8809/socket").StartAsync();
                    WebSocketClientWithReconnect.Instance.OnMessageReceived += (msg) =>
                    {
                        reportWeightinfo.channel.Writer.TryWrite(msg);
                        //reportWeightinfo.channel.Writer.TryWrite(new ReportWeightInfoResponse
                        //{
                        //    Response = new ReportWeightInfoResponseData
                        //    {
                        //        Return = new ReportWeightInfoReturnInfo
                        //        {
                        //            returnCode = "0000",
                        //            sortingChute = msg
                        //        }
                        //    }
                        //});
                    };
                    break;
                }
            }
@@ -159,12 +213,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()
        {
@@ -227,6 +282,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
@@ -237,71 +295,481 @@
                        {
                            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("");
                                    }
                                ///入库交互  ã€‚WCS-->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;
                                    }
                                ///入库交互  ã€‚WCS-->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 = "ok",
                                                    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=PALLETSTACKER", !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  -- è®°å½•箱号数据,分拣下线后根据想好进入对应的区域。 
                                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",
                                                            returnDesc = "ok",
                                                            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"
                                                    }
                                                }
                                            };
                                            string requeeee = string.IsNullOrEmpty(requestJson) ? JsonConvert.SerializeObject(req) : requestJson;
                                            //Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")}>>>GGG{i}");
                                            LogHelper.Info(requeeee);
                                            var b = WebSocketClientWithReconnect.Instance?.SendAsync(requeeee).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;
                        }
@@ -471,6 +939,8 @@
    public class WebSocketClientWithReconnect
    {
        //public static List<object> SendList = new List<object>();
        public static ClientWebSocket _webSocket;
        private static WebSocketClientWithReconnect _instance;
        private readonly Uri _serverUri;
@@ -479,7 +949,7 @@
        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)
@@ -590,7 +1060,7 @@
            var bytes = System.Text.Encoding.UTF8.GetBytes(message);
            await _webSocket.SendAsync(new ArraySegment<byte>(bytes), WebSocketMessageType.Text, true, _cts.Token);
            return true;
            return true;
        }
    }
@@ -860,7 +1330,7 @@
            else
            {
                logger = LogFactory.CreateLogger(name);
                if (logger != null)
                if (logger != null && !loggers.Keys.Contains(name))
                {
                    loggers.Add(name, logger);
                }
@@ -971,5 +1441,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>
                /// ç»„织编号 - ä¸»é”®ï¼Œé»˜è®¤MERCURY
                /// </summary>
                public string organizationId { get; set; } = "MERCURY";
                /// <summary>
                /// ä»“库编号 - ä¸»é”®ï¼Œé»˜è®¤HN02
                /// </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:出库(拣货/移库/补货/盘点), 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>
                /// è¿”回代码 - 0000:成功, å…¶ä»–:失败
                /// </summary>
                public string returnCode { get; set; }
                /// <summary>
                /// è¿”回描述
                /// </summary>
                public string returnDesc { get; set; } = "ok";
                /// <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>
                /// ç»„织编号 - ä¸»é”®ï¼Œé»˜è®¤MERCURY
                /// </summary>
                public string organizationId { get; set; } = "MERCURY";
                /// <summary>
                /// ä»“库编号 - ä¸»é”®ï¼Œé»˜è®¤HN02
                /// </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>
                /// å¼‚常原因代码 - 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>
                /// ç»„织编号 - ä¸»é”®ï¼Œé»˜è®¤MERCURY
                /// </summary>
                public string organizationId { get; set; } = "MERCURY";
                /// <summary>
                /// ä»“库编号 - ä¸»é”®ï¼Œé»˜è®¤HN02
                /// </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>
                /// ç»„织编号 - ä¸»é”®ï¼Œé»˜è®¤MERCURY
                /// </summary>
                public string organizationId { get; set; } = "MERCURY";
                /// <summary>
                /// ä»“库编号 - ä¸»é”®ï¼Œé»˜è®¤HN02
                /// </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>
                /// ç»„织编号 - ä¸»é”®ï¼Œé»˜è®¤MERCURY
                /// </summary>
                public string organizationId { get; set; } = "MERCURY";
                /// <summary>
                /// ä»“库编号 - ä¸»é”®ï¼Œé»˜è®¤HN02
                /// </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>
                /// ç»„织编号 - ä¸»é”®ï¼Œé»˜è®¤MERCURY
                /// </summary>
                public string organizationId { get; set; } = "MERCURY";
                /// <summary>
                /// ä»“库编号 - ä¸»é”®ï¼Œé»˜è®¤HN02
                /// </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>
                /// ç»„织编号 - ä¸»é”®ï¼Œé»˜è®¤MERCURY
                /// </summary>
                public string organizationId { get; set; } = "MERCURY";
                /// <summary>
                /// ä»“库编号 - ä¸»é”®ï¼Œé»˜è®¤HN02
                /// </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>
                /// é”™è¯¯ä»£ç 
                /// </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>
                /// ç»„织编号 - ä¸»é”®ï¼Œé»˜è®¤MERCURY
                /// </summary>
                public string organizationId { get; set; } = "MERCURY";
                /// <summary>
                /// ä»“库编号 - ä¸»é”®ï¼Œé»˜è®¤HN02
                /// </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>
                /// ç›®æ ‡åŒºåŸŸ/道口 - ç‰©ç†ä½ç½®é“口编码或B2C复核台区域编码
                /// </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<string> channel = Channel.CreateUnbounded<string>();
            internal static async Task<string> 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?.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>
                /// ç»„织编号 - ä¸»é”®ï¼Œé»˜è®¤MERCURY
                /// </summary>
                public string organizationId { get; set; } = "MERCURY";
                /// <summary>
                /// ä»“库编号 - ä¸»é”®ï¼Œé»˜è®¤HN02
                /// </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>
                /// åˆ†æ‹£é“口 - è¾“送线快速分拣道口编码
                /// </summary>
                public string sortingChute { get; set; }
            }
        }
    }
}
#endregion [自定义类-VS][20250701112200484][AutoThread]