From bb09e7affb602791af4064cda8cddcfae8b3f3aa Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期四, 22 五月 2025 13:17:46 +0800
Subject: [PATCH] 内部联调测试,修复产品入库货区判断逻辑等问题

---
 Models/TN_Loc_Container.cs                                                           |    5 
 .vs/HH.WCS.Mobox3.AnGang/FileContentIndex/d649a959-a553-4855-aaba-982999a405f5.vsidx |    0 
 Program.cs                                                                           |    9 
 models/TN_Count_CG_Detail.cs                                                         |    2 
 core/Monitor.cs                                                                      |   41 +--
 /dev/null                                                                            |   17 -
 api/ErpController.cs                                                                 |    4 
 config/config.json                                                                   |    8 
 api/ApiModel.cs                                                                      |    3 
 core/WCSCore.cs                                                                      |  260 ++++++++++++-------
 wms/WCSHelper.cs                                                                     |    4 
 util/SqlHelper.cs                                                                    |    4 
 HH.WCS.Mobox3.AnGang.csproj                                                          |    1 
 api/DebugController.cs                                                               |   95 ++++---
 device/SnapDevice.cs                                                                 |    2 
 util/Settings.cs                                                                     |   18 
 api/ApiHelper.cs                                                                     |  222 ++++++++++------
 .vs/HH.WCS.Mobox3.AnGang/FileContentIndex/3ea34f60-d704-4ad2-8e0f-2cf457081645.vsidx |    0 
 Models/TN_CG_Detail.cs                                                               |    8 
 api/MoboxController.cs                                                               |   31 +
 20 files changed, 432 insertions(+), 302 deletions(-)

diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/1a441e71-f454-4033-af8e-db39c2339a05.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/1a441e71-f454-4033-af8e-db39c2339a05.vsidx
deleted file mode 100644
index da03df8..0000000
--- a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/1a441e71-f454-4033-af8e-db39c2339a05.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/3ea34f60-d704-4ad2-8e0f-2cf457081645.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/3ea34f60-d704-4ad2-8e0f-2cf457081645.vsidx
new file mode 100644
index 0000000..987a584
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/3ea34f60-d704-4ad2-8e0f-2cf457081645.vsidx
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/c94de693-d780-402e-840f-826433af2f96.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/c94de693-d780-402e-840f-826433af2f96.vsidx
deleted file mode 100644
index 2ccb1c0..0000000
--- a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/c94de693-d780-402e-840f-826433af2f96.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/d649a959-a553-4855-aaba-982999a405f5.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/d649a959-a553-4855-aaba-982999a405f5.vsidx
new file mode 100644
index 0000000..98c4f54
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/d649a959-a553-4855-aaba-982999a405f5.vsidx
Binary files differ
diff --git a/HH.WCS.Mobox3.AnGang.csproj b/HH.WCS.Mobox3.AnGang.csproj
index 608bae9..d590fca 100644
--- a/HH.WCS.Mobox3.AnGang.csproj
+++ b/HH.WCS.Mobox3.AnGang.csproj
@@ -290,7 +290,6 @@
     <Compile Include="models\TN_Container.cs" />
     <Compile Include="models\TN_Location.cs" />
     <Compile Include="models\TN_Loc_Container.cs" />
-    <Compile Include="models\TN_WorkOrder.cs" />
     <Compile Include="models\TN_Task.cs" />
     <Compile Include="models\TN_Task_Action.cs" />
     <Compile Include="process\DeviceProcess.cs" />
diff --git a/Models/TN_CG_Detail.cs b/Models/TN_CG_Detail.cs
index 7330b17..e09a2a9 100644
--- a/Models/TN_CG_Detail.cs
+++ b/Models/TN_CG_Detail.cs
@@ -19,6 +19,8 @@
 
         public string S_ITEM_CODE { get; set; } = "";//璐у搧缂栫爜
 
+        public string S_ITEM_NAME { get; set; } = "";
+
         public string S_ITEM_SPEC { get; set; } = "";//璐у搧瑙勬牸
 
         /// <summary>
@@ -38,9 +40,7 @@
         /// </summary>
         public float F_QTY { get; set; } = 0f;
 
-        /// <summary>
-        /// 鍥剧墖閾炬帴
-        /// </summary>
-        public string S_IMG_URL { get; set; } = "";
+
+
     }
 }
diff --git a/Models/TN_Loc_Container.cs b/Models/TN_Loc_Container.cs
index e2edf67..633e6cf 100644
--- a/Models/TN_Loc_Container.cs
+++ b/Models/TN_Loc_Container.cs
@@ -16,5 +16,10 @@
 
         [Navigate(NavigateType.OneToOne, nameof(S_CNTR_CODE))]
         public TN_Container Container { get; set; }
+
+        /// <summary>
+        /// 鍥剧墖閾炬帴
+        /// </summary>
+        public string S_IMG_URL { get; set; } = "";
     }
 }
diff --git a/Models/TN_WorkOrder.cs b/Models/TN_WorkOrder.cs
deleted file mode 100644
index 7e25ac4..0000000
--- a/Models/TN_WorkOrder.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using SqlSugar;
-
-namespace HH.WCS.Mobox3.AnGang.models {
-    /// <summary>
-    /// 鐢熶骇宸ュ崟
-    /// </summary>
-    [SugarTable("TN_WorkOrder")]
-    public class TN_WorkOrder : BaseModel
-    {
-        public string S_WORK_NO { get; set; }//宸ュ崟鍙凤紝涓婚敭
-        public string S_B_STATE { get; set; }//宸ュ崟鐘舵�锛屾柊寤�寮�惎-鏆傚仠-瀹屾垚
-        public string S_ITEM_CODE { get; set; }//鐗╂枡缂栫爜
-        public string S_BATCH_CODE { get; set; }//鎵规鍙�-        public string S_ITEM_SPEC { get; set; }//瑙勬牸
-        public string S_LINE_NO { get; set; }//浜х嚎锛屼笉鑳戒负null
-    }
-}
diff --git a/Program.cs b/Program.cs
index 577f06e..2b99c54 100644
--- a/Program.cs
+++ b/Program.cs
@@ -3,11 +3,14 @@
 using System.Threading;
 using System.Threading.Tasks;
 
+using HH.WCS.Mobox3.AnGang.core;
 using HH.WCS.Mobox3.AnGang.device;
 
 using Microsoft.Owin.Hosting;
 
 using Topshelf;
