From b928a2f0011fc867d7d219cfff4b764250f5b778 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期三, 09 七月 2025 17:03:08 +0800
Subject: [PATCH] 修复查交互表更新终点的流程,添加绑定货位写入物料明细表

---
 device/SnapManager.cs  |   12 +
 models/TN_CG_Detail.cs |    4 
 device/SnapDevice.cs   |    3 
 wms/LocationHelper.cs  |    6 
 dispatch/GZRobot.cs    |   30 +++
 api/AgvController.cs   |    2 
 api/ApiHelper.cs       |  123 +++++++++++++--
 api/ImageController.cs |  200 +++++++++++++------------
 process/TaskProcess.cs |   12 
 core/WCSCore.cs        |   46 +++--
 App_Start/Startup.cs   |    2 
 11 files changed, 297 insertions(+), 143 deletions(-)

diff --git a/App_Start/Startup.cs b/App_Start/Startup.cs
index 6c76727..12b726d 100644
--- a/App_Start/Startup.cs
+++ b/App_Start/Startup.cs
@@ -41,7 +41,7 @@
             });
             config.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
             config.Formatters.Add(new JsonMediaTypeFormatter());
-
+                
             app.UseWebApi(config);
         }
     }
diff --git a/api/AgvController.cs b/api/AgvController.cs
index 653838f..8ea7831 100644
--- a/api/AgvController.cs
+++ b/api/AgvController.cs
@@ -45,6 +45,8 @@
             return WCSCore.SafetyInteraction(model);
         }
 
+        // 鎼佺疆涓嶄娇鐢紝瀛樺湪bug锛欻ttpContext.Current.Request璧嬪�鍓嶅紩鐢紝搴旇鏄疌urrent涓簄ull瀵艰嚧鐨�+
         private void LogRequestHeaders() {
             var request = HttpContext.Current.Request;
             var logMessage = new StringBuilder();
diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index dd1f197..285284f 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -68,6 +68,7 @@
                 var cgDetail = new TN_CG_Detail() {
                     S_ITEM_CODE = cgId,
                     S_CNTR_CODE = cntId,
+                    S_LOC_CODE = startLoc.S_CODE, // ADD锛氳ˉ鍏呴拡瀵筆DA鍒嗘嫞
                 };
 
                 startLoc.N_CURRENT_NUM = 1;
@@ -189,6 +190,7 @@
                     S_ITEM_CODE = cgId,
                     S_CNTR_CODE = cntId,
                     //S_ITEM_NAME = model.ItemName,
+                    S_LOC_CODE = startLoc.S_CODE, // ADD锛氳ˉ鍏呴拡瀵筆DA鍒嗘嫞
                 };
 
                 startLoc.N_CURRENT_NUM = 1;
