From ef839d119eec2c28fac5f5ba175d71f926afae44 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期二, 20 五月 2025 11:49:22 +0800
Subject: [PATCH] 修复数据库表字段不匹配、读取重量错误处理等逻辑

---
 Consts/AreaCode.cs                                                                   |    3 
 Helpers/WCSHelper.cs                                                                 |   54 +----
 /dev/null                                                                            |   22 --
 Models/TN_Task.cs                                                                    |   16 
 Controllers/DebugController.cs                                                       |    5 
 config/config.json                                                                   |    6 
 .vs/HH.WCS.Mobox3.AnGang/FileContentIndex/bd85daa8-32a5-4c87-9f8f-b1ed513fa1f8.vsidx |    0 
 Services/DebugService.cs                                                             |  159 ++++++++---------
 .vs/HH.WCS.Mobox3.AnGang/FileContentIndex/05336dc4-4629-4a97-bb9a-4516a380cd0d.vsidx |    0 
 HH.WCS.Mobox3.AnGang.csproj                                                          |    7 
 Helpers/DbHelper.cs                                                                  |    9 
 Services/AgvService.cs                                                               |   70 +++++--
 config/config.comment.json                                                           |   28 +++
 Helpers/TaskHelper.cs                                                                |    2 
 Models/TN_Location.cs                                                                |    8 
 Consts/TaskName.cs                                                                   |    2 
 Services/MoboxService.cs                                                             |   86 +++++----
 Models/TN_CG_Detail.cs                                                               |   28 +-
 Dtos/Request/MoboxRequest.cs                                                         |    9 
 19 files changed, 259 insertions(+), 255 deletions(-)

diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/05336dc4-4629-4a97-bb9a-4516a380cd0d.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/05336dc4-4629-4a97-bb9a-4516a380cd0d.vsidx
new file mode 100644
index 0000000..ab70759
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/05336dc4-4629-4a97-bb9a-4516a380cd0d.vsidx
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/0aee5537-94af-4049-9107-4c61afb239ee.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/0aee5537-94af-4049-9107-4c61afb239ee.vsidx
deleted file mode 100644
index bdd8319..0000000
--- a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/0aee5537-94af-4049-9107-4c61afb239ee.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/7e201a71-d554-4ded-906f-7da951526801.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/7e201a71-d554-4ded-906f-7da951526801.vsidx
deleted file mode 100644
index 4dd5073..0000000
--- a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/7e201a71-d554-4ded-906f-7da951526801.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/bd85daa8-32a5-4c87-9f8f-b1ed513fa1f8.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/bd85daa8-32a5-4c87-9f8f-b1ed513fa1f8.vsidx
new file mode 100644
index 0000000..ddb7fec
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/bd85daa8-32a5-4c87-9f8f-b1ed513fa1f8.vsidx
Binary files differ
diff --git a/Consts/AreaCode.cs b/Consts/AreaCode.cs
index cb3a8ee..952b457 100644
--- a/Consts/AreaCode.cs
+++ b/Consts/AreaCode.cs
@@ -6,6 +6,7 @@
 
 namespace HH.WCS.Mobox3.AnGang.Consts {
     public class AreaCode {
-        public const string 鏀跺彂璐т綅鍖�= "P";
+        public const string 鏀跺彂鍖�= "SFQ";
+        public const string 璐ф灦鍖�= "HJQ";
     }
 }