+
+using Monitor = HH.WCS.Mobox3.AnGang.core.Monitor;
 
 namespace HH.WCS.Mobox3.AnGang {
     internal class Program
@@ -123,9 +126,9 @@
             {
                 List<Task> tasks = new List<Task>();
                 // 娣诲姞浠诲姟鎺ㄩ�绾跨▼
-                //tasks.Add(GetTask(WCSCore.Dispatch));
-
-
+                tasks.Add(GetTask(WCSCore.Dispatch));
+                tasks.Add(GetTask(Monitor.CheckCountOrder));
+                
 
                 Task.WaitAll(tasks.ToArray());
             }
diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index 317676f..cce68d9 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -27,16 +27,18 @@
                     .Where(a => a.S_CODE == model.StartLoc)
                     .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
                     .Where(a => a.N_CURRENT_NUM == 0)
-                    .Where(a => a.S_AREA_CODE == "SFQ")
+                    .Where(a => Settings.Areas[0].Contains(a.S_AREA_CODE)) // 鏀跺彂鍖�                     .First();
 
                 if (startLoc == null) {
-                    return NewSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦紒");
+                    return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦紒");
                 }
 
                 // 瀹瑰櫒 ID 鍜�鐗╂枡 ID 鏈寚瀹氾紝鐢辩郴缁熺洿鎺ョ敓鎴�-                var cntId = Guid.NewGuid().ToString("D");
-                var CgId = Guid.NewGuid().ToString("D");
+                //var cntId = Guid.NewGuid().ToString("D");
+                //var CgId = Guid.NewGuid().ToString("D");
+                var cntId = GenerateNo("瀹瑰櫒鍙�, "CN");
+                var cgId = GenerateNo("鐗╂枡鍙�, "CG");
 
                 // 鍒濆鏄病鏈夌粦瀹氫俊鎭殑锛屽厛灏嗚捣鐐逛綅缃笌瀹瑰櫒缁戝畾锛屽鍣ㄤ笌鐗╂枡缁戝畾
                 var locCntrRel = new TN_Loc_Container() {
@@ -44,7 +46,7 @@
                     S_CNTR_CODE = cntId,
                 };
                 var cgDetail = new TN_CG_Detail() {
-                    S_ITEM_CODE = CgId,
+                    S_ITEM_CODE = cgId,
                     S_CNTR_CODE = cntId,
                 };
 
@@ -54,11 +56,11 @@
                 if (model.Row != null && model.Row.Trim() != "") {
                     endLocCode = model.Row; // 鐢ㄦ帓鍙峰瓧绗︿覆褰撳仛鍋囧湴鍧�                     if (!int.TryParse(model.Row.Trim(), out int row)) {
-                        return NewSimpleResult(2, $"{model.Row} 涓嶅悎娉曪細鏃犳硶杞垚鏁存暟绫诲瀷");
+                        return BuildSimpleResult(2, $"{model.Row} 涓嶅悎娉曪細鏃犳硶杞垚鏁存暟绫诲瀷");
                     }
                     // 璐ф灦鎺掑彿鍙兘鏄�0 - 8
                     if (row <= 0 || row > 8) {
-                        return NewSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�-8涔嬮棿鐨勬暣鏁�);
+                        return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�-8涔嬮棿鐨勬暣鏁�);
                     }
                 }
 
@@ -69,38 +71,44 @@
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅{locCntrRel.S_LOC_CODE}锛屽鍣▄locCntrRel.S_CNTR_CODE}");
                     }
 
                     if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鎻掑叆瀹瑰櫒璐у搧鏄庣粏琛ㄥけ璐ワ細瀹瑰櫒{cgDetail.S_CNTR_CODE}锛岀墿鏂檣cgDetail.S_ITEM_CODE}");
                     }
 
                     if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鏇存柊璧风偣璐т綅閿佺姸鎬佸け璐ワ細璧风偣璐т綅{startLoc.S_CODE}");
                     }
 
                     if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚浠诲姟 {taskName} 澶辫触锛氬鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLocCode} 锛岀粓鐐硅揣浣嶆湭鎸囧畾");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0,
+                    return BuildSimpleResult(0,
                         $"鐢熸垚浠诲姟 {taskName} 鎴愬姛锛氬鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLocCode} 锛岀粓鐐硅揣浣嶆湭鎸囧畾");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
+
+        //internal static string GenerateNo(string snType, string prefix) {
+        //    var id = SYSHelper.GetSerialNumber(snType, prefix);
+        //    var date = DateTime.Now.ToString("yyMMdd");
+        //    return $"TN{date}{id.ToString().PadLeft(4, '0')}";
+        //}
 
         /// <summary>
         /// PDA閫夋嫨缁堢偣璐т綅
@@ -118,18 +126,18 @@
                     .OrderBy(a => a.T_CREATE, SqlSugar.OrderByType.Desc).First();
 
                 if (task == null) {
-                    return NewSimpleResult(2, $"褰撳墠涓嶅瓨鍦ㄧ姸鎬佷负 鍙栬揣瀹屾垚 鐨�浜у搧鍏ュ簱 浠诲姟");
+                    return BuildSimpleResult(2, $"褰撳墠涓嶅瓨鍦ㄧ姸鎬佷负 鍙栬揣瀹屾垚 鐨�浜у搧鍏ュ簱 浠诲姟");
                 }
 
                 if (task.S_END_LOC != null && task.S_END_LOC != "0") {
-                    return NewSimpleResult(3, $"璇ヤ换鍔″凡鏈夌粓鐐�);
+                    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 NewSimpleResult(4, $"鎵樼洏鐗╂枡涓嶅瓨鍦�);
+                    return BuildSimpleResult(4, $"鎵樼洏鐗╂枡涓嶅瓨鍦�);
                 }
 
                 var endLoc = new TN_Location();
@@ -139,7 +147,7 @@
                         .Where(a => a.S_CODE == model.endLoc)
                         .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
                         .Where(a => a.N_CURRENT_NUM == 0)
-                        .Where(a => a.S_AREA_CODE == "HJQ")
+                        .Where(a => Settings.Areas[1].Contains(a.S_AREA_CODE))
                         .Where(a => a.N_LAYER <= 3)
                         .First();
                 }
@@ -148,17 +156,17 @@
                         .Where(a => a.S_CODE == model.endLoc)
                         .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
                         .Where(a => a.N_CURRENT_NUM == 0)
-                        .Where(a => a.S_AREA_CODE == "HJQ")
+                        .Where(a => Settings.Areas[1].Contains(a.S_AREA_CODE))
                         //.Where(a => a.N_LAYER <= 3)
                         .First();
                 }
                 else {
-                    return NewSimpleResult(5, $"鐗╂枡閲嶉噺淇℃伅涓嶅悎娉曪細{cgDetail.F_QTY}");
+                    return BuildSimpleResult(5, $"鐗╂枡閲嶉噺淇℃伅涓嶅悎娉曪細{cgDetail.F_QTY}");
                 }
 
                 // 娌℃湁绗﹀悎鏉′欢鐨勮揣浣�                 if (endLoc == null) {
-                    return NewSimpleResult(6, $"璐т綅{model.endLoc}涓嶅瓨鍦紝鎴栦笉婊¤冻绉伴噸鏀剧疆瑕佹眰");
+                    return BuildSimpleResult(6, $"璐т綅{model.endLoc}涓嶅瓨鍦紝鎴栦笉婊¤冻绉伴噸鏀剧疆瑕佹眰");
                 }
 
                 // 淇敼浠诲姟缁堢偣涓篜DA鎸囧畾缁堢偣