@@ -422,17 +424,25 @@
                 var endLoc = new TN_Location();
                 if (cgDetail.F_QTY > 2000) {
                     // 閲嶉噺瓒呰繃2t锛屾姤閿�-                    if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo {
-                        type_name = "GET_DST",
-                        interaction_info_id = int.Parse(task.S_EQ_TASK_CODE),
-                        info_status = "error",
-                    })) {
-                        LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅鎴愬姛", "HosttoagvTask");
+                    if (GZRobot.TryGetInteractionInfoId(task.S_CODE, out var id1)) {
+                        if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo {
+                            type_name = "GET_DST",
+                            interaction_info_id = id1,
+                            info_status = "error",
+                        })) {
+                            LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅鎴愬姛", "HosttoagvTask");
+                        }
+                        else {
+                            LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅澶辫触", "HosttoagvTask");
+                            //return BuildSimpleResult(7, $"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触");
+                        }
                     }
                     else {
-                        LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅澶辫触", "HosttoagvTask");
+                        //return BuildSimpleResult(7, $"鑾峰彇浠诲姟{task.S_CODE}鐨刟gv interaction_info_id澶辫触锛�);
+                        LogHelper.Info($"AGV锛氳幏鍙栦换鍔task.S_CODE}鐨刬nteraction_info_id澶辫触锛�, "HosttoagvTask");
+                        //return BuildSimpleResult(8, $"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触");
                     }
-                    
+
                     return BuildSimpleResult(8, $"鐗╂枡閲嶉噺{cgDetail.F_QTY}瓒呰繃2t");
                 }
                 else if (cgDetail.F_QTY > 1500) {
@@ -468,16 +478,23 @@
                 task.S_END_LOC = endLoc.S_CODE;
                 LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� 
-                if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo {
-                    type_name = "GET_DST",
-                    interaction_info_id = int.Parse(task.S_EQ_TASK_CODE),
-                    info_status = "invalid",
-                    return_value = LocationHelper.GetAgvSite(task.S_END_LOC), // 鐩墠浣跨敤agvsite
-                })) {
-                    LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅鎴愬姛", "HosttoagvTask");
+                if (GZRobot.TryGetInteractionInfoId(task.S_CODE, out var id2)) {
+                    if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo {
+                        type_name = "GET_DST",
+                        interaction_info_id = id2,
+                        info_status = "invalid",
+                        return_value = LocationHelper.GetAgvSite(task.S_END_LOC), // 鐩墠浣跨敤agvsite
+                    })) {
+                        LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅鎴愬姛", "HosttoagvTask");
+                    }
+                    else {
+                        LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触", "HosttoagvTask");
+                        return BuildSimpleResult(7, $"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触");
+                    }
                 }
                 else {
-                    LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触", "HosttoagvTask");
+                    LogHelper.Info($"AGV锛氳幏鍙栦换鍔task.S_CODE}鐨刬nteraction_info_id澶辫触锛�, "HosttoagvTask");
+                    return BuildSimpleResult(8, $"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触");
                 }
 
                 using (var tran = db.Ado.UseTran()) {
@@ -646,6 +663,80 @@
             }
         }
 
