From d93440432c13c75f798427be327cde02cfe7f301 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期日, 20 七月 2025 17:00:29 +0800
Subject: [PATCH] 增加无称重的指定货位入库流程,添加指定卸货位解绑接口备用

---
 util/Settings.cs       |    1 
 api/ApiHelper.cs       |  152 +++++++++++++++++++++++++++++++++++++
 api/ApiModel.cs        |   10 ++
 core/WCSCore.cs        |    4 
 api/MoboxController.cs |   24 ++++++
 5 files changed, 187 insertions(+), 4 deletions(-)

diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index 1d27797..6a07a60 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -39,7 +39,7 @@
                     .First();
 
                 if (startLoc == null) {
-                    return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細(1)娌℃湁閿佺姸鎬�(2)灞炰簬鍙栨斁璐у尯");
+                    return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細(1)娌℃湁閿佺姸鎬�(2)灞炰簬鍙栬揣鍖�);
                 }
 
                 //var locCntrRelOld = db.Queryable<TN_Loc_Container>()
@@ -612,7 +612,7 @@
 
             try {
                 // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級
-                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && startAreas.Contains(a.S_AREA_CODE));
+                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && startAreas.Contains(a.S_AREA_CODE));
                 if (startLoc == null) {
                     return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
                 }
@@ -665,6 +665,154 @@
         }
 
         /// <summary>
+        /// 鎸囧畾璐т綅鍏ュ簱
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        internal static SimpleResult InboundLoc(InboundLocInfo model) {
+            var taskName = TaskName.鎸囧畾璐т綅鍏ュ簱;
+            var db = new SqlHelper<object>().GetInstance();
+
+            var startAreas = Settings.Areas[AreaIndex.Q鍙栬揣鍖篯;
+            var endAreas = Settings.Areas[AreaIndex.H璐ф灦鍖篯;
+
+            try {
+                // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級
+                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && startAreas.Contains(a.S_AREA_CODE));
+                if (startLoc == null) {
+                    return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.startLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細(1)娌℃湁閿佺姸鎬�(2)灞炰簬鍙栨斁璐у尯");
+                }
+
+                //var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc);
+                //if (locCntrRel == null) {
+                //    return BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡");
+                //}
+
+                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,
+                    S_LOC_CODE = startLoc.S_CODE, // ADD锛氳ˉ鍏呴拡瀵筆DA鍒嗘嫞
+                    N_LOCK_STATE = locCntrRel.N_LOCK_STATE,
+                };
+
+                startLoc.N_CURRENT_NUM = 1;
+
+                // 缁堢偣浣嶇疆锛氳揣鏋讹紙娌℃湁璐х墿锛屾病鏈夐攣锛�+                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));
+                if (endLoc == null) {
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
+                }
+
+                //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}");
+            }
+        }
+
+        /// <summary>
+        /// 鎸囧畾璐т綅鍏ュ簱
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        internal static SimpleResult UnbindLoc(UnbindLocInfo model) {
+            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(1, $"璧风偣浣嶇疆{model.startLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細(1)娌℃湁閿佺姸鎬�(2)灞炰簬鍙栬揣鍖�);
+                }
+
+                var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc);
+                if (locCntrRel == null) {
+                    return BuildSimpleResult(2, $"褰撳墠璐т綅{model.startLoc}娌℃湁璐т綅瀹瑰櫒缁戝畾鍏崇郴锛屾棤闇�В缁戯紒");
+                }
+
+                var cgDetail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == locCntrRel.S_CNTR_CODE);
+                if (cgDetail != null) {
+                    return BuildSimpleResult(3, $"褰撳墠璐т綅{model.startLoc}瀹瑰櫒瀛樻斁鐨勭墿鏂欐暟閲忎笉涓�锛屾棤娉曡В缁戯紒");
+                }
+
+                startLoc.N_CURRENT_NUM = 0;
+                startLoc.T_MODIFY = DateTime.Now;
+
+                using (var tran = db.Ado.UseTran()) {
+                    if (db.Deleteable(locCntrRel).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(500,
+                            $"鍒犻櫎璐т綅瀹瑰櫒缁戝畾鍏崇郴澶辫触!" + JsonConvert.SerializeObject(locCntrRel));
+                    }
+
+                    if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_MODIFY }).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(500,
+                            $"鍒犻櫎璐т綅瀹瑰櫒缁戝畾鍏崇郴澶辫触!" + JsonConvert.SerializeObject(locCntrRel));
+                    }
+
+                    tran.CommitTran();
+                    return BuildSimpleResult(0, "瑙g粦瀹瑰櫒璐у搧鍏崇郴鎴愬姛");
+                }
+            }
+            catch (Exception ex) {
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+            }
+        }
+
+        /// <summary>
         /// 浜у搧閮ㄥ垎鍥炲簱锛堜笉鎸囧畾缁堢偣锛屽鐢級
         /// </summary>
         /// <param name="model"></param>