@@ -168,21 +176,21 @@
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Updateable<TN_Task>(task).UpdateColumns(a => a.S_END_LOC).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(7, $"浠诲姟{task.S_CODE}淇敼澶辫触锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
+                        return BuildSimpleResult(7, $"浠诲姟{task.S_CODE}淇敼澶辫触锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
                     }
 
                     if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(7, $"浠诲姟{task.S_CODE}淇敼澶辫触锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
+                        return BuildSimpleResult(7, $"浠诲姟{task.S_CODE}淇敼澶辫触锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0, $"浠诲姟{task.S_CODE}淇敼鎴愬姛锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
+                    return BuildSimpleResult(0, $"浠诲姟{task.S_CODE}淇敼鎴愬姛锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
@@ -204,19 +212,19 @@
                     .First();
 
                 if (startLoc == null) {
-                    return NewSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�);
+                    return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�);
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc);
 
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙嚭搴撶殑鐗╂枡");
+                    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 == "SFQ");
+                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" && Settings.Areas[0].Contains(a.S_AREA_CODE));
 
                 if (endLoc == null) {
-                    return NewSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
                 }
 
                 var cntId = locCntrRel.S_CNTR_CODE;
@@ -229,7 +237,7 @@
                     if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}");
                     }
 
@@ -237,23 +245,23 @@
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
 
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0,
+                    return BuildSimpleResult(0,
                         $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
@@ -268,20 +276,20 @@
 
             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 == "SFQ");
+                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" && Settings.Areas[0].Contains(a.S_AREA_CODE));
                 if (startLoc == null) {
-                    return NewSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
+                    return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc);
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡");
+                    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");
                 if (endLoc == null) {
-                    return NewSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
                 }
 
                 var cntId = locCntrRel.S_CNTR_CODE;
@@ -293,30 +301,30 @@
                     if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}");
                     }
 
                     if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0,
+                    return BuildSimpleResult(0,
                         $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
@@ -336,19 +344,19 @@
                     countPlan.S_ITEM_CODE = model.targetId;
                 }
                 else {
-                    return NewSimpleResult(2, $"鍒涘缓鐩樼偣璁″垝澶辫触锛氫笉鍚堟硶鐨勭洏鐐圭被鍨�'{model.countType}'");
+                    return BuildSimpleResult(2, $"鍒涘缓鐩樼偣璁″垝澶辫触锛氫笉鍚堟硶鐨勭洏鐐圭被鍨�'{model.countType}'");
                 }
 
                 if (db.Insertable<TN_Count_Plan>(countPlan).ExecuteCommand() <= 0) {
-                    return NewSimpleResult(2, "鍒涘缓鐩樼偣璁″垝澶辫触");
+                    return BuildSimpleResult(2, "鍒涘缓鐩樼偣璁″垝澶辫触");
                 }
 
-                return NewSimpleResult(0, "鍒涘缓鐩樼偣璁″垝鎴愬姛");
+                return BuildSimpleResult(0, "鍒涘缓鐩樼偣璁″垝鎴愬姛");
 
             }
             catch (Exception ex) {
 
-                return NewSimpleResult(1, ex.Message);
+                return BuildSimpleResult(1, ex.Message);
             }
         }
 
@@ -360,7 +368,7 @@
                     .Where(a => a.S_CP_NO == model.planId).First();
 
                 if (countPlan == null) {
-                    return NewSimpleResult(2, $"鐩樼偣璁″垝鍗曞彿 '{model.planId}' 涓嶅瓨鍦�);
+                    return BuildSimpleResult(2, $"鐩樼偣璁″垝鍗曞彿 '{model.planId}' 涓嶅瓨鍦�);
                 }
 
                 var countOrder = new TN_Count_Order() {
@@ -398,30 +406,30 @@
                     }
                 }
                 else {
-                    return NewSimpleResult(3, $"璁″垝鍗�{model.planId}'鐨勭被鍨媨countPlan.S_TYPE}涓嶅悎娉�);
+                    return BuildSimpleResult(3, $"璁″垝鍗�{model.planId}'鐨勭被鍨媨countPlan.S_TYPE}涓嶅悎娉�);
                 }
 
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Insertable<TN_Count_Order>(countOrder).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
                         info = "鍒涘缓鐩樼偣鍗曞け璐�;
-                        return NewSimpleResult(2, info);
+                        return BuildSimpleResult(2, info);
                     }
 
                     if (db.Insertable<TN_Count_CG_Detail>(countDetailList).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
                         info = "鍒涘缓鐩樼偣鍗曟槑缁嗗け璐�;
-                        return NewSimpleResult(3, info); 
+                        return BuildSimpleResult(3, info); 
                     }
 
                     tran.CommitTran();
                 }
 
-                return NewSimpleResult(0, "鍒涘缓鐩樼偣鍗曟垚鍔�);
+                return BuildSimpleResult(0, "鍒涘缓鐩樼偣鍗曟垚鍔�);
             }
             catch (Exception ex) {
 
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
@@ -432,30 +440,31 @@
                     .Where(d => d.S_CNTR_CODE == model.cntrCode).First();
 
                 if (cgDetail == null) {
-                    return NewSimpleResult(2, $"鎵句笉鍒板鍣ㄥ彿'{model.cntrCode}'瀵瑰簲鐨勭墿鏂�);
+                    return BuildSimpleResult(2, $"鎵句笉鍒板鍣ㄥ彿'{model.cntrCode}'瀵瑰簲鐨勭墿鏂�);
                 }
 
                 var countDiff = new TN_Count_Diff {
                     S_CNTR_CODE = cgDetail.S_CNTR_CODE,
+                    F_QTY = cgDetail.F_QTY,
                     F_ACTUAL_QTY = model.qty
                 };
 
                 if (db.Insertable<TN_Count_Diff>(countDiff).ExecuteCommand() <= 0) {
-                    return NewSimpleResult(3, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�);
+                    return BuildSimpleResult(3, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�);
                 }
 
-                return NewSimpleResult(0, "鐩樼偣宸紓瀹屾垚");
+                return BuildSimpleResult(0, "鐩樼偣宸紓瀹屾垚");
 
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
         internal static string GenerateNo(string snType, string prefix) {
             var id = SYSHelper.GetSerialNumber(snType, prefix);
             var date = DateTime.Now.ToString("yyMMdd");
-            return $"TN{date}{id.ToString().PadLeft(4, '0')}";
+            return $"{prefix}{date}{id.ToString().PadLeft(4, '0')}";
         }
 
         /// <summary>
@@ -469,20 +478,20 @@
 
             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 == "SFQ");
+                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" && Settings.Areas[0].Contains(a.S_AREA_CODE));
                 if (startLoc == null) {
-                    return NewSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝嚭搴撴潯浠�);
+                    return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝嚭搴撴潯浠�);
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc);
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡");
+                    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");
                 if (endLoc == null) {
-                    return NewSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
                 }
 
                 var cntID = locCntrRel.S_CNTR_CODE;
@@ -494,30 +503,30 @@
                     if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}");
                     }
 
                     if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0,