+        /// <summary>
+        /// 浜у搧閮ㄥ垎鍥炲簱锛堜笉鎸囧畾缁堢偣锛屽鐢級
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        internal static SimpleResult PartInboundAuto(PartInboundInfo model) {
+            var taskName = TaskName.浜у搧閮ㄥ垎鍥炲簱;
+            var db = new SqlHelper<object>().GetInstance();
+
+            var startAreas = Settings.Areas[AreaIndex.X鍗歌揣鍖篯;
+            var endAreas = Settings.Areas[AreaIndex.H璐ф灦鍖篯;
+
+            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" && startAreas.Contains(a.S_AREA_CODE));
+                if (startLoc == null) {
+                    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} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡");
+                }
+
+                // 缁堢偣浣嶇疆锛氳揣鏋讹紙娌℃湁璐х墿锛屾病鏈夐攣锛�+                var endLoc = db.Queryable<TN_Location>().First(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && endAreas.Contains(a.S_AREA_CODE));
+                if (endLoc == null) {
+                    return BuildSimpleResult(4, $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�);
+                }
+
+                var cntId = locCntrRel.S_CNTR_CODE;
+                var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName);
+                LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+                LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+
+                using (var tran = db.Ado.UseTran()) {
+                    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 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 BuildSimpleResult(500,
+                            $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
+                    }
+
+                    if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(500,
+                            $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
+                    }
+
+                    tran.CommitTran();
+                    return BuildSimpleResult(0,
+                        $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
+                }
+            }
+            catch (Exception ex) {
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+            }
+        }
+
         public static SimpleResult CancelTask(CancelTaskInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var info = "";
diff --git a/api/ImageController.cs b/api/ImageController.cs
index 41b034f..984dd64 100644
--- a/api/ImageController.cs
+++ b/api/ImageController.cs
@@ -5,105 +5,113 @@
 using System.Web;
 using System.Web.Http;
 
-public class ImageController : ApiController {
-    private readonly string _baseStoragePath = HttpContext.Current.Server.MapPath("~/StaticStorage");
-    private readonly string[] _allowedExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
+namespace HH.WCS.Mobox3.AnGang.api {
 
-    // 涓婁紶鍥剧墖鎺ュ彛
-    [HttpPost]
-    [Route("api/image/upload")]
-    public HttpResponseMessage UploadImage() {
-        try {
-            if (!Request.Content.IsMimeMultipartContent()) {
-                return Request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType, "璇锋眰蹇呴』鍖呭惈澶氶儴鍒嗗唴瀹�);
+    //[RoutePrefix("api/image")]
+    public class ImageController : ApiController {
+        //private readonly string _baseStoragePath = HttpContext.Current.Server.MapPath("~/StaticStorage");
+        private readonly string _baseStoragePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "StaticStorage");
+        private readonly string[] _allowedExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
+
+        // 涓婁紶鍥剧墖鎺ュ彛
+        [HttpPost]
+        //[ActionName("Upload")]
+        //[Route("api/image/upload")]
+        [Route("UploadImage")]
+        public HttpResponseMessage UploadImage() {
+            try {
+                if (!Request.Content.IsMimeMultipartContent()) {
+                    return Request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType, "璇锋眰蹇呴』鍖呭惈澶氶儴鍒嗗唴瀹�);
+                }
+
+                var provider = new MultipartFormDataStreamProvider(Path.GetTempPath());
+                var result = Request.Content.ReadAsMultipartAsync(provider).Result;
+
+                if (result.FileData.Count == 0) {
+                    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "鏈帴鏀跺埌鏂囦欢");
+                }
+
+                var fileData = result.FileData[0];
+                var fileName = fileData.Headers.ContentDisposition.FileName.Trim('"');
+                var fileExt = Path.GetExtension(fileName).ToLower();
+
+                if (Array.IndexOf(_allowedExtensions, fileExt) == -1) {
+                    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "涓嶆敮鎸佺殑鏂囦欢绫诲瀷");
+                }
+
+                // 鐢熸垚鏃ユ湡璺緞
+                var now = DateTime.Now;
+                var year = now.ToString("yyyy");
+                var month = now.ToString("MM");
+                var day = now.ToString("dd");
+
+                // 鐢熸垚鍞竴鏂囦欢鍚�+                var newFileName = $"{now:yyyy-MM-dd-HHmmssfff}{fileExt}";
+
+                // 鐩爣璺緞
+                var targetPath = Path.Combine(_baseStoragePath, "image", year, month, day);
+
+                // 纭繚鐩綍瀛樺湪
+                Directory.CreateDirectory(targetPath);
+
+                // 瀹屾暣鏂囦欢璺緞
+                var fullPath = Path.Combine(targetPath, newFileName);
+
+                // 绉诲姩鏂囦欢鍒扮洰鏍囦綅缃�+                File.Move(fileData.LocalFileName, fullPath);
+
+                // 杩斿洖璁块棶URL
+                var url = $"{Request.RequestUri.Scheme}://{Request.RequestUri.Authority}/static/image/{year}/{month}/{day}/{newFileName}";
+
+                return Request.CreateResponse(HttpStatusCode.OK, new { Url = url });
             }
-
-            var provider = new MultipartFormDataStreamProvider(Path.GetTempPath());
-            var result = Request.Content.ReadAsMultipartAsync(provider).Result;
-
-            if (result.FileData.Count == 0) {
-                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "鏈帴鏀跺埌鏂囦欢");
+            catch (Exception ex) {
+                return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);
             }
-
-            var fileData = result.FileData[0];
-            var fileName = fileData.Headers.ContentDisposition.FileName.Trim('"');
-            var fileExt = Path.GetExtension(fileName).ToLower();
-
-            if (Array.IndexOf(_allowedExtensions, fileExt) == -1) {
-                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "涓嶆敮鎸佺殑鏂囦欢绫诲瀷");
-            }
-
-            // 鐢熸垚鏃ユ湡璺緞
-            var now = DateTime.Now;
-            var year = now.ToString("yyyy");
-            var month = now.ToString("MM");
-            var day = now.ToString("dd");
-
-            // 鐢熸垚鍞竴鏂囦欢鍚�-            var newFileName = $"{now:yyyy-MM-dd-HHmmssfff}{fileExt}";
-
-            // 鐩爣璺緞
-            var targetPath = Path.Combine(_baseStoragePath, "image", year, month, day);
-
-            // 纭繚鐩綍瀛樺湪
-            Directory.CreateDirectory(targetPath);
-
-            // 瀹屾暣鏂囦欢璺緞
-            var fullPath = Path.Combine(targetPath, newFileName);
-
-            // 绉诲姩鏂囦欢鍒扮洰鏍囦綅缃�-            File.Move(fileData.LocalFileName, fullPath);
-
-            // 杩斿洖璁块棶URL
-            var url = $"{Request.RequestUri.Scheme}://{Request.RequestUri.Authority}/static/image/{year}/{month}/{day}/{newFileName}";
-
-            return Request.CreateResponse(HttpStatusCode.OK, new { Url = url });
         }
-        catch (Exception ex) {
-            return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);
+
+        // 鑾峰彇鍥剧墖鎺ュ彛 - 瀹為檯鐢遍潤鎬佹枃浠跺鐞嗭紝杩欓噷鍙槸绀轰緥
+        [HttpGet]
+        //[ActionName("Get")]
+        [Route("static/image/{year}/{month}/{day}/{filename}")]
+        public HttpResponseMessage GetImage(string year, string month, string day, string filename) {
+            try {
+                var filePath = Path.Combine(_baseStoragePath, "image", year, month, day, filename);
+
+                if (!File.Exists(filePath)) {
+                    return Request.CreateErrorResponse(HttpStatusCode.NotFound, "鏂囦欢涓嶅瓨鍦�);
+                }
+
+                var response = new HttpResponseMessage(HttpStatusCode.OK);
+                var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
+                response.Content = new StreamContent(stream);
+
+                // 鏍规嵁鏂囦欢鎵╁睍鍚嶈缃瓹ontentType
+                var ext = Path.GetExtension(filename).ToLower();
+                switch (ext) {
+                    case ".jpg":
+                    case ".jpeg":
+                        response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/jpeg");
+                        break;
+                    case ".png":
+                        response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png");
+                        break;
+                    case ".gif":
+                        response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/gif");
+                        break;
+                    case ".bmp":
+                        response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/bmp");
+                        break;
+                    default:
+                        response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
+                        break;
+                }
+
+                return response;
+            }
+            catch (Exception ex) {
+                return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);
+            }
         }
     }
-
-    // 鑾峰彇鍥剧墖鎺ュ彛 - 瀹為檯鐢遍潤鎬佹枃浠跺鐞嗭紝杩欓噷鍙槸绀轰緥
-    [HttpGet]
-    [Route("static/image/{year}/{month}/{day}/{filename}")]
-    public HttpResponseMessage GetImage(string year, string month, string day, string filename) {
-        try {
-            var filePath = Path.Combine(_baseStoragePath, "image", year, month, day, filename);
-
-            if (!File.Exists(filePath)) {
-                return Request.CreateErrorResponse(HttpStatusCode.NotFound, "鏂囦欢涓嶅瓨鍦�);
-            }
-
-            var response = new HttpResponseMessage(HttpStatusCode.OK);
-            var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
-            response.Content = new StreamContent(stream);
-
-            // 鏍规嵁鏂囦欢鎵╁睍鍚嶈缃瓹ontentType
-            var ext = Path.GetExtension(filename).ToLower();
-            switch (ext) {
-                case ".jpg":
-                case ".jpeg":
-                    response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/jpeg");
-                    break;
-                case ".png":
-                    response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png");
-                    break;
-                case ".gif":
-                    response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/gif");
-                    break;
-                case ".bmp":
-                    response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/bmp");
-                    break;
-                default:
-                    response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
-                    break;
-            }
-
-            return response;
-        }
-        catch (Exception ex) {
-            return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);
-        }
-    }
-}
\ No newline at end of file
+}
diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index ea81f71..6363369 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -206,7 +206,7 @@
                     return;
                 }
 
