From 0ed390381862dea0c7fd0210d16017eb09f12da4 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期三, 30 七月 2025 17:27:27 +0800
Subject: [PATCH] 封装插入容器表等业务代码, 修复部分底层旧框架方法问题

---
 wms/SYSHelper.cs       |   29 ++++-
 wms/WMSHelper.cs       |   77 ++++++++++++++
 core/WCSCore.cs        |    6 
 models/TN_Task.cs      |    1 
 wms/WCSHelper.cs       |   25 ++--
 util/SqlHelper.cs      |   41 +++----
 wms/DbExpr.cs          |   34 +++---
 api/ForceController.cs |    9 -
 .editorconfig          |   12 ++
 api/AgvController.cs   |    3 
 util/Settings.cs       |    8 
 api/ApiHelper.cs       |   17 +--
 wms/LogMsg.cs          |   32 +++---
 wms/DbTran.cs          |    4 
 14 files changed, 189 insertions(+), 109 deletions(-)

diff --git a/.editorconfig b/.editorconfig
index fc9bad4..46b58d0 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -70,7 +70,7 @@
 csharp_indent_labels = one_less_than_current
 
 dotnet_sort_system_directives_first = true
-dotnet_separate_import_directive_groups = true
+dotnet_separate_import_directive_groups = 
 csharp_prefer_simple_using_statement = true:suggestion
 csharp_prefer_braces = true:silent
 csharp_style_namespace_declarations = block_scoped:silent
@@ -94,6 +94,12 @@
 csharp_style_prefer_index_operator = true:suggestion
 csharp_style_prefer_range_operator = true:suggestion
 csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
+csharp_style_prefer_tuple_swap = true:suggestion
+csharp_style_prefer_utf8_string_literals = true:suggestion
+csharp_style_inlined_variable_declaration = true:suggestion
+csharp_style_deconstructed_variable_declaration = true:suggestion
+csharp_style_unused_value_assignment_preference = discard_variable:suggestion
+csharp_style_unused_value_expression_statement_preference = discard_variable:silent
 
 [*.vb]
 #### 鍛藉悕鏍峰紡 ####
@@ -175,4 +181,6 @@
 dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
 dotnet_style_prefer_compound_assignment = true:suggestion
 dotnet_style_prefer_simplified_interpolation = true:suggestion
-dotnet_style_namespace_match_folder = true:suggestion
\ No newline at end of file
+dotnet_style_namespace_match_folder = true:suggestion
+dotnet_style_predefined_type_for_locals_parameters_members = true:silent
+dotnet_style_predefined_type_for_member_access = true:silent
\ No newline at end of file
diff --git a/api/AgvController.cs b/api/AgvController.cs
index e6b2891..d178940 100644
--- a/api/AgvController.cs
+++ b/api/AgvController.cs
@@ -6,12 +6,9 @@
 using System.Security.Cryptography;
 using System.Text;
 using System.Web.Http;
-
 using HH.WCS.Mobox3.DSZSH.core;
 using HH.WCS.Mobox3.DSZSH.util;
-
 using Newtonsoft.Json;
-
 using static HH.WCS.Mobox3.DSZSH.api.ApiModel;
 using static HH.WCS.Mobox3.DSZSH.dispatch.NDC;
 
diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index 08ce187..909bdee 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -27,6 +27,7 @@
         public static SimpleResult GoodpackOffline(GoodpackOfflineInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var (ok, msg) = (false, string.Empty);
+            var obj = new CreateTaskObj();
 
             var taskInfo = ETask.M婊$涓嬬嚎鍏ュ簱.Info();
             const string preLog = "API:婊$涓嬬嚎鍏ュ簱:";
@@ -53,10 +54,9 @@
                 }
 
                 // 鍜屾弧鎵樹笅绾垮叆搴撶殑閫昏緫涓�嚧,鐢变簬瀹瑰櫒绉诲姩涓嶄細鏇存敼缁戝畾淇℃伅,鎵�互蹇呴』鍒犻櫎鏃ф暟鎹�-                var old = WCSHelper.GetLocCntrCg(cgDetail.S_CNTR_CODE, skipCgDetail: true);
+                WMSHelper.FindCntrOldInfo(obj, cgDetail.S_CNTR_CODE, skipCgDetail: true);
 
-                var locCntrRel = WCSHelper.BindLocCntr(startLoc, cgDetail.S_CNTR_CODE);
-                locCntrRel.S_CNTR_TYPE = cntrType;
+                var locCntrRel = WMSHelper.BindLocCntr(obj, startLoc, cgDetail.S_CNTR_CODE, cntrType);
 
                 var endLoc = db.Queryable<TN_Location>().Where(DbExpr.EndLoc(areas: taskInfo.EndAreas))
                     .OrderBy(l => new { l.N_LAYER }).First();
@@ -64,15 +64,8 @@
                     return NewSimpleResult(3, preLog + LogMsg.EndLocNotFound(areas: taskInfo.EndAreas));
                 }
 