+                    return BuildSimpleResult(0,
                         $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
@@ -532,20 +541,20 @@
 
             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 == "SFQ");
+                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" && Settings.Areas[0].Contains(a.S_AREA_CODE));
                 if (startLoc == null) {
-                    return NewSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
+                    return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc);
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡");
+                    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");
                 if (endLoc == null) {
-                    return NewSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
                 }
 
                 var cntID = locCntrRel.S_CNTR_CODE;
@@ -557,56 +566,107 @@
                     if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}");
                     }
 
                     if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0,
+                    return BuildSimpleResult(0,
                         $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
         public static ErpResult InboundDataSync(InboundDataSyncInfo model) {
             var db = new SqlHelper<object>().GetInstance();
-
             try {
+                var err = "";
+                var cgDetailList = new List<TN_CG_Detail>();
+                foreach (var inboundData in model.stockTransactions) {
+                    var cgDetail = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail>
+                        ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE)
+                        .Where(l => l.S_CODE == inboundData.locationCode)
+                        .Select((l, c, d) => d)
+                        .First();
+                    
+                    if (cgDetail == null) {
+                        err += $"鍌ㄤ綅鐮亄inboundData.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�;
+                        continue;
+                    }
+
+                    cgDetail.S_ITEM_CODE = inboundData.itemCode;
+                    cgDetail.S_ITEM_NAME = inboundData.itemName;
+                    
+                    cgDetailList.Add(cgDetail);
+                }
+                
+                if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) {
+                    return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触");
+                }
+
+                if (err != "") {
+                    return BuildErpResult(2, err);
+                }
+                return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛");
 
             }
             catch (Exception ex) {
-                return BuildErpResult(1, ex.Message);
+                return BuildErpResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
-            return BuildErpResult(0, null);
         }
 
         public static ErpResult OutboundDataSync(OutboundDataSyncInfo model) {
             var db = new SqlHelper<object>().GetInstance();
-
             try {
+                var err = "";
+                var cgDetailList = new List<TN_CG_Detail>();
+                foreach (var inboundData in model.materialIssues) {
+                    var cgDetail = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail>
+                        ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE)
+                        .Where(l => l.S_CODE == inboundData.locationCode)
+                        .Select((l, c, d) => d)
+                        .First();
 
+                    if (cgDetail == null) {
+                        err += $"鍌ㄤ綅鐮亄inboundData.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�;
+                        continue;
+                    }
+
+                    cgDetail.S_ITEM_CODE = inboundData.itemCode;
+                    cgDetail.S_ITEM_NAME = inboundData.itemName;
+
+                    cgDetailList.Add(cgDetail);
+                }
+
+                if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) {
+                    return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触");
+                }
+
+                if (err != "") {
+                    return BuildErpResult(2, err);
+                }
+                return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛");
 
             }
             catch (Exception ex) {
-                return BuildErpResult(1, ex.Message);
+                return BuildErpResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
-            return BuildErpResult(1, null);
         }
     }
 }
diff --git a/api/ApiModel.cs b/api/ApiModel.cs
index 0b13b6d..ae045d0 100644
--- a/api/ApiModel.cs
+++ b/api/ApiModel.cs
@@ -17,7 +17,8 @@
             public List<object> result { get; set; } = new List<object>();
         }
 
-        public static SimpleResult NewSimpleResult(int code, string message) {
+        public static SimpleResult BuildSimpleResult(int code, string message) {
+            LogHelper.Info(message);
             return new SimpleResult { resultCode = code, resultMsg = message };
         }
 
diff --git a/api/DebugController.cs b/api/DebugController.cs
index b59eb96..b113cf7 100644
--- a/api/DebugController.cs
+++ b/api/DebugController.cs
@@ -100,57 +100,61 @@
             return gzResults;
         }
 