-                //row -= 100; // 118-1
+                //row -= 100; // 111-118 => 1-8
 
                 // 鍙綋涔嬪墠鎸囧畾缁堢偣璐ф灦鍚庯紝鎵嶅皾璇曡绠楃粓鐐硅揣浣�                 if (cgDetail.F_QTY > 2000) {
@@ -215,18 +215,23 @@
                     LogHelper.Info("閲嶉噺瓒呰繃2t锛屼笉鍏佽鍏ュ簱");
 
                     // 浼犻�缁欏浗鑷狝GV
-                    if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo {
-                        type_name = "GET_DST",
-                        interaction_info_id = int.Parse(tn_task.S_EQ_TASK_CODE),
-                        info_status = "error",
-                    })) {
-                        LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅鎴愬姛", "HosttoagvTask");
+                    if (GZRobot.TryGetInteractionInfoId(tn_task.S_CODE, out var id1)) {
+                        if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo {
+                            type_name = "GET_DST",
+                            interaction_info_id = id1,
+                            info_status = "error",
+                        })) {
+                            LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅鎴愬姛", "HosttoagvTask");
+                        }
+                        else {
+                            LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅澶辫触", "HosttoagvTask");
+                        }
                     }
                     else {
-                        LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅澶辫触", "HosttoagvTask");
+                        LogHelper.Info($"AGV锛氳幏鍙栦换鍔tn_task.S_CODE}鐨刬nteraction_info_id澶辫触锛�, "HosttoagvTask");
                     }
 
-                    return;
+                    return; // 瓒呴噸浼氳嚜宸眗eturn锛屽鏋滃浗鑷猘gv娌℃帴鍙楀埌涔熶笉闇�鎻愬墠return
                 }
                 else if (cgDetail.F_QTY > 1500) {
                     // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-2灞傝揣鏋�@@ -276,16 +281,23 @@
                     LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� 
                     // 浼犻�缁欏浗鑷狝GV
-                    if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo {
-                        type_name = "GET_DST",
-                        interaction_info_id = int.Parse(tn_task.S_EQ_TASK_CODE),
-                        info_status = "invalid",
-                        return_value = LocationHelper.GetAgvSite(tn_task.S_END_LOC), // 鐩墠浣跨敤agvsite
-                    })) {
-                        LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅鎴愬姛", "HosttoagvTask");
+                    if (GZRobot.TryGetInteractionInfoId(tn_task.S_CODE, out var id2)) {
+                        if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo {
+                            type_name = "GET_DST",
+                            interaction_info_id = id2,
+                            info_status = "invalid",
+                            return_value = LocationHelper.GetAgvSite(tn_task.S_END_LOC), // 鐩墠浣跨敤agvsite
+                        })) {
+                            LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅鎴愬姛", "HosttoagvTask");
+                        }
+                        else {
+                            LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触", "HosttoagvTask");
+                            return;
+                        }
                     }
                     else {
-                        LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触", "HosttoagvTask");
+                        LogHelper.Info($"AGV锛氳幏鍙栦换鍔tn_task.S_CODE}鐨刬nteraction_info_id澶辫触锛�, "HosttoagvTask");
+                        return;
                     }
 
                     using (var tran = db.Ado.UseTran()) {
diff --git a/device/SnapDevice.cs b/device/SnapDevice.cs
index f163af8..afabdfe 100644
--- a/device/SnapDevice.cs
+++ b/device/SnapDevice.cs
@@ -108,6 +108,9 @@
             if (!ret) {
                 LogHelper.Info("鎶撳浘澶辫触");
             }
+            else {
+                LogHelper.Info("鎶撳浘鎴愬姛");
+            }
             return ret;
         }
 
diff --git a/device/SnapManager.cs b/device/SnapManager.cs
index 4b48790..5dee262 100644
--- a/device/SnapManager.cs
+++ b/device/SnapManager.cs
@@ -22,10 +22,11 @@
             // SNAP
 
             DateTime now = DateTime.Now;
-            string path = Settings.CaptureUrl;
-            string fileName = string.Format("{0}{1}{2}{3}{4}{5}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second) + ".jpg";
+            //string path = Settings.CaptureUrl;
+            string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"StaticStorage/image/{now.Year}/{now.Month}/{now.Day}");
+            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;
-
+            string url = Path.Combine(Settings.WebApiUrl, $"static/image/{now.Year}/{now.Month}/{now.Day}", fileName);
             //// 鑾峰彇褰撳墠鏃堕棿
             //DateTime now = DateTime.Now;
 
@@ -42,13 +43,16 @@
             //string filePath = Path.Combine(directoryPath, fileName);
 
             if (_snapDevice.SnapPictureToFileOK(ref filePath)) {
-                return filePath;
+                //return filePath;
+                return url;
             }
             else {
                 return string.Empty;
             }
         }
 
