From 24de88ebbbb3597bb2043840bc685e3d59363967 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期一, 07 七月 2025 16:48:39 +0800
Subject: [PATCH] 优化轮询ERP信息流程、添加AGV接口报文打印、执行中任务强制取消的功能

---
 models/TN_Loc_Container.cs                                                           |    2 
 device/SnapManager.cs                                                                |   22 +++
 wms/LocationHelper.cs                                                                |    5 
 /dev/null                                                                            |    0 
 api/ErpController.cs                                                                 |    2 
 core/Monitor.cs                                                                      |   16 ++
 api/ApiModel.cs                                                                      |   17 ++
 core/WCSCore.cs                                                                      |   12 
 .vs/HH.WCS.Mobox3.AnGang/FileContentIndex/2c811ea3-de97-45a8-bcd7-7c88a2af5604.vsidx |    0 
 .vs/HH.WCS.Mobox3.AnGang/FileContentIndex/31c8165b-2f2b-45b9-85b4-57a0470f4da9.vsidx |    0 
 device/SnapDevice.cs                                                                 |   14 ++
 dispatch/GZRobot.cs                                                                  |    2 
 .vs/HH.WCS.Mobox3.AnGang/FileContentIndex/db48a26a-6552-4d65-a5d9-3721c951a7fd.vsidx |    0 
 api/AgvController.cs                                                                 |   32 ++++
 api/ApiHelper.cs                                                                     |  280 ++++++++++++++++++++++++++++++++++-----
 api/MoboxController.cs                                                               |   12 +
 16 files changed, 362 insertions(+), 54 deletions(-)

diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/1b7f29d3-94a7-4eab-a19b-3b99fefb9d52.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/1b7f29d3-94a7-4eab-a19b-3b99fefb9d52.vsidx
deleted file mode 100644
index 7c60500..0000000
--- a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/1b7f29d3-94a7-4eab-a19b-3b99fefb9d52.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/2c811ea3-de97-45a8-bcd7-7c88a2af5604.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/2c811ea3-de97-45a8-bcd7-7c88a2af5604.vsidx
new file mode 100644
index 0000000..74230ec
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/2c811ea3-de97-45a8-bcd7-7c88a2af5604.vsidx
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/31c8165b-2f2b-45b9-85b4-57a0470f4da9.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/31c8165b-2f2b-45b9-85b4-57a0470f4da9.vsidx
new file mode 100644
index 0000000..a9af623
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/31c8165b-2f2b-45b9-85b4-57a0470f4da9.vsidx
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/34ca764b-7d34-4fbf-b885-47b92ae831ee.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/34ca764b-7d34-4fbf-b885-47b92ae831ee.vsidx
deleted file mode 100644
index 7f4c111..0000000
--- a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/34ca764b-7d34-4fbf-b885-47b92ae831ee.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/ccea7477-49f1-46b2-a1d0-45ffab1fc2c9.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/ccea7477-49f1-46b2-a1d0-45ffab1fc2c9.vsidx
deleted file mode 100644
index d34272f..0000000
--- a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/ccea7477-49f1-46b2-a1d0-45ffab1fc2c9.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/db48a26a-6552-4d65-a5d9-3721c951a7fd.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/db48a26a-6552-4d65-a5d9-3721c951a7fd.vsidx
new file mode 100644
index 0000000..75249f2
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/db48a26a-6552-4d65-a5d9-3721c951a7fd.vsidx
Binary files differ
diff --git a/api/AgvController.cs b/api/AgvController.cs
index 617a9ab..c222b93 100644
--- a/api/AgvController.cs
+++ b/api/AgvController.cs
@@ -11,6 +11,8 @@
 using HH.WCS.Mobox3.AnGang.util;
 
 using static HH.WCS.Mobox3.AnGang.api.ApiModel;