-        /// <summary>
-        /// 鍒濆鍖栨暟鎹簱
-        /// </summary>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("CreateDatabase")]
-        public string CreateDatabase(CoverInfo model) {
-            try {
-                var db = new SqlHelper<object>().GetInstance();
-                var cover = model.IsCover;
+        ///// <summary>
+        ///// 鍒濆鍖栨暟鎹簱
+        ///// </summary>
+        ///// <returns></returns>
+        //[HttpPost]
+        //[Route("CreateDatabase")]
+        //public string CreateDatabase(CoverInfo model) {
+        //    try {
+        //        var db = new SqlHelper<object>().GetInstance();
+        //        var cover = model.IsCover;
 
-                var entityTypes = new Type[] {
-                    typeof(TN_CAR_IN),
-                    typeof(TN_CG_Detail),
-                    typeof(TN_Container),
-                    typeof(TN_Loc_Container),
-                    typeof(TN_Location),
-                    typeof(TN_Task),
-                    typeof(TN_Task_Action),
-                    typeof(SYSHelper.OI_SYS_MAXID),
+        //        var entityTypes = new Type[] {
+        //            typeof(TN_CAR_IN),
+        //            typeof(TN_CG_Detail),
+        //            typeof(TN_Container),
+        //            typeof(TN_Loc_Container),
+        //            typeof(TN_Location),
+        //            typeof(TN_Task),
+        //            typeof(TN_Task_Action),
+        //            typeof(SYSHelper.OI_SYS_MAXID),
 
-                };
+        //            typeof(TN_Count_Plan),
+        //            typeof(TN_Count_Order),
+        //            typeof(TN_Count_CG_Detail),
+        //            typeof(TN_Count_Diff),
+        //        };
 
-                using (var tran = db.Ado.UseTran()) {
-                    if (cover) {
-                        // 鍒犻櫎鎵�湁琛紙鎸変緷璧栧叧绯诲�搴忥級
-                        var tables = db.DbMaintenance.GetTableInfoList();
-                        foreach (var table in tables.OrderByDescending(t => t.Name)) {
-                            db.DbMaintenance.DropTable(table.Name);
-                        }
+        //        using (var tran = db.Ado.UseTran()) {
+        //            if (cover) {
+        //                // 鍒犻櫎鎵�湁琛紙鎸変緷璧栧叧绯诲�搴忥級
+        //                var tables = db.DbMaintenance.GetTableInfoList();
+        //                foreach (var table in tables.OrderByDescending(t => t.Name)) {
+        //                    db.DbMaintenance.DropTable(table.Name);
+        //                }
 
-                        // 鍒涘缓鏂拌〃
-                        db.CodeFirst.InitTables(entityTypes);
+        //                // 鍒涘缓鏂拌〃
+        //                db.CodeFirst.InitTables(entityTypes);
 
-                        //db.CodeFirst.BackupTable().InitTables(entityTypes);
-                    }
-                    else {
-                        db.CodeFirst.InitTables(entityTypes);
-                    }
+        //                //db.CodeFirst.BackupTable().InitTables(entityTypes);
+        //            }
+        //            else {
+        //                db.CodeFirst.InitTables(entityTypes);
+        //            }
 
-                    tran.CommitTran();
-                }
+        //            tran.CommitTran();
+        //        }
 
-            }
-            catch (Exception ex) {
-                LogHelper.Info($"鍙戠敓浜嗗紓甯�);
-                return "鍒濆鍖栨暟鎹簱閿欒" + ex.Message;
-            }
+        //    }
+        //    catch (Exception ex) {
+        //        LogHelper.Info($"鍙戠敓浜嗗紓甯�);
+        //        return "鍒濆鍖栨暟鎹簱閿欒" + ex.Message;
+        //    }
 
-            return "鎴愬姛";
-        }
+        //    return "鎴愬姛";
+        //}
 
         /// <summary>
         /// DEBUG锛氭彃鍏ヨ揣浣嶃�瀹瑰櫒銆佽揣鍝佷俊鎭�@@ -247,6 +251,11 @@
             }
         }
 
+        /// <summary>
+        /// DEBUG锛氭牴鎹换鍔″彿璁剧疆鐗╂枡閲嶉噺
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
         [HttpPost]
         [Route("SetTaskWeight")]
         public string SetTaskWeight(SetTaskWeightInfo model) {
diff --git a/api/ErpController.cs b/api/ErpController.cs
index 191162c..dd038f7 100644
--- a/api/ErpController.cs
+++ b/api/ErpController.cs
@@ -15,7 +15,7 @@
         /// <returns></returns>
         [HttpPost]
         [Route("InboundDataSync")]
-        public static ErpResult InboundDataSync(InboundDataSyncInfo model) {
+        public ErpResult InboundDataSync(InboundDataSyncInfo model) {
             return ApiHelper.InboundDataSync(model);
         }
 
@@ -26,7 +26,7 @@
         /// <returns></returns>
         [HttpPost]
         [Route("OutboundDataSync")]
-        public static ErpResult OutboundDataSync(OutboundDataSyncInfo model) {
+        public ErpResult OutboundDataSync(OutboundDataSyncInfo model) {
             return ApiHelper.OutboundDataSync(model);
         }
     }
diff --git a/api/MoboxController.cs b/api/MoboxController.cs
index 10bf84a..153da7a 100644
--- a/api/MoboxController.cs
+++ b/api/MoboxController.cs
@@ -82,23 +82,30 @@
             LogHelper.Info("瑙﹀彂API锛氬垱寤虹洏鐐瑰崟(PDA)" + JsonConvert.SerializeObject(model), "API");
             return ApiHelper.CreateCountOrder(model);
         }
- 
+
+        /// <summary>
+        /// 鐩樼偣鐞嗚揣(PDA)
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("CountProduct")]
         public SimpleResult CountProduct(CountProductInfo model) {
             LogHelper.Info("瑙﹀彂API锛氱洏鐐圭悊璐�PDA)" + JsonConvert.SerializeObject(model), "API");
             return ApiHelper.CountProduct(model);
         }
 
-        /// <summary>
-        /// 鐩樼偣鐞嗚揣鍑哄簱(WMS)
-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("CheckOutbound")]
-        public SimpleResult CheckOutbound(CheckOutboundInfo model) {
-            LogHelper.Info("瑙﹀彂API锛氱洏鐐圭悊璐у嚭搴�WMS)" + JsonConvert.SerializeObject(model), "API");
-            return ApiHelper.CheckOutbound(model);
-        }
+        ///// <summary>
+        ///// 鐩樼偣鐞嗚揣鍑哄簱(WMS)
+        ///// </summary>
+        ///// <param name="model"></param>
+        ///// <returns></returns>
+        //[HttpPost]
+        //[Route("CheckOutbound")]
+        //public SimpleResult CheckOutbound(CheckOutboundInfo model) {
+        //    LogHelper.Info("瑙﹀彂API锛氱洏鐐圭悊璐у嚭搴�WMS)" + JsonConvert.SerializeObject(model), "API");
+        //    return ApiHelper.CheckOutbound(model);
+        //}
 
         /// <summary>
         /// 鐩樼偣鐞嗚揣鍥炲簱(WMS)
diff --git a/config/config.json b/config/config.json
index ce60527..c3b7b07 100644
--- a/config/config.json
+++ b/config/config.json
@@ -2,15 +2,15 @@
     "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=(local);Initial Catalog=AnGangTest;User ID=sa;Password=123456",
