From 1af49bdb3cdaa44a7e44ebdc843fb8180596365f Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期四, 15 五月 2025 16:34:39 +0800
Subject: [PATCH] 尾箱回库、移库逻辑开发

---
 Services/MoboxService.cs |  173 ++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 110 insertions(+), 63 deletions(-)

diff --git a/Services/MoboxService.cs b/Services/MoboxService.cs
index 8ad85b5..4ff7773 100644
--- a/Services/MoboxService.cs
+++ b/Services/MoboxService.cs
@@ -18,45 +18,6 @@
 namespace HH.WCS.Mobox3.DSZSH.Services {
     public class MoboxService {
 
-        #region 妯℃澘鍔熻兘
-        public static SimpleResult BaseBound(StartCntEndInfo model) {
-            var taskName = ""; // 鐢ㄤ簬鐢熸垚浠诲姟绫诲瀷銆佹墦鍗版棩蹇椾俊鎭�-            var db = DbHelper.GetDbClient();
-
-            try {
-                var startLoc = db.Queryable<TN_Location>()
-                    .Where(ExprHelper.LocCode(model.StartLoc))
-                    .Where(ExprHelper.LocIsFree)
-                    .Where(ExprHelper.LocIsEmpty.Negate()).First();
-
-                if (startLoc == null) {
-                    return BuildSimpleResult(2, $"璧风偣浣嶇疆 '{model.StartLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�);
-                }
-
-                var locCntrRel = db.Queryable<TN_Loc_Container>()
-                    .Where(ExprHelper.LocCntrIsBind(startLoc.S_CODE, model.CntId)).First();
-
-                if (locCntrRel == null) {
-                    return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{startLoc.S_CODE}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}'");
-                }
-
-                var endLoc = db.Queryable<TN_Location>()
-                    .Where(ExprHelper.LocCode(model.EndLoc))
-                    .Where(ExprHelper.LocIsFree)
-                    .Where(ExprHelper.LocIsEmpty).First();
-
-                if (endLoc == null) {
-                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�);
-                }
-
-                return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName);
-            }
-            catch (Exception ex) {
-                return BuildSimpleEx(ex);
-            }
-        }
-        #endregion
-
         #region PDA 鍔熻兘
         /// <summary>
         /// 濂借繍绠�婊℃墭涓嬬嚎鍏ュ簱(PDA)
@@ -82,10 +43,9 @@
 
                 // 鏌ョ湅瀹瑰櫒涓庤捣鐐硅揣浣嶆槸鍚︾粦瀹�                 var locCntrRel = db.Queryable<TN_Loc_Container>().First(
-                    a => a.S_LOC_CODE == model.StartLoc
-                    && a.S_CNTR_CODE == model.CntId);
+                    a => a.S_LOC_CODE == startLoc.S_CODE);
                 if (locCntrRel == null) {
-                    return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}' 锛屾棤鍙嚭搴撶殑鐗╂枡");
+                    return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 鏃犲彲鍑哄簱鐨勭墿鏂�);
                 }
 
                 // TODO 婊$鍏ュ簱绠楁硶寰呬紭鍖�@@ -133,7 +93,7 @@
                     return BuildSimpleResult(3, $"褰撳墠瀹瑰櫒 '{model.CntrCode}' 宸茬粡涓�'{locCntrRel.S_LOC_CODE}' 缁戝畾");
                 }
 
-                loc.N_CURRENT_NUM = model.PalletCount;
+                //loc.N_CURRENT_NUM = model.PalletCount;
 
                 locCntrRel = new TN_Loc_Container {
                     S_LOC_CODE = model.LocCode,
@@ -325,13 +285,13 @@
                 }
 
                 var endLoc = db.Queryable<TN_Location>()
-                    .Where(ExprHelper.LocCode(model.EndLoc))
+                    .Where(ExprHelper.LocBelongsToArea(AreaName.鍖呰鍖�)
                     .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE))
                     .Where(ExprHelper.LocIsFree)
                     .Where(ExprHelper.LocIsEmpty).First();
 
                 if (endLoc == null) {
-                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�);
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�);
                 }
 
                 return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName);
@@ -371,13 +331,13 @@
                 }
 
                 var endLoc = db.Queryable<TN_Location>()
-                    .Where(ExprHelper.LocCode(model.EndLoc))
+                    .Where(ExprHelper.LocBelongsToArea(AreaName.鍖呰鍖�)
                     .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE))
                     .Where(ExprHelper.LocIsFree)
                     .Where(ExprHelper.LocIsEmpty).First();
 
                 if (endLoc == null) {
-                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�);
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�);
                 }
 
                 return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName);
