From 63e94e068622d4ef843cee0d19d4f2d231316304 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期五, 25 七月 2025 17:20:38 +0800
Subject: [PATCH] 完善查询语句, 日志记录的封装

---
 api/ApiHelper.cs |  183 ++++++++++++++++++++++-----------------------
 1 files changed, 89 insertions(+), 94 deletions(-)

diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index 35fe089..7328525 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -26,6 +26,7 @@
         /// <returns></returns>
         public static SimpleResult GoodpackOffline(GoodpackOfflineInfo model) {
             var db = new SqlHelper<object>().GetInstance();
+            var (ok, msg) = (false, string.Empty);
 
             var taskInfo = ETask.M婊$涓嬬嚎鍏ュ簱.Info();
             const string preLog = "API:婊$涓嬬嚎鍏ュ簱:";
@@ -38,34 +39,34 @@
 
                 // 妫�煡璐у搧瀹瑰櫒琛�鏄惁宸茬粡瀛樺湪璐存爣鏈轰紶閫掔殑寰呭叆搴撶墿鏂欎俊鎭�                 // TODO:鏁伴噺,瑙勬牸鏄惁涔熷弬涓庢瘮瀵癸紵
-                var cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮").First();
+                var cgDetail = db.Queryable<TN_CG_Detail>()
+                    .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo 
+                             && d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮").First();
                 if (cgDetail == null) {
-                    return NewSimpleResult(1, preLog + $"娌℃湁鍦╗璐у搧鏄庣粏琛╙涓壘鍒癧鐗╂枡缂栫爜='{model.ItemCode}',鎵规鍙�'{model.BatchNo}']鐨勭墿鏂�璇锋鏌�PDA鎵爜鐗╂枡淇℃伅涓庤创鏍囨満浼犻�鐨勪俊鎭槸鍚︿竴鑷�瑕佹眰:鐗╂枡鐘舵�='寰呮'");
+                    return NewSimpleResult(1, preLog + LogMsg.CgDetailNotFound(item: model.ItemCode) + $"鐗╂枡鐘舵�='寰呮';" +
+                        $"璇锋鏌�PDA鎵爜鐗╂枡淇℃伅涓庤创鏍囨満浼犻�鐨勪俊鎭槸鍚︿竴鑷�!");
                 }
 
-                // 鏌ヨ璧风偣璐т綅:鏁伴噺=0
-                var startLoc = QueryHelper.GetLoc(db, 0, model.StartLoc, taskInfo.StartAreas, 0).First();
+                var startLoc = db.Queryable<TN_Location>().Where(DbExpr.StartLocUnbind(model.StartLoc, taskInfo.StartAreas)).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(2, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'!瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)}");
+                    return NewSimpleResult(2, preLog + LogMsg.StartLocUnbindNotFound(model.StartLoc, taskInfo.StartAreas));
                 }
 
                 // 鍜屾弧鎵樹笅绾垮叆搴撶殑閫昏緫涓�嚧,鐢变簬瀹瑰櫒绉诲姩涓嶄細鏇存敼缁戝畾淇℃伅,鎵�互蹇呴』鍒犻櫎鏃ф暟鎹�                 var old = WCSHelper.GetLocCntrCg(cgDetail.S_CNTR_CODE, skipCgDetail: true);
 
-                // 缁戝畾璐т綅瀹瑰櫒,璧风偣璐т綅褰撳墠鏁伴噺=1
                 var locCntrRel = WCSHelper.BindLocCntr(startLoc, cgDetail.S_CNTR_CODE);
                 locCntrRel.S_CNTR_TYPE = cntrType;
 
-                // 鏌ヨ缁堢偣璐т綅
-                // Order:鎸夎揣浣嶅眰鏁�浠庡皬鍒板ぇ鎺掑垪
-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER }).First();
+                var endLoc = db.Queryable<TN_Location>().Where(DbExpr.EndLoc(areas: taskInfo.EndAreas))
+                    .OrderBy(l => new { l.N_LAYER }).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯={LogObject(taskInfo.EndAreas)}");
+                    return NewSimpleResult(3, preLog + LogMsg.EndLocNotFound(areas: taskInfo.EndAreas));
                 }
 
                 var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