-                var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
-                
-                (ok, msg) = DbTran.CreateTask(new CreateTaskObj {
-                    Old = old,
-                    New = new LocCntrCg { LocCntrRel = locCntrRel },
-                    StartLocToUpdate = startLoc,
-                    EndLocToUpdate = endLoc,
-                    TaskToInsert = task,
-                });
+                WMSHelper.CreateTask(obj, startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
+                (ok, msg) = DbTran.CreateTask(obj);
                 return NewSimpleResult(ok ? 0 : 500, preLog + msg);
             }
             catch (Exception ex) {
diff --git a/api/ForceController.cs b/api/ForceController.cs
index 8c250b5..c19181d 100644
--- a/api/ForceController.cs
+++ b/api/ForceController.cs
@@ -41,15 +41,14 @@
             const string preLog = "DEBUG:寮哄埗鍒涘缓浠诲姟:";
 
             try {
-                var startLoc = db.Queryable<TN_Location>().Where(DbExpr.StartLocUnbind(model.StartLoc, taskInfo.StartAreas)).First();
+                var startLoc = db.Queryable<TN_Location>().Where(DbExpr.LocFilter(0, model.StartLoc, null, -1)).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(2, preLog + LogMsg.StartLocUnbindNotFound(model.StartLoc, taskInfo.StartAreas));
+                    return NewSimpleResult(2, preLog + LogMsg.StartLocNotFound(model.StartLoc, null, -1));
                 }
 
-                var endLoc = db.Queryable<TN_Location>().Where(DbExpr.EndLoc(areas: taskInfo.EndAreas))
-                    .OrderBy(l => new { l.N_LAYER }).First();
+                var endLoc = db.Queryable<TN_Location>().Where(DbExpr.LocFilter(0, model.EndLoc, null, -1)).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + LogMsg.EndLocNotFound(areas: taskInfo.EndAreas));
+                    return NewSimpleResult(3, preLog + LogMsg.EndLocNotFound(model.EndLoc, null, -1));
                 }
 
                 var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, model.CntId, taskInfo.TaskName);
diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index f197ee2..26a01cd 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -58,7 +58,7 @@
             // AGV 浠诲姟 134562(7) 鐘舵�澶勭悊
             switch (model.state) {
                 case 1: // 鎵ц
-                    WCSHelper.Begin(TN_Task, model.forklift_no); // 宸叉帹閫佺殑浠诲姟鐨勭姸鎬佹敼鎴愭墽琛�+                    WCSHelper.SetTaskBegin(TN_Task, model.forklift_no); // 宸叉帹閫佺殑浠诲姟鐨勭姸鎬佹敼鎴愭墽琛�                     break;
                 case 3: // 寮�鍙栬揣
                     WCSHelper.UpdateTaskState(TN_Task, "寮�鍙栬揣"); // 浠诲姟鐘舵�鏀规垚寮�鍙栬揣
@@ -85,7 +85,7 @@
                     TaskProcess.OperateStatus(TN_Task, 6); // 缁堢偣瀹瑰櫒璐т綅缁戝畾,瑙i攣缁堢偣
                     break;
                 case 2: // 瀹屾垚
-                    WCSHelper.End(TN_Task); // 浠诲姟鐘舵�鏀规垚缁撴潫
+                    WCSHelper.SetTaskEnd(TN_Task); // 浠诲姟鐘舵�鏀规垚缁撴潫
 
                     //if (TN_Task.S_TYPE == TaskName.鎶芥_鍑哄簱) {
                     //    var checkCompleteTask = Task.Run(() => {
@@ -100,7 +100,7 @@
                     break;
                 case 7: // 寮傚父
                     TaskProcess.OperateStatus(TN_Task, 7); // 寮傚父澶勭悊
-                    WCSHelper.Fail(TN_Task); // 浠诲姟鐘舵�鏀规垚閿欒
+                    WCSHelper.SetTaskFail(TN_Task); // 浠诲姟鐘舵�鏀规垚閿欒
                     break;
             }
 
diff --git a/models/TN_Task.cs b/models/TN_Task.cs
index 306655e..597b7d9 100644
--- a/models/TN_Task.cs
+++ b/models/TN_Task.cs
@@ -38,7 +38,6 @@
         /// 浠诲姟浼樺厛绾�         /// </summary>
         public int N_PRIORITY { get; set; }
-     
 
         public string S_EQ_TASK_CODE { get; set; }
 