@@ -399,11 +359,11 @@
                 using (var tran = db.Ado.UseTran()) {
 
                     var order = new TN_Check_Order {
-                        S_NO = model.No,
-                        S_CG_ID = model.CgId,
-                        S_ITEM_NAME = model.ItemName,
+                        S_NO = GenerateOrderNo("鎶芥鍗曞彿", "CN"),
+                        S_ITEM_CODE = model.ItemCode,
+                        //S_ITEM_NAME = model.ItemName,
                         S_BATCH_NO = model.BatchNo,
-                        N_COUNT = model.N_QTY,
+                        N_COUNT = model.Qty,
                         S_END_AREA = model.EndArea,
                     };
 
@@ -412,10 +372,10 @@
                         return BuildSimpleResult(2, "鐢熸垚 鎶芥鍗�澶辫触锛� + JsonConvert.SerializeObject(order));
                     }
 
-                    for (int i = 0; i < model.N_QTY; i++) {
+                    for (int i = 0; i < model.Qty; i++) {
                         var detail = new TN_Check_Detail {
-                            S_NO = model.No,
-                            S_CG_ID = model.CgId,
+                            S_NO = order.S_NO,
+                            S_ITEM_CODE = model.ItemCode,
                             S_BATCH_NO = model.BatchNo,
                             S_END_AREA = model.EndArea
                         };
@@ -428,7 +388,7 @@
 
                     tran.CommitTran();
                 }
-                return BuildSimpleResult(0, $"鍒涘缓 鎶芥鍗�鎴愬姛锛氬崟鍙�{model.No}");
+                return BuildSimpleResult(0, $"鍒涘缓 鎶芥鍗�鎴愬姛");
             }
             catch (Exception ex) {
                 return BuildSimpleEx(ex);
@@ -437,6 +397,7 @@
 
         public static SimpleResult QualifiedBack(QualifiedBackInfo model) {
             var db = DbHelper.GetDbClient();
+
             try {
 
                 var cgDetail = db.Queryable<TN_CG_Detail>()
@@ -549,6 +510,34 @@
             }
         }
 
+        public static SimpleResult RestBack(RestBackInfo model) {
+            var db = DbHelper.GetDbClient();
+
+            try {
+                var locCntrRel = db.Queryable<TN_Loc_Container>()
+                    .Where(c => c.S_LOC_CODE == model.StartLoc)
+                    .First();
+
+                if (locCntrRel == null) {
+                    return BuildSimpleResult(2, $"璧风偣璐т綅 {model.StartLoc}");
+                }
+
+                var endLoc = db.Queryable<TN_Location, TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE)
+                    .Where((l, c) => c.S_CNTR_TYPE == locCntrRel.S_CNTR_TYPE)
+                    .First();
+
+                if (endLoc == null) {
+                    return BuildSimpleResult(3, $"涓嶅瓨鍦ㄥ悎閫傜殑缁堢偣璐т綅鍙互鍥炲簱");
+                }
+
+                return TaskHelper.SimpleCreateTask(locCntrRel.S_LOC_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, TaskName.灏剧鍥炲簱);
+            }
+            catch (Exception ex) {
+
+                return BuildSimpleEx(ex);
+            }
+        }
+
         #endregion
 
         #region Mobox 鍔熻兘
@@ -598,7 +587,7 @@
                         S_ITEM_CODE = model.ItemCode,
                         S_BATCH_NO = model.BatchNo,
                         F_QTY = model.Qty,
-                        F_OUT_QTY = cgDetailList.Sum(a => a.F_QTY),
+                        F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY),
                         S_END_AREA = model.EndArea
                     };
 
@@ -659,7 +648,7 @@
                         S_ITEM_CODE = model.ItemCode,
                         S_BATCH_NO = model.BatchNo,
                         F_QTY = model.Qty,
-                        F_OUT_QTY = cgDetailList.Sum(a => a.F_QTY),
+                        F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY),
                         S_END_AREA = model.EndArea
                     };
 