+        // 澶ф鐜囩敤涓嶅埌锛屽簲璇ヤ笉鏄湰鍦版姄鍥撅紝鍙彲鑳芥槸缃戠粶鎶撳浘锛屽浘鐗囦繚瀛樺埌鍚庡彴
+
         public static string GetCapturePictureLocal() {
             return _snapDevice.GetCapturePictureLocalPath();
         }
diff --git a/dispatch/GZRobot.cs b/dispatch/GZRobot.cs
index f4a519f..4fffff2 100644
--- a/dispatch/GZRobot.cs
+++ b/dispatch/GZRobot.cs
@@ -1,6 +1,7 @@
 锘縰sing System;
 using System.Collections.Generic;
 using System.IdentityModel.Protocols.WSTrust;
+using System.Linq;
 using System.Security.Policy;
 using System.Threading.Tasks;
 
@@ -146,6 +147,10 @@
                 case "waiting":
                     agv.state = 1;
                     break;
+                case "dispatched":
+                    //璋冨害娲捐溅锛堝紑濮嬪彇璐э級NEW ADDED
+                    agv.state = 3;
+                    break;
                 case "source_finish":
                     //鍙栬揣瀹屾垚
                     agv.state = 4;
@@ -252,6 +257,31 @@
             return list;
         }
 