+    "SqlServer": "Data Source=192.168.1.144;Initial Catalog=YinKouAnGan;User ID=hhuser;Password=Hh123321&&",
     "TCPServerIP": "127.0.0.1",
     "TCPServerPort": 8085,
     "Areas": [
         {
-            "Name": "鏀跺彂鍖�,
-            "Codes": [ "SFQ" ]
+            "Name": "鍙栨斁璐у尯",
+            "Codes": [ "QFHQ" ]
         },
-        {
+        {   
             "Name": "璐ф灦鍖�,
             "Codes": [ "HJQ" ]
         }
diff --git a/core/Monitor.cs b/core/Monitor.cs
index 11ed38f..169c2db 100644
--- a/core/Monitor.cs
+++ b/core/Monitor.cs
@@ -27,7 +27,7 @@
                     .ToList();
 
                 if (orderList.Count == 0) {
-                    LogHelper.Info("杞--鍑哄簱--鏆傛棤寰呮墽琛岀殑Order");
+                    LogHelper.Info($"杞--{taskName}--鏆傛棤寰呮墽琛岀殑{taskName}鍗�);
                     return;
                 }
 
@@ -45,34 +45,21 @@
                         continue;
                     }
 
-                    var lastDetail = db.Queryable<TN_Count_CG_Detail>()
-                        .Where(d => d.S_COUNT_NO == order.S_COUNT_NO && d.N_B_STATE == 2) // TODO 鎴栬�鏀规垚鏌ask
-                        .First();
-                    if (lastDetail != null) {
-                        LogHelper.Info($"杞--{taskName}--{taskName}鍗�{order.S_COUNT_NO}'涓婁竴涓换鍔′粛鍦ㄨ繘琛屼腑锛�
-                            + JsonConvert.SerializeObject(lastDetail));
-                        continue;
-                    }
-
-                    var outboundDetail = db.Queryable<TN_Count_CG_Detail>()
+                    var countCgDetailList = db.Queryable<TN_Count_CG_Detail>()
                         .Where(a => a.S_COUNT_NO == order.S_COUNT_NO && a.N_B_STATE == 1) // 宸蹭笅鍙�-                        .First();
-                    if (outboundDetail != null) {
-                        LogHelper.Info($"杞--{taskName}--");
+                        .ToList();
+
+                    if (countCgDetailList.Count == 0) {
+                        LogHelper.Info($"杞--{taskName}--{taskName}鍗曟槑缁嗙姸鎬佸紓甯�);
                         continue;
                     }
 
-                    detailList.Add(outboundDetail);
+                    detailList.AddRange(countCgDetailList);
                 }
 
                 if (detailList.Count == 0) {
                     return;
                 }
-
-                var startLocList = new List<TN_Location>();
-                var endLocList = new List<TN_Location>();
-
-                var taskList = new List<TN_Task>();
 
                 foreach (var detail in detailList) {
                     var startLoc = db.Queryable<TN_Location>()
@@ -81,17 +68,17 @@
                         .First();
 
                     if (startLoc == null) {
-                        LogHelper.Info($"杞--鍑哄簱锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�);
+                        LogHelper.Info($"杞--{taskName}锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�);
                         continue;
                     }
 
                     var endLoc = db.Queryable<TN_Location>()
-                        .Where(a => a.S_AREA_CODE == "SFQ")
+                        .Where(a => Settings.Areas[0].Contains(a.S_AREA_CODE))
                         .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
                         .Where(a => a.N_CURRENT_NUM == 0).First();
 
                     if (endLoc == null) {
-                        LogHelper.Info($"杞--鍑哄簱锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛丼_NO涓�'{detail.S_COUNT_NO}'");
+                        LogHelper.Info($"杞--{taskName}锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛佸崟鍙蜂负 '{detail.S_COUNT_NO}'");
                         continue;
                     }
 
@@ -106,7 +93,7 @@
                     using (var tran = db.Ado.UseTran()) {
                         if (db.Updateable<TN_Count_CG_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            LogHelper.Info($"杞--鍑哄簱--淇敼鏄庣粏琛ㄧ姸鎬佷负瀹屾垚澶辫触锛�);
+                            LogHelper.Info($"杞--{taskName}--淇敼鏄庣粏琛ㄧ姸鎬佷负瀹屾垚澶辫触锛�);
                         }
 
                         if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
@@ -116,7 +103,7 @@
                             it.T_MODIFY
                         }).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}";
+                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣浣峽endLoc.S_CODE}";
                             LogHelper.Info(info);
                             continue;
                         }
@@ -129,7 +116,7 @@
                         }).ExecuteCommand() <= 0) {
 
                             tran.RollbackTran();
-                            info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}";
+                            info = $"鐢熸垚'{taskName}'澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}";
                             LogHelper.Info(info);
                             continue;
                         }
@@ -144,7 +131,7 @@
                         tran.CommitTran();
                         info = $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}";
                         LogHelper.Info(info);
-                        continue;
+                        //continue;
                     }
                 }
             }
diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index c7fe69d..cd27dda 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -74,6 +74,7 @@
                     if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱 || TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) {
                         var captureTask = Task.Run(() => {
                             CapturePic(TN_Task);
+                            LogHelper.Info("鎷嶇収Task缁撴潫");
                         });
                     }
 
@@ -81,6 +82,14 @@
                         var setEndLocTask = Task.Run(() => {
                             // 鍙浠诲姟涓轰骇鍝佸叆搴�PDA)锛屽氨闇�閲嶆柊鎸囧畾缁堢偣锛堥粯璁ndLoc涓�"锛�                             SetEndLoc(TN_Task);
+                            LogHelper.Info("璁剧疆缁堢偣Task缁撴潫");
+                        });
+                    }
+
+                    if (TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) {
+                        var weightTask = Task.Run(() => {
+                            UpdateWeight(TN_Task);
+                            LogHelper.Info("绉伴噸Task缁撴潫");
                         });
                     }
 