@@ -685,8 +674,8 @@
 
             try {
                 var targetCg = db.Queryable<TN_CG_Detail>().Where(a => a.S_ITEM_CODE == model.ItemCode
-                && a.F_QTY > targetNum).
-                OrderBy(a => a.F_QTY, OrderByType.Asc).First();
+                && a.N_QTY > targetNum).
+                OrderBy(a => a.N_QTY, OrderByType.Asc).First();
                 if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠�                 {
                     result.Add(targetCg);
@@ -695,12 +684,12 @@
 
                 // NOTE 鏍规嵁鎬婚噺閫塪etail鏃讹紝鏄惁闇�鑰冭檻璐т綅鐨勯珮浣庯紵
                 var sortedMaterials = db.Queryable<TN_CG_Detail, TN_Loc_Container>((d, c) => d.S_CNTR_CODE == c.S_CNTR_CODE)
-                    .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.F_QTY > 0)
+                    .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.N_QTY > 0)
                     .Where((d, c) => c.S_CNTR_TYPE == model.CntrType)
                     .Where(d => (model.ForcedOut && d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸")
                         || (!model.ForcedOut && (d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸"
                         || d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮")))
-                    .OrderBy(d => d.F_QTY, OrderByType.Desc)
+                    .OrderBy(d => d.N_QTY, OrderByType.Desc)
                     .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList();
 
                 if (sortedMaterials.Count == 0)//娌℃湁婊¤冻鏉′欢鐨�@@ -710,13 +699,13 @@
 
                 float countNum = 0;
                 foreach (var mat in sortedMaterials) {
-                    countNum += mat.F_QTY;
+                    countNum += mat.N_QTY;
                     result.Add(mat);
                     if (countNum >= targetNum) {
                         break;
                     }
                 }
-                if (result.Sum(a => a.F_QTY) >= targetNum) {
+                if (result.Sum(a => a.N_QTY) >= targetNum) {
                     return result;
                 }
                 else {
@@ -729,6 +718,64 @@
             }
         }
 
+        /// <summary>
+        /// 绉诲簱-鍒涘缓绉诲簱浠诲姟(WMS)
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static SimpleResult CreateShiftOrder(CreateShiftOrderInfo model) {
+            var db = DbHelper.GetDbClient();
+            try {
+                var locCntrRelList = db.Queryable<TN_Loc_Container, TN_CG_Detail>((c, d) => c.S_CNTR_CODE == d.S_CNTR_CODE)
+                    .Where((c, d) => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.ItemCode)
+                    .ToList();
+
+                if (locCntrRelList.Count == 0) {
+                    return BuildSimpleResult(2, "娌℃湁鎵惧埌寰呯Щ搴撶殑鐗╂枡");
+                }
+
+                // 缁戝畾鎿嶄綔锛氭彃鍏ュ嚭搴撳崟銆佹墍鏈夌殑鍑哄簱鍗曟槑缁�+                using (var tran = db.Ado.UseTran()) {
+
+                    var order = new TN_Shift_Order {
+                        S_NO = GenerateOrderNo("绉诲簱鍗曞彿", "SN"),
+                        S_ITEM_CODE = model.ItemCode,
+                        //S_ITEM_NAME = model.ItemName,
+                        S_BATCH_NO = model.BatchNo,
+                        N_COUNT = locCntrRelList.Count,
+                        S_END_AREA = model.EndArea,
+                    };
+
+                    if (db.Insertable<TN_Shift_Order>(order).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(2, "鐢熸垚 绉诲簱鍗�澶辫触锛� + JsonConvert.SerializeObject(order));
+                    }
+
+                    foreach (var locCntrRel in locCntrRelList) {
+                        var detail = new TN_Shift_Detail {
+                            S_NO = order.S_NO,
+                            S_ITEM_CODE = model.ItemCode,
+                            S_LOC_CODE = locCntrRel.S_LOC_CODE,
+                            S_CNTR_CODE = locCntrRel.S_CNTR_CODE,
+                            S_BATCH_NO = model.BatchNo,
+                            S_END_AREA = model.EndArea
+                        };
+
+                        if (db.Insertable<TN_Shift_Detail>(detail).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            return BuildSimpleResult(3, "鐢熸垚 绉诲簱鍗曟槑缁�澶辫触锛� + JsonConvert.SerializeObject(detail));
+                        }
+                    }
+
+                    tran.CommitTran();
+                }
+                return BuildSimpleResult(0, $"鍒涘缓 绉诲簱鍗�鎴愬姛");
+            }
+            catch (Exception ex) {
+                return BuildSimpleEx(ex);
+            }
+        }
+
         private static string GenerateOrderNo(string snType, string prefix) {
             var id = SysHelper.GetSerialNumber(snType, prefix);
             var date = DateTime.Now.ToString("yyMMdd");

--
Gitblit v1.9.1