-
-                var (ok, msg) = DbTranHelper.CreateTask(new CreateTaskObj {
+                
+                (ok, msg) = DbTran.CreateTask(new CreateTaskObj {
                     Old = old,
                     New = new LocCntrCg { LocCntrRel = locCntrRel },
                     StartLocToUpdate = startLoc,
@@ -76,6 +77,7 @@
             }
             catch (Exception ex) {
                 return NewSimpleResult(ex, preLog);
+                
             }
         }
 
@@ -86,6 +88,7 @@
         /// <returns></returns>
         public static SimpleResult EmptyInboundPallet(EmptyInboundInfo model) {
             var db = new SqlHelper<object>().GetInstance();
+            var (ok, msg) = (false, string.Empty);
 
             var taskInfo = ETask.K绌烘墭鍏ュ簱.Info();
             const string preLog = "API:绌烘墭鍏ュ簱:";
@@ -93,38 +96,36 @@
 
             try {
                 // 鏌ヨ璧风偣璐т綅:鏁伴噺=0
-                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
+                var startLoc = db.Queryable<TN_Location>().Where(DbExpr.StartLocUnbind(model.StartLoc, taskInfo.StartAreas)).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'!瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=0;鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)}");
+                    return NewSimpleResult(2, preLog + LogMsg.StartLocUnbindNotFound(model.StartLoc, taskInfo.StartAreas));
                 }
 
                 // 鏌ヨ瀹瑰櫒琛�瀹瑰櫒绫诲瀷瀛楁
-                var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == model.CntrCode).First();
-                if (cntr == null) {
-                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�");
-                }
-                if (cntr.S_TYPE != cntrType) {
-                    return NewSimpleResult(3, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷涓�{cntr.S_TYPE}',涓庤緭鍏ョ殑瀹瑰櫒绫诲瀷'{cntrType}'涓嶅悓!");
+                (ok, msg) = WMSHelper.CheckCntrType(model.CntrCode, cntrType, out var cntr);
+                if (!ok) {
+                    return NewSimpleResult(3, preLog + msg);
                 }
                 
                 // 绌虹鍏ュ簱鏃�濡傛灉瀛樺湪鏃х殑缁戝畾鏁版嵁,鍒犻櫎
                 var old = WCSHelper.GetLocCntrCg(model.CntrCode);
 
-                // 缁戝畾璐т綅瀹瑰櫒,璧风偣璐т綅褰撳墠鏁伴噺=1
+                // 缁戝畾璐т綅瀹瑰櫒
                 var locCntrRel = WCSHelper.BindLocCntr(startLoc, cntr.S_CODE);
                 locCntrRel.S_CNTR_TYPE = cntrType;
 
                 // 鏌ヨ缁堢偣璐т綅
                 // Order:灞傛暟浠庝綆鍒伴珮,琛�鍒�-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER, l.N_ROW, l.N_COL }).First();
+                var endLoc = db.Queryable<TN_Location>().Where(DbExpr.EndLoc(areas: taskInfo.EndAreas))
+                    .OrderBy(l => new { l.N_LAYER, l.N_ROW, l.N_COL }).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=0;鎵�湪搴撳尯={LogObject(taskInfo.EndAreas)}");
+                    return NewSimpleResult(3, preLog + LogMsg.EndLocNotFound(areas: taskInfo.EndAreas));
                 }
 
                 // 璧风偣缁堢偣涓婇攣,鍒涘缓浠诲姟
                 var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
 
-                var (ok, msg) = DbTranHelper.CreateTask(new CreateTaskObj {
+                (ok, msg) = DbTran.CreateTask(new CreateTaskObj {
                     Old = old,
                     New = new LocCntrCg { LocCntrRel = locCntrRel },
                     StartLocToUpdate = startLoc,
@@ -144,44 +145,39 @@
         /// <returns></returns>
         public static SimpleResult EmptyInboundGoodpack(EmptyInboundInfo model) {
             var db = new SqlHelper<object>().GetInstance();
+            var (ok, msg) = (false, string.Empty);
 
             var taskInfo = ETask.K绌虹鍏ュ簱.Info();
             const string preLog = "API:绌虹鍏ュ簱:";
             const string cntrType = "濂借繍绠�;
 
             try {
-                // 鏌ヨ璧风偣璐т綅:鏁伴噺=0
-                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
+                var startLoc = db.Queryable<TN_Location>().Where(DbExpr.StartLocUnbind(model.StartLoc, taskInfo.StartAreas)).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'!瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=0;鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)}");
+                    return NewSimpleResult(2, preLog + LogMsg.StartLocUnbindNotFound(model.StartLoc, taskInfo.StartAreas));
                 }
 
                 // 鏌ヨ瀹瑰櫒琛�瀹瑰櫒绫诲瀷瀛楁
-                var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == model.CntrCode).First();
-                if (cntr == null) {
-                    return NewSimpleResult(1, $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�");
-                }
-                if (cntr.S_TYPE != cntrType) {
-                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷鏄�{cntr.S_TYPE},涓嶆槸'{cntrType}'!");
+                (ok, msg) = WMSHelper.CheckCntrType(model.CntrCode, cntrType, out var cntr);
+                if (!ok) {
+                    return NewSimpleResult(3, preLog + msg);
                 }
 
                 // 绌虹鍏ュ簱鏃�濡傛灉瀛樺湪鏃х殑缁戝畾鏁版嵁,鍒犻櫎
                 var old = WCSHelper.GetLocCntrCg(model.CntrCode);
 
-                // 缁戝畾璐т綅瀹瑰櫒,璧风偣璐т綅褰撳墠鏁伴噺=1
                 var locCntrRel = WCSHelper.BindLocCntr(startLoc, model.CntrCode);
                 locCntrRel.S_CNTR_TYPE = cntrType;
 
-                // 鏌ヨ缁堢偣璐т綅
-                // Order:灞傛暟浠庝綆鍒伴珮,琛�鍒�-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER, l.N_ROW, l.N_COL }).First();
+                var endLoc = db.Queryable<TN_Location>().Where(DbExpr.EndLoc(areas: taskInfo.EndAreas))
+                    .OrderBy(l => new { l.N_LAYER, l.N_ROW, l.N_COL }).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=0;鎵�湪搴撳尯={LogObject(taskInfo.EndAreas)}");
+                    return NewSimpleResult(3, preLog + LogMsg.EndLocNotFound(areas: taskInfo.EndAreas));
                 }
 
                 var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
 
-                var (ok, msg) = DbTranHelper.CreateTask(new CreateTaskObj {
+                (ok, msg) = DbTran.CreateTask(new CreateTaskObj {
                     Old = old,
                     New = new LocCntrCg { LocCntrRel = locCntrRel },
                     StartLocToUpdate = startLoc,
@@ -202,6 +198,7 @@
         /// <returns></returns>
         public static SimpleResult EmptyOnlinePallet(EmptyOnlinePalletInfo model) {
             var db = new SqlHelper<object>().GetInstance();
+            var (ok, msg) = (false, string.Empty);
 
             var taskInfo = ETask.K绌烘墭涓婄嚎鍑哄簱.Info();
             const string preLog = "API:绌烘墭涓婄嚎鍑哄簱:";
@@ -209,12 +206,9 @@
 
             try {
                 // 鏌ヨ瀹瑰櫒琛�瀹瑰櫒绫诲瀷瀛楁
-                var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == model.CntId).First();
-                if (cntr == null) {
-                    return NewSimpleResult(1, $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�");
-                }
-                if (cntr.S_TYPE != cntrType) {
-                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷鏄�{cntr.S_TYPE},涓嶆槸'{cntrType}'!");
+                (ok, msg) = WMSHelper.CheckCntrType(model.CntId, cntrType, out var cntr);
+                if (!ok) {
+                    return NewSimpleResult(1, preLog + msg);
                 }
 
                 var needUpdateContainer = false;
@@ -230,15 +224,17 @@
                     return NewSimpleResult(3, $"瀹瑰櫒'{model.CntId}'宸茬粡涓庣墿鏂欑被鍨�{cntr.S_SPEC}'缁戝畾,鏃犳硶鐢ㄤ簬瑁呰浇鐗╂枡'{model.ItemCode}'!");
                 }
 
-                var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE).Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where((l, c) => taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1 && c.S_CNTR_CODE == model.CntId && c.S_CNTR_TYPE == cntrType).First();
+                var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE)
+                    .Where(DbExpr.StartLoc(areas: taskInfo.StartAreas))
+                    .Where((l, c) => c.S_CNTR_CODE == model.CntId && c.S_CNTR_TYPE == cntrType).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=1;鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)},缁戝畾瀹瑰櫒缂栫爜='{model.CntId}',缁戝畾瀹瑰櫒绫诲瀷='{cntrType}'");
+                    return NewSimpleResult(3, preLog + LogMsg.StartLocNotFound(areas: taskInfo.StartAreas) +
+                        $"缁戝畾瀹瑰櫒缂栫爜='{model.CntId}';缁戝畾瀹瑰櫒绫诲瀷='{cntrType}';");
                 }
 
-                // 鏌ヨ缁堢偣璐т綅
-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
+                var endLoc = db.Queryable<TN_Location>().Where(DbExpr.EndLoc(areas: taskInfo.EndAreas)).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(5, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=0;鎵�湪搴撳尯={LogObject(taskInfo.EndAreas)}");
+                    return NewSimpleResult(5, preLog + LogMsg.EndLocNotFound(areas: taskInfo.EndAreas));
                 }
 
                 var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, model.CntId, taskInfo.TaskName);
@@ -251,7 +247,7 @@
                     cntr = null;
                 }
 
-                var (ok, msg) = DbTranHelper.CreateTask(new CreateTaskObj {
+                (ok, msg) = DbTran.CreateTask(new CreateTaskObj {
                     ContainerToUpdate = cntr,
                     StartLocToUpdate = startLoc,
                     EndLocToUpdate = endLoc,
@@ -271,34 +267,36 @@
         /// <returns></returns>
         public static SimpleResult EmptyOnlineGoodpack(EmptyOnlineGoodpackInfo model) {
             var db = new SqlHelper<object>().GetInstance();
+            var (ok, msg) = (false, string.Empty);
 
             var taskInfo = ETask.K绌虹涓婄嚎鍑哄簱.Info();
             const string preLog = "API:绌虹涓婄嚎鍑哄簱:";
             const string cntrType = "濂借繍绠�;
 
             try {
-                var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == model.CntId).First();
-                if (cntr == null) {
-                    return NewSimpleResult(1, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�");
-                }
-                if (cntr.S_TYPE != cntrType) {
-                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷='{cntr.S_TYPE}',涓嶆槸'{cntrType}'!");
+                // 鏌ヨ瀹瑰櫒琛�瀹瑰櫒绫诲瀷瀛楁
+                (ok, msg) = WMSHelper.CheckCntrType(model.CntId, cntrType, out var cntr);
+                if (!ok) {
+                    return NewSimpleResult(3, preLog + msg);
                 }
 
-                var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE).Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where((l, c) => taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1 && c.S_CNTR_CODE == model.CntId && c.S_CNTR_TYPE == cntrType).First();
+                var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE)
+                    .Where(DbExpr.StartLoc(areas: taskInfo.StartAreas))
+                    .Where((l, c) => c.S_CNTR_CODE == model.CntId && c.S_CNTR_TYPE == cntrType).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(2, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=1,鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)},缁戝畾瀹瑰櫒缂栫爜='{model.CntId}',缁戝畾瀹瑰櫒绫诲瀷='{cntrType}'");
+                    return NewSimpleResult(2, preLog + preLog + LogMsg.StartLocNotFound(areas: taskInfo.StartAreas) +
+                        $"缁戝畾瀹瑰櫒缂栫爜='{model.CntId}';缁戝畾瀹瑰櫒绫诲瀷='{cntrType}';");
                 }
 
                 var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y")
                     .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯={LogObject(taskInfo.EndAreas)}");
+                    return NewSimpleResult(3, preLog + LogMsg.EndLocNotFound(areas: taskInfo.EndAreas));
                 }
 
                 var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, model.CntId, taskInfo.TaskName);
 
-                var (ok, msg) = DbTranHelper.CreateTask(new CreateTaskObj {
+                (ok, msg) = DbTran.CreateTask(new CreateTaskObj {
                     StartLocToUpdate = startLoc,
                     EndLocToUpdate = endLoc,
                     TaskToInsert = task,
@@ -317,6 +315,7 @@
         /// <returns></returns>
         public static SimpleResult QualifiedBack(QualifiedBackInfo model) {
             var db = new SqlHelper<object>().GetInstance();
+            var (ok, msg) = (false, string.Empty);
 
             var taskInfo = ETask.C鎶芥鍚堟牸鍥炲簱.Info();
             const string preLog = "API:鎶芥鍚堟牸鍥炲簱";
@@ -325,33 +324,32 @@
                 var cgDetail = db.Queryable<TN_CG_Detail>()
                     .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode).First();
                 if (cgDetail == null) {
-                    return NewSimpleResult(2, preLog + "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡:" + LogObject(model));
+                    return NewSimpleResult(2, preLog + LogMsg.CgDetailNotFound(item: model.ItemCode, cntr: model.CntrCode));
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First();
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, preLog + $"瀹瑰櫒{model.CntrCode}鍦ㄨ揣浣嶅鍣ㄥ叧绯昏〃涓笉瀛樺湪");
+                    return NewSimpleResult(3, preLog + LogMsg.LocCntrRelNotFound(cntr: cgDetail.S_CNTR_CODE));
                 }
 
-                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_CODE == locCntrRel.S_LOC_CODE && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1).First();
+                var startLoc = db.Queryable<TN_Location>().Where(DbExpr.StartLoc(locCntrRel.S_LOC_CODE, taskInfo.StartAreas)).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(4, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=1,鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)}");
+                    return NewSimpleResult(4, preLog + LogMsg.StartLocNotFound(locCntrRel.S_LOC_CODE, taskInfo.StartAreas));
                 }
 
                 var endAreas = locCntrRel.S_CNTR_CODE == "鎵樼洏" ? taskInfo.EndAreas_Pallet : taskInfo.EndAreas_Goodpack;
-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && endAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
+                var endLoc = db.Queryable<TN_Location>().Where(DbExpr.EndLoc(areas: endAreas)).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯={LogObject(endAreas)}");
+                    return NewSimpleResult(3, preLog + LogMsg.EndLocNotFound(areas: endAreas));
                 }
 
                 cgDetail.N_ITEM_STATE = 0;
                 cgDetail.S_ITEM_STATE = "鍚堟牸";
                 cgDetail.T_MODIFY = DateTime.Now;
 
-                var cntId = locCntrRel.S_CNTR_CODE;
-                var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, cntId, taskInfo.TaskName);
+                var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
 
-                var (ok, msg) = DbTranHelper.CreateTask(new CreateTaskObj {
+                (ok, msg) = DbTran.CreateTask(new CreateTaskObj {
                     CgDetailToUpdate = cgDetail,
                     StartLocToUpdate = startLoc,
                     EndLocToUpdate = endLoc,
@@ -371,6 +369,7 @@
         /// <returns></returns>
         public static SimpleResult UnqualifiedShift(UnqualifiedShiftInfo model) {
             var db = new SqlHelper<object>().GetInstance();
+            var (ok, msg) = (false, string.Empty);
 
             var taskInfo = ETask.C鎶芥涓嶅悎鏍肩Щ搴�Info();
             const string preLog = "API:鎶芥涓嶅悎鏍肩Щ搴�";
@@ -383,23 +382,22 @@
                 var cgDetail = db.Queryable<TN_CG_Detail>()
                     .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode).First();
                 if (cgDetail == null) {
-                    return NewSimpleResult(2, preLog + $"娌℃湁鍦╗鐗╂枡鏄庣粏琛╙涓壘鍒扮墿鏂�瑕佹眰:鐗╂枡缂栫爜='{model.ItemCode}',瀹瑰櫒缂栫爜='{model.CntrCode}'");
+                    return NewSimpleResult(2, preLog + LogMsg.CgDetailNotFound(item: model.ItemCode, cntr: model.CntrCode));
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First();
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, preLog + $"鍦╗璐т綅瀹瑰櫒鍏崇郴琛╙涓病鏈夋壘鍒板鍣�{model.CntrCode}'!");
+                    return NewSimpleResult(3, preLog + LogMsg.LocCntrRelNotFound(cntr: cgDetail.S_CNTR_CODE));
                 }
 
-                // 鏌ヨ璧风偣璐т綅:鏁伴噺=1
-                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_CODE == locCntrRel.S_LOC_CODE && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1).First();
+                var startLoc = db.Queryable<TN_Location>().Where(DbExpr.StartLoc(locCntrRel.S_LOC_CODE, taskInfo.StartAreas)).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{locCntrRel.S_LOC_CODE}'!瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=1;鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)}");
+                    return NewSimpleResult(1, preLog + LogMsg.StartLocNotFound(locCntrRel.S_LOC_CODE, taskInfo.StartAreas));
                 }
 
-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_AREA_CODE == model.EndArea && l.N_CURRENT_NUM == 0).First();
+                var endLoc = db.Queryable<TN_Location>().Where(DbExpr.EndLoc(areas: new List<string> { model.EndArea })).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯='{model.EndArea}'");
+                    return NewSimpleResult(3, preLog + LogMsg.EndLocNotFound(areas: new List<string> { model.EndArea }));
                 }
 
                 cgDetail.N_ITEM_STATE = 2;
@@ -407,7 +405,7 @@
 
                 var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
 
-                var (ok, msg) = DbTranHelper.CreateTask(new CreateTaskObj {
+                (ok, msg) = DbTran.CreateTask(new CreateTaskObj {
                     CgDetailToUpdate = cgDetail,
                     StartLocToUpdate = startLoc,
                     EndLocToUpdate = endLoc,
@@ -427,30 +425,31 @@
         /// <returns></returns>
         public static SimpleResult RestBack(RestBackInfo model) {
             var db = new SqlHelper<object>().GetInstance();
+            var (ok, msg) = (false, string.Empty);
 
             var taskInfo = ETask.W灏炬枡鍥炲簱.Info();
             const string preLog = "API:灏炬枡鍥炲簱:";
             
             try {
-                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_CODE == model.StartLoc && l.N_CURRENT_NUM == 1).First();
+                var startLoc = db.Queryable<TN_Location>().Where(DbExpr.StartLoc(model.StartLoc)).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(2, $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'!瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=1");
+                    return NewSimpleResult(2, LogMsg.StartLocNotFound(model.StartLoc));
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_LOC_CODE == model.StartLoc).First();
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅{model.StartLoc}鎵�粦瀹氱殑瀹瑰櫒");
+                    return NewSimpleResult(3, preLog + LogMsg.LocCntrRelNotFound(loc: model.StartLoc));
                 }
 
                 var endAreas = locCntrRel.S_CNTR_CODE == "鎵樼洏" ? taskInfo.EndAreas_Pallet : taskInfo.EndAreas_Goodpack;
-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && endAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
+                var endLoc = db.Queryable<TN_Location>().Where(DbExpr.EndLoc(areas: endAreas)).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯={LogObject(endAreas)}");
+                    return NewSimpleResult(3, preLog + LogMsg.EndLocNotFound(areas: endAreas));
                 }
 
                 var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
 
-                var (ok, msg) = DbTranHelper.CreateTask(new CreateTaskObj {
+                (ok, msg) = DbTran.CreateTask(new CreateTaskObj {
                     StartLocToUpdate = startLoc,
                     EndLocToUpdate = endLoc,
                     TaskToInsert = task,
@@ -469,6 +468,7 @@
         /// <returns></returns>
         public static SimpleResult FinishedOutbound(FinishedOutboundInfo model) {
             var db = new SqlHelper<object>().GetInstance();
+            var (ok, msg) = (false, string.Empty);
 
             var taskInfo = ETask.C鎴愬搧鑳跺嚭搴�Info();
             const string preLog = "API:鎴愬搧鑳跺嚭搴�";
@@ -671,6 +671,8 @@
         /// <returns></returns>
         public static MesResult CgInfoSync(CgInfoSyncInfo model) {
             var db = new SqlHelper<object>().GetInstance();
+            var (ok, msg) = (false, string.Empty);
+
             const string preLog = "API:鍗氬疄涓嬪彂鐗╂枡淇℃伅:";
             const string cntrType = "濂借繍绠�;
 
@@ -688,16 +690,9 @@
                     return NewMesResult(400, preLog + $"鐗╂枡鏁伴噺'{model.ItemNum}'涓嶅悎娉�瑕佹眰:鐗╂枡鏁伴噺锛�");
                 }
 
-                // TEMP 鐩墠娴佺▼:瀵瑰崥瀹炰笅鍙戠殑淇℃伅涔熻繘琛屾鏌�鏈壘鍒板氨鎶ラ敊,鍚庨潰鏈夐渶姹傚啀鏇存敼
-                var cntr = db.Queryable<TN_Container>()
-                    .Where(c => c.S_CODE == model.CntrCode) // 瀵逛簬鍓嶅彴绋嬪簭鑰岃█,S_CODE灏辨槸涓婚敭,缁存姢鏃跺繀瀹氬敮涓�-                    .First();
-
-                if (cntr == null) {
-                    return NewMesResult(1, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�");
-                }
-                if (cntr.S_TYPE != cntrType) {
-                    return NewMesResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷涓�{cntr.S_TYPE}',涓庡綋鍓嶅鍣ㄧ被鍨�{cntrType}'涓嶅悓!");
+                (ok, msg) = WMSHelper.CheckCntrType(model.CntrCode, cntrType, out var cntr);
+                if (!ok) {
+                    return NewMesResult(1, preLog + msg);
                 }
 
                 // 灏嗕笅鍙戠殑淇℃伅鍏堝瓨鍌ㄥ埌CG琛ㄤ腑 (姝ゆ椂鎵樼洏娌℃湁涓庝骇绾垮鐨勮揣浣嶇粦瀹� 

--
Gitblit v1.9.1