+using System.Text;
+using System.Web;
 
 namespace HH.WCS.Mobox3.AnGang.api
 {
@@ -28,6 +30,7 @@
         [Route("orderStatusReport")]
         public GzResult orderStatusReport(orderStatusReportParme model) {
             //LogHelper.Info("RCS鍥借嚜AGV浠诲姟鐘舵�鍥炴姤锛� + JsonConvert.SerializeObject(model), "HosttoagvTask");
+            LogRequestHeaders();
             return GZRobot.orderStatusReport(model);
         }
         
@@ -41,5 +44,34 @@
         public gzResult SafetyInteraction(SafetyInteractionInfo model) {
             return WCSCore.SafetyInteraction(model);
         }
+
+        private void LogRequestHeaders() {
+            var request = HttpContext.Current.Request;
+            var logMessage = new StringBuilder();
+
+            logMessage.AppendLine("=== 璇锋眰澶翠俊鎭�===");
+            logMessage.AppendLine($"璇锋眰URL: {request.Url}");
+            logMessage.AppendLine($"HTTP鏂规硶: {request.HttpMethod}");
+
+            foreach (string headerName in request.Headers) {
+                logMessage.AppendLine($"{headerName}: {request.Headers[headerName]}");
+            }
+
+            LogHelper.Info(logMessage.ToString());
+        }
+
+        private void LogResponseHeaders() {
+            var response = HttpContext.Current.Response;
+            var logMessage = new StringBuilder();
+
+            logMessage.AppendLine("=== 鍝嶅簲澶翠俊鎭�===");
+            logMessage.AppendLine($"鐘舵�鐮� {response.StatusCode}");
+
+            foreach (string headerName in response.Headers) {
+                logMessage.AppendLine($"{headerName}: {response.Headers[headerName]}");
+            }
+
+            LogHelper.Info(logMessage.ToString());
+        }
     }
 }
diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index 3fe27af..a5aa9e5 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -11,6 +11,8 @@
 
 using Newtonsoft.Json;
 
+using Swashbuckle.Swagger;
+
 using static HH.WCS.Mobox3.AnGang.api.ApiModel;
 using static HH.WCS.Mobox3.AnGang.api.OtherModel;
 
@@ -40,16 +42,16 @@
                     return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細(1)娌℃湁閿佺姸鎬�(2)灞炰簬鍙栨斁璐у尯");
                 }
 
-                var locCntrRelOld = db.Queryable<TN_Loc_Container>()
-                    .Where(c => c.S_LOC_CODE == model.StartLoc).First();
+                //var locCntrRelOld = db.Queryable<TN_Loc_Container>()
+                //    .Where(c => c.S_LOC_CODE == model.StartLoc).First();
 
-                // 浜у搧鍏ュ簱锛氬亣瀹氱敤鎴蜂笉浼氬皢鏂板叆搴撶墿鏂欙紝鏀惧埌宸叉湁鐗╂枡鐨勬敹鍙戣揣鍖哄叆搴�-                // 鏂颁骇鍝佸叆搴撴椂锛屽鏋滃瓨鍦ㄦ棫鐨勮揣浣嶇粦瀹氭暟鎹紙鍑哄簱閬楃暀椤圭洰锛夌洿鎺ュ垹闄�-                TN_CG_Detail cgDetailOld = null;
-                if (locCntrRelOld != null) {
-                    cgDetailOld = db.Queryable<TN_CG_Detail>()
-                        .Where(d => d.S_CNTR_CODE == locCntrRelOld.S_CNTR_CODE).First();
-                }
+                //// 浜у搧鍏ュ簱锛氬亣瀹氱敤鎴蜂笉浼氬皢鏂板叆搴撶墿鏂欙紝鏀惧埌宸叉湁鐗╂枡鐨勬敹鍙戣揣鍖哄叆搴�+                //// 鏂颁骇鍝佸叆搴撴椂锛屽鏋滃瓨鍦ㄦ棫鐨勮揣浣嶇粦瀹氭暟鎹紙鍑哄簱閬楃暀椤圭洰锛夌洿鎺ュ垹闄�+                //TN_CG_Detail cgDetailOld = null;
+                //if (locCntrRelOld != null) {
+                //    cgDetailOld = db.Queryable<TN_CG_Detail>()
+                //        .Where(d => d.S_CNTR_CODE == locCntrRelOld.S_CNTR_CODE).First();
+                //}
 
                 // 瀹瑰櫒 ID 鍜�鐗╂枡 ID 鏈寚瀹氾紝鐢辩郴缁熺洿鎺ョ敓鎴�                 //var cntId = Guid.NewGuid().ToString("D");
@@ -89,20 +91,20 @@
 
                 // 鏃犺鏄惁閫夋嫨缁堢偣璐ф灦锛岄兘绛夊埌绉伴噸涔嬪悗鍐嶈绠楃粓鐐硅揣浣�                 using (var tran = db.Ado.UseTran()) {
