From d42ad8b01195def2a9309930e14f90ff13ad47b1 Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期四, 19 六月 2025 17:24:28 +0800
Subject: [PATCH] 印尼佳通出入库策略优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs | 2320 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 2,320 insertions(+), 0 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
new file mode 100644
index 0000000..9fe06a7
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
@@ -0,0 +1,2320 @@
+锘縰sing HH.WCS.Mobox3.FJJF.models;
+using HH.WCS.Mobox3.FJJT.device;
+using HH.WCS.Mobox3.FJJT.dispatch;
+using HH.WCS.Mobox3.FJJT.models;
+using HH.WCS.Mobox3.FJJT.process;
+using HH.WCS.Mobox3.FJJT.util;
+using HH.WCS.Mobox3.FJJT.wms;
+using Newtonsoft.Json;
+using NLog;
+using NLog.Fluent;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Threading;
+using static HH.WCS.Mobox3.FJJT.api.ApiModel;
+using static HH.WCS.Mobox3.FJJT.api.OtherModel;
+using static HH.WCS.Mobox3.FJJT.api.WmsController;
+using static HH.WCS.Mobox3.FJJT.util.ExcetionHelper;
+using static HH.WCS.Mobox3.FJJT.util.Settings;
+using static System.Net.Mime.MediaTypeNames;
+
+namespace HH.WCS.Mobox3.FJJT.api {
+    /// <summary>
+    /// api鎺ュ彛杈呭姪绫�+    /// </summary>
+    public class ApiHelper {
+        static ApiHelper() {
+
+        }
+
+        /// <summary>
+        /// 绌哄伐瑁呭嚭搴�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult emptyPalletOutStock(OutStockModel model) {
+            ResponseResult result = new ResponseResult();
+           
+            Location endLoc = LocationHelper.GetLoc(model.endLocCode);
+            if (endLoc == null)
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"绌哄伐瑁呭嚭搴擄紝WMS绯荤粺鏈煡璇㈠埌缁堢偣璐т綅锛歿model.endLocCode}");
+                throw new BusinessException($"绌哄伐瑁呭嚭搴擄紝WMS绯荤粺鏈煡璇㈠埌缁堢偣璐т綅锛歿model.endLocCode},璇锋鏌ョ粓鐐硅揣浣嶇紪鐮佹槸鍚︽纭�);
+            }
+            else if (endLoc.N_LOCK_STATE != 0) 
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"绌哄伐瑁呭嚭搴擄紝缁堢偣璐т綅锛歿model.endLocCode}澶勪簬閿佸畾鐘舵�");
+                throw new BusinessException($"绌哄伐瑁呭嚭搴擄紝缁堢偣璐т綅锛歿model.endLocCode}澶勪簬閿佸畾鐘舵�");
+            }
+
+            var areaCodes = Settings.getRelAreaCodes(endLoc.S_AREA_CODE);
+            if (areaCodes.Count == 0) 
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"绌哄伐瑁呭嚭搴擄紝鏈厤缃簱鍖�{endLoc.S_AREA_CODE}鐨勫叧鑱斿叧绯�);
+                throw new BusinessException($"绌哄伐瑁呭嚭搴擄紝鏈厤缃簱鍖�{endLoc.S_AREA_CODE}鐨勫叧鑱斿叧绯�);
+            }
+
+            Location startLoc = WMSHelper.getOutStockStartLoc(areaCodes[0], null);
+            if (startLoc == null)
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"绌哄伐瑁呭嚭搴擄紝搴撳尯:{areaCodes[0]}鏈煡璇㈠埌绌哄伐瑁�);
+                throw new BusinessException($"绌哄伐瑁呭嚭搴擄紝鏈煡璇㈠埌绌哄伐瑁咃紝绔嬪簱鍙兘缂哄皯绌哄伐瑁�);
+            }
+
+            var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+            if (locCntrRels.Count > 0)
+            {
+                string cntrCode = locCntrRels[0].S_CNTR_CODE;
+                var wmsTask = new WMSTask()
+                {
+                    S_CNTR_CODE = cntrCode,
+                    S_CODE = WMSHelper.GenerateTaskNo(),
+                    S_START_LOC = startLoc.S_CODE,
+                    S_START_AREA = startLoc.S_AREA_CODE,
+                    S_END_LOC = endLoc.S_CODE,
+                    S_END_AREA = endLoc.S_AREA_CODE,
+                    S_TYPE = "绌哄伐瑁呭嚭搴撲换鍔�,
+                    S_OP_DEF_NAME = "绌哄伐瑁呭嚭搴�,
+                    N_PRIORITY = 10,
+                    T_START_TIME = DateTime.Now,
+                };
+
+                if (WMSHelper.CreateWmsTask(wmsTask))
+                {
+                    // 鍒涘缓涓�鍏ュ簱浠诲姟
+                    WCSTask wcsTask = new WCSTask()
+                    {
+                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                        S_OP_CODE = wmsTask.S_CODE,
+                        S_CODE = WCSHelper.GenerateTaskNo(),
+                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                        S_TYPE = wmsTask.S_TYPE,
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = endLoc.S_CODE,
+                        S_END_AREA = endLoc.S_AREA_CODE,
+                        S_SCHEDULE_TYPE = "WCS",
+                        N_PRIORITY = wmsTask.N_PRIORITY,
+                        T_START_TIME = DateTime.Now,
+                    };
+
+                    if (WCSHelper.CreateTask(wcsTask))
+                    {
+                        // 璧风偣銆佺粓鐐瑰姞閿�+                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                        // 鏇存柊浣滀笟浠诲姟鐘舵�
+                        wmsTask.N_B_STATE = 1;
+                        WMSHelper.UpdateTaskState(wmsTask);
+                    }
+                }
+            }
+            else 
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鏌ヨ鐨勭┖宸ヨ鏈夎锛岄敊璇師鍥狅細鏈煡璇㈠埌璐т綅瀹瑰櫒鐨勭粦瀹氬叧绯�);
+                throw new BusinessException($"鏌ヨ绌哄伐瑁呴敊璇紝鏈煡璇㈠埌璐т綅瀹瑰櫒鐨勭粦瀹氬叧绯伙紝璇疯仈绯诲紑鍙戜汉鍛樻帓鏌�);
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// WCS璇荤爜璇锋眰娴佺▼
+        /// 涓氬姟鍦烘櫙锛氳鐮佸叆搴撱�璇荤爜鍑哄簱
+        /// 1.鍒ゆ柇RFID鏄惁瀛樺湪WMS绯荤粺涓紝鍚︼紝鍒欓粯璁や负RFID鏃犳硶璇嗗埆
+        /// 2.鍒ゆ柇RFID鏄惁涓庝换鍔FID鏄惁涓�嚧
+        /// 3.璁板綍RFID寮傚父淇℃伅
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public static ResponseResult readCodeProcess(ReadCodeRequest request) {
+            ResponseResult responseResult = new ResponseResult();
+
+            Location loc = LocationHelper.GetLoc(request.loc);
+            if (loc != null)
+            {
+                var cst = WCSHelper.GetTask(request.taskNo);
+                if (cst != null)
+                {
+                    var container = ContainerHelper.GetCntr(request.cntrNo);
+                    if (container != null)
+                    {
+                        if (cst.S_CNTR_CODE != request.cntrNo)
+                        {
+                            ContainerHelper.UpdateCntrState(cst.S_CNTR_CODE, 1);
+                            WMSHelper.addRfidAnomalyRecord(cst.S_CNTR_CODE, 2, request.loc, cst.S_CODE);
+                        }
+                    }
+                    else 
+                    {
+                        ContainerHelper.UpdateCntrState(cst.S_CNTR_CODE, 1);
+                        WMSHelper.addRfidAnomalyRecord(cst.S_CNTR_CODE, 1, request.loc, cst.S_CODE);
+                    }
+
+                    /*WCSHelper.ActivatePreCreateTask(cst.S_OP_CODE);*/
+
+                    // 鏂规2 4.濡傛灉璇诲彇涓嶆垚鍔燂紝鏌ョ湅寮傚父鍖烘槸鍚︽湁绌鸿揣浣� 
+                    /* var agvEndLoc = WMSHelper.GetTransfeRelevanceLoc(loc.S_AREA_CODE, "4");
+                     if (agvEndLoc != null)
+                     {
+                         // 4.1 鏈�鍒欏垱寤烘惉杩愬紓甯稿尯浠诲姟
+                         WCSTask wcsTask = new WCSTask()
+                         {
+                             S_OP_NAME = cst.S_OP_NAME,
+                             S_OP_CODE = cst.S_OP_CODE,
+                             S_CODE = WCSHelper.GenerateTaskNo(),
+                             S_CNTR_CODE = cst.S_CNTR_CODE,
+                             S_TYPE = "寮傚父宸ヨ绉诲簱寮傚父鍖�,
+                             S_START_LOC = loc.S_CODE,
+                             S_START_AREA = loc.S_AREA_CODE,
+                             S_END_LOC = agvEndLoc.S_CODE,
+                             S_END_AREA = agvEndLoc.S_AREA_CODE,
+                             S_SCHEDULE_TYPE = "AGV",
+                             N_PRIORITY = 99,
+                             T_START_TIME = DateTime.Now,
+                         };
+                         if (WCSHelper.CreateTask(wcsTask))
+                         {
+                             // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                             LocationHelper.LockLoc(wcsTask.S_START_LOC, 1);
+                             LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                             WCSHelper.CancelPreCreateTask(cst.S_OP_CODE);
+                         }
+                     }
+                     else
+                     {
+                         // 4.2 鏃�鍒欒褰曞紓甯告縺娲婚鍒涘缓浠诲姟
+                         WCSHelper.ActivatePreCreateTask(cst.S_OP_CODE);
+                     }*/
+                }
+                else
+                {
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"娌℃湁鏌ヨ鍒拌鐮佺殑浠诲姟锛屼换鍔″彿:{request.taskNo}");
+                }
+            }
+            else 
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"璇荤爜浣�{request.loc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                throw new BusinessException($"璇荤爜浣�{request.loc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+            }
+            return responseResult;
+        }
+
+
+        /// <summary>
+        /// 婊℃枡涓嬬嚎娴佺▼
+        /// 1.鍒ゆ柇RFID鏄惁璇诲彇鎴愬姛锛岃鍙栦笉鎴愬姛锛岃褰曞紓甯革紙璇诲彇澶辫触鍚庯紝涓存椂鐢熸垚涓�釜鎵樼洏鐮侊級
+        /// 2.鏍规嵁RFID鏌ヨ涓棿琛紝涓嶅瓨鍦紝璁板綍寮傚父
+        /// 3.鍒ゆ柇婊℃枡鎺ラ┏浣嶅搴旂殑绌哄伐瑁呯紦瀛樹綅鐘舵�锛堟煡璇㈢嚎浣撳厜鐢碉級
+        /// 
+        /// 鐩磋繛
+        /// 4.闇�琛ワ紝鍒欑敓鎴愮┖宸ヨ鍑哄簱浠诲姟锛堣儙闈€�鑳庝晶鐩磋繛鎻愰珮浼樺厛绾э級
+        /// 5.涓嬪彂婊℃枡鎼繍浠诲姟锛堝笜甯冪洿杩炴彁楂樹紭鍏堢骇锛�+        /// 
+        /// 闈炵洿杩�+        /// 4.闇�琛ョ┖宸ヨ锛屽垯绌哄伐瑁呭嚭搴撲换鍔★紙瀹屾垚鍚庯紝鐢熸垚婊℃枡鎼繍浠诲姟锛屽苟鎻愰珮浼樺厛绾�9锛�+        /// 5.涓嶉渶瑕佽ˉ绌哄伐瑁咃紝鍒欑敓鎴愭弧鏂欐惉杩愪换鍔�+        /// 
+        /// 6.璇讳换鍔′腑闂磋〃
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult offLineProcess(OffLineRequest model) {
+            ResponseResult responseResult = new ResponseResult();
+
+            var areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList();
+            var isExistCntr = LocationHelper.checkAreaExistCntr(areaCodes,model.cntrNo);
+            if (!isExistCntr)
+            {
+                // 鏌ヨ璧风偣璐т綅鏄惁瀛樺湪宸插瓨鍦ㄤ换鍔★紝闃叉浠诲姟閲嶅鍙戣捣
+                var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc);
+                if (existWmsTask == null)
+                {
+                    // 鏌ヨ瀵瑰簲鏈哄彴鐨勭墿鏂欎笅绾块厤缃俊鎭�+                    var logicConfig = WMSHelper.getLogicConfigByJtCode(model.jtNo);
+                    if (logicConfig != null)
+                    {
+                        Container container = ContainerHelper.GetCntr(model.cntrNo);
+                        if (container == null || !model.isNormal)
+                        {
+                            ContainerHelper.AddCntr(model.cntrNo);
+                            ContainerHelper.UpdateCntrState(model.cntrNo, 1);
+                            WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null);
+                        }
+
+                        // 鏍规嵁鐗╂枡涓嬬嚎閰嶇疆淇℃伅锛屽垽鏂换鍔$被鍨嬫槸鐩磋繛涓嬬嚎杩樻槸闈炵洿杩炰笅绾�+                        if (logicConfig.S_TASK_TYPE == "1" || logicConfig.S_TASK_TYPE == "2")
+                        {
+                            triggerItemOffLineFlow(model.loc, model.cntrNo, logicConfig);
+                        }
+                        else
+                        {
+                            // 婊℃枡涓嬬嚎锛堥潪鐩磋繛锛�+                            triggerItemOffLineFlow4(model.loc, model.cntrNo, logicConfig);
+                        }
+                    }
+                    else
+                    {
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺�璇疯仈绯荤鐞嗕汉鍛�);
+                        throw new BusinessException($"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺紝璇疯仈绯荤鐞嗕汉鍛�);
+                    }
+                }
+                else
+                {
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�);
+                    throw new BusinessException($"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�);
+                }
+            }
+            else 
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"宸ヨ锛歿model.cntrNo}宸插叆搴擄紝璇峰嬁閲嶅鍏ュ簱");
+                throw new BusinessException($"宸ヨ锛歿model.cntrNo}宸插叆搴擄紝璇峰嬁閲嶅鍏ュ簱");
+            }
+            return responseResult;
+        }
+
+
+        /// <summary>
+        /// 婊℃枡涓嬬嚎锛堥潪鐩磋繛锛�+        /// 1.鍒涘缓婊℃枡涓嬬嚎浣滀笟
+        /// 2.鍒ゆ柇鏄惁闇�琛ョ┖宸ヨ锛岄渶瑕佸垯鍒涘缓绌哄伐瑁呰ˉ缂撳瓨浣嶄换鍔�+        /// 3.鍒ゆ柇瀹瑰櫒鏄惁鏄紓甯稿伐瑁咃紝鏄紝濡傚紓甯稿尯鏈夌┖璐т綅鍒欏垱寤哄紓甯稿伐瑁呭叆绾胯竟寮傚父鍖轰换鍔★紱鍚︼紝鍒欏垱寤烘弧鏂欏伐瑁呭叆搴撲换鍔★紙濡傞渶瑕佽ˉ绌哄伐瑁咃紝鍒欏皢浠诲姟鐘舵�鏀逛负棰勫垱寤猴紝绛夊緟琛ョ┖宸ヨ浠诲姟瀹屾垚鍚庤Е鍙戯級
+        /// 4.浣滀笟鍒涘缓瀹屾垚鍚庯紝璇诲彇涓棿琛紝鏇存柊涓棿琛ㄧ姸鎬�+        /// </summary>
+        /// <param name="offLineLoc"></param>
+        /// <param name="logicConfig"></param>
+        /// <param name="cntrNo"></param>
+        /// <returns></returns>
+        public static bool triggerItemOffLineFlow4(string offLineLoc,string cntrNo, LogicConfig logicConfig ,LjMesTask mesTask = null)
+        {
+            bool result = true;
+            try
+            {
+                if (mesTask == null) 
+                {
+                    mesTask = WMSHelper.getLjMesTaskByCntr(cntrNo);
+                }
+                
+                if (mesTask != null)
+                {
+                    // 2.鍒ゆ柇鏄惁闇�琛ョ┖宸ヨ锛岄渶瑕侊紝鍒欏垱寤虹┖宸ヨ鍑哄簱浠诲姟
+                    bool photoStatus = false;
+                    var hcLoc = LocationHelper.GetLoc(logicConfig.S_LKBKHCLOC);
+                    if (hcLoc != null)
+                    {
+                        if (hcLoc.N_CURRENT_NUM != 0 && hcLoc.N_LOCK_STATE == 0) 
+                        {
+                            hcLoc = LocationHelper.GetEmptyLoc(hcLoc.S_AREA_CODE);
+                        }
+
+                        if (hcLoc != null) 
+                        {
+                            var bufferLocConfig = Settings.GetBufferLocConfig(hcLoc.S_CODE);  // 缂撳瓨浣嶅叧鑱斿睘鎬�+                            if (bufferLocConfig != null || hcLoc.N_CURRENT_NUM == 0)
+                            {
+                                photoStatus = true;
+                                // 鏂规1锛屽鏋滈潪鐩磋繛鐨勭紦瀛樹綅鏈夊厜鐢典俊鍙凤紝鍒欐煡璇㈣澶囩姸鎬佸垽鏂槸鍚﹂渶瑕佽ˉ绌哄伐瑁�+                                /*   var deviceStatusDatas = WCSDispatch.getDeviceStatus(new List<string>() { bufferLocConfig.deviceNo });
+                                   if (deviceStatusDatas != null && deviceStatusDatas.Count > 0)
+                                   {
+                                       var deviceStatus = deviceStatusDatas[0];
+                                       if (deviceStatus.workStatus == 1 && deviceStatus.manualStatus == 0)
+                                       {
+                                           photoStatus = deviceStatus.photoStatus == 1;
+                                       }
+                                       else
+                                       {
+                                           WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"璁惧鍙�{bufferLocConfig.deviceNo},璁惧褰撳墠澶勪簬涓嶅彲鐢ㄧ姸鎬侊紝璇疯仈绯荤鐞嗕汉鍛樿皟鏁磋澶囩姸鎬�);
+                                           throw new BusinessException($"璁惧鍙�{bufferLocConfig.deviceNo},璁惧褰撳墠澶勪簬涓嶅彲鐢ㄧ姸鎬侊紝璇疯仈绯荤鐞嗕汉鍛樿皟鏁磋澶囩姸鎬�);
+                                       }
+                                   }
+                                   else
+                                   {
+                                       WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"璁惧鍙�{bufferLocConfig.deviceNo},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
+                                       throw new BusinessException($"璁惧鍙�{bufferLocConfig.deviceNo},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
+                                   }*/
+                            }
+                            else
+                            {
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁閰嶇疆灞炴�淇℃伅锛岃鑱旂郴绠$悊浜哄憳閰嶇疆");
+                                throw new BusinessException($"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁閰嶇疆灞炴�淇℃伅锛岃鑱旂郴绠$悊浜哄憳閰嶇疆");
+                            }
+                        }
+                    }
+                    else
+                    {
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁WMS绯荤粺涓綍鍏�);
+                        throw new BusinessException($"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁WMS绯荤粺涓綍鍏�);
+                    }
+
+                    // 绌哄伐瑁呭嚭搴撳垽鏂潯浠�+                    Location kgzStartLoc = null;
+                    Location kgzEndLoc = null;
+                    string kgzCntrCode = null;
+                    if (photoStatus)
+                    {
+                        kgzStartLoc = LocationHelper.GetLoc(logicConfig.S_LKKTJBLOC);
+                        kgzEndLoc = LocationHelper.GetLoc(logicConfig.S_LKBKHCLOC);
+                        if (kgzStartLoc == null)
+                        {
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"绌哄伐瑁呭嚭搴撶珯鍙�{logicConfig.S_LKKTJBLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                            photoStatus = false;
+                        }
+                        if (kgzEndLoc == null)
+                        {
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"绌哄伐瑁呯紦瀛樹綅:{logicConfig.S_LKBKHCLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                            photoStatus = false;
+                        }
+
+                        var locCntrRels = LocationHelper.GetLocCntr(kgzStartLoc.S_CODE);
+                        if (locCntrRels.Count > 0)
+                        {
+                            kgzCntrCode = locCntrRels[0].S_CNTR_CODE;
+                        }
+                        else
+                        {
+                            kgzCntrCode = "铏氭嫙瀹瑰櫒";
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"绌哄伐瑁呭嚭搴撶珯鍙�{logicConfig.S_LKKTJBLOC},娌℃湁绌哄伐瑁�);
+                        }
+                    }
+
+                    string cntrCode = mesTask.PALLET_ID;
+                    Location startLoc = LocationHelper.GetLoc(offLineLoc);
+                    if (startLoc != null)
+                    {
+                        // 1.鍒涘缓婊℃枡涓嬬嚎浣滀笟
+                        var wmsTask = new WMSTask()
+                        {
+                            S_CNTR_CODE = cntrCode,
+                            S_CODE = WMSHelper.GenerateTaskNo(),
+                            S_START_LOC = startLoc.S_CODE,
+                            S_START_AREA = startLoc.S_AREA_CODE,
+                            S_END_LOC = "铏氭嫙璐т綅",
+                            S_END_AREA = "铏氭嫙搴撳尯",
+                            S_TYPE = "婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟(闈炵洿杩�",
+                            S_OP_DEF_NAME = "婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟(闈炵洿杩�",
+                            S_OP_DEF_CODE = mesTask.ID.ToString(),
+                            T_START_TIME = DateTime.Now,
+                        };
+                        if (WMSHelper.CreateWmsTask(wmsTask))
+                        {
+                            int priority = 10;
+                            // 2.鍒ゆ柇鏄惁闇�琛ョ┖宸ヨ锛岄渶瑕佸垯鍒涘缓绌哄伐瑁呰ˉ缂撳瓨浣嶄换鍔�+                            if (photoStatus)
+                            {
+                                WCSTask kgzWcsTask = new WCSTask()
+                                {
+                                    S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                    S_OP_CODE = wmsTask.S_CODE,
+                                    S_CODE = WCSHelper.GenerateTaskNo(),
+                                    S_CNTR_CODE = kgzCntrCode,
+                                    S_TYPE = "绌哄伐瑁呭嚭搴撲换鍔�,
+                                    S_START_LOC = kgzStartLoc.S_CODE,
+                                    S_START_AREA = kgzStartLoc.S_AREA_CODE,
+                                    S_END_LOC = kgzEndLoc.S_CODE,
+                                    S_END_AREA = kgzEndLoc.S_AREA_CODE,
+                                    S_SCHEDULE_TYPE = "AGV",
+                                    N_PRIORITY = priority,
+                                    T_START_TIME = DateTime.Now,
+                                };
+
+                                if (WCSHelper.CreateTask(kgzWcsTask))
+                                {
+                                    // 璧风偣銆佺粓鐐瑰姞閿�+                                    LocationHelper.LockLoc(kgzWcsTask.S_START_LOC, 2);
+                                    LocationHelper.LockLoc(kgzWcsTask.S_END_LOC, 1);
+                                }
+                            }
+
+                            // 3.鍒涘缓婊℃枡宸ヨ鍏ュ簱浠诲姟锛堝闇�琛ョ┖宸ヨ锛屽垯灏嗕换鍔$姸鎬佹敼涓洪鍒涘缓锛岀瓑寰呰ˉ绌哄伐瑁呬换鍔″畬鎴愬悗瑙﹀彂锛�+                            WCSTask wcsTask = new WCSTask()
+                            {
+                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                S_OP_CODE = wmsTask.S_CODE,
+                                S_TYPE = "婊℃枡宸ヨ鍏ュ簱浠诲姟(闈炵洿杩�",
+                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                S_START_LOC = startLoc.S_CODE,
+                                S_START_AREA = startLoc.S_AREA_CODE,
+                                S_END_LOC = wmsTask.S_END_LOC,
+                                S_END_AREA = wmsTask.S_END_AREA,
+                                S_SCHEDULE_TYPE = "AGV",
+                                N_PRIORITY = 99,
+                                T_START_TIME = DateTime.Now,
+                            };
+
+                            if (photoStatus)
+                            {
+                                wcsTask.N_B_STATE = -1;
+                                wcsTask.S_B_STATE = "棰勫垱寤�;
+                            }
+
+                            if (WCSHelper.CreateTask(wcsTask))
+                            {
+                                // 璧风偣銆佺粓鐐瑰姞閿�+                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                wmsTask.N_B_STATE = 1;
+                                WMSHelper.UpdateTaskState(wmsTask);
+
+                                // 4.浣滀笟鍒涘缓瀹屾垚鍚庯紝璇诲彇涓棿琛紝鏇存柊涓棿琛ㄧ姸鎬�+                                WMSHelper.readLjMesOffItemTask(wmsTask.S_CODE, mesTask.ID);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"涓嬬嚎浣�{offLineLoc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                        throw new BusinessException($"涓嬬嚎浣�{offLineLoc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                    }
+                }
+                else
+                {
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"闈炵洿杩炰笅绾胯揣浣嶏細{offLineLoc}瑙﹀彂涓嬬嚎璇锋眰锛屾湭鏌ヨ鍒癕ES浠诲姟");
+                    throw new BusinessException($"闈炵洿杩炰笅绾胯揣浣嶏細{offLineLoc}瑙﹀彂涓嬬嚎璇锋眰锛屾湭鏌ヨ鍒癕ES浠诲姟");
+                }
+            }
+            catch (BusinessException be) 
+            {
+                throw be;
+            }
+            catch (Exception ex)
+            {
+                WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, ex.Message);
+                LogHelper.Error("WMS鍐呴儴閿欒锛氳Е鍙戞弧鏂欎笅绾匡紙闈炵洿杩烇級浣滀笟閿欒 ; ERROR_MGS锛� + ex.Message, ex, "WMS");
+                result = false;
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 婊℃枡涓嬬嚎锛堢洿杩烇級
+        /// 1.鍒涘缓婊℃枡涓嬬嚎浣滀笟
+        /// 2.鍒ゆ柇鏄惁闇�琛ョ┖宸ヨ锛岄渶瑕侊紝鍒欏垱寤虹┖宸ヨ鍑哄簱浠诲姟
+        /// 3.鍒涘缓婊℃枡鍏ュ簱浠诲姟
+        /// 4.鍒ゆ柇鐩磋繛妯″紡锛屽鏄儙渚х洿杩炴ā寮忥紝鍒欐彁楂樼┖宸ヨ鍑哄簱浠诲姟浼樺厛绾э紱濡傛槸甯樺竷鐩磋繛妯″紡鍒欙紝鎻愰珮婊℃枡鍏ュ簱浼樺厛绾�+        /// 5.浣滀笟鍒涘缓瀹屾垚鍚庯紝璇诲彇涓棿琛紝鏇存柊涓棿琛ㄧ姸鎬�+        /// </summary>
+        /// <param name="offLineLoc">涓嬬嚎璐т綅</param>
+        /// <param name="cntrNo">涓嬬嚎瀹瑰櫒缂栫爜</param>
+        /// <param name="logicConfig">閫昏緫閰嶇疆</param>
+        /// <returns></returns>
+        public static bool triggerItemOffLineFlow(string offLineLoc, string cntrNo, LogicConfig logicConfig ) {
+            bool result = true;
+            try
+            {
+                // 2.鍒ゆ柇鏄惁闇�琛ョ┖宸ヨ锛岄渶瑕侊紝鍒欏垱寤虹┖宸ヨ鍑哄簱浠诲姟
+                bool photoStatus = false;
+                var hcLoc = LocationHelper.GetLoc(logicConfig.S_LKBKHCLOC);
+                if (hcLoc != null)
+                {
+                    var bufferLocConfig = Settings.GetBufferLocConfig(hcLoc.S_CODE);
+                    if (bufferLocConfig != null)
+                    {
+                        // 娴嬭瘯浠g爜
+                        photoStatus = true;
+
+                       /* // 涓氬姟浠g爜锛屽嬁鍒�+                        var deviceStatusDatas = WCSDispatch.getDeviceStatus(new List<string>() { bufferLocConfig.deviceNo });
+                        if (deviceStatusDatas != null && deviceStatusDatas.Count > 0)
+                        {
+                            var deviceStatus = deviceStatusDatas[0];
+                            if (deviceStatus.workStatus == 1 && deviceStatus.manualStatus == 0)
+                            {
+                                photoStatus = deviceStatus.photoStatus == 1;
+                            }
+                            else
+                            {
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"璁惧鍙�{bufferLocConfig.deviceNo},璁惧褰撳墠澶勪簬涓嶅彲鐢ㄧ姸鎬侊紝璇疯仈绯荤鐞嗕汉鍛樿皟鏁磋澶囩姸鎬�);
+                                throw new BusinessException($"璁惧鍙�{bufferLocConfig.deviceNo},璁惧褰撳墠澶勪簬涓嶅彲鐢ㄧ姸鎬侊紝璇疯仈绯荤鐞嗕汉鍛樿皟鏁磋澶囩姸鎬�);
+                            }
+                        }
+                        else
+                        {
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"璁惧鍙�{bufferLocConfig.deviceNo},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
+                            throw new BusinessException($"璁惧鍙�{bufferLocConfig.deviceNo},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
+                        }*/
+                    }
+                    else
+                    {
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁閰嶇疆灞炴�淇℃伅锛岃鑱旂郴绠$悊浜哄憳閰嶇疆");
+                        throw new BusinessException($"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁閰嶇疆灞炴�淇℃伅锛岃鑱旂郴绠$悊浜哄憳閰嶇疆");
+                    }
+                }
+                else
+                {
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                    throw new BusinessException($"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                }
+
+                Location startLoc = LocationHelper.GetLoc(offLineLoc);
+                if (startLoc == null)
+                {
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"涓嬬嚎浣�{offLineLoc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                    throw new BusinessException($"涓嬬嚎浣�{offLineLoc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                }
+
+                Location endLoc = WMSHelper.getInStockEndLoc(logicConfig.S_AREA_CODE, 1);
+                if (endLoc == null)
+                {
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳唴娌℃湁绌轰綑璐т綅");
+                    throw new BusinessException($"搴撳唴娌℃湁绌轰綑璐т綅");
+                }
+
+                LjMesTask mesTask = WMSHelper.getLjMesTaskByCntr(cntrNo);
+                // 1.鍒涘缓婊℃枡涓嬬嚎浣滀笟
+                var wmsTask = new WMSTask()
+                {
+                    S_CNTR_CODE = cntrNo,
+                    S_CODE = WMSHelper.GenerateTaskNo(),
+                    S_START_LOC = startLoc.S_CODE,
+                    S_START_AREA = startLoc.S_AREA_CODE,
+                    S_END_LOC = endLoc.S_CODE,
+                    S_END_AREA = endLoc.S_AREA_CODE,
+                    S_TYPE = "婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟(鐩磋繛)",
+                    S_OP_DEF_NAME = "婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟(鐩磋繛)",
+                    S_OP_DEF_CODE = mesTask != null ? mesTask.ID.ToString() : null,
+                    T_START_TIME = DateTime.Now,
+                };
+                if (WMSHelper.CreateWmsTask(wmsTask))
+                {
+                    int priority = 10;
+                    Dictionary<int, WCSTask> taskDic = new Dictionary<int, WCSTask>();
+
+                    // 鏄惁鍒涘缓绌哄伐瑁呭嚭鍙d换鍔�+                    if (photoStatus || true )
+                    {
+                        Location kgzStartLoc = WMSHelper.getOutStockStartLoc(logicConfig.S_AREA_CODE, null);
+                        Location kgzEndLoc = LocationHelper.GetLoc(logicConfig.S_LKBKHCLOC);
+                        if (kgzStartLoc == null)
+                        {
+                            WMSHelper.DeleteWmsTask(wmsTask.S_CODE);
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳尯:{logicConfig.S_AREA_CODE},娌℃湁鍙敤鐨勭┖宸ヨ");
+                            throw new BusinessException($"搴撳尯:{logicConfig.S_AREA_CODE},娌℃湁鍙敤鐨勭┖宸ヨ");
+                        }
+                        if (kgzEndLoc == null)
+                        {
+                            WMSHelper.DeleteWmsTask(wmsTask.S_CODE);
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"绌哄伐瑁呯紦瀛樹綅:{logicConfig.S_LKBKHCLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                            throw new BusinessException($"绌哄伐瑁呯紦瀛樹綅:{logicConfig.S_LKBKHCLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                        }
+
+                        var locCntrRels = LocationHelper.GetLocCntr(kgzStartLoc.S_CODE);
+                        if (locCntrRels.Count > 0)
+                        {
+                            string kgzCntrCode = locCntrRels[0].S_CNTR_CODE;
+                            // 濡傛槸鑳庝晶鐩磋繛妯″紡锛屽垯鎻愰珮绌哄伐瑁呭嚭搴撲换鍔′紭鍏堢骇
+                            if (logicConfig.S_TASK_TYPE == "1")
+                            {
+                                priority = 99;
+                            }
+                            WCSTask kgzWcsTask = new WCSTask()
+                            {
+                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                S_OP_CODE = wmsTask.S_CODE,
+                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                S_CNTR_CODE = kgzCntrCode,
+                                S_TYPE = "绌哄伐瑁呭嚭搴撲换鍔�,
+                                S_START_LOC = kgzStartLoc.S_CODE,
+                                S_START_AREA = kgzStartLoc.S_AREA_CODE,
+                                S_END_LOC = kgzEndLoc.S_CODE,
+                                S_END_AREA = kgzEndLoc.S_AREA_CODE,
+                                S_SCHEDULE_TYPE = "WCS",
+                                N_PRIORITY = priority,
+                                T_START_TIME = DateTime.Now,
+                            };
+                            taskDic.Add(priority, kgzWcsTask);
+                        }
+                        else
+                        {
+                            WMSHelper.DeleteWmsTask(wmsTask.S_CODE);
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏌ヨ绌哄伐瑁呰揣浣嶉敊璇紝璐т綅锛歿kgzStartLoc.S_CODE}娌℃湁绌哄伐瑁�);
+                            throw new BusinessException($"鏌ヨ绌哄伐瑁呰揣浣嶉敊璇紝璐т綅锛歿kgzStartLoc.S_CODE}娌℃湁绌哄伐瑁�);
+                        }
+                    }
+
+                    // 濡傛槸甯樺竷鐩磋繛妯″紡鍒欙紝鎻愰珮婊℃枡鍏ュ簱浼樺厛绾�+                    if (logicConfig.S_TASK_TYPE == "2")
+                    {
+                        priority = 99;
+                    }
+                    else
+                    {
+                        priority = 10;
+                    }
+
+                    WCSTask wcsTask = new WCSTask()
+                    {
+                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                        S_OP_CODE = wmsTask.S_CODE,
+                        S_CODE = WCSHelper.GenerateTaskNo(),
+                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                        S_TYPE = wmsTask.S_TYPE,
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = endLoc.S_CODE,
+                        S_END_AREA = endLoc.S_AREA_CODE,
+                        S_SCHEDULE_TYPE = "WCS",
+                        N_PRIORITY = priority,
+                        T_START_TIME = DateTime.Now,
+                    };
+                    taskDic.Add(priority, wcsTask);
+
+                    var tasks = taskDic.OrderByDescending(a => a.Key).Select(a => a.Value).ToList();
+                    foreach (var task in tasks) 
+                    {
+                        if (WCSHelper.CreateTask(task))
+                        {
+                            // 璧风偣銆佺粓鐐瑰姞閿�+                            LocationHelper.LockLoc(task.S_START_LOC, 2);
+                            LocationHelper.LockLoc(task.S_END_LOC, 1);
+                        }
+                    }
+
+                    // 鏇存柊浣滀笟浠诲姟鐘舵�
+                    wmsTask.N_B_STATE = 1;
+                    WMSHelper.UpdateTaskState(wmsTask);
+
+                    // 5.浣滀笟鍒涘缓瀹屾垚鍚庯紝璇诲彇涓棿琛紝鏇存柊涓棿琛ㄧ姸鎬�+                    if (mesTask != null)
+                    {
+                        WMSHelper.readLjMesOffItemTask(wmsTask.S_CODE, mesTask.ID);
+                    }
+                    else 
+                    {
+                        ContainerHelper.UpdateCntrState(cntrNo, 1);
+                        WMSHelper.addRfidAnomalyRecord(cntrNo, 3, offLineLoc, null);
+                    }
+                }
+            }
+            catch (BusinessException be) 
+            {
+                throw be;
+            }
+            catch (Exception ex)
+            {
+                // 鎶ヨ锛歐MS鍐呴儴閿欒锛氳Е鍙戞弧鏂欏伐瑁呬笅绾夸綔涓氶敊璇�+                WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, ex.Message);
+                LogHelper.Info($"WMS鍐呴儴閿欒锛氳Е鍙戞弧鏂欏伐瑁呬笅绾夸綔涓氶敊璇�; 閿欒鍘熷洜锛歿ex.Message}", "WMS");
+                result = false;
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 鍙枡璇锋眰
+        /// 1.鏌ヨ涓棿琛紝鍒ゆ柇鏄惁鏄幆甯︾墿鏂�+        /// 2.鏌ヨ搴撳尯鐗╂枡淇℃伅锛屽苟杩囨护鏁呴殰鐨勫爢鍨涙満绔嬪簱
+        /// 3.鏃犲簱瀛樺啓鍏ヤ腑闂磋〃寮傚父鍜屽紓甯稿師鍥�+        /// 4.璁$畻鍑哄簱璐т綅锛岀敓鎴愬嚭搴撲换鍔�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult callMaterialProcess(CallMaterialRequest model)
+        {
+            ResponseResult responseResult = new ResponseResult();
+            var mesTask = WMSHelper.getLjMesTaskByLoc(model.loc);
+            if (mesTask != null)
+            {
+                Location endLoc = LocationHelper.GetLoc(model.loc);
+                Location startLoc = null;
+                Location middleLoc = null;
+                string scheduleType = "";
+                if (mesTask.PALLET_TYPE == "鐜甫")
+                {
+                    scheduleType = "HDK";
+                    // 鏌ヨ鐜甫搴撹鐗╂枡搴撳瓨鎯呭喌锛屽苟姣旇緝涓庝腑杞簱鐨勫簱瀛樿繘琛屾瘮杈冿紝鍏堝叆鍏堝嚭
+                }
+                else
+                {
+                    scheduleType = "WCS";
+                    // 鏌ヨ搴撳尯鐗╂枡淇℃伅锛屾牴鎹厛鍏ュ厛鍑哄師鍒欒绠楋紝鐗╂枡璧风偣
+                    startLoc = WMSHelper.getOutStockStartLoc(null, mesTask.MATERIAL_CODE);
+                }
+
+                if (startLoc == null)
+                {
+                    // 鏃犲簱瀛樺啓鍏ヤ腑闂磋〃寮傚父鍜屽紓甯稿師鍥�+                    mesTask.RETURN_CODE = "6";
+                    mesTask.RECEIVE_MSG = "娌℃湁搴撳瓨鎴栬澶囨晠闅滄棤娉曞嚭搴�;
+                    WMSHelper.updateLjMesTask(mesTask);
+
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"MES鍙枡浠诲姟{mesTask.ID},娌℃湁搴撳瓨鎴栬澶囨晠闅滄棤娉曞嚭搴�);
+                    responseResult.code = 1;
+                    responseResult.msg = "娌℃湁搴撳瓨鎴栬澶囨晠闅滄棤娉曞嚭搴�;
+                    return responseResult;
+                }
+
+                middleLoc = WMSHelper.GetMinTaskTransfeLoc(startLoc.S_AREA_CODE, 2 , 2);
+                if (middleLoc == null) {
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"MES鍙枡浠诲姟{mesTask.ID},绔嬪簱鎺ラ┏浣嶅彲鑳藉浜庨攣瀹氭垨绂佺敤鐘舵�锛岃鏌ョ湅");
+                    responseResult.code = 1;
+                    responseResult.msg = "绔嬪簱鎺ラ┏浣嶅彲鑳藉浜庨攣瀹氭垨绂佺敤鐘舵�";
+                    return responseResult;
+                }
+
+                String cntrCode = "";
+                var locCntrs = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                if (locCntrs != null && locCntrs.Count > 0)
+                {
+                    cntrCode = locCntrs[0].S_CNTR_CODE;
+                }
+
+                var wmsTask = new WMSTask()
+                {
+                    S_CNTR_CODE = "",
+                    S_CODE = WMSHelper.GenerateTaskNo(),
+                    S_START_LOC = startLoc.S_CODE,
+                    S_START_AREA = startLoc.S_AREA_CODE,
+                    S_END_LOC = endLoc.S_CODE,
+                    S_END_AREA = endLoc.S_AREA_CODE,
+                    S_TYPE = "婊℃枡鍑哄簱浠诲姟",
+                    N_PRIORITY = 10,
+                    T_START_TIME = DateTime.Now,
+                };
+
+                if (WMSHelper.CreateWmsTask(wmsTask))
+                {
+                    // 鍒涘缓涓�鍏ュ簱浠诲姟
+                    WCSTask wcsTask = new WCSTask()
+                    {
+                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                        S_OP_CODE = wmsTask.S_CODE,
+                        S_CODE = WCSHelper.GenerateTaskNo(),
+                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                        S_TYPE = wmsTask.S_TYPE,
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = middleLoc.S_CODE,
+                        S_END_AREA = middleLoc.S_AREA_CODE,
+                        S_SCHEDULE_TYPE = scheduleType,
+                        N_PRIORITY = wmsTask.N_PRIORITY,
+                        T_START_TIME = DateTime.Now,
+                    };
+
+                    if (WCSHelper.CreateTask(wcsTask))
+                    {
+                        // 璧风偣銆佺粓鐐瑰姞閿�+                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+                        LocationHelper.LockLoc(wmsTask.S_END_LOC, 1);
+
+                        // 鏇存柊浣滀笟浠诲姟鐘舵�
+                        wmsTask.N_B_STATE = 1;
+                        WMSHelper.UpdateTaskState(wmsTask);
+                        WMSHelper.updateMesTaskStatus("", "2");
+
+                        // 浠诲姟鍒涘缓鎴愬姛璇诲彇MES浠诲姟
+                        WMSHelper.readLjMesCallItemTask("", mesTask.ID);
+                    }
+                }
+            }
+            else
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"MES鍙枡浠诲姟{mesTask.ID},MES涓棿琛ㄦ病鏈夎绾胯竟璐т綅鐨勫彨鏂欎换鍔★紝璇锋煡鐪�);
+                responseResult.code = 1;
+                responseResult.msg = "MES涓棿琛ㄦ病鏈夎绾胯竟璐т綅鐨勫彨鏂欎换鍔�;
+            }
+            return responseResult;
+        }
+
+
+        /// <summary>
+        /// WCS浠诲姟鐘舵�鍥炴姤
+        /// 浠诲姟鐘舵� 1锛氬紑濮�鎵ц涓紱瀹屾垚锛�锛氬噯澶囧彇璐э紱4锛氬彇璐у畬鎴愶紱5锛氬噯澶囧嵏璐э紱6锛氬嵏璐у畬鎴愶紱7锛氬紓甯稿彇娑堬紱8锛氬己鍒跺畬鎴�+        /// 1.鏍规嵁浠诲姟鐘舵�鍥炴姤鏇存柊璐т綅鐘舵�銆佷换鍔$姸鎬�+        /// 2.鏇存柊浠诲姟涓棿琛ㄧ姸鎬�+        /// 4.鏇存柊鍑哄簱浠诲姟涓棿琛ㄧ姸鎬�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult taskStatusFeedback(TaskStatusFeedbackModel model)
+        {
+            ResponseResult responseResult = new ResponseResult();
+            WCSTask cst = WCSHelper.GetTask(model.taskNo);
+            if (cst != null)
+            {
+                WMSTask mst = WMSHelper.GetWmsTask(cst.S_OP_CODE);
+                if (mst != null)
+                {
+                    switch (model.status)
+                    {
+                        case 1:
+                            WCSHelper.Begin(cst);
+                            WMSHelper.updateMesTaskStatus(mst.S_CODE, "2");
+                            if (cst.S_TYPE.Contains("鍑哄簱"))
+                            {
+                                WMSHelper.addLotOutTask(mst.S_START_LOC);
+                            }
+                            break;
+                        case 2:
+                            WCSHelper.End(cst);
+                            break;
+                        case 3:
+                            WCSHelper.UpdateStatus(cst, "鍑嗗鍙栬揣");
+                            break;
+                        case 4:
+                            WCSHelper.UpdateStatus(cst, "鍙栬揣瀹屾垚");
+                            TaskProcess.OperateStatus(cst, 4);
+                            break;
+                        case 5:
+                            WCSHelper.UpdateStatus(cst, "鍑嗗鍗歌揣");
+                            break;
+                        case 6:
+                            WCSHelper.UpdateStatus(cst, "鍗歌揣瀹屾垚");
+                            TaskProcess.OperateStatus(cst, 6);
+                            break;
+                        case 7:
+                            WCSHelper.UpdateStatus(cst, "寮傚父鍙栨秷");
+                            TaskProcess.OperateStatus(cst, 7);
+                            mst.N_B_STATE = 3;
+                            WMSHelper.UpdateTaskState(mst);
+                            WMSHelper.updateMesTaskStatus(mst.S_CODE, "5", "WCS寮傚父鍙栨秷浠诲姟");
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"WCS寮傚父鍙栨秷浠诲姟锛屼换鍔″彿锛歿cst.S_CODE}");
+                            break;
+                        case 8:
+                            WCSHelper.UpdateStatus(cst, "寮哄埗瀹屾垚");
+                            break;
+                    }
+                    // 娣诲姞WCS鍔ㄤ綔璁板綍
+                    WCSHelper.AddActionRecord(model.taskNo, model.status, model.deviceNo, model.loc);
+
+                    if (model.status == 2 || model.status == 8)
+                    {
+
+                        if (cst.S_TYPE.Contains("鍏ュ簱"))
+                        {
+                            var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE);
+                            if (cntrItemRels != null && cntrItemRels.Count > 0)
+                            {
+                                foreach (var cntrItem in cntrItemRels)
+                                {
+                                    cntrItem.T_INBOUND_TIME = DateTime.Now;
+                                    ContainerHelper.updateCntrItemRel(cntrItem);
+                                }
+                            }
+                        }
+
+                        if (cst.S_TYPE.Contains("銆愬紓甯搞�"))
+                        {
+                            WCSHelper.ActivatePreCreateTask(mst.S_CODE, 1);
+                        }
+                        else 
+                        {
+                            WCSHelper.ActivatePreCreateTask(mst.S_CODE);
+                        }
+
+                        if (WMSHelper.isFinishTask(mst.S_CODE))
+                        {
+                            // 鏇存柊浣滀笟浠诲姟鐘舵�
+                            mst.N_B_STATE = 2;
+                            mst.T_END_TIME = DateTime.Now;
+                            WMSHelper.UpdateTaskState(mst);
+
+                            // 鏇存柊浠诲姟涓棿琛ㄧ姸鎬�+                            WMSHelper.updateMesTaskStatus(mst.S_CODE, "3");
+
+                            if (cst.S_TYPE.Contains("鍑哄簱"))
+                            {
+                                // 鏇存柊鍑哄簱浠诲姟涓棿琛ㄧ姸鎬�+                                WMSHelper.updateLotOutTask(cst.S_CNTR_CODE, "2");
+                            }
+                        }
+                    }
+                }
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// WCS鐢宠缁堢偣
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult applyDest(ApplyDestinationModel model) {
+            ResponseResult result = new ResponseResult();
+
+            ApplyDest applyDest = new ApplyDest();
+            WCSTask cst = WCSHelper.GetTask(model.taskNo);
+            if (cst != null && cst.N_B_STATE < 3)
+            {
+                WMSTask mst = WMSHelper.GetWmsTask(cst.S_OP_CODE);
+                if (mst != null && mst.N_B_STATE < 2) {
+
+                    int emptyFlag = 0;  // 瀹瑰櫒绌烘弧鏍囪瘑
+                    var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE);
+                    if (cntrItemRels.Count > 0) {
+                        emptyFlag = 1;
+                    }
+
+                    // 1锛氬爢鍨涙満鏀捐揣寮傚父鐢宠鏂扮粓鐐�+                    if (model.applyType == 1) {
+                        // 鎶ヨ锛氭祦绋嬪紓甯�+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鍫嗗灈鏈烘斁璐у紓甯革紝浠诲姟鍙凤細{cst.S_CODE}锛屽紓甯歌揣浣嶏細{cst.S_END_LOC}");
+
+                        // 1.灏嗗紓甯歌揣浣嶄笂閿侊紝骞舵姤璀�+                        LocationHelper.LockLoc(cst.S_END_LOC, 3);
+
+                        // 2.鏌ヨ鏂扮殑鍏ュ簱缁堢偣
+                        Location endLoc = WMSHelper.getInStockEndLoc(cst.S_END_AREA, emptyFlag );
+                        cst.S_END_LOC = endLoc.S_CODE;
+                        WCSHelper.UpdateEndLoc(cst);
+
+                        LocationHelper.LockLoc(endLoc.S_CODE, 1);
+                        applyDest.destLoc = endLoc.S_CODE;
+                    }
+                }
+            }
+            result.data = applyDest;
+            return result;
+        }
+
+        /// <summary>
+        /// AGV鐢宠缁堢偣
+        /// 椤哄簭 RFID楠岃瘉 -> RFID涓庝换鍔″彿楠岃瘉 -> 鐗╂枡鍚堟牸鐘舵�楠岃瘉 -> 铏氭嫙缁堢偣
+        /// 鐢宠绫诲瀷锛�1.铏氭嫙缁堢偣 2.RFID涓庝换鍔′笉鍖归厤 3.鐗╂枡鐘舵�涓嶅悎鏍�+        /// 鍏ュ簱绛栫暐锛氬厛璁$畻搴撳尯鐨勫绉巼锛屽啀璁$畻搴撳尯瀵瑰簲鐨勫叆搴撶珯鍙扮殑浠诲姟鏁帮紝閮藉彇鏈�皬鐨�+        /// 
+        /// 1.纭畾浠诲姟鏄惁鍦ㄦ墽琛屼腑
+        /// 2.鍒ゆ柇鐢宠绫诲瀷
+        ///     1).铏氭嫙缁堢偣锛岃绠楀叆搴撶珯鍙帮紝鍚屾椂棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�+        ///     2).RFID楠岃瘉澶辫触,璁板綍寮傚父锛屽苟璁$畻寮傚父鍖虹殑绌鸿揣浣�+        ///     3).RFID涓庝换鍔′笉鍖归厤锛岃褰曞紓甯稿苟鎶ヨ锛屽苟璁$畻寮傚父鍖虹殑绌鸿揣浣�+        ///     4).鐗╂枡鐘舵�涓嶅悎鏍�璁板綍寮傚父锛岃绠楀叆搴撶珯鍙帮紝鍚屾椂棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�锛涙渶鍚庨噸鏂扮敓鎴愭柊鐨勫嚭搴撲换鍔�+        ///         
+        /// 3.  2)\3) 寮傚父鍖烘病鏈夌┖璐т綅锛岃绠楀叆搴撶珯鍙帮紝鍚屾椂棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�+        /// 
+        /// 4.浣欐枡/绌哄伐瑁呭洖搴撲换鍔�+        ///     1).鏍规嵁RFID鏌ヨ涓棿琛紝鍒ゆ柇鐗╂枡绫诲瀷,濡備负绌哄伐瑁咃紝姝e父鍏ュ簱锛堣绠楀叆搴撶珯鍙帮紝鐢熸垚棰勫垱寤烘惉杩愪换鍔★級
+        ///     2).濡傛槸浣欐枡锛屾煡璇㈡槸鍚︽湁浣欐枡鏈夊叧鐨勫彨鏂欎换鍔★紝涓旀湭鎵ц锛屽垯鍙栨秷鍙枡浠诲姟锛屼慨鏀圭粓鐐逛负璇ュ彨鏂欑粓鐐�+        ///     3).濡傛病鏈夌浉鍏冲彨鏂欎换鍔★紝鍒欐甯稿叆搴�+        /// 
+        /// 5.绌哄伐瑁呭嚭搴撳拰鎴愬瀷鏈哄彨鏂欎换鍔★紝褰撶敵璇风被鍨嬩负2,3,4鏄紝闇�閲嶆柊鐢熸垚浠诲姟
+        /// </summary>
+        /// <param name="taskNo"></param>
+        /// <param name="loc"></param>
+        /// <param name="trayCode"></param>
+        /// <param name="applyType">1.姝e父 2.寮傚父</param>
+        /// <returns></returns>
+        public static string AGVApplyDest(string taskNo ,string loc ,string trayCode,string applyType)
+        {
+            LogHelper.Info($"AGV鐢宠缁堢偣锛屼换鍔″彿锛歿taskNo},褰撳墠浣嶇疆锛歿loc},鐢宠绫诲瀷锛歿applyType}", "HosttoagvTask");
+            string applyDest = null;
+            try
+            {
+                WCSTask cst = WCSHelper.GetTask(taskNo);
+                if (cst != null && cst.N_B_STATE < 3)
+                {
+                    WMSTask mst = WMSHelper.GetWmsTask(cst.S_OP_CODE);
+                    if (mst != null && mst.N_B_STATE < 2)
+                    {
+                        // 闃叉閲嶅鐢宠
+                        if ((applyType != "1" && !cst.S_TYPE.Contains("銆愬紓甯搞�")) || (applyType == "1" && cst.S_END_LOC.Contains("铏氭嫙璐т綅")))
+                        {
+                            // 鏂滆绔嬪簱
+                            if (mst.S_OP_DEF_NAME.Contains("鏂滆"))
+                            {
+                                applyDest = applyAgvDestXC(applyType, mst, cst);
+                            }
+                            else
+                            {
+                                applyDest = applyAgvDest(applyType, loc, mst, cst);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex) 
+            {
+                WMSHelper.addAlarmRecord("绯荤粺閿欒","楂�, $"AGV鐢宠缁堢偣锛學MS鍐呴儴閿欒锛岄敊璇師鍥狅細{ex.Message}", "AGV");
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 鏂滆绔嬪簱浠诲姟锛孉GV鐢宠缁堢偣
+        ///   1).鏍规嵁RFID鏌ヨ涓棿琛紝鍒ゆ柇鐗╂枡绫诲瀷,濡備负绌哄伐瑁咃紝姝e父鍏ュ簱锛堣绠楀叆搴撶珯鍙帮紝鐢熸垚棰勫垱寤烘惉杩愪换鍔★級
+        ///   2).濡傛槸浣欐枡锛屾煡璇㈡槸鍚︽湁浣欐枡鏈夊叧鐨勫彨鏂欎换鍔★紝涓旀湭鎵ц锛屽垯鍙栨秷鍙枡浠诲姟锛屼慨鏀圭粓鐐逛负璇ュ彨鏂欑粓鐐�+        /// </summary>
+        /// <param name="applyType"></param>
+        /// <param name="mst"></param>
+        /// <param name="cst"></param>
+        /// <returns></returns>
+        public static string applyAgvDestXC(string applyType, WMSTask mst, WCSTask cst)
+        {
+            string destLoc = null;
+            Location agvEndLoc = null;
+            Location wmsEndLoc = null;
+            if (applyType == "1")
+            {
+                if (mst.S_TYPE == "浣欐枡/绌哄伐瑁呭叆搴�)
+                {
+                    var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId);
+                    if (bo) 
+                    {
+                        var mesTask = WMSHelper.GetLjMesTaskById(mesId);
+                        if (mesTask.QTY != 0)
+                        {
+                            var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE);
+                            if (awaitTask != null)
+                            {
+                                // 鍙栨秷浠诲姟
+                                ApiHelper.cancelTask(awaitTask.S_CODE);
+                                // 淇敼缁堢偣
+                                agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
+                                wmsEndLoc = agvEndLoc;
+                                mst.S_TYPE = "鍙枡鍑哄簱浠诲姟";
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (agvEndLoc == null)
+            {
+                string msg = "";
+                if (applyType == "2" || applyType == "3" || applyType == "4")
+                {
+                    cst.S_TYPE = cst.S_TYPE + "銆愬紓甯搞�";
+                    msg = "宸ヨ寮傚父";
+                }
+
+                // TODO 鍙嶉鏂滆绔嬪簱寮傚父锛岃姹傛枩瑁佸叆搴撶粓鐐�+                agvEndLoc = null;
+
+            }
+
+            if (agvEndLoc != null)
+            {
+                destLoc = agvEndLoc.S_CODE;
+
+                cst.S_END_LOC = agvEndLoc.S_CODE;
+                cst.S_END_AREA = agvEndLoc.S_AREA_CODE;
+                WCSHelper.UpdateEndLoc(cst);
+            }
+
+            if (wmsEndLoc != null)
+            {
+                mst.S_END_LOC = wmsEndLoc.S_CODE;
+                mst.S_END_AREA = wmsEndLoc.S_AREA_CODE;
+                WMSHelper.UpdateTaskEnd(mst);
+            }
+            return destLoc;
+        }
+
+        /// <summary>
+        /// AGV鐢宠缁堢偣
+        /// 鍦烘櫙锛�.浣欐枡/绌哄伐瑁呭叆搴撲换鍔★紙鎴愬瀷鏈猴級 2.婊℃枡/绌哄伐瑁呭叆搴擄紙鏈哄彴锛�3.婊℃枡/绌哄伐瑁呭嚭搴撳紓甯�4.婊℃枡/绌哄伐瑁呭叆搴撳紓甯�+        /// </summary>
+        /// <param name="applyType">1.姝e父 2.RFID涓庝换鍔FID涓嶅尮閰�3.鐗╂枡鐘舵�涓嶅悎鏍�/param>
+        /// <param name="loc"></param>
+        /// <param name="mst"></param>
+        /// <param name="cst"></param>
+        /// <returns></returns>
+        public static string applyAgvDest(string applyType,string loc, WMSTask mst, WCSTask cst)
+        {
+            LogHelper.Info($"寮�鐢宠AGV缁堢偣", "AGV");
+            string destLoc = null;
+            Location agvEndLoc = null;
+            Location wmsEndLoc = null;
+            Location currentLoc = LocationHelper.GetLoc(loc);
+
+            // RFID 妫�祴姝e父
+            if (applyType == "1") 
+            {
+                // 鍦烘櫙锛�.浣欐枡/绌哄伐瑁呭叆搴撲换鍔�+                // 1).鏍规嵁RFID鏌ヨ涓棿琛紝鍒ゆ柇鐗╂枡绫诲瀷,濡備负绌哄伐瑁咃紝姝e父鍏ュ簱锛堣绠楀叆搴撶珯鍙帮紝鐢熸垚棰勫垱寤烘惉杩愪换鍔★級
+                // 2).濡傛槸浣欐枡锛屾煡璇㈡槸鍚︽湁浣欐枡鏈夊叧鐨勫彨鏂欎换鍔★紝涓旀湭鎵ц锛屽垯鍙栨秷鍙枡浠诲姟锛屼慨鏀圭粓鐐逛负璇ュ彨鏂欑粓鐐�+                if (cst.S_TYPE.Contains("浣欐枡/绌哄伐瑁呭叆搴�))
+                {
+                    LogHelper.Info($"浣欐枡/绌哄伐瑁呭叆搴撲换鍔★紝鍒ゆ柇鏄惁鍥炲簱鎴栧彂寰�彨鏂欑偣", "AGV");
+                    var mesTask = WMSHelper.GetLjMesTaskById(int.Parse(mst.S_OP_DEF_CODE));
+                    if (mesTask.QTY != 0)
+                    {
+                        var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE);
+                        if (awaitTask != null)
+                        {
+                            LogHelper.Info($"浣欐枡/绌哄伐瑁呭叆搴撲换鍔★紝瀛樺湪绛夊緟鐨勫彨鏂欎换鍔★紝鍙戝線鍙枡鐐�, "AGV");
+                            // 鍙栨秷浠诲姟
+                            ApiHelper.cancelTask(awaitTask.S_CODE);
+                            // 淇敼缁堢偣
+                            agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
+
+                            cst.S_TYPE = "鍙枡鍑哄簱浠诲姟";
+                            mst.S_TYPE = mst.S_TYPE + "銆愬彨鏂欍�";
+                        }
+                    }
+                }
+
+                // 鍦烘櫙锛�.婊℃枡/绌哄伐瑁呭叆搴�2.浣欐枡/绌哄伐瑁呭叆搴�+                if (agvEndLoc == null && cst.S_TYPE.Contains("鍏ュ簱")) 
+                {
+                    LogHelper.Info($"濡傛病鏈夋弧瓒虫潯浠剁殑agv缁堢偣璐т綅锛屽垯鍙戝線绔嬪簱", "AGV");
+                    Container container = ContainerHelper.GetCntr(cst.S_CNTR_CODE);
+                    if (container != null)
+                    {
+                        wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE);
+                        if (wmsEndLoc != null)
+                        {
+                            agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2);  // 1.绔嬪簱鎺ラ┏浣�1.鍏ュ簱 2.闈炵洿杩�+                            if (agvEndLoc != null)
+                            {
+                                LogHelper.Info($"鍒涘缓绔嬪簱绔欏彴鍒扮珛搴撶殑棰勫垱寤轰换鍔★紝agv缁堢偣璐т綅:{agvEndLoc.S_CODE},绔嬪簱缁堢偣璐т綅:{wmsEndLoc.S_CODE}", "AGV");
+                                // 棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�+                                WCSTask wcsTask = new WCSTask()
+                                {
+                                    S_OP_NAME = mst.S_OP_DEF_NAME,
+                                    S_OP_CODE = mst.S_CODE,
+                                    S_CODE = WCSHelper.GenerateTaskNo(),
+                                    S_CNTR_CODE = cst.S_CNTR_CODE,
+                                    S_TYPE = mst.S_TYPE,
+                                    S_START_LOC = agvEndLoc.S_CODE,
+                                    S_START_AREA = agvEndLoc.S_AREA_CODE,
+                                    S_END_LOC = wmsEndLoc.S_CODE,
+                                    S_END_AREA = wmsEndLoc.S_AREA_CODE,
+                                    S_SCHEDULE_TYPE = "WCS",
+                                    N_PRIORITY = 10,
+                                    N_B_STATE = -1,
+                                    T_START_TIME = DateTime.Now,
+                                };
+                                if (WCSHelper.CreateTask(wcsTask))
+                                {
+                                    // 璧风偣銆佺粓鐐瑰姞閿�+                                    LocationHelper.LockLoc(wcsTask.S_START_LOC, 1);
+                                    LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+                                }
+                            }
+                            else
+                            {
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛岀珛搴�{wmsEndLoc.S_AREA_CODE}鏈厤缃珛搴撴帴椹充綅");
+                                return null;
+                            }
+                        }
+                        else
+                        {
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛屾湭鏌ヨ鍒扮┖浣欑珛搴撹揣浣�);
+                            return null;
+                        }
+                    }
+                    else
+                    {
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛屾湭鏌ヨ鍒板鍣ㄧ紪鐮�{cst.S_CNTR_CODE}鐨勫鍣�);
+                        return null;
+                    }
+                }
+            }
+
+            // 鍦烘櫙锛�.婊℃枡/绌哄伐瑁呭嚭搴撳紓甯�2.婊℃枡/绌哄伐瑁呭叆搴撳紓甯革紙绌哄伐瑁呭嚭搴撳紓甯�銆佹弧鏂欏叆搴撳紓甯革級
+            if (applyType == "2" )
+            {
+                WCSHelper.CancelPreCreateTask(mst.S_CODE);
+                mst.S_TYPE = mst.S_TYPE + "銆愬紓甯搞�";
+
+                // 1.寮傚父宸ヨ浼樺厛鍙戝線寮傚父鍖�+                LogHelper.Info($"寮傚父宸ヨ浼樺厛鍙戝線寮傚父鍖�, "AGV");
+                agvEndLoc = WMSHelper.getAbnormalAreaLoc(currentLoc.S_AREA_CODE);
+                if (agvEndLoc != null)
+                {
+                    wmsEndLoc = agvEndLoc;
+                }
+                else
+                {
+                    LogHelper.Info($"寮傚父鍖烘病鏈夌┖璐т綅锛屽彂寰�珛搴�, "AGV");
+                }
+
+                // 2.寮傚父鍖烘病鏈夌┖璐т綅锛屽垯鍙戝線绔嬪簱
+                if (agvEndLoc == null) 
+                {
+                    LogHelper.Info($"濡傛病鏈夋弧瓒虫潯浠剁殑agv缁堢偣璐т綅锛屽垯鍙戝線绔嬪簱", "AGV");
+                    Container container = ContainerHelper.GetCntr(cst.S_CNTR_CODE);
+                    if (container != null)
+                    {
+                        wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE);
+                        if (wmsEndLoc != null)
+                        {
+                            agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2);  // 1.绔嬪簱鎺ラ┏浣�1.鍏ュ簱 2.闈炵洿杩�+                            if (agvEndLoc != null)
+                            {
+                                LogHelper.Info($"鍒涘缓绔嬪簱绔欏彴鍒扮珛搴撶殑棰勫垱寤轰换鍔★紝agv缁堢偣璐т綅:{agvEndLoc.S_CODE},绔嬪簱缁堢偣璐т綅:{wmsEndLoc.S_CODE}", "AGV");
+                                // 棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�+                                WCSTask wcsTask = new WCSTask()
+                                {
+                                    S_OP_NAME = mst.S_OP_DEF_NAME,
+                                    S_OP_CODE = mst.S_CODE,
+                                    S_CODE = WCSHelper.GenerateTaskNo(),
+                                    S_CNTR_CODE = cst.S_CNTR_CODE,
+                                    S_TYPE = cst.S_TYPE + "銆愬紓甯搞�",
+                                    S_START_LOC = agvEndLoc.S_CODE,
+                                    S_START_AREA = agvEndLoc.S_AREA_CODE,
+                                    S_END_LOC = wmsEndLoc.S_CODE,
+                                    S_END_AREA = wmsEndLoc.S_AREA_CODE,
+                                    S_SCHEDULE_TYPE = "WCS",
+                                    N_PRIORITY = 10,
+                                    N_B_STATE = -1,
+                                    S_B_STATE = "棰勫垱寤�,
+                                    T_START_TIME = DateTime.Now,
+                                };
+                                if (WCSHelper.CreateTask(wcsTask))
+                                {
+                                    // 璧风偣銆佺粓鐐瑰姞閿�+                                    LocationHelper.LockLoc(wcsTask.S_START_LOC, 1);
+                                    LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+                                    cst.S_TYPE = cst.S_TYPE + "銆愬紓甯搞�";
+                                }
+                            }
+                            else
+                            {
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛屾湭鏌ヨ鍒扮珛搴撴帴椹充綅");
+                                return null;
+                            }
+                        }
+                        else
+                        {
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛屾湭鏌ヨ鍒扮┖浣欑珛搴撹揣浣�);
+                            return null;
+                        }
+                    }
+                    else
+                    {
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛屾湭鏌ヨ鍒板鍣ㄧ紪鐮�{cst.S_CNTR_CODE}鐨勫鍣�);
+                        return null;
+                    }
+                }
+            }
+
+            if (agvEndLoc != null && wmsEndLoc != null)
+            {
+                destLoc = agvEndLoc.S_CODE;
+                cst.S_END_LOC = agvEndLoc.S_CODE;
+                cst.S_END_AREA = agvEndLoc.S_AREA_CODE;
+                WCSHelper.UpdateEndLoc(cst);
+
+                mst.S_END_LOC = wmsEndLoc.S_CODE;
+                mst.S_END_AREA = wmsEndLoc.S_AREA_CODE;
+                WMSHelper.UpdateTaskEnd(mst);
+            }
+
+            // 閲嶆柊鍙戣捣鏂颁换鍔�+            if (applyType != "1")
+            {
+                var mesTask = WMSHelper.GetLjMesTaskByAgvorderId(mst.S_CODE);
+                if (mesTask != null) 
+                {
+                    if (mst.S_TYPE.Contains("鍙枡鍑哄簱浠诲姟"))
+                    {
+                        LogHelper.Info($"鍙枡鍑哄簱浠诲姟寮傚父锛屽啀娆″彂璧峰彨鏂欏嚭搴撲换鍔�, "AGV");
+                        callMaterial(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
+                    }
+
+                    // 婊℃枡涓嬬嚎锛堥潪鐩磋繛锛�+                    if (mst.S_TYPE.Contains("婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟") && cst.S_TYPE.Contains("绌哄伐瑁呭嚭搴撲换鍔�))
+                    {
+                        LogHelper.Info($"婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟寮傚父锛屽啀娆″彂璧锋弧鏂�寮傚父宸ヨ鍏ュ簱浠诲姟", "AGV");
+                        var logicConfig = WMSHelper.getLogicConfigByJtCode(mesTask.EQP);
+                        if (logicConfig != null)
+                        {
+                            triggerItemOffLineFlow4(mesTask.POSITION_ID, mst.S_CNTR_CODE, logicConfig ,mesTask);
+                        }
+                        else
+                        {
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"MES浠诲姟{mesTask.ID},鏈哄彴鍙凤細{mesTask.EQP},鏈煡璇㈠埌閫昏緫绾胯矾", "AGV");
+                        }
+                    }
+                }
+            }
+            return destLoc;
+        }
+
+        /// <summary>
+        /// 鎴愭柊鏈哄彨鏂�+        /// </summary>
+        /// <param name="materialCode"></param>
+        /// <param name="jtNo"></param>
+        /// <param name="mesTaskId"></param>
+        public static void callMaterial(string materialCode, string jtNo, int mesTaskId)
+        {
+            string cntrCode = "";
+            var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
+
+            if (mesTask != null)
+            {
+                Location endLoc = WMSHelper.getCallMaterialLocCode(jtNo);
+                if (endLoc != null)
+                {
+                    Location middleLoc = null;
+                    Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode);
+                    if (startLoc != null)
+                    {
+                        var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                        if (locCntrRels.Count > 0)
+                        {
+                            cntrCode = locCntrRels[0].S_CNTR_CODE;
+                            middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2);
+                            if (middleLoc != null)
+                            {
+                                // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�+                                var wmsTask = new WMSTask()
+                                {
+                                    S_CNTR_CODE = cntrCode,
+                                    S_CODE = WMSHelper.GenerateTaskNo(),
+                                    S_START_LOC = startLoc.S_CODE,
+                                    S_START_AREA = startLoc.S_AREA_CODE,
+                                    S_END_LOC = endLoc.S_CODE,
+                                    S_END_AREA = endLoc.S_AREA_CODE,
+                                    S_TYPE = "鍙枡鍑哄簱浠诲姟",
+                                    S_OP_DEF_CODE = mesTaskId.ToString(),
+                                    S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�,
+                                    T_START_TIME = DateTime.Now,
+                                };
+                                if (WMSHelper.CreateWmsTask(wmsTask))
+                                {
+                                    WCSTask wcsTask = new WCSTask()
+                                    {
+                                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                        S_OP_CODE = wmsTask.S_CODE,
+                                        S_CODE = WCSHelper.GenerateTaskNo(),
+                                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                        S_TYPE = wmsTask.S_TYPE,
+                                        S_START_LOC = startLoc.S_CODE,
+                                        S_START_AREA = startLoc.S_AREA_CODE,
+                                        S_END_LOC = middleLoc.S_CODE,
+                                        S_END_AREA = middleLoc.S_AREA_CODE,
+                                        S_SCHEDULE_TYPE = "WCS",
+                                        N_PRIORITY = 10,
+                                        T_START_TIME = DateTime.Now,
+                                    };
+
+                                    if (WCSHelper.CreateTask(wcsTask))
+                                    {
+                                        // 璧风偣銆佺粓鐐瑰姞閿�+                                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                        // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                        wmsTask.N_B_STATE = 1;
+                                        WMSHelper.UpdateTaskState(wmsTask);
+                                    }
+
+                                    // 棰勫垱寤轰簩娈典换鍔�+                                    WCSTask twoWcsTask = new WCSTask()
+                                    {
+                                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                        S_OP_CODE = wmsTask.S_CODE,
+                                        S_CODE = WCSHelper.GenerateTaskNo(),
+                                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                        S_TYPE = wmsTask.S_TYPE,
+                                        S_START_LOC = middleLoc.S_CODE,
+                                        S_START_AREA = middleLoc.S_AREA_CODE,
+                                        S_END_LOC = endLoc.S_CODE,
+                                        S_END_AREA = endLoc.S_AREA_CODE,
+                                        S_SCHEDULE_TYPE = "AGV",
+                                        N_PRIORITY = 10,
+                                        T_START_TIME = DateTime.Now,
+                                        N_B_STATE = -1
+                                    };
+                                    WCSHelper.CreateTask(twoWcsTask);
+                                    WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId);
+                                }
+                            }
+                            else
+                            {
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
+                            }
+                        }
+                        else
+                        {
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝寮�璐т綅:{startLoc.S_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�);
+                        }
+                    }
+                    else
+                    {
+                        mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻";
+                        WMSHelper.updateLjMesTask(mesTask);
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻");
+                    }  
+                }
+            }
+            
+        }
+        
+        /// <summary>
+        /// 鎴愭柊鏈哄彨鏂�鐜甫搴�
+        /// 1.鏌ヨ鐜甫搴撶墿鏂欏簱瀛�+        /// 2.鏌ヨ涓浆搴撳簱瀛橈紝鏍规嵁鍏ュ簱鏃堕棿 杩涜鍏堝叆鍏堝嚭
+        /// 3.濡傛灉涓虹幆甯﹀簱鐗╂枡锛屽垯灏唌es浠诲姟鍐欏叆鐜甫搴撲换鍔′腑闂磋〃
+        /// </summary>
+        /// <param name="materialCode"></param>
+        /// <param name="endLocCode"></param>
+        /// <param name="mesTaskId"></param>
+        public static void callMaterialXC(string materialCode, string endLocCode, int mesTaskId)
+        {
+            // 1.鏌ヨ鐜甫搴撶墿鏂欏簱瀛�+            DateTime inStockTimeXc = DateTime.MinValue;
+            List<CntrItemRel> cntrItemRelsXc = new List<CntrItemRel>();
+            if (cntrItemRelsXc.Count > 0) 
+            {
+                inStockTimeXc = cntrItemRelsXc[0].T_INBOUND_TIME;
+            }
+
+            // 2.鏌ヨ涓浆搴撳簱瀛�+            DateTime inStockTime = DateTime.MinValue;
+            var cntrItemRels = WMSHelper.getZZKInventoryInfo(materialCode);
+            if (cntrItemRels.Count > 0) 
+            {
+                inStockTime = cntrItemRels[0].T_INBOUND_TIME;   
+            }
+
+            // 3.鏍规嵁鍏堣繘鍏堝嚭璁$畻鍑哄簱鐨勭墿鏂欐槸鐜甫搴�杩樻槸涓浆搴�+            var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
+            if (inStockTime >= inStockTimeXc)
+            {
+                //鏂滆鐗╂枡鍑哄簱
+                if (cntrItemRelsXc.Count > 0) 
+                {
+                    // 4.灏哅ES浠诲姟鍐欏叆鐜甫搴撲换鍔′腑闂磋〃
+                    WMSHelper.addLjXcTask(mesTask);
+                }
+            }
+            else 
+            {
+                //涓浆搴撶墿鏂欏嚭搴�+                if (cntrItemRels.Count > 0) 
+                {
+                    var cntrItemRel = cntrItemRels[0];
+                    var locCntrRel = LocationHelper.GetLocCntrByCntr(cntrItemRel.S_CNTR_CODE);
+                    if (locCntrRel != null) 
+                    {
+                      var endLoc = LocationHelper.GetLoc(locCntrRel.S_LOC_CODE);
+                        if (endLoc != null)
+                        {
+                            Location middleLoc = null;
+                            Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode);
+                            if (startLoc != null)
+                            {
+                                var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                                if (locCntrRels.Count > 0)
+                                {
+                                    var cntrCode = cntrItemRel.S_CNTR_CODE;
+                                    middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2);
+                                    if (middleLoc != null)
+                                    {
+                                        // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�+                                        var wmsTask = new WMSTask()
+                                        {
+                                            S_CNTR_CODE = cntrCode,
+                                            S_CODE = WMSHelper.GenerateTaskNo(),
+                                            S_START_LOC = startLoc.S_CODE,
+                                            S_START_AREA = startLoc.S_AREA_CODE,
+                                            S_END_LOC = endLoc.S_CODE,
+                                            S_END_AREA = endLoc.S_AREA_CODE,
+                                            S_TYPE = "鍙枡鍑哄簱浠诲姟",
+                                            S_OP_DEF_CODE = mesTaskId.ToString(),
+                                            S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�,
+                                            T_START_TIME = DateTime.Now,
+                                        };
+                                        if (WMSHelper.CreateWmsTask(wmsTask))
+                                        {
+                                            WCSTask wcsTask = new WCSTask()
+                                            {
+                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                                S_OP_CODE = wmsTask.S_CODE,
+                                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                                S_TYPE = wmsTask.S_TYPE,
+                                                S_START_LOC = startLoc.S_CODE,
+                                                S_START_AREA = startLoc.S_AREA_CODE,
+                                                S_END_LOC = middleLoc.S_CODE,
+                                                S_END_AREA = middleLoc.S_AREA_CODE,
+                                                S_SCHEDULE_TYPE = "WCS",
+                                                N_PRIORITY = 10,
+                                                T_START_TIME = DateTime.Now,
+                                            };
+
+                                            if (WCSHelper.CreateTask(wcsTask))
+                                            {
+                                                // 璧风偣銆佺粓鐐瑰姞閿�+                                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                                // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                                wmsTask.N_B_STATE = 1;
+                                                WMSHelper.UpdateTaskState(wmsTask);
+                                            }
+
+                                            // 棰勫垱寤轰簩娈典换鍔�+                                            WCSTask twoWcsTask = new WCSTask()
+                                            {
+                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                                S_OP_CODE = wmsTask.S_CODE,
+                                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                                S_TYPE = wmsTask.S_TYPE,
+                                                S_START_LOC = middleLoc.S_CODE,
+                                                S_START_AREA = middleLoc.S_AREA_CODE,
+                                                S_END_LOC = endLoc.S_CODE,
+                                                S_END_AREA = endLoc.S_AREA_CODE,
+                                                S_SCHEDULE_TYPE = "AGV",
+                                                N_PRIORITY = 10,
+                                                T_START_TIME = DateTime.Now,
+                                                N_B_STATE = -1
+                                            };
+                                            WCSHelper.CreateTask(twoWcsTask);
+                                            WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId);
+                                        }
+                                    }
+                                    else
+                                    {
+                                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
+                                    }
+                                }
+                                else
+                                {
+                                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝寮�璐т綅:{startLoc.S_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�);
+                                }
+                            }
+                            else
+                            {
+                                mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻";
+                                WMSHelper.updateLjMesTask(mesTask);
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻");
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 浣欐枡/绌烘墭鍥炲簱
+        /// 
+        /// 1.鏌ヨ鎴愬瀷鏈哄彨鏂欑粓鐐瑰搴旂殑 浣欐枡/绌烘墭杩斿洖浣�+        /// 2.鏌ヨmes浠诲姟涓棿琛ㄦ槸鍚﹀瓨鍦ㄨ繑鏂欎换鍔�+        /// 3.鍒涘缓浣欐枡鍥炲簱浣滀笟锛屽垱寤篴gv鎼繍浠诲姟锛岃櫄鎷熺粓鐐�+        /// </summary>
+        /// <param name="locCode">鎴愬瀷鏈哄彨鏂欑粓鐐�/param>
+        /// <param name="jtNo">鎴愬瀷鏈哄彨鏂欑粓鐐�/param>
+        public static void returnMaterialOrEmptyTray(string locCode ,string jtNo) 
+        {
+            if (locCode != null)
+            {
+                var mesTask = WMSHelper.getLjMesTaskByJtNo(jtNo);
+                if (mesTask != null)
+                {
+                    createReturnTask(locCode, mesTask);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鍒涘缓浣欐枡/绌哄伐瑁呰繑鍥炰换鍔�+        /// </summary>
+        /// <param name="locCode"></param>
+        /// <param name="mesTask"></param>
+        public static void createReturnTask(string locCode ,LjMesTask mesTask) {
+            Location startLoc = LocationHelper.GetLoc(locCode);
+            Location endLoc = new Location() { S_CODE = "铏氭嫙璐т綅", S_AREA_CODE = "铏氭嫙搴撳尯" };
+
+            string suffix = "";
+            if (mesTask.PALLET_TYPE == "5" || mesTask.PALLET_TYPE == "6") {
+                suffix = "(鏂滆)";
+            }
+
+            var wmsTask = new WMSTask()
+            {
+                S_CNTR_CODE = mesTask.PALLET_ID,
+                S_CODE = WMSHelper.GenerateTaskNo(),
+                S_START_LOC = startLoc.S_CODE,
+                S_START_AREA = startLoc.S_AREA_CODE,
+                S_END_LOC = endLoc.S_CODE,
+                S_END_AREA = endLoc.S_AREA_CODE,
+                S_TYPE = "浣欐枡/绌哄伐瑁呭叆搴撲换鍔� + suffix,
+                S_OP_DEF_CODE = mesTask.ID.ToString(),
+                S_OP_DEF_NAME = "浣欐枡/绌哄伐瑁呭叆搴� + suffix,
+                T_START_TIME = DateTime.Now
+            };
+            if (WMSHelper.CreateWmsTask(wmsTask))
+            {
+                // 鍒涘缓涓�鍏ュ簱浠诲姟
+                WCSTask wcsTask = new WCSTask()
+                {
+                    S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                    S_OP_CODE = wmsTask.S_CODE,
+                    S_CODE = WCSHelper.GenerateTaskNo(),
+                    S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                    S_TYPE = wmsTask.S_TYPE,
+                    S_START_LOC = startLoc.S_CODE,
+                    S_START_AREA = startLoc.S_AREA_CODE,
+                    S_END_LOC = endLoc.S_CODE,
+                    S_END_AREA = endLoc.S_AREA_CODE,
+                    S_SCHEDULE_TYPE = "AGV",
+                    N_PRIORITY = 99,
+                    T_START_TIME = DateTime.Now,
+                };
+                if (WCSHelper.CreateTask(wcsTask))
+                {
+                    // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                    LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                    LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                    // 鏇存柊浣滀笟浠诲姟鐘舵�
+                    wmsTask.N_B_STATE = 1;
+                    WMSHelper.UpdateTaskState(wmsTask);
+
+                    WMSHelper.readLjMesOffItemTask(wmsTask.S_CODE, mesTask.ID);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 涓嶅悎鏍煎搧鍥炲簱
+        /// 1.鍒涘缓鍥炲簱浠诲姟
+        /// 2.閲嶆柊鍙戣捣鏂扮殑鍙枡浠诲姟
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="cst"></param>
+        /// <returns></returns>
+        public static bool rejectReturnStock(WMSTask mst, WCSTask cst) 
+        {
+            bool result = true;
+
+            Location startLoc = LocationHelper.GetLoc(cst.S_END_LOC);
+            Location agvEndLoc = null;
+            Location wmsEndLoc = null;
+            // 鏂滆绔嬪簱
+            if (mst.S_OP_DEF_NAME.Contains("鏂滆"))
+            {
+                // TODO 鍙嶉鏂滆绔嬪簱寮傚父锛岃姹傛枩瑁佸叆搴撶粓鐐�+                agvEndLoc = null;
+                wmsEndLoc = agvEndLoc;
+
+                if (agvEndLoc != null) 
+                {
+                    // 棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�+                    WCSTask wcsTask = new WCSTask()
+                    {
+                        S_OP_NAME = mst.S_OP_DEF_NAME,
+                        S_OP_CODE = mst.S_CODE,
+                        S_CODE = WCSHelper.GenerateTaskNo(),
+                        S_CNTR_CODE = cst.S_CNTR_CODE,
+                        S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = agvEndLoc.S_CODE,
+                        S_END_AREA = agvEndLoc.S_AREA_CODE,
+                        S_SCHEDULE_TYPE = "AGV",
+                        N_PRIORITY = 10,
+                        T_START_TIME = DateTime.Now,
+                    };
+
+                    if (WCSHelper.CreateTask(wcsTask))
+                    {
+                        // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 1);
+                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+                    }
+                }
+            }
+            else
+            {
+                Container container = ContainerHelper.GetCntr(cst.S_CNTR_CODE);
+                wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE);
+                if (wmsEndLoc != null)
+                {
+                    agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2);  // 1.绔嬪簱鎺ラ┏浣�1.鍏ュ簱 2.闈炵洿杩�+                    if (agvEndLoc != null)
+                    {
+                        // 棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�+                        WCSTask oneWcsTask = new WCSTask()
+                        {
+                            S_OP_NAME = mst.S_OP_DEF_NAME,
+                            S_OP_CODE = mst.S_CODE,
+                            S_CODE = WCSHelper.GenerateTaskNo(),
+                            S_CNTR_CODE = cst.S_CNTR_CODE,
+                            S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
+                            S_START_LOC = startLoc.S_CODE,
+                            S_START_AREA = startLoc.S_AREA_CODE,
+                            S_END_LOC = agvEndLoc.S_CODE,
+                            S_END_AREA = agvEndLoc.S_AREA_CODE,
+                            S_SCHEDULE_TYPE = "AGV",
+                            N_PRIORITY = 10,
+                            T_START_TIME = DateTime.Now,
+                        };
+
+                        if (WCSHelper.CreateTask(oneWcsTask))
+                        {
+                            // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                            LocationHelper.LockLoc(oneWcsTask.S_START_LOC, 1);
+                            LocationHelper.LockLoc(oneWcsTask.S_END_LOC, 1);
+                        }
+
+                        // 棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�+                        WCSTask twoWcsTask = new WCSTask()
+                        {
+                            S_OP_NAME = mst.S_OP_DEF_NAME,
+                            S_OP_CODE = mst.S_CODE,
+                            S_CODE = WCSHelper.GenerateTaskNo(),
+                            S_CNTR_CODE = cst.S_CNTR_CODE,
+                            S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
+                            S_START_LOC = agvEndLoc.S_CODE,
+                            S_START_AREA = agvEndLoc.S_AREA_CODE,
+                            S_END_LOC = wmsEndLoc.S_CODE,
+                            S_END_AREA = wmsEndLoc.S_AREA_CODE,
+                            S_SCHEDULE_TYPE = "WCS",
+                            N_PRIORITY = 10,
+                            N_B_STATE = -1,
+                            T_START_TIME = DateTime.Now,
+                        };
+
+                        if (WCSHelper.CreateTask(twoWcsTask))
+                        {
+                            // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                            LocationHelper.LockLoc(twoWcsTask.S_START_LOC, 1);
+                            LocationHelper.LockLoc(twoWcsTask.S_END_LOC, 1);
+                        }
+                    }
+                }
+
+                var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId);
+                if (bo) 
+                {
+                    var mesTask = WMSHelper.GetLjMesTaskById(mesId);
+                    callMaterial(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
+                }
+            }
+            return result;
+        }
+
+
+        /// <summary>
+        /// 鏌ヨ瀹瑰櫒鐗╂枡淇℃伅锛堜腑闂磋〃锛�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult findTrayItemInfo(FindTrayItemInfoModel model) {
+            ResponseResult responseResult = new ResponseResult();
+            var cntrItemRels = ContainerHelper.GetCntrItemRel(model.cntrNo);
+            if (cntrItemRels != null && cntrItemRels.Count > 0) {
+                TrayItemInfo trayItemInfo = new TrayItemInfo()
+                {
+                    S_SERIAL_NO = cntrItemRels[0].S_SERIAL_NO,
+                    S_ITEM_CODE = cntrItemRels[0].S_ITEM_CODE,
+                    S_ITEM_NAME = cntrItemRels[0].S_ITEM_NAME,
+                    S_ITEM_SPEC = cntrItemRels[0].S_ITEM_SPEC,
+                    S_ITEM_STATE = cntrItemRels[0].S_ITEM_STATE,
+                    N_ITEM_STATE = cntrItemRels[0].N_ITEM_STATE,
+                    S_BATCH_NO = cntrItemRels[0].S_BATCH_NO,
+                    F_QTY = cntrItemRels[0].F_QTY,
+                    S_UOM = cntrItemRels[0].S_UOM,
+                    S_CNTR_CODE = cntrItemRels[0].S_CNTR_CODE,
+                    D_PRD_DATE = cntrItemRels[0].D_PRD_DATE,
+                    D_EXP_DATE = cntrItemRels[0].D_EXP_DATE,
+                    D_EXP_DATE1 = cntrItemRels[0].D_EXP_DATE1,
+                };
+                responseResult.data = trayItemInfo;
+            }
+            return responseResult;
+        }
+
+       
+
+        /// <summary>
+        /// 璁惧鎶ヨ鍙嶉
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult notifyAlarm(DeviceAlertorFeedbackModel model) {
+            ResponseResult responseResult = new ResponseResult();
+            WMSHelper.addAlarmRecord("璁惧鏁呴殰", "楂�, $"璁惧鍙穥model.deviceNo}锛岄敊璇俊鎭細"+model.errMsg);
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 浜哄伐鎵嬪姩鍏ュ簱
+        /// 2.鏍规嵁瀹瑰櫒鍙锋煡璇㈠叆搴撲换鍔�+        /// 3.濡傛灉娌℃湁鍏ュ簱浠诲姟锛岃褰曞紓甯�+        /// 4.杩涜鍏ュ簱
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult manualStorage(ManualStorageModel model)
+        {
+            ResponseResult responseResult = new ResponseResult();
+
+            // 鏌ヨ涓棿琛�+            var ljMesTask = WMSHelper.getLjMesTaskByCntr( model.cntrNo);
+            if (ljMesTask == null)
+            {
+                responseResult.code = 1;
+                responseResult.msg = "鏈煡璇㈠埌MES涓嬪彂鐨勫叆搴撲换鍔�;
+                return responseResult;
+            }
+
+            string taskType = "";
+            if (ljMesTask.QTY == 0)
+            {
+                taskType = "绌哄伐瑁呬汉宸ュ叆搴�;
+            }
+            else {
+                taskType = "婊℃枡宸ヨ浜哄伐鍏ュ簱";
+            }
+
+            var startLoc = LocationHelper.GetLoc(model.from);
+            var transfeRele = WMSHelper.GetTransfeRelevance(model.from); // 鎺ラ┏浣嶅睘鎬�+            if (transfeRele != null)
+            {
+                var endLoc = WMSHelper.getInStockEndLoc(transfeRele.S_RELE_AREA, ljMesTask.QTY);
+                if (startLoc == null)
+                {
+                    responseResult.code = 1;
+                    responseResult.msg = "鎺ラ┏浣嶄笉瀛樺湪锛岃妫�煡璧风偣璐т綅缂栫爜鏄惁鏈夎";
+                    return responseResult;
+                }
+
+                if (endLoc == null)
+                {
+                    responseResult.code = 1;
+                    responseResult.msg = "绔嬪簱绌轰綑搴撲綅涓嶈冻";
+                    return responseResult;
+                }
+
+                var wmsTask = new WMSTask()
+                {
+                    S_CNTR_CODE = model.cntrNo,
+                    S_CODE = WMSHelper.GenerateTaskNo(),
+                    S_START_LOC = startLoc.S_CODE,
+                    S_START_AREA = startLoc.S_AREA_CODE,
+                    S_END_LOC = endLoc.S_CODE,
+                    S_END_AREA = endLoc.S_AREA_CODE,
+                    S_TYPE = taskType,
+                    S_OP_DEF_CODE = ljMesTask.ID.ToString(),
+                    S_OP_DEF_NAME = "浜哄伐鍏ュ簱浠诲姟",
+                    N_PRIORITY = 1,
+                    T_START_TIME = DateTime.Now
+                };
+                if (WMSHelper.CreateWmsTask(wmsTask))
+                {
+                    // 鍒涘缓涓�鍏ュ簱浠诲姟
+                    WCSTask wcsTask = new WCSTask()
+                    {
+                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                        S_OP_CODE = wmsTask.S_CODE,
+                        S_CODE = WCSHelper.GenerateTaskNo(),
+                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                        S_TYPE = wmsTask.S_TYPE + "-WCS",
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = endLoc.S_CODE,
+                        S_END_AREA = endLoc.S_AREA_CODE,
+                        S_SCHEDULE_TYPE = "WCS",
+                        N_PRIORITY = wmsTask.N_PRIORITY,
+                        T_START_TIME = DateTime.Now,
+                    };
+                    if (WCSHelper.CreateTask(wcsTask))
+                    {
+                        // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                        // 鏇存柊浣滀笟浠诲姟鐘舵�
+                        wmsTask.N_B_STATE = 1;
+                        WMSHelper.UpdateTaskState(wmsTask);
+
+                        WMSHelper.readLjMesOffItemTask(wmsTask.S_CODE ,ljMesTask.ID);
+                    }
+                }
+            }
+            else 
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鎺ラ┏浣�{model.from},缂哄皯灞炴�閰嶇疆椤癸紝璇疯仈绯荤鐞嗚繘琛岄厤缃�);
+                responseResult.code = 1;
+                responseResult.msg = $"鎺ラ┏浣嶇己灏戝睘鎬ч厤缃」锛岃鑱旂郴绠$悊杩涜閰嶇疆";
+            }
+           
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 浜哄伐鍑哄簱
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult manualDelivery(ManualDeliveryModel model) {
+            ResponseResult responseResult = new ResponseResult();
+        
+            // 鏌ヨ涓棿琛�+            var ljMesTask = WMSHelper.getLjMesTaskByLoc(model.to);
+            if (ljMesTask == null)
+            {
+                responseResult.code = 1;
+                responseResult.msg = "鏈煡璇㈠埌MES浠诲姟琛ㄦ暟鎹�;
+                return responseResult;
+            }
+            string taskType = "";
+            if (ljMesTask.QTY == 0)
+            {
+                taskType = "绌哄伐瑁呬汉宸ュ嚭搴�;
+            }
+            else
+            {
+                taskType = "婊℃枡宸ヨ浜哄伐鍑哄簱";
+            }
+
+            var endLoc = LocationHelper.GetLoc(model.to);
+            var transfeRele = WMSHelper.GetTransfeRelevance(model.to);  // 鎺ラ┏浣嶅睘鎬�+            if (transfeRele != null)
+            {
+                var startLoc = WMSHelper.getOutStockStartLoc(transfeRele.S_RELE_AREA, model.materialCode,model.trayStatus, model.cntrNo);
+                if (endLoc == null)
+                {
+                    responseResult.code = 1;
+                    responseResult.msg = "鎺ラ┏浣嶄笉瀛樺湪锛岃妫�煡璧风偣璐т綅缂栫爜鏄惁鏈夎";
+                    return responseResult;
+                }
+
+                if (startLoc == null)
+                {
+                    responseResult.code = 1;
+                    responseResult.msg = "绔嬪簱搴撳瓨涓嶈冻";
+                    return responseResult;
+                }
+
+                var wmsTask = new WMSTask()
+                {
+                    S_CNTR_CODE = model.cntrNo,
+                    S_CODE = WMSHelper.GenerateTaskNo(),
+                    S_START_LOC = startLoc.S_CODE,
+                    S_START_AREA = startLoc.S_AREA_CODE,
+                    S_END_LOC = endLoc.S_CODE,
+                    S_END_AREA = endLoc.S_AREA_CODE,
+                    S_TYPE = taskType,
+                    S_OP_DEF_NAME = "浜哄伐鍑哄簱浠诲姟",
+                    N_PRIORITY = 1,
+                    T_START_TIME = DateTime.Now
+                };
+                if (WMSHelper.CreateWmsTask(wmsTask))
+                {
+                    // 鍒涘缓涓�鍏ュ簱浠诲姟
+                    WCSTask wcsTask = new WCSTask()
+                    {
+                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                        S_OP_CODE = wmsTask.S_CODE,
+                        S_CODE = WCSHelper.GenerateTaskNo(),
+                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                        S_TYPE = wmsTask.S_TYPE + "-WCS",
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = endLoc.S_CODE,
+                        S_END_AREA = endLoc.S_AREA_CODE,
+                        S_SCHEDULE_TYPE = "WCS",
+                        N_PRIORITY = wmsTask.N_PRIORITY,
+                        T_START_TIME = DateTime.Now,
+                    };
+                    if (WCSHelper.CreateTask(wcsTask))
+                    {
+                        // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                        // 鏇存柊浣滀笟浠诲姟鐘舵�
+                        wmsTask.N_B_STATE = 1;
+                        WMSHelper.UpdateTaskState(wmsTask);
+
+                        WMSHelper.readLjMesOffItemTask(wmsTask.S_CODE, ljMesTask.ID);
+                    }
+                }
+            }
+            else {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鎺ラ┏浣�{model.to},缂哄皯灞炴�閰嶇疆椤癸紝璇疯仈绯荤鐞嗚繘琛岄厤缃�);
+                responseResult.code = 1;
+                responseResult.msg = $"鎺ラ┏浣嶇己灏戝睘鎬ч厤缃」锛岃鑱旂郴绠$悊杩涜閰嶇疆";
+            }
+            
+            return responseResult;  
+        }
+
+        /// <summary>
+        /// 鍙栨秷浠诲姟
+        /// </summary>
+        /// <param name="taskNo"></param>
+        public static ResponseResult cancelTask(string taskNo) {
+            ResponseResult responseResult = new ResponseResult();
+            WMSTask wmsTask = WMSHelper.GetWmsTask(taskNo);
+            if (wmsTask != null && wmsTask.N_B_STATE == 0)
+            {
+
+                var wcsTaskList = WCSHelper.GetTaskListBySrcNo(wmsTask.S_CODE);
+                foreach (var wcsTask in wcsTaskList)
+                {
+                    if (wcsTask != null && wcsTask.N_B_STATE < 3)
+                    {
+                        WCSHelper.Fail(wcsTask);
+                        LocationHelper.UnLockLoc(wcsTask.S_START_LOC);
+                        LocationHelper.UnLockLoc(wcsTask.S_END_LOC);
+                    }
+                }
+
+                wmsTask.N_B_STATE = 3;
+                wmsTask.S_B_STATE = "鍙栨秷";
+                wmsTask.T_END_TIME = DateTime.Now;
+                WMSHelper.UpdateTaskState(wmsTask);
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 鍒囨崲绔欏彴灞炴�
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult switchStationAttribute(SwitchStationAttributeModel model) 
+        {
+            ResponseResult responseResult = new ResponseResult();
+            var task = WCSHelper.GetTaskByStartOrEnd(model.locCode);
+            if (task == null)
+            {
+                var transfeRelevance = WMSHelper.GetTransfeRelevance(model.locCode);  // 鎺ラ┏浣嶅睘鎬�+                LogHelper.Info($"鍘熺珯鍙板睘鎬э細{JsonConvert.SerializeObject(transfeRelevance)}", "WMS");
+                if (transfeRelevance != null && transfeRelevance.N_PROPERTY == 2)
+                {
+                    if (model.signalType == "1")
+                    {
+                         WMSHelper.updateTransfeLocProperty(model.locCode, 0);
+                    }
+                    if (model.signalType == "2")
+                    {
+                        WMSHelper.updateTransfeLocProperty(model.locCode, 1);
+                    }
+                }
+            }
+            else 
+            {
+                responseResult.code = 1;
+                responseResult.msg = "鎺ラ┏浣嶅瓨鍦ㄦ湭瀹屾垚鐨勪换鍔★紝鏃犳硶鍒囨崲绔欏彴灞炴�";
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 璐т綅鐘舵�鍙嶉
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static bool locStateFeedBack(LocStateFeedBackModel model) 
+        {
+            bool result = false;
+            if (model.type == "1") 
+            {
+               var task  = WCSHelper.GetTask(model.req_no);
+                if (task != null) 
+                {
+                    TaskAction taskAction = null;
+                    if (model.type == "1") 
+                    {
+                        taskAction = WCSHelper.getActionRecord(task.S_CODE, 1101);
+                    }
+                    if (model.type == "2")
+                    {
+                        taskAction = WCSHelper.getActionRecord(task.S_CODE, 1102);
+                    }
+                    if (taskAction != null) 
+                    {
+                        taskAction.N_S_STATUS = 1;
+                        result = WCSHelper.updateActionRecord(taskAction);
+                    }
+                }
+            }
+            return result;
+        }
+
+        //----------------------------------------------------------------------------------------------------------------------------
+        public class LocModel
+        {
+            public string locCode { get; set; }  // 杩旀枡璐т綅缂栧彿
+            public string jtNo { get; set; } // 鏈哄彴鍙�+        }
+
+        public class ApplyDest {
+            public string destLoc { get; set; } // 缁堢偣璐т綅缂栫爜
+        }
+        public class TrayItemInfo
+        {
+            public string S_SERIAL_NO { get; set; } // 鍘熸潗鏂欐壒娆″彿
+            public string S_ITEM_CODE { get; set; } // 鐗╂枡缂栫爜
+            public string S_ITEM_NAME { get; set; } // 鐗╂枡缂栫爜
+            public string S_ITEM_SPEC { get; set; } // 瑙勬牸
+            public string S_ITEM_STATE { get; set; } = "0"; // 妫�獙鐘舵� 0锛氭湭妫�獙 1锛氬悎鏍硷紝2锛氫笉鍚堟牸
+            /// <summary>
+            /// 1锛氬悎鏍�2锛氫笉鍚堟牸 
+            /// </summary>
+            public int N_ITEM_STATE { get; set; } // 鐗╂枡鐘舵�
+            public string S_BATCH_NO { get; set; }   // 鎵规鏉$爜
+            public float F_QTY { get; set; }  // 鏁伴噺
+            public string S_UOM { get; set; } = "";  // 鍗曚綅
+            public string S_CNTR_CODE { get; set; } // 瀹瑰櫒
+            public string D_PRD_DATE { get; set; } // 鐢熶骇鏃ユ湡
+            public string D_EXP_DATE { get; set; } // 鏈�皬鍋滄斁鏃ユ湡
+            public string D_EXP_DATE1 { get; set; } // 鏈�ぇ鍋滄斁鏃ユ湡
+        }
+
+        /// <summary>
+        /// 浜哄伐鍑哄簱妯″瀷
+        /// </summary>
+        public class ManualDeliveryModel {
+            public string to { get; set; } // 鎺ラ┏璐т綅缂栫爜
+            public string cntrNo { get; set; } // 瀹瑰櫒鍙�+            public int trayStatus { get; set; } // 鎵樼洏鐘舵� 0.姝e父 1.寮傚父
+            public string materialCode { get; set; } // 鐗╂枡缂栧彿  鐗╂枡缂栫爜涓虹┖锛岃〃绀虹┖宸ヨ
+        }
+
+        /// <summary>
+        /// 浜哄伐鍏ュ簱妯″瀷
+        /// </summary>
+        public class ManualStorageModel { 
+            public string from { get; set; } // 璧风偣
+            public string cntrNo { get; set; } // 瀹瑰櫒鍙�+        }
+
+        /// <summary>
+        /// 璁惧鎶ヨ鍙嶉妯″瀷
+        /// </summary>
+        public class DeviceAlertorFeedbackModel {
+            public string reqId { get; set; }
+            public string reqTime { get; set; }
+            public string deviceNo { get; set; } // 璁惧鍙�+            public string errCode { get; set; } // 閿欒鐮�+            public string errMsg { get; set; } // 閿欒淇℃伅
+        }
+
+
+        /// <summary>
+        /// 鑾峰彇鎵樼洏鐗╂枡淇℃伅妯″瀷
+        /// </summary>
+        public class FindTrayItemInfoModel {
+            public string reqId { get; set; }
+            public string reqTime { get; set; }
+            public string cntrNo { get; set; } // 鎵樼洏鍙�+        }
+
+        /// <summary>
+        /// 鐢宠缁堢偣妯″瀷
+        /// </summary>
+        public class ApplyDestinationModel {
+            public string reqId { get; set; }
+            public string reqTime { get; set; }
+            public string taskNo { get; set; } // 浠诲姟鍙�+            public string loc { get; set; } // 褰撳墠璐т綅
+            public int applyType { get; set; } // 鐢宠绫诲瀷 1锛氬爢鍨涙満鏀捐揣寮傚父鐢宠鏂扮粓鐐癸紱2锛氳緭閫佺嚎鍒拌揪鎺ラ┏浣嶇敵璇风粓鐐癸紱3锛�+
+        }
+
+        public class AGVApplyDestModel{
+            public string taskNo { get; set; } // 浠诲姟鍙�+            public string loc { get; set; } // 褰撳墠璐т綅
+            public string trayCode { get; set; } // 鎵樼洏鐮侊紙RFID锛�+            public string applyType { get; set; } // 1.铏氭嫙缁堢偣 2.RFID楠岃瘉澶辫触 3.RFID涓庝换鍔′笉鍖归厤 4.鐗╂枡鐘舵�涓嶅悎鏍�+        }
+
+
+        /// <summary>
+        /// 浠诲姟鐘舵�鍙嶉妯″瀷
+        /// </summary>
+        public class TaskStatusFeedbackModel {
+            public string reqId { get; set; }
+            public string reqTime { get; set; }
+            public string taskNo { get; set; } // 浠诲姟鍙�+            public string subTaskNo { get; set; } // 瀛愪换鍔″彿
+            public int status { get; set; } // 浠诲姟鐘舵� 1锛氬紑濮�鎵ц涓紱2:瀹屾垚锛�锛氬噯澶囧彇璐э紱4锛氬彇璐у畬鎴愶紱5锛氬噯澶囧嵏璐э紱6锛氬嵏璐у畬鎴愶紱7锛氬紓甯稿彇娑堬紱8锛氬己鍒跺畬鎴�+            public string deviceNo { get; set; } // 璁惧鍙�+            public string errCode { get; set; } // 寮傚父浠g爜  0.鏃犲紓甯�1.璁惧鏁呴殰鐮併�2.rfid鏍¢獙澶辫触銆�.鍙栬揣鏃犺揣銆�.鏀捐揣鏈夎揣
+            public string loc { get; set; } // 褰撳墠璐т綅
+        }
+
+        /// <summary>
+        /// 璁惧淇″彿鍙嶉妯″瀷
+        /// </summary>
+        public class DeviceSignalFeedbackModel
+        {
+            public string reqId { get; set; }
+            public string reqTime { get; set; }
+            public string taskNo { get; set; } // 鎵樼洏鍙�+            public string loc { get; set; } // 璐т綅 涓婃枡鐐广�涓嬫枡鐐广�璇荤爜浣嶃�绉伴噸浣嶏紙蹇呭~锛�+            public string cntrNo { get; set; } // 鎵樼洏鍙�+            public int signalType { get; set; } //璇锋眰绫诲瀷 1:涓嬬嚎璇锋眰 2锛氬彨鏂欒姹�3锛氳鐮佽姹傦紙蹇呭~锛�+            public string deviceNo { get; set; } //璁惧鍙�+            public object extData { get; set; }
+        }
+
+        /// <summary>
+        /// 鍙枡璇锋眰
+        /// </summary>
+        public class CallMaterialRequest
+        {
+            public string loc { get; set; } // 璐т綅 涓婃枡鐐广�涓嬫枡鐐广�璇荤爜浣嶃�绉伴噸浣嶏紙蹇呭~锛�+        }
+        
+
+        /// <summary>
+        /// 涓嬬嚎璇锋眰
+        /// </summary>
+        public class OffLineRequest
+        {
+            public string loc { get; set; } // 璐т綅 涓婃枡鐐广�涓嬫枡鐐广�璇荤爜浣嶃�绉伴噸浣嶏紙蹇呭~锛�+            public string cntrNo { get; set; } // 鎵樼洏鍙�+            public string jtNo { get; set; } // 鏈哄彴鍙�+            public bool isNormal { get; set; } //鏄惁寮傚父
+        }
+
+        /// <summary>
+        /// 璇荤爜璇锋眰
+        /// </summary>
+        public class ReadCodeRequest
+        {
+            public string loc { get; set; } // 璐т綅 涓婃枡鐐广�涓嬫枡鐐广�璇荤爜浣嶃�绉伴噸浣嶏紙蹇呭~锛�+            public string cntrNo { get; set; } // 鎵樼洏鍙�+            public string taskNo { get; set; } // 浠诲姟鍙�+        }
+
+        public class AddTaskModel {
+            public string From { get; set; }
+            public string To { get; set; }
+            public string No { get; set; }
+        }
+        public class TN_LocationModel {
+            public string TN_Location { get; set; }
+        }
+        public class CodeInfo {
+            /// <summary>
+            /// 鐢熶骇璁㈠崟鍐呯爜
+            /// </summary>
+            public string FInterID { get; set; }
+            /// <summary>
+            /// 鐢熶骇璁㈠崟缂栧彿
+            /// </summary>
+            public string FSourceNo { get; set; }
+            /// <summary>
+            /// 鎵瑰彿
+            /// </summary>
+            public string FGMPBatchNo { get; set; }
+            public string FState { get; set; }
+            /// <summary>
+            /// 鐗╂枡缂栫爜锛堝唴鐮佸氨鏄紪鐮侊級
+            /// </summary>
+            public string Fitemid_XK { get; set; }
+            /// <summary>
+            /// 鍒嗗綍id
+            /// </summary>
+            public string Fentryid { get; set; }
+        }
+        public class NoteInfo : CodeInfo {
+            public string WmsBillNo { get; set; }
+        }
+    }
+}

--
Gitblit v1.9.1