+        /// <summary>
+        /// 鏍规嵁娌℃湁interaction_info_name锛坱ask.S_CODE锛夎幏鍙杋nteraction_info_id
+        /// </summary>
+        /// <param name="taskCode"></param>
+        /// <param name="infoId"></param>
+        /// <returns></returns>
+        public static bool TryGetInteractionInfoId(string taskCode, out int infoId) {
+            var list = QueryInteractInfo(3);
+            if (list.Count == 0) {
+                LogHelper.Info($"鏌ヤ氦浜掕〃澶辫触锛佹病鏈夎鍙栧埌浜や簰琛紒");
+                infoId = 0;
+                return false;
+            }
+            
+            var data = list.Where(i => i.interaction_info_name == taskCode).FirstOrDefault();
+            if (data == null) {
+                LogHelper.Info($"鏌ヤ氦浜掕〃澶辫触锛佹病鏈塱nteraction_info_name='{taskCode}'鐨勫�锛� + JsonConvert.SerializeObject(list));
+                infoId = 0;
+                return false;
+            }
+
+            infoId = data.interaction_info_id;
+            return true;
+        }
+
         // DOC 6.	浜や簰琛ㄦ煡璇紙鏇存柊缁堢偣璐т綅锛�         public static bool UpdateInteractInfo(UpdateInteractInfo interactInfo) {
             string msg = "";
diff --git a/models/TN_CG_Detail.cs b/models/TN_CG_Detail.cs
index e09a2a9..eb02d7a 100644
--- a/models/TN_CG_Detail.cs
+++ b/models/TN_CG_Detail.cs
@@ -14,7 +14,7 @@
         /// 璐у搧 ID
         /// </summary>
         public string S_CG_ID { get; set; } = "";
-       
+
         public string S_CNTR_CODE { get; set; } = "";//瀹瑰櫒缂栫爜
 
         public string S_ITEM_CODE { get; set; } = "";//璐у搧缂栫爜
@@ -40,7 +40,7 @@
         /// </summary>
         public float F_QTY { get; set; } = 0f;
 
-
+        public string S_LOC_CODE { get; set; }
 
     }
 }