@@ -111,47 +120,168 @@
         public static void CapturePic(TN_Task model) {
             var db = new SqlHelper<object>().GetInstance();
 
-            var filepath = SnapManager.GetCapturePicturePath();
-            if (string.IsNullOrEmpty(filepath)) {
-                LogHelper.Info("鍥剧墖鍦板潃涓虹┖");
-                return;
+            try {
+                var filepath = SnapManager.GetCapturePicturePath();
+                if (string.IsNullOrEmpty(filepath)) {
+                    LogHelper.Info("鍥剧墖鍦板潃涓虹┖");
+                    return;
+                }
+
+                if (db.Updateable<TN_Loc_Container>()
+                    .SetColumns(d => d.S_IMG_URL == filepath)
+                    .Where(d => d.S_CNTR_CODE == model.S_CNTR_CODE).ExecuteCommand() <= 0) {
+
+                    LogHelper.Info($"鍥剧墖URL '{filepath}' 鍐欏叆鏁版嵁搴撳け璐�);
+                    return;
+                }
             }
-
-            if (db.Updateable<TN_CG_Detail>()
-                .SetColumns(d => d.S_IMG_URL == filepath)
-                .Where(d => d.S_CNTR_CODE == model.S_CNTR_CODE).ExecuteCommand() <= 0) {
-
-                LogHelper.Info($"鍥剧墖URL '{filepath}' 鍐欏叆鏁版嵁搴撳け璐�);
-                return;
+            catch (Exception ex) {
+                LogHelper.Info($"鍙戠敓浜嗛敊璇細{ex.Message}");
             }
         }
 
         public static void SetEndLoc(TN_Task tn_task) {
             var db = new SqlHelper<object>().GetInstance();
-            var endLoc = db.Queryable<TN_Location>()
-                .First(a => a.S_CODE == tn_task.S_END_LOC);
+            var info = "";
+            try {
+                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;
+                // 濡傛灉宸茬粡璁剧疆鐨勭粓鐐硅揣浣嶏紝灏变笉瑕佸啀杩涘叆杩欎釜娴佺▼
+                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; // TODO 姝e紡杩愯鏈夊浗鑷狝GV鐨勬椂鍊欐仮澶�+                }
+                else {
+                    var weight = float.Parse(data[0].parameter_varchar200_up);
+                    cgDetail.F_QTY = weight;
+
+                    if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_QTY).ExecuteCommand() <= 0) {
+                        LogHelper.Info("淇敼鐗╂枡琛ㄩ噸閲忓け璐�);
+                        return;
+                    }
+                }
+
+                // 缁堢偣璐ф灦涓虹┖鏃讹紝涓嶅垽鏂紝浜ょ粰浜哄伐澶勭悊
+                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 (cgDetail.F_QTY > 1500) {
+                    // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-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 (cgDetail.F_QTY > 0) {
+                    // 閲嶉噺鏈秴杩�.5t锛屽湪鎸囧畾璐ф灦闅忎究閫夋嫨1涓�+                    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($"閿欒鐨勯噸閲忎俊鎭細{cgDetail.F_QTY}");
+                    return;
+                }
+
+                // 濡傛灉娌℃湁绗﹀悎鏉′欢鐨勮揣浣嶏紝缃┖锛岀瓑寰匬DA閲嶆柊纭畾
+                if (endLoc == null) {
+                    tn_task.S_END_AREA = Settings.Areas[1][0]; // HJQ
+                    tn_task.S_END_LOC = "0";
+
+                    // 涓嶉渶瑕佸啀缁橤Z AGV浼犵┖鍊硷紝涓�紑濮嬪氨娌$粰鍏蜂綋璐т綅锛屽彧缁欎簡Area
+
+                    //var request = new UpdateInteractInfo {
+                    //    interaction_info_id = 3, // 鏇存敼缁堢偣淇℃伅
+                    //    info_status = "active",
+                    //    return_value = "",
+                    //};
+
+                    //GZRobot.UpdateInteractInfo(request);
+                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
+                            .ExecuteCommand() > 0) {
+                        //LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�+                        LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼鎴愬姛锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
+                    }
+                    else {
+                        LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼澶辫触锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
+                    }
+                }
+                else {
+                    // 鎵惧埌鍚堥�鐨勮揣浣嶏紝鎺ㄩ�
+                    tn_task.S_END_LOC = endLoc.S_CODE;
+
+                    LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+
+                    using (var tran = db.Ado.UseTran()) {
+                        if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
+                            .ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE}'淇敼澶辫触锛岀粓鐐硅揣鏋朵负{endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
+                        }
+                        if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
+                            it.N_LOCK_STATE,
+                            it.S_LOCK_STATE,
+                            it.S_LOCK_OP,
+                            it.T_MODIFY
+                        }).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            info = $"鏇存柊缁堢偣璐т綅閿佺姸鎬佸け璐ワ細璧风偣璐т綅{endLoc.S_CODE}";
+                            LogHelper.Info(info);
+                        }
+
+                        tran.CommitTran();
+                    }
+                }
             }
-
-            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;
+            catch (Exception ex) {
+                LogHelper.Info($"鍙戠敓浜嗛敊璇細{ex.Message}");
             }
+        }
 