diff --git a/util/Settings.cs b/util/Settings.cs
index 74721a1..b9eb8a7 100644
--- a/util/Settings.cs
+++ b/util/Settings.cs
@@ -8,8 +8,7 @@
 using Newtonsoft.Json.Linq;
 
 namespace HH.WCS.Mobox3.DSZSH.util {
-    public class Settings
-    {
+    public class Settings {
         public static string WebApiUrl { get; set; }
         public static string NdcApiUrl { get; set; }
         public static string ErpApiUrl { get; set; } // ERP 鍙嶉鎺ュ彛URL
@@ -17,7 +16,8 @@
         public static int TcpServerPort { get; set; }
         public static Config.ErpRoute ErpRoute { get; set; }
 
-        public static string SqlServer { get; set; }
+        public static SqlSugar.DbType DbType { get; set; } = SqlSugar.DbType.SqlServer;
+        public static string DbConn { get; set; }
         //public static string TcpServerIp { get; set; }
         //public static int TcpServerPort { get; set; }
         public static List<Config.ProductionLine> ProductionLines { get; set; } = new List<Config.ProductionLine>();
@@ -48,7 +48,7 @@
                 ErpApiUrl = root.ErpApiUrl;
                 ErpRoute = root.ErpRoute;
                 TcpServerPort= root.TcpServerPort;
-                SqlServer = root.SqlServer;
+                DbConn = root.SqlServer;
                 //TcpServerIp = root.TcpServerIp;
                 //TcpServerPort = root.TcpServerPort;
                 ProductionLines = root.ProductionLines;
diff --git a/util/SqlHelper.cs b/util/SqlHelper.cs
index e59332d..ebe702b 100644
--- a/util/SqlHelper.cs
+++ b/util/SqlHelper.cs
@@ -1,28 +1,22 @@
 锘縰sing System;
+using System.Collections.Generic;
 using System.Linq;
-
+using System.Linq.Expressions;
 using SqlSugar;
 
 namespace HH.WCS.Mobox3.DSZSH.util {
-    //https://www.donet5.com/Home/Doc
+    //DOC:https://www.donet5.com/Home/Doc
+    //NOTE:濡傛灉鐢∣racle鏁版嵁搴�闇�鍖匫racle.ManagedDataAccess/21.15.0,鐜netframework/4.6.2(澶柊浜�.8,鏈夌殑鏈嶅姟鍣ㄥ畨瑁呬笉涓婂幓)
+    //NOTE:SqlHelper甯鐨勫師鍥�鏄棫妗嗘灦缂栧啓浜哷Update(T model, string[] cols)`绛変唬鐮�鍙傝�HH-0014_NongFu_QingXi 鍐滃か闈掓邯)
     public class SqlHelper<T> where T : class, new() {
-        // NOTE:濡傛灉鐢∣racle鏁版嵁搴�闇�鍖匫racle.ManagedDataAccess/21.15.0,鐜netframework 4.6.2 (澶柊浜�.8鏈夌殑鏈嶅姟鍣ㄥ畨瑁呬笉涓婂幓) 
-
-        public SqlSugarClient GetInstance(string url = "") {
+        public SqlSugarClient GetInstance() {
             //鍒涘缓鏁版嵁搴撳璞�             SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() {
-                ConnectionString = string.IsNullOrEmpty(url) ? Settings.SqlServer : url,
-
-                //ConnectionString = @"Data Source=192.168.1.198\sql2008;Initial Catalog=OIMobox;User ID=sa;Password=sa@2015",
-                DbType = DbType.SqlServer,
-
-                //ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=OIMobox)));User Id=system;Password=Am123123;",
-                //DbType = DbType.Oracle,
-
+                ConnectionString = Settings.DbConn,
+                DbType = Settings.DbType,
                 IsAutoCloseConnection = true,
                 InitKeyType = InitKeyType.Attribute//浠庣壒鎬ц鍙栦富閿嚜澧炰俊鎭�             });
-
             //鐩戞帶鎵�湁瓒呰繃1绉掔殑Sql
             db.Aop.OnLogExecuted = (sql, p) => {
                 //鎵ц鏃堕棿瓒呰繃1绉�@@ -37,13 +31,11 @@
                 }
                 //鐩稿綋浜嶦F鐨�PrintToMiniProfiler
             };
-
-            // 閰嶇疆AOP鏃ュ織
+            //閰嶇疆AOP鏃ュ織
             //db.Aop.OnLogExecuting = (sql, pars) =>
             //{
-            //    Console.WriteLine(sql); // 杈撳嚭绾疭QL璇彞
+            //    Console.WriteLine(sql);//杈撳嚭绾疭QL璇彞
             //};
-
             //姣忔璁剧疆鏁板�鏃堕兘鍘婚櫎鍓嶅鍚庡绌烘牸
             db.Aop.DataExecuted = (value, entity) => {
                 entity.EntityColumnInfos.ToList().ForEach(a => {
@@ -53,13 +45,14 @@
                     }
                 });
             };
-
-            //鎹浆鎹�(ExecuteCommand鎵嶄細鎷︽埅,鏌ヨ涓嶈)
-            //db.Aop.DataExecuting = (value, entity) => {
-            //    //var val=entity.EntityColumnInfo
-            //    Console.WriteLine(entity.EntityName);
+            //璁剧疆AOP涓殑浜嬩欢澶勭悊绋嬪簭
+            //db.Aop.OnExecutingChangeSql = (sql, p) => {
+            //    // 绀轰緥锛氳嚜鍔ㄨ繃婊よ蒋鍒犻櫎鏁版嵁
+            //    if (sql.StartsWith("SELECT")) {
+            //        sql += " WHERE IsDeleted = 0";
+            //    }
+            //    return new KeyValuePair<string, SugarParameter[]>(sql, p);
             //};
-
             return db;
         }
     }
diff --git a/wms/DbExpr.cs b/wms/DbExpr.cs
index 2d1a631..36eabaa 100644
--- a/wms/DbExpr.cs
+++ b/wms/DbExpr.cs
@@ -24,12 +24,14 @@
         ///   && areas.Contains(l.S_AREA_CODE)
         ///   && l.N_CURRENT_NUM == curNum
         /// ]]></code></remarks>
-        /// <param name="lock"></param>
-        /// <param name="name"></param>
-        /// <param name="areas"></param>
-        /// <param name="curNum"></param>
+        /// <param name="lock">閿佺姸鎬�( 灏忎簬 0 鏃跺拷鐣�)</param>
+        /// <param name="name">璐т綅鍚嶇О ( 涓�null 鎴�"" 鏃跺拷鐣�)</param>
+        /// <param name="areas">鎵�湪搴撳尯鍒楄〃 ( 涓�null 鎴�[] 鏃跺拷鐣�)</param>
+        /// <param name="curNum">褰撳墠鏁伴噺 ( 灏忎簬 0 鏃跺拷鐣�)</param>
         /// <returns></returns>
-        public static Expression<Func<TN_Location, bool>> LocFilter(int @lock, string name, List<string> areas, int curNum) {
+        public static Expression<Func<TN_Location, bool>> LocFilter(int @lock = 0, string name = "", 
+            List<string> areas = null, int curNum = -1) {
+
             Expression<Func<TN_Location, bool>> expr = l => l.C_ENABLE == "Y"; // 宸插惎鐢� 
             if (@lock >= 0) {
@@ -63,8 +65,8 @@
         ///   && areas.Contains(l.S_AREA_CODE)
         ///   && l.N_CURRENT_NUM == 0
         /// ]]></code></remarks>
-        /// <param name="name"></param>
-        /// <param name="areas"></param>
+        /// <param name="name">璐т綅鍚嶇О ( 涓�null 鎴�"" 鏃跺拷鐣�)</param>
+        /// <param name="areas">鎵�湪搴撳尯鍒楄〃 ( 涓�null 鎴�[] 鏃跺拷鐣�)</param>
         /// <returns></returns>
         public static Expression<Func<TN_Location, bool>> StartLocUnbind(string name = "", List<string> areas = null) {
             return LocFilter(0, name, areas, 0);
@@ -80,11 +82,12 @@
         ///   && areas.Contains(l.S_AREA_CODE)
         ///   && l.N_CURRENT_NUM == 1
         /// ]]></code></remarks>
-        /// <param name="name"></param>
-        /// <param name="areas"></param>
+        /// <param name="name">璐т綅鍚嶇О ( 涓�null 鎴�"" 鏃跺拷鐣�)</param>
+        /// <param name="areas">鎵�湪搴撳尯鍒楄〃 ( 涓�null 鎴�[] 鏃跺拷鐣�)</param>
+        /// <param name="curNum">褰撳墠鏁伴噺 ( 灏忎簬 0 鏃跺拷鐣�)</param>
         /// <returns></returns>
-        public static Expression<Func<TN_Location, bool>> StartLoc(string name = "", List<string> areas = null) {
-            return LocFilter(0, name, areas, 1);
+        public static Expression<Func<TN_Location, bool>> StartLoc(string name = "", List<string> areas = null, int curNum = 1) {
+            return LocFilter(0, name, areas, curNum);
         }
 
         /// <summary>
@@ -97,11 +100,12 @@
         ///   && areas.Contains(l.S_AREA_CODE)
         ///   && l.N_CURRENT_NUM == 0
         /// ]]></code></remarks>
-        /// <param name="name"></param>
-        /// <param name="areas"></param>
+        /// <param name="name">璐т綅鍚嶇О ( 涓�null 鎴�"" 鏃跺拷鐣�)</param>
+        /// <param name="areas">鎵�湪搴撳尯鍒楄〃 ( 涓�null 鎴�[] 鏃跺拷鐣�)</param>
+        /// <param name="curNum">褰撳墠鏁伴噺 ( 灏忎簬 0 鏃跺拷鐣�)</param>
         /// <returns></returns>
-        public static Expression<Func<TN_Location, bool>> EndLoc(string name = "", List<string> areas = null) {
-            return LocFilter(0, name, areas, 0);
+        public static Expression<Func<TN_Location, bool>> EndLoc(string name = "", List<string> areas = null, int curNum = 0) {
+            return LocFilter(0, name, areas, curNum);
         }
     }
 }
diff --git a/wms/DbTran.cs b/wms/DbTran.cs
index ba00c68..e5b0be1 100644
--- a/wms/DbTran.cs
+++ b/wms/DbTran.cs
@@ -119,4 +119,8 @@
         public TN_CG_Detail CgDetailToUpdate { get; set; } = null;
     }
 
+    public class DbTranObj {
+        public List<TN_Location> LocListToUpdate { get; set; }
+    }
+
 }
diff --git a/wms/LogMsg.cs b/wms/LogMsg.cs
index 11848f4..a0dd762 100644
--- a/wms/LogMsg.cs
+++ b/wms/LogMsg.cs
@@ -24,7 +24,7 @@
         /// <param name="areas">鎵�湪搴撳尯鍒楄〃 ( 涓�null 鎴�[] 鏃跺拷鐣�)</param>
         /// <param name="curNum">褰撳墠鏁伴噺 ( 灏忎簬 0 鏃跺拷鐣�)</param>
         /// <returns></returns>
-        public static string LocNotFound(string desc, int @lock, string name, List<string> areas, int curNum) {
+        public static string LocNotFound(string desc = "", int @lock = 0, string name = "", List<string> areas = null, int curNum = -1) {
             var res = $"娌℃湁鎵惧埌{desc}璐т綅!!瑕佹眰:";
 
             if (@lock >= 0) {
@@ -44,6 +44,16 @@
         }
 
         /// <summary>
+        /// <c>"娌℃湁鎵惧埌璧风偣璐т綅!!瑕佹眰:閿佺姸鎬�'鏃�;璐т綅鍚嶇О='name';鎵�湪搴撳尯=[areas];褰撳墠瀹瑰櫒鏁伴噺=0;"</c>
+        /// </summary>
+        /// <param name="name">璐т綅鍚嶇О ( 涓�null 鎴�"" 鏃跺拷鐣�)</param>
+        /// <param name="areas">鎵�湪搴撳尯鍒楄〃 ( 涓�null 鎴�[] 鏃跺拷鐣�)</param>
+        /// <returns></returns>
+        public static string StartLocUnbindNotFound(string name = "", List<string> areas = null) {
+            return LocNotFound("璧风偣", 0, name, areas, 0);
+        }
+
+        /// <summary>
         /// <c>"娌℃湁鎵惧埌璧风偣璐т綅!!瑕佹眰:閿佺姸鎬�'鏃�;璐т綅鍚嶇О='name';鎵�湪搴撳尯=[areas];褰撳墠瀹瑰櫒鏁伴噺=curNum;"</c>
         /// </summary>
         /// <param name="name">璐т綅鍚嶇О ( 涓�null 鎴�"" 鏃跺拷鐣�)</param>
@@ -52,16 +62,6 @@
         /// <returns></returns>
         public static string StartLocNotFound(string name = "", List<string> areas = null, int curNum = 1) {
             return LocNotFound("璧风偣", 0, name, areas, curNum);
-        }
-
-        /// <summary>
-        /// <c>"娌℃湁鎵惧埌璧风偣璐т綅!!瑕佹眰:閿佺姸鎬�'鏃�;璐т綅鍚嶇О='name';鎵�湪搴撳尯=[areas];褰撳墠瀹瑰櫒鏁伴噺=0;"</c>
-        /// </summary>
-        /// <param name="name">璐т綅鍚嶇О ( 涓�null 鎴�"" 鏃跺拷鐣�)</param>
-        /// <param name="areas">鎵�湪搴撳尯鍒楄〃 ( 涓�null 鎴�[] 鏃跺拷鐣�)</param>
-        /// <returns></returns>
-        public static string StartLocUnbindNotFound(string name = "", List<string> areas = null) {
-            return LocNotFound("璧风偣", 0, name, areas, 0);
         }
 
         /// <summary>
@@ -79,8 +79,8 @@
         /// <c>"娌℃湁鎵惧埌[璐т綅瀹瑰櫒缁戝畾]淇℃伅!!瑕佹眰:璐т綅='loc';瀹瑰櫒='cntr';"</c>
         /// </summary>
         /// <remarks><b>[ 娉ㄦ剰 ]</b> 鍘熷垯涓婅嚦灏戞湁 1 涓檺鍒舵潯浠�/remarks>
-        /// <param name="loc"></param>
-        /// <param name="cntr"></param>
+        /// <param name="loc">璐т綅缂栫爜 ( 涓�null 鎴�"" 鏃跺拷鐣�)</param>
+        /// <param name="cntr">瀹瑰櫒缂栫爜 ( 涓�null 鎴�"" 鏃跺拷鐣�)</param>
         /// <returns></returns>
         public static string LocCntrRelNotFound(string loc = "", string cntr = "") {
             var res = $"娌℃湁鎵惧埌[璐т綅瀹瑰櫒缁戝畾]淇℃伅!!瑕佹眰:";
@@ -99,8 +99,8 @@
         /// <c>"娌℃湁鎵惧埌[瀹瑰櫒璐у搧鏄庣粏]淇℃伅!!瑕佹眰:瀹瑰櫒='cntr';鐗╂枡='item';"</c>
         /// </summary>
         /// <remarks><b>[ 娉ㄦ剰 ]</b> 鍘熷垯涓婅嚦灏戞湁 1 涓檺鍒舵潯浠�/remarks>
-        /// <param name="cntr"></param>
-        /// <param name="item"></param>
+        /// <param name="cntr">瀹瑰櫒缂栫爜 ( 涓�null 鎴�"" 鏃跺拷鐣�)</param>
+        /// <param name="item">鐗╂枡缂栫爜 ( 涓�null 鎴�"" 鏃跺拷鐣�)</param>
         /// <returns></returns>
         public static string CgDetailNotFound(string cntr = "", string item = "") {
             var res = $"娌℃湁鎵惧埌[瀹瑰櫒璐у搧鏄庣粏]淇℃伅!!瑕佹眰:";
@@ -111,7 +111,7 @@
             if (!string.IsNullOrEmpty(item)) {
                 res += $"鐗╂枡='{item}';";
             }
-
+            
             return res;
         }
     }
diff --git a/wms/SYSHelper.cs b/wms/SYSHelper.cs
index 9935a0c..0cc3bfa 100644
--- a/wms/SYSHelper.cs
+++ b/wms/SYSHelper.cs
@@ -1,12 +1,10 @@
-锘縰sing HH.WCS.Mobox3.DSZSH.util;
-
-using SqlSugar;
-
-using System;
+锘縰sing System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using HH.WCS.Mobox3.DSZSH.util;
+using SqlSugar;
 
 namespace HH.WCS.Mobox3.DSZSH.wms {
     /// <summary>
@@ -15,12 +13,20 @@
     public class SYSHelper {
         private static object locker = new object();
         /// <summary>
-        /// <c>"{prefix}-{DateTime.Now.ToString(dateFormat)}-{id.ToString().PadLeft(length, '0')}"</c>
+        /// <c>"{prefix}-{DateTime.Now.ToString(dateFormat)}-{id.ToString().PadLeft(length,'0')}"</c>
         /// </summary>
         /// <param name="snType"></param>
         /// <param name="prefix"></param>
         /// <param name="dateFormat"></param>
         /// <param name="length"></param>
+        /// <example><code><![CDATA[
+        /// private static string GenerateOrderNo(string snType, string prefix) {
+        ///     //var id = SYSHelper.GetSerialNumber(snType, prefix);
+        ///     //var date = DateTime.Now.ToString("yyMMdd");
+        ///     //return $"{prefix}{date}-{id.ToString().PadLeft(4, '0')}";
+        ///     return SYSHelper.GenerateSN(snType, prefix, "yyMMdd");
+        /// }
+        /// ]]></code></example>
         /// <returns></returns>
         public static string GenerateSN(string snType, string prefix, string dateFormat = "yyMM", int length = 4) {
             var header = $"{prefix}{DateTime.Now.ToString(dateFormat)}-";
@@ -30,18 +36,26 @@
                 return $"{header}{res.ToString().PadLeft(length, '0')}";
             }
         }
-
+        //鍘熸鏋舵柟娉�涓嶄細鎸夋棩鏇存柊MAXID,鐜板湪璁句负绉佹湁闅愯棌,榛樿璋冪敤灏佽鍚庣殑GenerateSN鏂规硶
         private static int GetSerialNumber(string snType, string prefix) {
             int result = 0;
             lock (locker) {
                 var db = new SqlHelper<object>().GetInstance();
                 var sId = db.Queryable<OI_SYS_MAXID>().Where(a => a.CN_S_TYPE.Trim() == snType && a.CN_S_PRE.Trim() == prefix).First();
                 if (sId != null) {
+                    //鍘熸鏋堕�杈�鏇存帴杩慚obox鐨勫簭鍒楀彿鐢熸垚鏂规硶)
                     sId.CN_N_MAX++;
                     if (db.Ado.ExecuteCommand($"update OI_SYS_MAXID set CN_N_MAX={sId.CN_N_MAX} " +
                         $"where CN_S_TYPE='{snType}' and CN_S_PRE='{prefix}' ") > 0) {
                         result = sId.CN_N_MAX;
                     }
+                    //鎸夋棩閲嶇疆MAXID鐨勯�杈�鐜颁笉鑰冭檻浣跨敤)
+                    //sId.CN_N_MAX = sId.CN_T_LAST < DateTime.Today ? 1 : sId.CN_N_MAX + 1;
+                    //sId.CN_T_LAST = DateTime.Now;
+                    //if (db.Ado.ExecuteCommand($"update OI_SYS_MAXID set CN_N_MAX={sId.CN_N_MAX}, CN_T_LAST='{sId.CN_T_LAST}' " +
+                    //    $"where CN_S_TYPE='{snType}' and CN_S_PRE='{prefix}' ") > 0) {
+                    //    result = sId.CN_N_MAX;
+                    //}
                 }
                 else {
                     //鎻掑叆琛�@@ -51,7 +65,6 @@
             }
             return result;
         }
-
         [SugarTable("dbo.OI_SYS_MAXID")]
         public class OI_SYS_MAXID {
             public string CN_S_TYPE { get; set; }
diff --git a/wms/WCSHelper.cs b/wms/WCSHelper.cs
index 0e73985..9962930 100644
--- a/wms/WCSHelper.cs
+++ b/wms/WCSHelper.cs
@@ -1,14 +1,10 @@
-锘縰sing HH.WCS.Mobox3.DSZSH.models;
-using HH.WCS.Mobox3.DSZSH.util;
-using HH.WCS.Mobox3.DSZSH;
-
-using Newtonsoft.Json;
-
-using System;
+锘縰sing System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using HH.WCS.Mobox3.DSZSH.models;
+using HH.WCS.Mobox3.DSZSH.util;
 
 namespace HH.WCS.Mobox3.DSZSH.wms {
     /// <summary>
@@ -58,7 +54,7 @@
 
         #region 浠诲姟鍒涘缓 / 涓嬪彂 / 鏌ヨ
         internal static string GenerateTaskNo() {
-            //var id = SYSHelper.GetSerialNumberResetByDay("浠诲姟鍙�, "TN");
+            //var id = SYSHelper.GetSerialNumber("浠诲姟鍙�, "TN");
             //var date = DateTime.Now.ToString("yyMMdd");
             //return $"TN{date}{id.ToString().PadLeft(4, '0')}";
             return SYSHelper.GenerateSN("浠诲姟鍙�, "TN", "yyMMdd");
@@ -221,8 +217,8 @@
         /// 鍒涘缓浠诲姟
         /// </summary>
         /// <remarks><b>[ 瑕佹眰 ]</b> startLoc / endLoc 鈮�null ; startLoc / endLoc 瀛樺湪 S_CODE , S_AREA_CODE 瀛楁</remarks>
-        /// <param name="startLoc">璧风偣璐т綅 : 鑷冲皯鎻愪緵:S_CODE , S_AREA_CODE</param>
-        /// <param name="endLoc">缁堢偣璐т綅 : 鑷冲皯鎻愪緵:S_CODE , S_AREA_CODE</param>
+        /// <param name="startLoc">璧风偣璐т綅 : 鑷冲皯鎻愪緵 : S_CODE , S_AREA_CODE</param>
+        /// <param name="endLoc">缁堢偣璐т綅 : 鑷冲皯鎻愪緵 : S_CODE , S_AREA_CODE</param>
         /// <param name="cntId">瀹瑰櫒鍙�/param>
         /// <param name="type">浠诲姟绫诲瀷 ( 鍚嶇О )</param>
         /// <param name="pri">浼樺厛绾�/param>
@@ -260,12 +256,15 @@
         /// <returns></returns>
         public static TN_Task BuildTaskWithLocLock(TN_Location startLoc, TN_Location endLoc, string cntId, string type, 
             int pri = 3, int agv = 1) {
+
             var task = BuildTask(startLoc, endLoc, cntId, type, pri);
             LockStartLoc(startLoc, task.S_CODE);
             LockEndLoc(endLoc, task.S_CODE);
 
             return task;
         }
+
+        
         #endregion
 
         #region 浠诲姟鍒嗗彂 / 鎵ц / 璁板綍
@@ -274,7 +273,7 @@
             return db.Queryable<TN_Task_Action>().Count(a => a.S_TASK_CODE == no && a.N_ACTION_CODE == code) > 0;
         }
 
-        internal static void Begin(TN_Task task, string forklift_no) {
+        internal static void SetTaskBegin(TN_Task task, string forklift_no) {
             var db = new SqlHelper<TN_Task>().GetInstance();
             if (task != null) {
                 if (task.N_B_STATE == 1 || task.N_B_STATE == 0) { // 娣诲姞褰搕ask鐘舵�涓�鏃朵篃鍙互瑙﹀彂
@@ -286,7 +285,7 @@
                 }
             }
         }
-        internal static void End(TN_Task task) {
+        internal static void SetTaskEnd(TN_Task task) {
             var db = new SqlHelper<TN_Task>().GetInstance();
             if (task != null) {
                 task.N_B_STATE = 3;
@@ -295,7 +294,7 @@
                 db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_END_TIME }).ExecuteCommand();
             }
         }
-        internal static void Fail(TN_Task task) {
+        internal static void SetTaskFail(TN_Task task) {
             var db = new SqlHelper<TN_Task>().GetInstance();
             if (task != null) {
                 //鍒ゆ柇鏈夋病鏈夊彇璐у畬鎴�娌℃湁灏卞彉鎴愬け璐ャ�鏈夊彇璐у畬鎴愰粯璁ゅ畬鎴愪簡 (璺熸嵁椤圭洰鑰屽畾,鏈変簺椤圭洰浜哄伐鎷夎蛋浜嗕篃娌℃湁鏀惧埌缁堢偣) 銆�diff --git a/wms/WMSHelper.cs b/wms/WMSHelper.cs
index 7f9bb6e..c704164 100644
--- a/wms/WMSHelper.cs
+++ b/wms/WMSHelper.cs
@@ -4,13 +4,11 @@
 using System.Security.Cryptography;
 using System.Text;
 using System.Threading.Tasks;
-
 using HH.WCS.Mobox3.DSZSH.models;
 using HH.WCS.Mobox3.DSZSH.util;
-
 using Newtonsoft.Json;
-
 using static HH.WCS.Mobox3.DSZSH.api.ApiModel;
+using static HH.WCS.Mobox3.DSZSH.util.Config;
 
 namespace HH.WCS.Mobox3.DSZSH.wms {
     /// <summary>
@@ -36,5 +34,78 @@
             }
             return (true, "妫�煡瀹瑰櫒绫诲瀷鎴愬姛!!");
         }
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="locCode"></param>
+        /// <param name="areas"></param>
+        /// <param name="startLoc"></param>
+        /// <returns></returns>
+        public static (bool, string) FindStartLocUnbind(string locCode, List<string> areas, out TN_Location startLoc) {
+            var db = new SqlHelper<object>().GetInstance();
+            startLoc = db.Queryable<TN_Location>().Where(DbExpr.StartLocUnbind(locCode, areas)).First();
+            if (startLoc == null) {
+                return (false, LogMsg.StartLocUnbindNotFound(locCode, areas));
+            }
+            return (true, "");
+        }
+        /// <summary>
+        /// 鏍规嵁瀹瑰櫒鍙�, 鏌ユ壘鏃х殑璐т綅 / 璐т綅缁戝畾 / 鐗╂枡淇℃伅 ( 灏嗗緟鍒犻櫎 / 鏇存柊鏁版嵁鍐欏叆 obj )
+        /// </summary>
+        /// <remarks><code><![CDATA[obj.Old = oldLocCntrCg;]]></code></remarks>
+        /// <param name="obj"></param>
+        /// <param name="cntrCode"></param>
+        /// <param name="skipCgDetail"></param>
+        /// <returns></returns>
+        public static LocCntrCg FindCntrOldInfo(CreateTaskObj obj, string cntrCode, bool skipCgDetail = true) {
+            var oldLocCntrCg = WCSHelper.GetLocCntrCg(cntrCode, skipCgDetail);
+            obj.Old = oldLocCntrCg;
+            return oldLocCntrCg;
+        }
+        /// <summary>
+        /// 缁戝畾璐т綅瀹瑰櫒 ( 淇敼 [ 璐т綅瀹瑰櫒琛�] [ 璐т綅绫诲瀷 ] = cntrType ; 灏�[ 寰呮彃鍏�] 璐т綅瀹瑰櫒鍏崇郴 鍔犲叆鍒�obj 涓�)
+        /// </summary>
+        /// <remarks><code><![CDATA[obj.New = new LocCntrCg { LocCntrRel = locCntrRel };]]></code></remarks>
+        /// <param name="obj"></param>
+        /// <param name="loc"></param>
+        /// <param name="cntrCode"></param>
+        /// <param name="cntrType"></param>
+        /// <returns></returns>
+        public static TN_Loc_Container BindLocCntr(CreateTaskObj obj, TN_Location loc, string cntrCode, string cntrType = "") {
+            var locCntrRel = WCSHelper.BindLocCntr(loc, cntrCode);
+            if (!string.IsNullOrEmpty(cntrType)) {
+                locCntrRel.S_CNTR_TYPE = cntrType;
+            }
+            obj.New = new LocCntrCg { LocCntrRel = locCntrRel };
+            return locCntrRel;
+        }
+        /// <summary>
+        /// 鍒涘缓浠诲姟 ( 鏋勯�浠诲姟椤�/ 璧风偣缁堢偣涓婇攣 ; 灏�鎻掑叆浠诲姟 / 鏇存柊璐т綅 鐨勫璞″啓鍏�obj )
+        /// </summary>
+        /// <remarks><code><![CDATA[
+        /// obj.TaskToInsert = task;
+        /// obj.StartLocToUpdate = startLoc;
+        /// obj.EndLocToUpdate = endLoc;
+        /// ]]></code></remarks>
+        /// <param name="obj"></param>
+        /// <param name="startLoc"></param>
+        /// <param name="endLoc"></param>
+        /// <param name="cntId"></param>
+        /// <param name="type"></param>
+        /// <param name="pri"></param>
+        /// <param name="agv"></param>
+        public static TN_Task CreateTask(CreateTaskObj obj, TN_Location startLoc, TN_Location endLoc, string cntId, string type,
+            int pri = 3, int agv = 1) {
+
+            var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, type, pri);
+            WCSHelper.LockStartLoc(startLoc, task.S_CODE);
+            WCSHelper.LockEndLoc(endLoc, task.S_CODE);
+
+            obj.TaskToInsert = task;
+            obj.StartLocToUpdate = startLoc;
+            obj.EndLocToUpdate = endLoc;
+
+            return task;
+        }
     }
 }

--
Gitblit v1.9.1