diff --git a/process/TaskProcess.cs b/process/TaskProcess.cs
index bd092bd..ad383c5 100644
--- a/process/TaskProcess.cs
+++ b/process/TaskProcess.cs
@@ -114,16 +114,18 @@
                 var startSite = LocationHelper.GetAgvSite(mst.S_START_LOC);
                 var endSite = LocationHelper.GetAgvSite(mst.S_END_LOC); // 濡傛灉鎵句笉鍒颁細杩斿洖0锛屽氨鏄亣缁堢偣
 
-                var code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = startSite, order_name = $"tet" }), "p2pdst2", "pgapi");
-                
+                //var code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = startSite, order_name = $"tet" }), "p2pdst2", "pgapi");
+
                 //var code = -1;
+                var code = 0;
                 if (taskType == TaskName.浜у搧鍏ュ簱) {
-                    code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = startSite, order_name = $"{mst.S_CODE}" }), "p2pdst", "pgapi");
+                    //code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = startSite, order_name = $"{mst.S_CODE}" }), "p2pdst", "pgapi");
+                    code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = startSite, order_name = $"{mst.S_CODE}" }), "p2pdst2", "pgapi");
                 }
                 else {
-                    code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = startSite, dst = endSite }), "p2p", "pgapi");
+                    code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = startSite, dst = endSite }), "p2pcm", "pgapi");
                 }
-                LogHelper.Info($"eq_task_code={code}");
+                //LogHelper.Info($"eq_task_code={code}");
                 // car_type 榛樿涓�
                 // src_ort 璐ф灦鎺掑彿
                 // dst_orc 璐ф灦灞傛暟锛堝悗涓や釜淇℃伅搴旇涓哄浗鑷狝GV鍐呴儴缁存姢锛屼互鍚庨潰鏇存敼鐨勭粨鏋滀负鍑嗭級
diff --git a/wms/LocationHelper.cs b/wms/LocationHelper.cs
index 82ff08c..f6db6c6 100644
--- a/wms/LocationHelper.cs
+++ b/wms/LocationHelper.cs
@@ -221,7 +221,8 @@
 
                     using (var tran = db.Ado.UseTran())
                     {
-                        if (db.Deleteable<TN_Loc_Container>().Where(it => cntrs.Contains(it.S_CNTR_CODE) && it.S_LOC_CODE == loc).ExecuteCommand() > 0)
+                        if (db.Deleteable<TN_Loc_Container>().Where(it => cntrs.Contains(it.S_CNTR_CODE) && it.S_LOC_CODE == loc).ExecuteCommand() > 0 && 
+                            db.Updateable<TN_CG_Detail>().SetColumns(d => d.S_LOC_CODE == null).Where(d => cntrs.Contains(d.S_CNTR_CODE)).ExecuteCommand() > 0) // ADD锛氳ˉ鍏呴拡瀵筆DA鍒嗘嫞
                         {
                             LogHelper.Info($"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄦ垚鍔燂紝{log}");
                         }
@@ -294,7 +295,8 @@
 
                 using (var tran = db.Ado.UseTran())
                 {
-                    if (db.Insertable<TN_Loc_Container>(bindLocCntList).ExecuteCommand() > 0)
+                    if (db.Insertable<TN_Loc_Container>(bindLocCntList).ExecuteCommand() > 0 &&
+                        db.Updateable<TN_CG_Detail>().SetColumns(d => d.S_LOC_CODE == loc).Where(d => cntrs.Contains(d.S_CNTR_CODE)).ExecuteCommand() > 0) // ADD锛氳ˉ鍏呴拡瀵筆DA鍒嗘嫞
                     {
                         LogHelper.Info($"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄦ垚鍔燂紝{log}");
                     }

--
Gitblit v1.9.1