-            var data = GZRobot.CustomBuf();
+        public static void UpdateWeight(TN_Task tn_task) {
+            var db = new SqlHelper<object>().GetInstance();
 
-            if (data.Count == 0) {
-                LogHelper.Info("璁剧疆缁堢偣璐т綅澶辫触锛氭病鏈夋帴鍙楀埌鏉ヨ嚜鍥借嚜AGV鐨勯噸閲忎俊鎭�);
-                //return; // TODO 姝e紡杩愯鏈夊浗鑷狝GV鐨勬椂鍊欐仮澶�-            }
-            else {
+            try {
+
+                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;
+                }
+
                 var weight = float.Parse(data[0].parameter_varchar200_up);
                 cgDetail.F_QTY = weight;
 
@@ -159,74 +289,12 @@
                     LogHelper.Info("淇敼鐗╂枡琛ㄩ噸閲忓け璐�);
                     return;
                 }
+
+            }
+            catch (Exception ex) {
+                LogHelper.Info($"鍙戠敓浜嗛敊璇細{ex.Message}");
             }
 
-            // 缁堢偣璐ф灦涓虹┖鏃讹紝涓嶅垽鏂紝浜ょ粰浜哄伐澶勭悊
-            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 (cgDetail.F_QTY > 1500) {
-                // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-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 (cgDetail.F_QTY > 0) {
-                // 閲嶉噺鏈秴杩�.5t锛屽湪鎸囧畾璐ф灦闅忎究閫夋嫨1涓�-                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($"閿欒鐨勯噸閲忎俊鎭細{cgDetail.F_QTY}");
-                return;
-            }
-
-            // 濡傛灉娌℃湁绗﹀悎鏉′欢鐨勮揣浣嶏紝缃┖锛岀瓑寰匬DA閲嶆柊纭畾
-            if (endLoc == null) {
-                tn_task.S_END_AREA = "HJQ";
-                tn_task.S_END_LOC = "0";
-
-                // 涓嶉渶瑕佸啀缁橤Z AGV浼犵┖鍊硷紝涓�紑濮嬪氨娌$粰鍏蜂綋璐т綅锛屽彧缁欎簡Area
-
-                //var request = new UpdateInteractInfo {
-                //    interaction_info_id = 3, // 鏇存敼缁堢偣淇℃伅
-                //    info_status = "active",
-                //    return_value = "",
-                //};
-
-                //GZRobot.UpdateInteractInfo(request);
-                if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
-                        .ExecuteCommand() > 0) {
-                    //LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�-                    LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼鎴愬姛锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
-                }
-                else {
-                    LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼澶辫触锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
-                }
-            }
-            else {
-                // 鎵惧埌鍚堥�鐨勮揣浣嶏紝鎺ㄩ�
-                tn_task.S_END_LOC = endLoc.S_CODE;
-
-                if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
-                        .ExecuteCommand() > 0) {
-                    LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�-                    LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼鎴愬姛锛岀粓鐐硅揣鏋朵负 {endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
-                }
-                else {
-                    LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼澶辫触锛岀粓鐐硅揣鏋朵负 {endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
-                }
-            }
         }
 
         /// <summary>
diff --git a/device/SnapDevice.cs b/device/SnapDevice.cs
index 754d14f..62ae44f 100644
--- a/device/SnapDevice.cs
+++ b/device/SnapDevice.cs
@@ -51,7 +51,7 @@
                 }
                 _LoginID = NETClient.LoginWithHighLevelSecurity(ip, uPort, name, pwd, EM_LOGIN_SPAC_CAP_TYPE.TCP, IntPtr.Zero, ref _DeviceInfo);
                 if (IntPtr.Zero == _LoginID) {
-                    LogHelper.Info(NETClient.GetLastError());
+                    LogHelper.Info("鐩告満鍒濆鍖栭敊璇細" + NETClient.GetLastError());
                     return;
                 }
                 //_channalList.Clear();
diff --git a/models/TN_Count_CG_Detail.cs b/models/TN_Count_CG_Detail.cs
index 6302d34..ee7d799 100644
--- a/models/TN_Count_CG_Detail.cs
+++ b/models/TN_Count_CG_Detail.cs
@@ -11,7 +11,7 @@
     /// 鐩樼偣鍗曟槑缁嗚〃
     /// </summary>
     [SugarTable("TN_Count_CG_Detail")]
-    public class TN_Count_CG_Detail {
+    public class TN_Count_CG_Detail : BaseModel {
         public string S_COUNT_NO { get; set; }
         public string S_ITEM_CODE { get; set; }
         public string S_CNTR_CODE { get; set; }
diff --git a/util/Settings.cs b/util/Settings.cs
index 7717084..20b169b 100644
--- a/util/Settings.cs
+++ b/util/Settings.cs
@@ -17,21 +17,22 @@
         public static string SqlServer { get; set; }
         public static string TCPServerIP { get; set; }
         public static int TCPServerPort { get; set; }
-        public static List<Config.Area> Areas { get; set; }
+        //public static List<Config.Area> Areas { get; set; }
+        public static List<List<string>> Areas { get; set; } = new List<List<string>>();
         public static List<Config.Snap> Snaps { get; set; }
         public static string CaptureUrl { get; set; }
 
         /// <summary>
         /// 搴撳尯瀛楀吀锛堝姞杞藉悗灏变笉鍙橈級
         /// </summary>
-        public static Dictionary<string, List<string>> AreaMap { get; set; } = new Dictionary<string, List<string>>();
+        //public static Dictionary<string, List<string>> AreaMap { get; set; } = new Dictionary<string, List<string>>();
 
         public static void Init() {
             // 鍔犺浇閰嶇疆鏂囦欢
             LoadJson();
 
             // 閽堝 Areas 杩涜杞崲锛氬皢 Config 鐨�List 鍔犺浇鍒�Dict 涓�-            LoadAreas();
+            //LoadAreas();
         }
 
         private static void LoadJson() {
@@ -52,7 +53,10 @@
                 SqlServer = root.SqlServer;
                 TCPServerIP = root.TCPServerIP;
                 TCPServerPort = root.TCPServerPort;
-                Areas = root.Areas;
+                //Areas = root.Areas;
+                foreach (var item in root.Areas) {
+                    Areas.Add(item.Codes);
+                }
                 Snaps = root.Snaps;
                 CaptureUrl = root.CaptureUrl;
 
@@ -70,9 +74,9 @@
         }
 
         private static void LoadAreas() {
-            foreach (var area in Areas) {
-                AreaMap.Add(area.Name, area.Codes);
-            }
+            //foreach (var area in Areas) {
+            //    AreaMap.Add(area.Name, area.Codes);
+            //}
         }
     }
 
diff --git a/util/SqlHelper.cs b/util/SqlHelper.cs
index 3827382..06f3970 100644
--- a/util/SqlHelper.cs
+++ b/util/SqlHelper.cs
@@ -56,6 +56,10 @@
                 });
             };
 
+            //db.Aop.OnLogExecuting = (sql, pars) => {
+            //    Console.WriteLine(sql);
+            //};
+
             //鎹浆鎹�(ExecuteCommand鎵嶄細鎷︽埅锛屾煡璇笉琛�
             //db.Aop.DataExecuting = (value, entity) => {
             //    //var val=entity.EntityColumnInfo
diff --git a/wms/WCSHelper.cs b/wms/WCSHelper.cs
index 5041a23..1d8da1f 100644
--- a/wms/WCSHelper.cs
+++ b/wms/WCSHelper.cs
@@ -65,7 +65,7 @@
 
         public static TN_Task BuildInboundTask(TN_Location startLoc, string endLocCode, string cntId) {
             var type = TaskName.浜у搧鍏ュ簱;
-            var endArea = "HJQ";
+            var endArea = Settings.Areas[1][0]; // HJQ
 
             TN_Task TN_Task = new TN_Task() {
                 S_CODE = GenerateTaskNo(),
@@ -101,7 +101,7 @@
             var endArea = "";
             if (endLoc == null) {
                 if (taskType == TaskName.浜у搧鍏ュ簱) {
-                    endArea = "HJQ"; // 璐ф灦鍖�+                    endArea = Settings.Areas[1][0]; // HJQ
                 }
                 else {
                     LogHelper.Info("缁堢偣璐т綅涓嶅瓨鍦紝涓斾换鍔$被鍨嬩笉鏄疨DA璐у搧鍏ュ簱");

--
Gitblit v1.9.1