diff --git a/Consts/AreaName.cs b/Consts/AreaName.cs
deleted file mode 100644
index 4b457a5..0000000
--- a/Consts/AreaName.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace HH.WCS.Mobox3.AnGang.Consts {
-    public class AreaName {
-        public const string 鏀跺彂璐т綅鍖�= "鏀跺彂璐т綅鍖�;
-        public const string 璐ф灦鍖�= "璐ф灦鍖�;
-    }
-}
diff --git a/Consts/TaskName.cs b/Consts/TaskName.cs
index 1885d86..071eb9e 100644
--- a/Consts/TaskName.cs
+++ b/Consts/TaskName.cs
@@ -6,7 +6,7 @@
 
 namespace HH.WCS.Mobox3.AnGang.Consts {
     public class TaskName {
-        public const string 璐у搧鍏ュ簱 = "璐у搧鍏ュ簱";
+        public const string 浜у搧鍏ュ簱 = "浜у搧鍏ュ簱";
         public const string 浜у搧閮ㄥ垎鍑哄簱 = "浜у搧閮ㄥ垎鍑哄簱";
         public const string 浜у搧閮ㄥ垎鍥炲簱 = "浜у搧閮ㄥ垎鍥炲簱";
         public const string 鐩樼偣鐞嗚揣鍑哄簱 = "鐩樼偣鐞嗚揣鍑哄簱";
diff --git a/Controllers/DebugController.cs b/Controllers/DebugController.cs
index d4ef008..8d56d64 100644
--- a/Controllers/DebugController.cs
+++ b/Controllers/DebugController.cs
@@ -19,6 +19,7 @@
 using HH.WCS.Mobox3.AnGang.Debug;
 using static HH.WCS.Mobox3.AnGang.Dtos.Request.DebugRequest;
 using static HH.WCS.Mobox3.AnGang.Dtos.Response.DebugResponse;
+using static HH.WCS.Mobox3.AnGang.Models.DebugModel;
 
 namespace HH.WCS.Mobox3.AnGang.Controllers
 {
@@ -55,8 +56,8 @@
         /// <returns></returns>
         [HttpPost]
         [Route("InsertLocCntrCg")]
-        public string InsertLocCntrCg() {
-            return DebugService.InsertLocCntrCg();
+        public string InsertLocCntrCg(LocCntrCg model) {
+            return DebugService.InsertLocCntrCg(model);
         }
 
         [HttpPost]
diff --git a/Dtos/Request/MoboxRequest.cs b/Dtos/Request/MoboxRequest.cs
index ebadc95..57d13bf 100644
--- a/Dtos/Request/MoboxRequest.cs
+++ b/Dtos/Request/MoboxRequest.cs
@@ -35,22 +35,17 @@
             /// 璧风偣璐т綅
             /// </summary>
             [JsonProperty("StartLoc")]
-            public string startLoc { get; set; }
+            public string StartLoc { get; set; }
 
             /// <summary>
             /// 缁堢偣璐ф灦锛堝彲閫夛級
             /// </summary>
             [JsonProperty("Nrow")]
-            public string endShelf { get; set; }
+            public string Row { get; set; }
         }
 
         public class SelectLocationInfo {
             public string forklift_no { get; set; }
-
-            ///// <summary>
-            ///// 浠诲姟鍙�-            ///// </summary>
-            //public string taskNo { get; set; }
 
             public string endLoc { get; set; }
         }
diff --git a/HH.WCS.Mobox3.AnGang.csproj b/HH.WCS.Mobox3.AnGang.csproj
index aa0ecba..70b4f33 100644
--- a/HH.WCS.Mobox3.AnGang.csproj
+++ b/HH.WCS.Mobox3.AnGang.csproj
@@ -261,7 +261,6 @@
     <Compile Include="Consts\AgvStateCode.cs" />
     <Compile Include="Consts\AgvStateName.cs" />
     <Compile Include="Consts\AreaCode.cs" />
-    <Compile Include="Consts\AreaName.cs" />
     <Compile Include="Consts\LockStateCode.cs" />
     <Compile Include="Consts\LockStateName.cs" />
     <Compile Include="Consts\TaskName.cs" />
@@ -279,7 +278,6 @@
     <Compile Include="Dtos\Response\ErpResponse.cs" />
     <Compile Include="Helpers\AgvHelper.cs" />
     <Compile Include="Helpers\DbHelper.cs" />
-    <Compile Include="Helpers\PathHelper.cs" />
     <Compile Include="Models\DebugModel.cs" />
     <Compile Include="Models\TN_Inbound_Order.cs" />
     <Compile Include="Models\TN_Outbound_Order.cs" />
@@ -333,6 +331,7 @@
   <ItemGroup>
     <None Include=".editorconfig" />
     <None Include="App.config" />
+    <None Include="config\config.comment.json" />
     <None Include="config\config.json">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
@@ -364,8 +363,6 @@
       <Name>NetSDKCS</Name>
     </ProjectReference>
   </ItemGroup>
-  <ItemGroup>
-    <Folder Include="debug\" />
-  </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>
\ No newline at end of file
diff --git a/Helpers/DbHelper.cs b/Helpers/DbHelper.cs
index ec0607c..697c767 100644
--- a/Helpers/DbHelper.cs
+++ b/Helpers/DbHelper.cs
@@ -14,9 +14,13 @@
     /// 鏁版嵁搴撳府鍔╃被锛氬寘鎷崟渚嬫ā寮忓拰鍒涘缓鏂拌繛鎺ョ殑鏂规硶
     /// </summary>
     public static class DbHelper {
-        private static readonly SqlSugarScope _sqlSugar;
+        private static SqlSugarScope _sqlSugar;
 
         static DbHelper() {
+            Init();
+        }
+
+        public static void Init() {
             _sqlSugar = new SqlSugarScope(new ConnectionConfig() {
                 ConnectionString = Settings.Config.SqlServer,
                 DbType = DbType.SqlServer,
@@ -25,8 +29,7 @@
             },
             db => {
                 // 鐩戞帶鎵�湁瓒呰繃1绉掔殑Sql
-                db.Aop.OnLogExecuted = (sql, p) =>
-                {
+                db.Aop.OnLogExecuted = (sql, p) => {
                     // 鎵ц鏃堕棿瓒呰繃1绉�                     if (db.Ado.SqlExecutionTime.TotalSeconds > 1) {
                         Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(p.ToDictionary(it => it.ParameterName, it => it.Value)));
diff --git a/Helpers/PathHelper.cs b/Helpers/PathHelper.cs
deleted file mode 100644
index d3deaab..0000000
--- a/Helpers/PathHelper.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace HH.WCS.Mobox3.AnGang.Helpers {
-    public class PathHelper {
-        /// <summary>
-        /// 椤圭洰鏂囦欢澶逛笌Debug/Release鏂囦欢鐨勭浉瀵硅矾寰勶紙绉佹湁甯搁噺锛�-        /// </summary>
-        const string RELATIVE_PATH = "../..";
-
-        /// <summary>
-        /// GetProjectDirectory锛氳幏鍙栭」鐩枃浠跺す璺緞
-        /// </summary>
-        public static string GetProjDir(string filepath = "./") {
-            return Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, RELATIVE_PATH, filepath));
-        }
-    }
-}
diff --git a/Helpers/TaskHelper.cs b/Helpers/TaskHelper.cs
index f2ba439..4115c46 100644
--- a/Helpers/TaskHelper.cs
+++ b/Helpers/TaskHelper.cs
@@ -24,7 +24,7 @@
         /// <param name="mst"></param>
         /// <param name="load"></param>
         internal static void CacheBitUpdate(TN_Task mst, bool load) {
-            var trayCarryCount = mst.N_CNTR_COUNT > 0 ? mst.N_CNTR_COUNT : 1;
+            //var trayCarryCount = mst.N_CNTR_COUNT > 0 ? mst.N_CNTR_COUNT : 1;
             if (load) {
                 Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}");
                 LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}");
diff --git a/Helpers/WCSHelper.cs b/Helpers/WCSHelper.cs
index e4a338b..e907819 100644
--- a/Helpers/WCSHelper.cs
+++ b/Helpers/WCSHelper.cs
@@ -7,6 +7,7 @@
 using System.Text;
 using System.Threading.Tasks;
 using HH.WCS.Mobox3.AnGang.Helpers;
+using HH.WCS.Mobox3.AnGang.Consts;
 
 namespace HH.WCS.Mobox3.AnGang.Helper {
     internal class WCSHelper {
@@ -60,11 +61,25 @@
         {
             var fromLoc = LocationHelper.GetLocation(from);
             var endLoc = LocationHelper.GetLocation(to);
+
+            var endArea = "";
+            if (endLoc == null) {
+                if (taskType == TaskName.浜у搧鍏ュ簱) {
+                    endArea = "HJQ"; // 璐ф灦鍖�+                }
+                else {
+                    LogHelper.Info("缁堢偣璐т綅涓嶅瓨鍦紝涓斾换鍔$被鍨嬩笉鏄疨DA璐у搧鍏ュ簱");
+                }
+            }
+            else {
+                endArea = endLoc.S_AREA_CODE;
+            }
+
             TN_Task TN_Task = new TN_Task()
             {
                 S_CODE = GenerateTaskNo(),
                 S_START_AREA = fromLoc.S_AREA_CODE,
-                S_END_AREA = endLoc?.S_AREA_CODE ?? "", // 濡傛灉涓簄ull杩斿洖绌哄瓧绗︿覆
+                S_END_AREA = endArea,
                 S_START_LOC = from,
                 S_END_LOC = to,
                 S_TYPE = taskType,
@@ -83,43 +98,6 @@
             }
             else
             {
-                LogHelper.Info($"鎻掑叆浠诲姟澶辫触锛寋log}");
-            }
-            return res;
-        }
-
-        /// <summary>
-        /// 鏍规嵁缁堢偣Area鍒涘缓鎼�浠诲姟
-        /// </summary>
-        /// <param name="from"></param>
-        /// <param name="toArea"></param>
-        /// <param name="taskType"></param>
-        /// <param name="pri"></param>
-        /// <param name="cntrInfo"></param>
-        /// <returns></returns>
-        internal static bool CreateTaskWithArea(string from, string toArea, string taskType, int pri, string cntrInfo) {
-            var fromLoc = LocationHelper.GetLocation(from);
-            //var endLoc = LocationHelper.GetLocation(to);
-            TN_Task TN_Task = new TN_Task() {
-                S_CODE = GenerateTaskNo(),
-                S_START_AREA = fromLoc.S_AREA_CODE,
-                S_END_AREA = toArea,
-                S_START_LOC = from,
-                S_END_LOC = "", // 涓嶆寚瀹氱粓鐐硅揣浣�-                S_TYPE = taskType,
-                N_PRIORITY = pri,
-                N_SCHEDULE_TYPE = 3, // 鍥借嚜
-                N_B_STATE = 0,
-                S_CNTR_CODE = cntrInfo,
-            };
-
-            var log = JsonConvert.SerializeObject(TN_Task);
-            var db = DbHelper.GetDbClient();
-            var res = db.Insertable(TN_Task).ExecuteCommand() > 0;
-            if (res) {
-                LogHelper.Info($"鎻掑叆浠诲姟鎴愬姛锛寋log}");
-            }
-            else {
                 LogHelper.Info($"鎻掑叆浠诲姟澶辫触锛寋log}");
             }
             return res;
diff --git a/Models/TN_CG_Detail.cs b/Models/TN_CG_Detail.cs
index 8557bc1..9a9e5c5 100644
--- a/Models/TN_CG_Detail.cs
+++ b/Models/TN_CG_Detail.cs
@@ -13,37 +13,35 @@
         /// <summary>
         /// 璐у搧 ID
         /// </summary>
-        public string S_CG_ID { get; set; }
-
-        public string S_CAR_CODE { get; set; }//杞﹀彿
+        public string S_CG_ID { get; set; } = "";
        
-        public string S_CNTR_CODE { get; set; }//瀹瑰櫒缂栫爜
+        public string S_CNTR_CODE { get; set; } = "";//瀹瑰櫒缂栫爜
 
-        public string S_ITEM_CODE { get; set; }//璐у搧缂栫爜
+        public string S_ITEM_CODE { get; set; } = "";//璐у搧缂栫爜
 
-        public string S_ITEM_SPEC { get; set; }//璐у搧瑙勬牸
+        public string S_ITEM_SPEC { get; set; } = "";//璐у搧瑙勬牸
 
         /// <summary>
         /// 璐у搧鐘舵�锛�鍚堟牸 1寰呮 2涓嶅悎鏍�3姝e湪妫�獙锛涗笅绾垮嵆寰呮
         /// </summary>
-        public string S_ITEM_STATE { get; set; }
+        public string S_ITEM_STATE { get; set; } = "寰呮";
 
         /// <summary>
         /// 璐у搧鐘舵�_瀛楀吀锛�鍚堟牸 1寰呮 2涓嶅悎鏍�3姝e湪妫�獙锛涗笅绾垮嵆寰呮
         /// </summary>
-        public int N_ITEM_STATE { get; set; }
+        public int N_ITEM_STATE { get; set; } = 1;
 
-        public string S_BATCH_NO { get; set; }//鎵规鍙�-        
-        public float F_QTY { get; set; }//鏁伴噺
+        public string S_BATCH_NO { get; set; } = ""; //鎵规鍙� 
-        public string S_SPE { get; set; }//瑙勬牸
+        /// <summary>
+        /// 鏁伴噺锛氳繖閲屽綋鍋氶噸閲�+        /// </summary>
+        public float F_QTY { get; set; } = 0f;
+
 
         /// <summary>
         /// 鍥剧墖閾炬帴
         /// </summary>
-        public string S_IMG_URL { get; set; }
-
-
+        public string S_IMG_URL { get; set; } = "";
     }
 }
diff --git a/Models/TN_Location.cs b/Models/TN_Location.cs
index cf19148..4674e6d 100644
--- a/Models/TN_Location.cs
+++ b/Models/TN_Location.cs
@@ -13,7 +13,7 @@
         /// <summary>
         /// 璐т綅鍚嶇О
         /// </summary>
-        public string S_NAME { get; set; }
+        public string S_NAME { get; set; } = "";
 
         /// <summary>
         /// 璐т綅鎵�湪鍖哄煙 ID
@@ -23,7 +23,7 @@
         /// <summary>
         /// 鍥借嚜 AGV 瀵瑰簲鐨勫簱浣嶅悕绉�         /// </summary>
-        public string S_AGV_SITE { get; set; }
+        public string S_AGV_SITE { get; set; } = "";
 
         /// <summary>
         /// 璐т綅瀹归噺
@@ -58,7 +58,7 @@
         /// <summary>
         /// 閿佺殑鏉ユ簮-浠诲姟鍙�         /// </summary>
-        public string S_LOCK_OP { get; set; }
+        public string S_LOCK_OP { get; set; } = "";
 
         [Navigate(NavigateType.OneToMany, nameof(TN_Loc_Container.S_LOC_CODE))]
         public List<TN_Loc_Container> LocCntrRels { get; set; }
@@ -77,6 +77,6 @@
         /// <summary>
         /// 璐ф灦缂栫爜
         /// </summary>
-        public string S_SHELF_CODE { get; set; }
+        public int N_ROW { get; set; }
     }
 }
diff --git a/Models/TN_Task.cs b/Models/TN_Task.cs
index 65606e9..c779c7f 100644
--- a/Models/TN_Task.cs
+++ b/Models/TN_Task.cs
@@ -15,7 +15,7 @@
         /// <summary>
         /// AGV 杞﹀彿
         /// </summary>
-        public string S_EQ_NO { get; set; }
+        public string S_EQ_NO { get; set; } = "";
         public string S_TYPE { get; set; }
         public string S_B_STATE { get; set; } = "绛夊緟";
         /// <summary>
@@ -33,15 +33,15 @@
         public string S_CODE { get; set; }
         public string S_EQ_TASK_CODE { get; set; }
 
-        public string S_CNTR_CODE { get; set; }
-        public string S_OP_NAME { get; set; }
+        public string S_CNTR_CODE { get; set; } = "";
+        public string S_OP_NAME { get; set; } = "";
     
-        public int N_CNTR_COUNT { get; internal set; }
+        //public int N_CNTR_COUNT { get; internal set; }
 
-        /// <summary>
-        /// 浠诲姟鐨勮揣鐗╅噸閲�-        /// </summary>
-        public float F_WEIGHT { get; set; }
+        ///// <summary>
+        ///// 浠诲姟鐨勮揣鐗╅噸閲�+        ///// </summary>
+        //public float F_WEIGHT { get; set; }
 
         internal static string GetStateStr(int state) {
             //0绛夊緟	  1宸叉帹閫�    2鎵ц    3瀹屾垚    4閿欒
diff --git a/Services/AgvService.cs b/Services/AgvService.cs
index 5ce5195..5a2cd96 100644
--- a/Services/AgvService.cs
+++ b/Services/AgvService.cs
@@ -46,7 +46,7 @@
 
                 result.ResultCode = 0;
                 result.ResultMsg = "success";
-                LogHelper.Info(result.ResultMsg, "API");
+                LogHelper.Info(result.ResultMsg + $": state {model.state}", "API");
                 return result;
             }
             catch (Exception ex) {
@@ -85,14 +85,14 @@
                     WCSHelper.UpdateStatus(TN_Task, "鍙栬揣瀹屾垚"); // 浠诲姟鐘舵�鏀规垚鍙栬揣瀹屾垚
 
                     var captureTask = Task.Run(() => {
-                        if (TN_Task.S_TYPE == TaskName.璐у搧鍏ュ簱 || TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) {
+                        if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱 || TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) {
                             CapturePic(TN_Task);
                         }
                     });
 
                     var setEndLocTask = Task.Run(() => {
                         // 鍙浠诲姟涓轰骇鍝佸叆搴�PDA)锛屽氨闇�閲嶆柊鎸囧畾缁堢偣锛堥粯璁ndLoc涓�"锛�-                        if (TN_Task.S_TYPE == "浜у搧鍏ュ簱(PDA)") {
+                        if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱) {
                             SetEndLoc(TN_Task);
                         }
                     });
@@ -126,6 +126,7 @@
 
             var filepath = SnapManager.GetCapturePicturePath();
             if (string.IsNullOrEmpty(filepath)) {
+                LogHelper.Info("鍥剧墖鍦板潃涓虹┖");
                 return;
             }
 
@@ -140,50 +141,73 @@
 
         public static void SetEndLoc(TN_Task tn_task) {
             var db = DbHelper.GetDbClient();
-            var endLoc = new TN_Location();
+            var endLoc = db.Queryable<TN_Location>()
+                .First(a => a.S_CODE == tn_task.S_END_LOC);
+
+            // 濡傛灉宸茬粡璁剧疆鐨勭粓鐐硅揣浣嶏紝灏变笉瑕佸啀杩涘叆杩欎釜娴佺▼
+            if (endLoc != null) {
+                LogHelper.Info("宸茬粡璁剧疆浜嗙粓鐐硅揣浣嶏細" + JsonConvert.SerializeObject(endLoc));
+                return;
+            }
+
+            var cgDetail = db.Queryable<TN_CG_Detail>()
+                .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).First();
+
+            if (cgDetail == null) {
+                LogHelper.Info("璁剧疆缁堢偣璐т綅澶辫触锛氬綋鍓嶄换鍔$殑鎵樼洏鍙峰湪鐗╂枡琛ㄤ腑涓嶅瓨鍦�);
+                return;
+            }
 
             var data = GZRobot.CustomBuf();
 
             if (data.Count == 0) {
                 LogHelper.Info("璁剧疆缁堢偣璐т綅澶辫触锛氭病鏈夋帴鍙楀埌鏉ヨ嚜鍥借嚜AGV鐨勯噸閲忎俊鎭�);
-
-                //return;
+                //return; // TODO 姝e紡杩愯鏈夊浗鑷狝GV鐨勬椂鍊欐仮澶�             }
             else {
                 var weight = float.Parse(data[0].parameter_varchar200_up);
-                tn_task.F_WEIGHT = weight;
+                cgDetail.F_QTY = weight;
 
-                if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => it.F_WEIGHT).ExecuteCommand() <= 0) {
-                    LogHelper.Info("淇敼Task閲嶉噺澶辫触");
+                if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_QTY).ExecuteCommand() <= 0) {
+                    LogHelper.Info("淇敼鐗╂枡琛ㄩ噸閲忓け璐�);
                     return;
                 }
             }
 
             // 缁堢偣璐ф灦涓虹┖鏃讹紝涓嶅垽鏂紝浜ょ粰浜哄伐澶勭悊
-            if (tn_task.S_END_AREA == "") {
+            if (tn_task.S_END_LOC == "0") {
                 LogHelper.Info("缁堢偣璐ф灦涓虹┖锛屼笉澶勭悊");
+                return;
+            }
+
+            if (!int.TryParse(tn_task.S_END_LOC.Trim(), out int row)) {
+                LogHelper.Info($"缁堢偣璐ф灦鍙�'{tn_task.S_END_LOC}' 鏃犳硶杞垚鏁板瓧");
+                return;
             }
 
             // 鍙綋涔嬪墠鎸囧畾缁堢偣璐ф灦鍚庯紝鎵嶅皾璇曡绠楃粓鐐硅揣浣�-            if (tn_task.F_WEIGHT > 1500) {
+            if (cgDetail.F_QTY > 1500) {
                 // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-3灞傝揣鏋�-                endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0 && a.N_LAYER <= 3);
+                endLoc = db.Queryable<TN_Location>()
+                    .First(a => a.N_ROW == row && a.N_LAYER <= 3
+                    && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y");
             }
-            else if (tn_task.F_WEIGHT > 0) {
+            else if (cgDetail.F_QTY > 0) {
                 // 閲嶉噺鏈秴杩�.5t锛屽湪鎸囧畾璐ф灦闅忎究閫夋嫨1涓�-                endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0);
+                endLoc = db.Queryable<TN_Location>().First(a => a.N_ROW == row
+                    && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y");
             }
             else {
                 // 娌℃湁鎺ユ敹鍒伴噸閲忥紝鎴栭噸閲忓嚭閿�                 endLoc = null;
-                LogHelper.Info($"閿欒鐨勯噸閲忎俊鎭細{tn_task.F_WEIGHT}");
+                LogHelper.Info($"閿欒鐨勯噸閲忎俊鎭細{cgDetail.F_QTY}");
                 return;
             }
 
             // 濡傛灉娌℃湁绗﹀悎鏉′欢鐨勮揣浣嶏紝缃┖锛岀瓑寰匬DA閲嶆柊纭畾
             if (endLoc == null) {
-                tn_task.S_END_AREA = "";
-                tn_task.S_END_LOC = "";
+                tn_task.S_END_AREA = "HJQ";
+                tn_task.S_END_LOC = "0";
 
                 // 涓嶉渶瑕佸啀缁橤Z AGV浼犵┖鍊硷紝涓�紑濮嬪氨娌$粰鍏蜂綋璐т綅锛屽彧缁欎簡Area
 
@@ -196,16 +220,16 @@
                 //GZRobot.UpdateInteractInfo(request);
 
                 using (var trans = db.Ado.UseTran()) {
-                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC, it.F_WEIGHT })
+                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
                         .ExecuteCommand() > 0) {
                         //LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿� 
                         trans.CommitTran();
-                        LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼鎴愬姛锛屼慨鏀圭粓鐐硅揣鏋跺拰璐т綅涓虹┖");
+                        LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼鎴愬姛锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
                     }
                     else {
                         trans.RollbackTran();
-                        LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼澶辫触锛屼慨鏀圭粓鐐硅揣鏋跺拰璐т綅涓虹┖");
+                        LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼澶辫触锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
                     }
                 }
             }
@@ -214,17 +238,17 @@
                 tn_task.S_END_LOC = endLoc.S_CODE;
 
                 using (var trans = db.Ado.UseTran()) {
-                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC, it.F_WEIGHT })
+                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
                         .ExecuteCommand() > 0) {
                         LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿� 
                         trans.CommitTran();
-                        LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼鎴愬姛锛岀粓鐐硅揣鏋朵负 {endLoc.S_SHELF_CODE}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
+                        LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼鎴愬姛锛岀粓鐐硅揣鏋朵负 {endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
                     }
                     else {
                         trans.RollbackTran();
 
-                        LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼澶辫触锛岀粓鐐硅揣鏋朵负 {endLoc.S_SHELF_CODE}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
+                        LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼澶辫触锛岀粓鐐硅揣鏋朵负 {endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
                     }
                 }
             }
diff --git a/Services/DebugService.cs b/Services/DebugService.cs
index 4684196..63be575 100644
--- a/Services/DebugService.cs
+++ b/Services/DebugService.cs
@@ -125,98 +125,82 @@
             return "鎴愬姛";
         }
 
-        public static string InsertLocCntrCg() {
-            string filePath = PathHelper.GetProjDir("./debug/loc_cntr_cg.csv");
+        public static string InsertLocCntrCg(LocCntrCg locCntrCg) {
             var db = DbHelper.GetDbClient();
 
             try {
-                var configuration = new CsvConfiguration(CultureInfo.InvariantCulture) {
-                    // 閰嶇疆閫夐」
-                    Delimiter = ",",               // 鍒嗛殧绗�-                    HasHeaderRecord = true,        // 鏈夋爣棰樿
-                    MissingFieldFound = null,      // 蹇界暐缂哄け瀛楁
-                    HeaderValidated = null,        // 璺宠繃鏍囬楠岃瘉
-                    BadDataFound = context => { }  // 澶勭悊閿欒鏁版嵁
-                };
-
-                var locCntrCgList = new List<LocCntrCg>();
-
-                using (var reader = new StreamReader(filePath))
-                using (var csv = new CsvReader(reader, configuration)) {
-                    // 璇诲彇璁板綍
-                    locCntrCgList = csv.GetRecords<LocCntrCg>().ToList();
-                }
-
                 using (var tran = db.UseTran()) {
-                    foreach (var locCntrCg in locCntrCgList) {
-                        LogHelper.Info("LogCntrCg锛� + JsonConvert.SerializeObject(locCntrCg));
-                        if (string.IsNullOrEmpty(locCntrCg.LocCode)) break;
+                    LogHelper.Info("LogCntrCg锛� + JsonConvert.SerializeObject(locCntrCg));
+                    if (string.IsNullOrEmpty(locCntrCg.LocCode)) {
+                        return "鍙傛暟闈炴硶";
+                    }
 
-                        var loc = db.Queryable<TN_Location>().First(a => a.S_CODE == locCntrCg.LocCode);
-                        if (loc == null) {
-                            var newLoc = new TN_Location {
-                                S_CODE = locCntrCg.LocCode,
-                                S_AREA_CODE = locCntrCg.LocArea ?? ""
-                            };
+                    var loc = db.Queryable<TN_Location>().First(a => a.S_CODE == locCntrCg.LocCode);
+                    if (loc == null) {
+                        var newLoc = new TN_Location {
+                            S_CODE = locCntrCg.LocCode,
+                            S_AREA_CODE = locCntrCg.LocArea ?? ""
+                        };
 
-                            if (db.Insertable<TN_Location>(newLoc).ExecuteCommand() <= 0) {
-                                tran.RollbackTran();
-                                LogHelper.Info($"鎻掑叆浣嶇疆{locCntrCg.LocCode}澶辫触");
-                                return "鎻掑叆澶辫触";
-                            }
-
-                            loc = newLoc;
+                        if (db.Insertable<TN_Location>(newLoc).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            LogHelper.Info($"鎻掑叆浣嶇疆{locCntrCg.LocCode}澶辫触");
+                            return "鎻掑叆澶辫触";
                         }
 
-                        //if (loc.N_CURRENT_NUM == 0) {
-                        //    loc.N_CURRENT_NUM = 1;
-                        //    if (db.Updateable<TN_Location>(loc).UpdateColumns(
-                        //        it => new { it.N_CURRENT_NUM, it.T_MODIFY }).ExecuteCommand() <= 0) {
-                        //        tran.RollbackTran();
-                        //        LogHelper.Info($"淇敼浣嶇疆{locCntrCg.LocCode}澶辫触");
-                        //        continue;
-                        //    }
-                        //}
+                        loc = newLoc;
+                    }
 
-                        if (string.IsNullOrEmpty(locCntrCg.CntrCode)) {
-                            LogHelper.Info("瀹瑰櫒鍙蜂负绌猴紝涓嶅啀璇诲彇鍚庨潰鐨勬暟鎹�);
-                            continue;
+                    //if (loc.N_CURRENT_NUM == 0) {
+                    //    loc.N_CURRENT_NUM = 1;
+                    //    if (db.Updateable<TN_Location>(loc).UpdateColumns(
+                    //        it => new { it.N_CURRENT_NUM, it.T_MODIFY }).ExecuteCommand() <= 0) {
+                    //        tran.RollbackTran();
+                    //        LogHelper.Info($"淇敼浣嶇疆{locCntrCg.LocCode}澶辫触");
+                    //        continue;
+                    //    }
+                    //}
+
+                    if (string.IsNullOrEmpty(locCntrCg.CntrCode)) {
+                        tran.CommitTran();
+                        LogHelper.Info("瀹瑰櫒鍙蜂负绌猴紝涓嶅啀璇诲彇鍚庨潰鐨勬暟鎹�);
+                        return "瀹瑰櫒鍙蜂负绌猴紝涓嶅啀璇诲彇鍚庨潰鐨勬暟鎹�;
+                    }
+
+                    var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == locCntrCg.LocCode
+                        && a.S_CNTR_CODE == locCntrCg.CntrCode);
+
+                    if (locCntrRel == null) {
+                        var newLocCntrRel = new TN_Loc_Container {
+                            S_LOC_CODE = locCntrCg.LocCode,
+                            S_CNTR_CODE = locCntrCg.CntrCode
+                        };
+
+                        loc.N_CURRENT_NUM = 1;
+
+                        if (db.Insertable<TN_Loc_Container>(newLocCntrRel).ExecuteCommand() <= 0
+                            && db.Updateable<TN_Location>(loc).UpdateColumns(c => c.N_CURRENT_NUM).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            LogHelper.Info($"鎻掑叆浣嶇疆鎵樼洏鍏崇郴{locCntrCg.LocCode}-{locCntrCg.CntrCode}澶辫触");
+                            return "鎻掑叆澶辫触";
                         }
+                    }
 
-                        var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == locCntrCg.LocCode
-                            && a.S_CNTR_CODE == locCntrCg.CntrCode);
+                    if (string.IsNullOrEmpty(locCntrCg.ItemCode)) {
+                        tran.CommitTran();
+                        LogHelper.Info("鐗╂枡鍙蜂负绌猴紝涓嶅啀璇诲彇鍚庨潰鐨勬暟鎹�);
+                        return "鐗╂枡鍙蜂负绌猴紝涓嶅啀璇诲彇鍚庨潰鐨勬暟鎹�;
+                    }
 
-                        if (locCntrRel == null) {
-                            var newLocCntrRel = new TN_Loc_Container {
-                                S_LOC_CODE = locCntrCg.LocCode,
-                                S_CNTR_CODE = locCntrCg.CntrCode
-                            };
-
-                            loc.N_CURRENT_NUM = 1;
-
-                            if (db.Insertable<TN_Loc_Container>(newLocCntrRel).ExecuteCommand() <= 0
-                                && db.Updateable<TN_Location>(loc).UpdateColumns(c => c.N_CURRENT_NUM).ExecuteCommand() <= 0) {
-                                tran.RollbackTran();
-                                LogHelper.Info($"鎻掑叆浣嶇疆鎵樼洏鍏崇郴{locCntrCg.LocCode}-{locCntrCg.CntrCode}澶辫触");
-                                return "鎻掑叆澶辫触";
-                            }
-                        }
-
-                        if (string.IsNullOrEmpty(locCntrCg.ItemCode)) {
-                            LogHelper.Info("鐗╂枡鍙蜂负绌猴紝涓嶅啀璇诲彇鍚庨潰鐨勬暟鎹�);
-                            continue;
-                        }
-
-                        var cgDetail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == locCntrCg.CntrCode
-                            && a.S_ITEM_CODE == locCntrCg.ItemCode);
-                        if (cgDetail == null) {
-                            var locList = new List<TN_CG_Detail>();
-                            locList.Add(new TN_CG_Detail { S_CNTR_CODE = locCntrCg.CntrCode, S_ITEM_CODE = locCntrCg.ItemCode, S_BATCH_NO = locCntrCg.BatchNo ?? "" });
-                            if (db.Insertable<TN_CG_Detail>(locList).ExecuteCommand() <= 0) {
-                                tran.RollbackTran();
-                                LogHelper.Info($"鎻掑叆鎵樼洏鐗╂枡鍏崇郴{locCntrCg.CntrCode}-{locCntrCg}澶辫触");
-                                return "鎻掑叆澶辫触";
-                            }
+                    var cgDetail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == locCntrCg.CntrCode
+                        && a.S_ITEM_CODE == locCntrCg.ItemCode);
+                    if (cgDetail == null) {
+                        var locList = new List<TN_CG_Detail>();
+                        locList.Add(new TN_CG_Detail { S_CNTR_CODE = locCntrCg.CntrCode, S_ITEM_CODE = locCntrCg.ItemCode, S_BATCH_NO = locCntrCg.BatchNo ?? "" });
+                        if (db.Insertable<TN_CG_Detail>(locList).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            LogHelper.Info($"鎻掑叆鎵樼洏鐗╂枡鍏崇郴{locCntrCg.CntrCode}-{locCntrCg}澶辫触");
+                            return "鎻掑叆澶辫触";
                         }
                     }
                     tran.CommitTran();
@@ -225,19 +209,24 @@
                 return "鎻掑叆鏁版嵁鎴愬姛";
 
             }
-            catch (FileNotFoundException) {
-                return $"Error: File not found - {filePath}";
-            }
             catch (Exception ex) {
-                return $"Error reading CSV file: {ex.Message}";
+                return $"{ex.Message}";
             }
         }
 
         public static string SetTaskWeight(SetTaskWeightInfo model) {
             var db = DbHelper.GetDbClient();
+            var cgDetail = db.Queryable<TN_CG_Detail, TN_Task>((d, t) => d.S_CNTR_CODE == t.S_CNTR_CODE)
+                .Where((d, t) => t.S_CODE == model.TaskNo).First();
+
+            if (cgDetail == null) {
+                return "鎵句笉鍒板搴旂殑鐗╂枡淇℃伅";
+            }
+
+            cgDetail.F_QTY = model.Weight;
 
             try {
-                if (db.Updateable<TN_Task>().SetColumns(it => it.F_WEIGHT == model.Weight).Where(it => it.S_CODE == model.TaskNo)
+                if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_QTY)
                     .ExecuteCommand() <= 0 ) {
                     return "淇敼澶辫触";
                 }
diff --git a/Services/MoboxService.cs b/Services/MoboxService.cs
index 1345f1e..e74bb71 100644
--- a/Services/MoboxService.cs
+++ b/Services/MoboxService.cs
@@ -24,22 +24,17 @@
             LogHelper.Info("瑙﹀彂API锛氫骇鍝佸叆搴�PDA)" + JsonConvert.SerializeObject(model), "API");
             var db = DbHelper.GetDbClient();
             var startLoc = new TN_Location();
-            //var endLoc = new TN_Location();
 
             try {
                 // 璧风偣浣嶇疆蹇呴』锛氫负绌恒�鏃犻攣銆佸惎鐢ㄣ�灞炰簬鏀跺彂鍖哄煙
                 startLoc = db.Queryable<TN_Location>().
-                    First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_SHELF_CODE == AreaCode.鏀跺彂璐т綅鍖�;
+                    First(a => a.S_CODE == model.StartLoc
+                    && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" 
+                    && a.S_AREA_CODE == AreaCode.鏀跺彂鍖�;
 
                 if (startLoc == null) {
-                    return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.startLoc}涓嶅瓨鍦紒");
+                    return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦紒");
                 }
-
-                //if (!LocationHelper.IsStartLocationTransferOk(model.startLoc, 
-                //    a => a.S_SHELF_CODE == Settings.Areas[0], 
-                //    out startLoc)) {
-                //    return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.startLoc}涓嶅瓨鍦紒");
-                //}
 
                 // 瀹瑰櫒 ID 鍜�鐗╂枡 ID 鏈寚瀹氾紝鐢辩郴缁熺洿鎺ョ敓鎴�                 var cntID = Guid.NewGuid().ToString("D");
@@ -55,14 +50,17 @@
                     S_CNTR_CODE = cntID,
                 };
 
-                var endArea = ""; // 榛樿缁堢偣鍖哄煙涓虹┖
+                var endLoc = "0"; // 鍋囩殑榛樿缁堢偣鍦板潃
 
                 // 鎸囧畾璐т綅鎺掑彿锛堜笉鑳戒负绌恒�绌哄瓧绗︿覆鎴栫┖鏍硷級
-                if (model.endShelf != null && model.endShelf.Trim() != "") {
-                    endArea = model.endShelf;
-                    // 娌℃湁鍦ㄩ厤缃枃浠舵壘鍒拌繖涓揣鏋跺彿
-                    if (!Settings.AreaMap[AreaName.璐ф灦鍖篯.Contains(endArea)) {
-                        return BuildSimpleResult(2, $"璐ф灦鍙�{model.endShelf} 涓嶅瓨鍦�);
+                if (model.Row != null && model.Row.Trim() != "") {
+                    endLoc = model.Row; // 鐢ㄦ帓鍙峰瓧绗︿覆褰撳仛鍋囧湴鍧�+                    if (!int.TryParse(model.Row.Trim(), out int row)) {
+                        return BuildSimpleResult(2, $"{model.Row} 涓嶅悎娉曪細鏃犳硶杞垚鏁存暟绫诲瀷");
+                    }
+                    // 璐ф灦鎺掑彿鍙兘鏄�0 - 8
+                    if (row <= 0 || row > 8) {
+                        return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�-8涔嬮棿鐨勬暣鏁�);
                     }
                 }
 
@@ -71,19 +69,19 @@
                     if (db.Insertable<TN_Loc_Container>(cntLoc).ExecuteCommand() > 0
                         && db.Insertable<TN_CG_Detail>(cgCnt).ExecuteCommand() > 0) {
                         //鍒涘缓浜у搧鍏ュ簱浠诲姟锛氬垱寤烘惉閫佷换鍔★紝璧风偣缁堢偣瀹瑰櫒
-                        if (WCSHelper.CreateTaskWithArea(startLoc.S_CODE, endArea, "浜у搧鍏ュ簱(PDA)", 3, cntID)) {
+                        if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc, TaskName.浜у搧鍏ュ簱, 3, cntID)) {
                             //濡傛灉鎿嶄綔TN_Location浼氶�鎴愭閿�                             LocationHelper.LockLoc(startLoc.S_CODE, 2);//璧风偣鍑哄簱閿侊紝
                             //LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿� 
                             trans.CommitTran();
 
-                            return BuildSimpleResult(0, $"鐢熸垚 浜у搧鍏ュ簱(PDA) 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endArea} 锛岀粓鐐硅揣浣嶆湭鎸囧畾");
+                            return BuildSimpleResult(0, $"鐢熸垚 浜у搧鍏ュ簱 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc} 锛岀粓鐐硅揣浣嶆湭鎸囧畾");
                         }
                         else {
                             trans.RollbackTran();
 
-                            return BuildSimpleResult(5, $"鐢熸垚 浜у搧鍏ュ簱(PDA) 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endArea} 锛岀粓鐐硅揣浣嶆湭鎸囧畾");
+                            return BuildSimpleResult(5, $"鐢熸垚 浜у搧鍏ュ簱 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc} 锛岀粓鐐硅揣浣嶆湭鎸囧畾");
                         }
                     }
                     else {
@@ -107,36 +105,50 @@
 
             try {
                 // 浠诲姟鍙峰瓨鍦細缁堢偣璐ф灦鍜岀粓鐐逛綅缃负绌猴紝涓斾换鍔′负浜у搧鍏ュ簱(PDA)
-                //var task = db.Queryable<TN_Task>().First(a => a.S_CODE == model.taskNo && a.S_END_AREA == "" && a.S_END_LOC == "" && a.S_TYPE == "浜у搧鍏ュ簱(PDA)");
-                var task = db.Queryable<TN_Task>().First(a => a.S_EQ_NO == model.forklift_no && a.S_END_AREA == "" && a.S_END_LOC == "" && a.S_TYPE == "浜у搧鍏ュ簱(PDA)");
+                //var task = db.Queryable<TN_Task>().First(a => a.S_EQ_NO == model.forklift_no && a.S_END_AREA == "HJQ" && a.S_END_LOC == "0" && a.S_TYPE == "浜у搧鍏ュ簱(PDA)");
+                var task = db.Queryable<TN_Task>()
+                    .Where(a => a.S_B_STATE == "鍙栬揣瀹屾垚" && a.S_TYPE == TaskName.浜у搧鍏ュ簱)
+                    .OrderBy(a => a.T_CREATE, SqlSugar.OrderByType.Desc).First();
                 
                 if (task == null) {
-                    //return BuildSimpleResult(2, $"浠诲姟鍙�{model.taskNo} 涓嶅瓨鍦紝鎴栦笉婊¤冻缁堢偣璐ф灦涓虹┖銆佺粓鐐逛綅缃负绌轰笖涓�浜у搧鍏ュ簱(PDA) 浠诲姟");
-                    return BuildSimpleResult(2, $"灏忚溅 '{model.forklift_no}' 褰撳墠涓嶅瓨鍦ㄤ换鍔★紝鎴栦笉婊¤冻缁堢偣璐ф灦涓虹┖銆佺粓鐐逛綅缃负绌轰笖涓�浜у搧鍏ュ簱(PDA) 浠诲姟");
+                    return BuildSimpleResult(2, $"褰撳墠涓嶅瓨鍦ㄧ姸鎬佷负 鍙栬揣瀹屾垚 鐨�浜у搧鍏ュ簱 浠诲姟");
+                }
+                
+                if (task.S_END_LOC != null && task.S_END_LOC != "0") {
+                    return BuildSimpleResult(3, $"璇ヤ换鍔″凡鏈夌粓鐐�);
+                }
+
+                var cgDetail = db.Queryable<TN_CG_Detail>()
+                    .Where(a => a.S_CNTR_CODE == task.S_CNTR_CODE).First();
+
+                if (cgDetail == null) {
+                    return BuildSimpleResult(4, $"鎵樼洏鐗╂枡涓嶅瓨鍦�);
                 }
 
                 var endLoc = new TN_Location();
-                if (task.F_WEIGHT > 1500) {
+                if (cgDetail.F_QTY > 1500) {
                     // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-3灞傝揣鏋�                     endLoc = db.Queryable<TN_Location>().First(
-                        a => a.S_CODE == model.endLoc && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0 && a.N_LAYER <= 3);
+                        a => a.S_CODE == model.endLoc && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0 && a.N_LAYER <= 3 && a.S_AREA_CODE == AreaCode.璐ф灦鍖�;
+                }
+                else if (cgDetail.F_QTY > 0) {
+                    endLoc = db.Queryable<TN_Location>().First(
+                        a => a.S_CODE == model.endLoc && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0 && a.S_AREA_CODE == AreaCode.璐ф灦鍖�;
                 }
                 else {
-                    endLoc = db.Queryable<TN_Location>().First(
-                        a => a.S_CODE == model.endLoc && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0);
+                    return BuildSimpleResult(5, $"鐗╂枡閲嶉噺淇℃伅涓嶅悎娉曪細{cgDetail.F_QTY}");
                 }
 
                 // 娌℃湁绗﹀悎鏉′欢鐨勮揣浣�                 if (endLoc == null) {
-                    return BuildSimpleResult(3, $"璐т綅{model.endLoc}涓嶆弧瓒宠姹傦細涓嶅瓨鍦ㄦ垨涓嶆弧瓒崇О閲嶆斁缃姹�);
+                    return BuildSimpleResult(6, $"璐т綅{model.endLoc}涓嶅瓨鍦紝鎴栦笉婊¤冻绉伴噸鏀剧疆瑕佹眰");
                 }
 
                 // 淇敼浠诲姟缁堢偣涓篜DA鎸囧畾缁堢偣
                 task.S_END_LOC = endLoc.S_CODE;
-                task.S_END_AREA = endLoc.S_SHELF_CODE;
 
                 using (var trans = db.Ado.UseTran()) {
-                    if (db.Updateable<TN_Task>(task).ExecuteCommand() > 0) {
+                    if (db.Updateable<TN_Task>(task).UpdateColumns(a => a.S_END_LOC).ExecuteCommand() > 0) {
                         LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�                         trans.CommitTran();
 
@@ -145,7 +157,7 @@
                     else {
                         trans.RollbackTran();
 
-                        return BuildSimpleResult(4, $"浠诲姟{task.S_CODE}淇敼澶辫触锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
+                        return BuildSimpleResult(7, $"浠诲姟{task.S_CODE}淇敼澶辫触锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
                     }
                 }
             }
@@ -177,7 +189,7 @@
                     return BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙嚭搴撶殑鐗╂枡");
                 }
 
-                var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.endLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == AreaCode.鏀跺彂璐т綅鍖�;
+                var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.endLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == AreaCode.鏀跺彂鍖�;
 
                 if (endLoc == null) {
                     return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
@@ -185,17 +197,17 @@
 
                 using (var trans = db.Ado.UseTran()) {
                     // 瑙g粦锛氳捣鐐硅揣浣嶄笌寰呮惉杩愬鍣紙涓嶉渶瑕佹墜鍔╠eleteable鎿嶄綔锛屽唴閮ㄤ細鑷姩鎿嶄綔鐨勶級
-                    if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, "浜у搧閮ㄥ垎鍑哄簱(WMS)", 3, locCtnrRel.S_CNTR_CODE))//鍒涘缓鎼�浠诲姟锛岃捣鐐圭粓鐐瑰鍣�+                    if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, TaskName.浜у搧閮ㄥ垎鍑哄簱, 3, locCtnrRel.S_CNTR_CODE))//鍒涘缓鎼�浠诲姟锛岃捣鐐圭粓鐐瑰鍣�                         {//濡傛灉鎿嶄綔TN_Location浼氶�鎴愭閿�                         LocationHelper.LockLoc(startLoc.S_CODE, 2);//璧风偣鍑哄簱閿侊紝
                         LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿� 
                         trans.CommitTran();
-                        return BuildSimpleResult(0, $"鐢熸垚 浜у搧鍑哄簱(WMS) 鎴愬姛锛屽鍣ㄥ彿{locCtnrRel.S_CNTR_CODE}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐箋endLoc.S_CODE}");
+                        return BuildSimpleResult(0, $"鐢熸垚 浜у搧閮ㄥ垎鍑哄簱 鎴愬姛锛屽鍣ㄥ彿{locCtnrRel.S_CNTR_CODE}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐箋endLoc.S_CODE}");
                     }
                     else {
                         trans.RollbackTran();
-                        return BuildSimpleResult(5, $"鐢熸垚 浜у搧鍑哄簱(WMS) 澶辫触锛屽鍣ㄥ彿{locCtnrRel.S_CNTR_CODE}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐箋endLoc.S_CODE}");
+                        return BuildSimpleResult(5, $"鐢熸垚 浜у搧閮ㄥ垎鍑哄簱 澶辫触锛屽鍣ㄥ彿{locCtnrRel.S_CNTR_CODE}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐箋endLoc.S_CODE}");
                     }
                 }
             }
@@ -215,7 +227,7 @@
 
             try {
                 // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級
-                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == AreaCode.鏀跺彂璐т綅鍖�;
+                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == AreaCode.鏀跺彂鍖�;
                 if (startLoc == null) {
                     return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
                 }
@@ -263,7 +275,7 @@
 
             try {
                 // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級
-                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == AreaCode.鏀跺彂璐т綅鍖�;
+                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == AreaCode.鏀跺彂鍖�;
                 if (startLoc == null) {
                     return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝嚭搴撴潯浠�);
                 }
@@ -311,7 +323,7 @@
 
             try {
                 // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級
-                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == AreaCode.鏀跺彂璐т綅鍖�;
+                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == AreaCode.鏀跺彂鍖�;
                 if (startLoc == null) {
                     return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
                 }
diff --git a/config/config.comment.json b/config/config.comment.json
new file mode 100644
index 0000000..afb4578
--- /dev/null
+++ b/config/config.comment.json
@@ -0,0 +1,28 @@
+{
+    "WebApiUrl": "http://127.0.0.1:8901",
+    "RCSApiUrl": "http://127.0.0.1:6001",
+    "NDCApiUrl": "http://127.0.0.1:5201/api/order/",
+    "SqlServer": "Data Source=192.168.1.144;Initial Catalog=YinKouAnGan;User ID=hhuser;Password=Am123123",
+    //"SqlServer": "Data Source=(local);Initial Catalog=AnGangTest;User ID=sa;Password=123456",
+    "TCPServerIP": "127.0.0.1",
+    "TCPServerPort": 8085,
+    "Areas": [
+        {
+            "Name": "鏀跺彂鍖�,
+            "Codes": [ "SFQ" ]
+        },
+        {
+            "Name": "璐ф灦鍖�,
+            "Codes": [ "HJQ" ]
+        }
+    ],
+    "Snap": [
+        {
+            "Ip": "172.23.8.95",
+            "Port": 37777,
+            "Name": "admin",
+            "Pwd": "123456"
+        }
+    ],
+    "CaptureUrl": "http://127.0.0.1/"
+}
\ No newline at end of file
diff --git a/config/config.json b/config/config.json
index e1f40d2..fe668e8 100644
--- a/config/config.json
+++ b/config/config.json
@@ -7,12 +7,12 @@
     "TCPServerPort": 8085,
     "Areas": [
         {
-            "Name": "鏀跺彂璐т綅鍖�,
-            "Codes": [ "P" ]
+            "Name": "鏀跺彂鍖�,
+            "Codes": [ "SFQ" ]
         },
         {
             "Name": "璐ф灦鍖�,
-            "Codes": [ "B111", "B112", "B113", "B114", "B115", "B116", "B117", "B118" ]
+            "Codes": [ "HJQ" ]
         }
     ],
     "Snap": [

--
Gitblit v1.9.1