-                    if (locCntrRelOld != null) {
-                        if (db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0) {
-                            tran.RollbackTran();
-                            return BuildSimpleResult(500,
-                                $"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅{locCntrRelOld.S_LOC_CODE}锛屽鍣▄locCntrRelOld.S_CNTR_CODE}");
-                        }
-                    }
-                    if (cgDetailOld != null) {
-                        if (db.Deleteable<TN_CG_Detail>(cgDetailOld).ExecuteCommand() <= 0) {
-                            tran.RollbackTran();
-                            return BuildSimpleResult(500,
-                                $"鍒犻櫎鏃у鍣ㄨ揣鍝佹槑缁嗚〃澶辫触锛氬鍣▄cgDetailOld.S_CNTR_CODE}锛岀墿鏂檣cgDetailOld.S_ITEM_CODE}");
-                        }
-                    }
+                    //if (locCntrRelOld != null) {
+                    //    if (db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0) {
+                    //        tran.RollbackTran();
+                    //        return BuildSimpleResult(500,
+                    //            $"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅{locCntrRelOld.S_LOC_CODE}锛屽鍣▄locCntrRelOld.S_CNTR_CODE}");
+                    //    }
+                    //}
+                    //if (cgDetailOld != null) {
+                    //    if (db.Deleteable<TN_CG_Detail>(cgDetailOld).ExecuteCommand() <= 0) {
+                    //        tran.RollbackTran();
+                    //        return BuildSimpleResult(500,
+                    //            $"鍒犻櫎鏃у鍣ㄨ揣鍝佹槑缁嗚〃澶辫触锛氬鍣▄cgDetailOld.S_CNTR_CODE}锛岀墿鏂檣cgDetailOld.S_ITEM_CODE}");
+                    //    }
+                    //}
 
                     if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