diff --git a/api/ApiModel.cs b/api/ApiModel.cs
index 464de7c..7b65e18 100644
--- a/api/ApiModel.cs
+++ b/api/ApiModel.cs
@@ -223,6 +223,16 @@
             public string endLoc { get; set; }
         }
 
+        public class InboundLocInfo {
+            public string startLoc { get; set; }
+            public string endLoc { get; set; }
+            public string ItemCode { get; set; }
+        }
+
+        public class UnbindLocInfo {
+            public string startLoc { get; set; }
+        }
+
         public class CancelTaskInfo {
             public string TaskNo { get; set; }
         }
diff --git a/api/MoboxController.cs b/api/MoboxController.cs
index 19faf9b..fc1267c 100644
--- a/api/MoboxController.cs
+++ b/api/MoboxController.cs
@@ -75,6 +75,30 @@
         }
 
         /// <summary>
+        /// 鎸囧畾璐т綅鍏ュ簱
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("InboundLoc")]
+        public SimpleResult InboundLoc(InboundLocInfo model) {
+            LogHelper.Info("瑙﹀彂API锛欼nboundLoc锛氭寚瀹氳揣浣嶅叆搴� + JsonConvert.SerializeObject(model), "API");
+            return ApiHelper.InboundLoc(model);
+        }
+
+        /// <summary>
+        /// 璐т綅瀹瑰櫒瑙g粦
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("UnbindLoc")]
+        public SimpleResult UnbindLoc(UnbindLocInfo model) {
+            LogHelper.Info("瑙﹀彂API锛歎nbindLoc锛氳揣浣嶅鍣ㄨВ缁� + JsonConvert.SerializeObject(model), "API");
+            return ApiHelper.UnbindLoc(model);
+        }
+
+        /// <summary>
         /// 鍙栨秷浠诲姟
         /// </summary>
         /// <param name="model"></param>
diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index 16a7910..661647d 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -71,7 +71,7 @@
                 case 4: // 鍙栬揣瀹屾垚
                     WCSHelper.UpdateStatus(TN_Task, "鍙栬揣瀹屾垚"); // 浠诲姟鐘舵�鏀规垚鍙栬揣瀹屾垚
 
-                    if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱 || TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) {
+                    if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱 || TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱 || TN_Task.S_TYPE == TaskName.鎸囧畾璐т綅鍏ュ簱 || TN_Task.S_TYPE == TaskName.鐩樼偣鐞嗚揣鍥炲簱) {
                         var captureTask = Task.Run(() => {
                             CapturePic(TN_Task);
                             LogHelper.Info($"{TN_Task}锛氭媿鐓ask缁撴潫");
@@ -86,7 +86,7 @@
                         });
                     }
 
-                    if (TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) {
+                    if (TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱 || TN_Task.S_TYPE == TaskName.鎸囧畾璐т綅鍏ュ簱 || TN_Task.S_TYPE == TaskName.鐩樼偣鐞嗚揣鍥炲簱) {
                         var weightTask = Task.Run(() => {
                             UpdateWeight(TN_Task);
                             LogHelper.Info("绉伴噸Task缁撴潫");
diff --git a/util/Settings.cs b/util/Settings.cs
index ec89eab..e63fdd1 100644
--- a/util/Settings.cs
+++ b/util/Settings.cs
@@ -110,6 +110,7 @@
         public const string 浜у搧鍏ュ簱 = "浜у搧鍏ュ簱";
         public const string 浜у搧閮ㄥ垎鍑哄簱 = "浜у搧鍑哄簱";
         public const string 浜у搧閮ㄥ垎鍥炲簱 = "浜у搧鍥炲簱";
+        public const string 鎸囧畾璐т綅鍏ュ簱 = "鎸囧畾璐т綅鍏ュ簱";
 
         // 澶囩敤锛氱洏鐐圭悊璐у嚭搴擄紙鎭㈠锛�         public const string 鐩樼偣鐞嗚揣鍑哄簱 = "鐩樼偣鐞嗚揣鍑哄簱";

--
Gitblit v1.9.1