@@ -118,6 +120,132 @@
 
                     if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM }).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(500,
+                            $"鏇存柊璧风偣璐т綅閿佺姸鎬佸け璐ワ細璧风偣璐т綅{startLoc.S_CODE}");
+                    }
+
+                    if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(500,
+                            $"鐢熸垚浠诲姟 {taskName} 澶辫触锛氬鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLocCode} 锛岀粓鐐硅揣浣嶆湭鎸囧畾");
+                    }
+
+                    tran.CommitTran();
+                    return BuildSimpleResult(0,
+                        $"鐢熸垚浠诲姟 {taskName} 鎴愬姛锛氬鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLocCode} 锛岀粓鐐硅揣浣嶆湭鎸囧畾");
+                }
+            }
+            catch (Exception ex) {
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+            }
+        }
+        
+        public static SimpleResult InboundData(InboundDataInfo model) {
+            var taskName = TaskName.浜у搧鍏ュ簱;
+            var db = new SqlHelper<object>().GetInstance();
+
+            var startAreas = Settings.Areas[AreaIndex.Q鍙栬揣鍖篯;
+
+            try {
+                // 璧风偣浣嶇疆蹇呴』锛氫负绌恒�鏃犻攣銆佸惎鐢ㄣ�灞炰簬鏀跺彂鍖哄煙
+                var startLoc = db.Queryable<TN_Location>()
+                    .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 => startAreas.Contains(a.S_AREA_CODE))
+                    .First();
+
+                if (startLoc == null) {
+                    return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細(1)娌℃湁閿佺姸鎬�(2)灞炰簬鍙栨斁璐у尯");
+                }
+
+                //var locCntrRelOld = db.Queryable<TN_Loc_Container>()
+                //    .Where(c => c.S_LOC_CODE == model.StartLoc).First();
+
+                //// 浜у搧鍏ュ簱锛氬亣瀹氱敤鎴蜂笉浼氬皢鏂板叆搴撶墿鏂欙紝鏀惧埌宸叉湁鐗╂枡鐨勬敹鍙戣揣鍖哄叆搴�+                //// 鏂颁骇鍝佸叆搴撴椂锛屽鏋滃瓨鍦ㄦ棫鐨勮揣浣嶇粦瀹氭暟鎹紙鍑哄簱閬楃暀椤圭洰锛夌洿鎺ュ垹闄�+                //TN_CG_Detail cgDetailOld = null;
+                //if (locCntrRelOld != null) {
+                //    cgDetailOld = db.Queryable<TN_CG_Detail>()
+                //        .Where(d => d.S_CNTR_CODE == locCntrRelOld.S_CNTR_CODE).First();
+                //}
+
+                // 瀹瑰櫒 ID 鍜�鐗╂枡 ID 鏈寚瀹氾紝鐢辩郴缁熺洿鎺ョ敓鎴�+                //var cntId = Guid.NewGuid().ToString("D");
+                //var CgId = Guid.NewGuid().ToString("D");
+                var cntId = GenerateNo("瀹瑰櫒鍙�, "CN");
+                //var cgId = GenerateNo("鐗╂枡鍙�, "CG");
+                var cgId = string.IsNullOrEmpty(model.ItemCode) ? GenerateNo("鐗╂枡鍙�, "CG") : model.ItemCode ;
+
+                // 棣栨鍏ュ簱锛氱粦瀹氫俊鎭紝鍏堝皢璧风偣浣嶇疆涓庡鍣ㄧ粦瀹氾紝瀹瑰櫒涓庣墿鏂欑粦瀹�+                var locCntrRel = new TN_Loc_Container() {
+                    S_LOC_CODE = startLoc.S_CODE,
+                    S_CNTR_CODE = cntId,
+                    N_LOCK_STATE = string.IsNullOrEmpty(model.ItemCode) ? 0 : 1,
+                };
+
+                var cgDetail = new TN_CG_Detail() {
+                    S_ITEM_CODE = cgId,
+                    S_CNTR_CODE = cntId,
+                    //S_ITEM_NAME = model.ItemName,
+                };
+
+                startLoc.N_CURRENT_NUM = 1;
+
+                var endLocCode = "0"; // 鍋囩殑榛樿缁堢偣鍦板潃
+
+                // 鎸囧畾璐т綅鎺掑彿锛堜笉鑳戒负绌恒�绌哄瓧绗︿覆鎴栫┖鏍硷級
+                if (model.Row != null && model.Row.Trim() != "") {
+                    endLocCode = model.Row; // 鐢ㄦ帓鍙峰瓧绗︿覆褰撳仛鍋囧湴鍧�+                    if (!int.TryParse(model.Row.Trim(), out int row)) {
+                        return BuildSimpleResult(2, $"{model.Row} 涓嶅悎娉曪細鏃犳硶杞垚鏁存暟绫诲瀷");
+                    }
+                    // 璐ф灦鎺掑彿鍙兘鏄�0 - 8锛�11-118锛�+                    if (row <= 110 || row > 118) {
+                        return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�11-118涔嬮棿鐨勬暣鏁�);
+                    }
+                }
+
+                var task = WCSHelper.BuildInboundTask(startLoc, endLocCode, cntId);
+                LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+
+                // 鏃犺鏄惁閫夋嫨缁堢偣璐ф灦锛岄兘绛夊埌绉伴噸涔嬪悗鍐嶈绠楃粓鐐硅揣浣�+                using (var tran = db.Ado.UseTran()) {
+                    //if (locCntrRelOld != null) {
+                    //    if (db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0) {
+                    //        tran.RollbackTran();
+                    //        return BuildSimpleResult(500,
+                    //            $"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅{locCntrRelOld.S_LOC_CODE}锛屽鍣▄locCntrRelOld.S_CNTR_CODE}");
+                    //    }
+                    //}
+                    //if (cgDetailOld != null) {
+                    //    if (db.Deleteable<TN_CG_Detail>(cgDetailOld).ExecuteCommand() <= 0) {
+                    //        tran.RollbackTran();
+                    //        return BuildSimpleResult(500,
+                    //            $"鍒犻櫎鏃у鍣ㄨ揣鍝佹槑缁嗚〃澶辫触锛氬鍣▄cgDetailOld.S_CNTR_CODE}锛岀墿鏂檣cgDetailOld.S_ITEM_CODE}");
+                    //    }
+                    //}
+
+                    if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(500,
+                            $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅{locCntrRel.S_LOC_CODE}锛屽鍣▄locCntrRel.S_CNTR_CODE}");
+                    }
+
+                    if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        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,
+                        it.N_CURRENT_NUM
+                    }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
                         return BuildSimpleResult(500,
                             $"鏇存柊璧风偣璐т綅閿佺姸鎬佸け璐ワ細璧风偣璐т綅{startLoc.S_CODE}");
@@ -352,7 +480,6 @@
                     LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触", "HosttoagvTask");
                 }
 
-
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Updateable<TN_Task>(task).UpdateColumns(a => a.S_END_LOC).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
@@ -396,13 +523,17 @@
                     .First();
 
                 if (startLoc == null) {
-                    return BuildSimpleResult(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 BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙嚭搴撶殑鐗╂枡");
+                    return BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙嚭搴撶殑鐗╂枡锛�);
+                }
+
+                if (locCntrRel.N_LOCK_STATE == 0) {
+                    return BuildSimpleResult(5, $"璧风偣浣嶇疆'{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" && endAreas.Contains(a.S_AREA_CODE));
@@ -597,9 +728,9 @@
 
                 }
                 else {
-                    return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�);
+                    //return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�);
 
-                    // return CancelTaskIfForced(model, task); // 澶囩敤鍑芥暟锛屽鏋滅敳鏂硅姹備换鍔℃墽琛屼腑涔熷彇娑堬紝鍐嶈皟鐢�+                    return CancelTaskIfForced(model, task); // 澶囩敤鍑芥暟锛屽鏋滅敳鏂硅姹備换鍔℃墽琛屼腑涔熷彇娑堬紝鍐嶈皟鐢�                 }
 
             }
@@ -608,18 +739,91 @@
             }
         }
 
-        public static SimpleResult CancelTaskIfForced(CancleTaskInfo model, TN_Task task) {
-            return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�);
-        }
+        public static SimpleResult CancelTaskIfForced(CancelTaskInfo model, TN_Task task) {
 
-        
+            var db = new SqlHelper<object>().GetInstance();
+            var info = "";
+            try {
+                var startloc = db.Queryable<TN_Location>().First(a => a.S_CODE == task.S_START_LOC);
+                var endloc = db.Queryable<TN_Location>().First(a => a.S_CODE == task.S_END_LOC);
+                //var locCnt = db.Queryable<TN_Loc_Container>().First(a => a.S_CNTR_CODE == task.S_CNTR_CODE);
+                //var cg = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == task.S_CNTR_CODE);
+
+                if (startloc != null) {
+                    startloc.N_LOCK_STATE = 0;
+                    startloc.S_LOCK_STATE = "鏃�;
+                    //starloc.N_CURRENT_NUM = 0;
+                    startloc.T_MODIFY = System.DateTime.Now;
+                }
+
+                if (endloc != null) {
+                    endloc.N_LOCK_STATE = 0;
+                    endloc.S_LOCK_STATE = "鏃�;
+                    //endloc.N_CURRENT_NUM = 0;
+                    endloc.T_MODIFY = System.DateTime.Now;
+                }
+
+                if (task.N_B_STATE == 1) {
+                    if (!int.TryParse(task.S_EQ_TASK_CODE, out var code)) {
+                        LogHelper.Info($"褰撳墠浠诲姟{task.S_CODE}娌℃湁鎵惧埌瀵瑰簲鐨勫浗鑷狝GV orderId锛�);
+                    }
+                    else {
+                        var res = GZRobot.CancelGZOrder(code);
+                        if (!res) {
+                            LogHelper.Info($"鍥借嚜AGV鍙栨秷浠诲姟澶辫触锛�, "HosttoagvTask");
+                        }
+                        else {
+                            LogHelper.Info($"鍥借嚜AGV鍙栨秷浠诲姟鎴愬姛锛�, "HosttoagvTask");
+                        }
+                    }
+                }
+
+                task.N_B_STATE = 4;
+                task.S_B_STATE = "鍙栨秷";
+
+                // 鍓嶉潰閿佺姸鎬佺殑閮ㄥ垎涓嶉渶瑕佷慨鏀癸細鏃犺鏈夋病鏈夋仮澶嶏紝閮藉己鍒舵仮澶嶏紝鏈�粓缁撴灉閮芥槸鏃犻攣鐘舵�
+
+                // 宸叉墽琛岋細闇�娣诲姞鐨勯�杈戯細閽堝瑙i攣/缁戝畾鐨勮揣浣嶅鍣ㄨ〃锛堝ソ鍍忎笉闇�鍏冲績锛屽厛涓嶅仛浠讳綍鎿嶄綔锛�+
+                using (var tran = db.Ado.UseTran()) {
+                    if (db.Updateable<TN_Location>(startloc).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触锛氫慨鏀硅捣鐐硅揣浣嶉攣鐘舵�澶辫触";
+                        return BuildSimpleResult(500, info);
+                    }
+
+                    if (endloc != null) {
+                        if (db.Updateable<TN_Location>(endloc).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触锛氫慨鏀圭粓鐐硅揣浣嶉攣鐘舵�澶辫触";
+                            return BuildSimpleResult(500, info);
+                        }
+                    }
+
+                    if (db.Updateable<TN_Task>(task).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触";
+                        return BuildSimpleResult(500, info);
+                    }
+
+                    tran.CommitTran();
+                    info = $"浠诲姟{task.S_CODE}鍙栨秷鎴愬姛";
+                    return BuildSimpleResult(0, info);
+                }
+            }
+            catch (Exception) {
+                throw; // 澶栭儴catch
+            }
+
+            //return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�);
+        }
 
         public static ErpResult InboundDataSync(InboundDataSyncInfo model) {
             //return BuildErpResult(1, "娴嬭瘯");
 
             var db = new SqlHelper<object>().GetInstance();
             try {
-                if (model.stockTransactions.Count == 0) {
+                if (model.stockTransactions == null && model.stockTransactions.Count == 0) {
                     return BuildErpResult(400, "涓嶈兘浼犲叆绌虹殑鏁版嵁鍒楄〃");
                 }
 
@@ -631,7 +835,7 @@
 
                 foreach (var transaction in model.stockTransactions) {
                     var recordOld = db.Queryable<TN_Inbound_DataRecord>()
-                        .Where(r => r.S_LOCATION_CODE == transaction.locationCode).First();
+                        .Where(r => r.S_LOCATION_CODE == "HJQ-" + transaction.locationCode.Trim()).First();
                     if (recordOld != null) {
                         deleteRecordOldList.Add(recordOld);
                         //errList.Add(recordOld);
@@ -640,7 +844,7 @@
 
                     // 鍐欏叆璁板綍琛�                     var record = new TN_Inbound_DataRecord {
-                        S_LOCATION_CODE = transaction.locationCode,
+                        S_LOCATION_CODE = "HJQ-" + transaction.locationCode.Trim(),
                         S_STOCK_TRANS = transaction.stockTransactionId,
                         S_ITEM_CODE = transaction.itemCode,
                         S_ITEM_NAME = transaction.itemName,
@@ -718,7 +922,7 @@
 
             var db = new SqlHelper<object>().GetInstance();
             try {
-                if (model.materialIssues.Count == 0) {
+                if (model.materialIssues == null || model.materialIssues.Count == 0) {
                     return BuildErpResult(400, "涓嶈兘浼犲叆绌虹殑鏁版嵁鍒楄〃");
                 }
 
@@ -729,7 +933,7 @@
                 var deleteRecordOldList = new List<TN_Outbound_DataRecord>();
                 foreach (var issue in model.materialIssues) {
                     var recordOld = db.Queryable<TN_Outbound_DataRecord>()
-                        .Where(r => r.S_LOCATION_CODE == issue.locationCode).First();
+                        .Where(r => r.S_LOCATION_CODE == "HJQ-" + issue.locationCode.Trim()).First();
                     if (recordOld != null) {
                         deleteRecordOldList.Add(recordOld);
                         //errList.Add(recordOld);
@@ -738,7 +942,7 @@
 
                     // 鍐欏叆璁板綍琛�                     var record = new TN_Outbound_DataRecord {
-                        S_LOCATION_CODE = issue.locationCode,
+                        S_LOCATION_CODE = "HJQ-" + issue.locationCode.Trim(),
                         S_ORDER_NO = issue.withdrawalOrderNo,
                         S_ITEM_CODE = issue.itemCode,
                         S_ITEM_NAME = issue.itemName,
diff --git a/api/ApiModel.cs b/api/ApiModel.cs
index b77c8bb..07d84eb 100644
--- a/api/ApiModel.cs
+++ b/api/ApiModel.cs
@@ -158,6 +158,23 @@
             public string Row { get; set; }
         }
 
+        public class InboundDataInfo {
+            /// <summary>
+            /// 璧风偣璐т綅
+            /// </summary>
+            [JsonProperty("StartLoc")]
+            public string StartLoc { get; set; }
+
+            /// <summary>
+            /// 缁堢偣璐ф灦锛堝彲閫夛級
+            /// </summary>
+            [JsonProperty("Nrow")]
+            public string Row { get; set; }
+
+            public string ItemCode { get; set; }
+            //public string ItemName { get; set; }
+        }
+
         public class SelectLocationInfo {
             /// <summary>
             /// AGV灏忚溅鍙凤細NOTE 鍚庢湡鍙兘鐪佺暐锛屽洜涓哄彧鏈変竴杈嗚溅
diff --git a/api/ErpController.cs b/api/ErpController.cs
index 55d9e11..a9d9dbb 100644
--- a/api/ErpController.cs
+++ b/api/ErpController.cs
@@ -50,7 +50,7 @@
             //if (!checkRes.isSuccess) {
             //    return CreateErrorResponse(checkRes.code, checkRes.message);
             //}
-
+            
             var res = ApiHelper.OutboundDataSync(model);
             return CreateSuccessResponse(res);
         }
diff --git a/api/MoboxController.cs b/api/MoboxController.cs
index 8b48776..51d084f 100644
--- a/api/MoboxController.cs
+++ b/api/MoboxController.cs
@@ -26,6 +26,18 @@
         }
 
         /// <summary>
+        /// 璐у搧鍏ュ簱-鎵嬪姩娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("InboundData")]
+        public SimpleResult InboundData(InboundDataInfo model) {
+            LogHelper.Info("瑙﹀彂API锛氫骇鍝佸叆搴�鎵嬪姩娣诲姞鏁版嵁" + JsonConvert.SerializeObject(model), "API");
+            return ApiHelper.InboundData(model);
+        }
+
+        /// <summary>
         /// PDA閫夋嫨缁堢偣璐т綅
         /// </summary>
         /// <param name="model"></param>
diff --git a/core/Monitor.cs b/core/Monitor.cs
index 35739ea..3f81d23 100644
--- a/core/Monitor.cs
+++ b/core/Monitor.cs
@@ -20,7 +20,11 @@
             var db = new SqlHelper<object>().GetInstance();
             try {
                 var inboundDataList = db.Queryable<TN_Inbound_DataRecord>().ToList();
-                LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細褰撳墠娌℃湁寰呭悓姝ョ殑ERP鐗╂枡淇℃伅");
+                
+                if (inboundDataList.Count == 0 ) {
+                    LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細褰撳墠娌℃湁寰呭悓姝ョ殑ERP鐗╂枡淇℃伅");
+                    return;
+                }
 
                 var needDeleteDataList = new List<TN_Inbound_DataRecord>();
                 var needUpdateLocCntrRelList = new List<TN_Loc_Container>();
@@ -42,6 +46,10 @@
                         needUpdateCgDetailList.Add(cgDetail);
                         needDeleteDataList.Add(inboundData);
                     }
+                }
+
+                if (needDeleteDataList.Count == 0) {
+                    LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細寰呮洿鏂扮殑ERP鐗╂枡淇℃伅锛屾殏鏃犵墿鏂欏彲浠ヨ鐩栵紝鐩墠寰呮洿鏂版暟閲忥細{inboundDataList.Count}");
                 }
 
                 using (var tran = db.Ado.UseTran()) {
@@ -81,6 +89,7 @@
 
                 if (outboundDataList.Count== 0 ) {
                     LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細褰撳墠娌℃湁寰呭悓姝ョ殑ERP鐗╂枡淇℃伅");
+                    return;
                 }
 
                 var needDeleteDataList = new List<TN_Outbound_DataRecord>();
@@ -103,6 +112,10 @@
                         needUpdateCgDetailList.Add(cgDetail);
                         needDeleteDataList.Add(outboundData);
                     }
+                }
+
+                if (needDeleteDataList.Count == 0) {
+                    LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細寰呮洿鏂扮殑ERP鐗╂枡淇℃伅锛屾殏鏃犵墿鏂欏彲浠ヨ鐩栵紝鐩墠寰呮洿鏂版暟閲忥細{outboundDataList.Count}");
                 }
 
                 using (var tran = db.Ado.UseTran()) {
@@ -130,7 +143,6 @@
 
             }
             catch (Exception ex) {
-
                 LogHelper.Info($"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index 383223a..ea81f71 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -126,13 +126,13 @@
                     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) {
+                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;
-                //}
+                    LogHelper.Info($"鍥剧墖URL '{filepath}' 鍐欏叆鏁版嵁搴撳け璐�);
+                    return;
+                }
             }
             catch (Exception ex) {
                 LogHelper.Info($"鍙戠敓浜嗛敊璇細{ex.Message}");
diff --git a/device/SnapDevice.cs b/device/SnapDevice.cs
index 216bc0e..f163af8 100644
--- a/device/SnapDevice.cs
+++ b/device/SnapDevice.cs
@@ -161,5 +161,19 @@
                 Process.Start(filePath);
             }
         }
+
+        public string GetCapturePictureLocalPath() {
+            string path = AppDomain.CurrentDomain.BaseDirectory + "image";
+            if (!Directory.Exists(path)) {
+                Directory.CreateDirectory(path);
+            }
+            DateTime now = DateTime.Now;
+            string filePath = path + "\\" + string.Format("{0}-{1}-{2}-{3}-{4}-{5}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second) + ".jpg";
+            bool ret = NETClient.CapturePicture(_PlayID, filePath, EM_NET_CAPTURE_FORMATS.JPEG);
+            if (!ret) {
+                return "";
+            }
+            return filePath;
+        }
     }
 }
diff --git a/device/SnapManager.cs b/device/SnapManager.cs
index 625a39b..4b48790 100644
--- a/device/SnapManager.cs
+++ b/device/SnapManager.cs
@@ -1,8 +1,11 @@
 锘縰sing System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+
+using NetSDKCS;
 
 namespace HH.WCS.Mobox3.AnGang.device {
     public class SnapManager {
@@ -23,6 +26,21 @@
             string fileName = string.Format("{0}{1}{2}{3}{4}{5}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second) + ".jpg";
             string filePath = path + "\\" + fileName;
 
+            //// 鑾峰彇褰撳墠鏃堕棿
+            //DateTime now = DateTime.Now;
+
+            //// 鏋勫缓鏂囦欢鍚嶏細yyyy-MM-dd-HHmmss.jpg
+            //string fileName = $"{now:yyyy-MM-dd-HHmmss}.jpg";
+
+            //// 鏋勫缓鏂囦欢澶硅矾寰勶細path\yyyy\MM\dd
+            //string directoryPath = Path.Combine(path, now.Year.ToString(), now.Month.ToString("00"), now.Day.ToString("00"));
+
+            //// 濡傛灉鐩綍涓嶅瓨鍦ㄥ垯鍒涘缓
+            //Directory.CreateDirectory(directoryPath);
+
+            //// 瀹屾暣鐨勬枃浠惰矾寰�+            //string filePath = Path.Combine(directoryPath, fileName);
+
             if (_snapDevice.SnapPictureToFileOK(ref filePath)) {
                 return filePath;
             }
@@ -30,5 +48,9 @@
                 return string.Empty;
             }
         }
+
+        public static string GetCapturePictureLocal() {
+            return _snapDevice.GetCapturePictureLocalPath();
+        }
     }
 }
diff --git a/dispatch/GZRobot.cs b/dispatch/GZRobot.cs
index 0bcb179..11692a7 100644
--- a/dispatch/GZRobot.cs
+++ b/dispatch/GZRobot.cs
@@ -125,7 +125,7 @@
         /// </summary>
         /// <returns></returns>
         public static GzResult orderStatusReport(orderStatusReportParme model) {
-            LogHelper.Info("RCS鍥借嚜AGV浠诲姟鐘舵�鍥炴姤锛� + JsonConvert.SerializeObject(model), "HosttoagvTask");
+            LogHelper.Info("orderStatusReport锛歊CS鍥借嚜AGV浠诲姟鐘舵�鍥炴姤锛� + JsonConvert.SerializeObject(model), "HosttoagvTask");
             GzResult result = new GzResult();
             AgvTaskState agv = new AgvTaskState();
 
diff --git a/models/TN_Loc_Container.cs b/models/TN_Loc_Container.cs
index 27a7a04..ad4c674 100644
--- a/models/TN_Loc_Container.cs
+++ b/models/TN_Loc_Container.cs
@@ -25,6 +25,6 @@
         /// <summary>
         /// 鍥剧墖閾炬帴
         /// </summary>
-        //public string S_IMG_URL { get; set; } = "";
+        public string S_IMG_URL { get; set; } = "";
     }
 }
diff --git a/wms/LocationHelper.cs b/wms/LocationHelper.cs
index 246ed9d..82ff08c 100644
--- a/wms/LocationHelper.cs
+++ b/wms/LocationHelper.cs
@@ -518,11 +518,6 @@
         public string cntID { get; set; }//瀹瑰櫒ID
     }
 
-    public class CancleTaskInfo
-    {
-        public string taskNO { get; set; }//浠诲姟鍙�-    }
-
     public class PDAFullInAreaInfo
     {
         public string StartLoc { get; set; }//璧风偣

--
Gitblit v1.9.1