From 2ca90a404fa1ab94eb6374f50c6ddd47a2b7f0e6 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期四, 31 七月 2025 17:23:57 +0800 Subject: [PATCH] 删除有问题的TCP旧代码, 优化事务处理和ERP数据模型 --- wms/WCSHelper.cs | 277 ++++++++++++++++++++++++++++++------------------------- 1 files changed, 150 insertions(+), 127 deletions(-) diff --git a/wms/WCSHelper.cs b/wms/WCSHelper.cs index 1e7b40c..c18f8d9 100644 --- a/wms/WCSHelper.cs +++ b/wms/WCSHelper.cs @@ -1,86 +1,64 @@ -锘縰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 { - internal class WCSHelper { - internal static string GenerateTaskNo() { - var id = SYSHelper.GetSerialNumber("浠诲姟鍙�, "TN"); - var date = DateTime.Now.ToString("yyMMdd"); - return $"TN{date}{id.ToString().PadLeft(4, '0')}"; - } - internal static bool UpdateStatus(TN_Task task, string status) { - var res = false; - var db = new SqlHelper<TN_Task>().GetInstance(); - task.S_B_STATE = status; - res = db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE }).ExecuteCommand() > 0; - return res; - } - internal static bool UpdateStatus(TN_Task task) { - var res = false; - var db = new SqlHelper<TN_Task>().GetInstance(); - task.S_B_STATE = TN_Task.GetStateStr(task.N_B_STATE); - task.T_MODIFY = DateTime.Now; - res = db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_MODIFY }).ExecuteCommand() > 0; - return res; - } - internal static bool UpdateEQNo(TN_Task task) { - var res = false; - var db = new SqlHelper<TN_Task>().GetInstance(); - task.T_MODIFY = DateTime.Now; - db.Updateable(task).UpdateColumns(it => new { it.S_EQ_TASK_CODE, it.T_MODIFY }).ExecuteCommand(); - return res; + /// <summary> + /// [ 閫氱敤涓氬姟 ] 甯姪绫�+ /// </summary> + public class WCSHelper { + #region LocationHelper + private static Dictionary<string, TN_Location> _locationDict = null; + + static WCSHelper() { + var db = new SqlHelper<object>().GetInstance(); + + try { + //鍒濆鍖朙ocation鍔犲叆鍒板瓧鍏哥紦瀛�+ _locationDict = new Dictionary<string, TN_Location>(); + var locList = db.Queryable<TN_Location>().ToList(); + foreach (var loc in locList) { + if (!_locationDict.ContainsKey(loc.S_CODE)) { + _locationDict.Add(loc.S_CODE, loc); + } + } + } + catch (Exception ex) { + LogHelper.InfoEx(ex, "WCSHelper:鍒濆鍖朙ocation鍒板瓧鍏哥紦瀛�); + } } - internal static TN_Task GetTask(string no) { - var db = new SqlHelper<TN_Task>().GetInstance(); - var task = db.Queryable<TN_Task>().Where(a => a.S_CODE == no).First(); - return task; + public static TN_Location GetLocation(string locCode, bool useDict = true) { + if (useDict && _locationDict.Keys.Contains(locCode)) { + return _locationDict[locCode.Trim()]; + } + + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<TN_Location>().Where(l => l.S_CODE == locCode).First(); } - public static string GetAgvSite(string locCode) { + public static string GetAgvSite(string locCode, bool useDict = true) { + if (useDict && _locationDict.Keys.Contains(locCode)) { + return _locationDict[locCode.Trim()].S_AGV_SITE; + } + var db = new SqlHelper<object>().GetInstance(); var loc = db.Queryable<TN_Location>().Where(l => l.S_CODE == locCode).First(); return loc == null ? "0" : loc.S_AGV_SITE; } - + #endregion + + private const bool __瀹瑰櫒鏌ヨ缁戝畾妯″潡__ = false; // 浠呯敤浜庡垎娈�娌℃湁瀹炶川鎰忎箟 + #region 瀹瑰櫒鐩稿叧淇℃伅 鏌ヨ / 缁戝畾 /// <summary> - /// <!--寮冪敤|鐞嗙敱:涓嶇伒娲�娑夊強涓氬姟杩囦簬鍏蜂綋-->妫�煡瀹瑰櫒绫诲瀷鏄惁姝g‘ - /// </summary> - /// <param name="cntrCode"></param> - /// <param name="cntrType"></param> - /// <param name="errMsg"></param> - /// <returns></returns> - private static bool CheckCntrType(string cntrCode, string cntrType, out string errMsg) { - var db = new SqlHelper<object>().GetInstance(); - errMsg = string.Empty; - - var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == cntrType).First(); - if (cntr == null) { - errMsg = $"瀹瑰櫒'{cntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�"; - return false; - } - if (cntr.S_TYPE != cntrType) { - errMsg = $"瀹瑰櫒'{cntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷鏄�{cntr.S_TYPE},涓嶆槸'{cntrType}'!"; - return false; - } - - return true; - } - - /// <summary> - /// 鏍规嵁瀹瑰櫒鍙�鏌ヨ褰撳墠瀹瑰櫒鍏宠仈鐨刐璐т綅/瀹瑰櫒/鐗╂枡]淇℃伅(鍙煡璇�鏉� + /// 鏍规嵁 [ 瀹瑰櫒鍙�] , 鏌ヨ褰撳墠瀹瑰櫒鍏宠仈鐨�[ 璐т綅 ] [ 璐т綅瀹瑰櫒 ] [ 瀹瑰櫒璐у搧 ] 淇℃伅 ( 鍙煡璇�1 鏉�) /// </summary> /// <param name="cntrCode">瀹瑰櫒鍙�/param> - /// <param name="skipCgDetail">鏄惁璺宠繃[鐗╂枡琛╙鐨勬煡璇�褰撳鍣ㄥ彿鏉ヨ嚜[鐗╂枡琛╙鏃�</param> + /// <param name="skipCgDetail">鏄惁璺宠繃 [ 瀹瑰櫒璐у搧 ] 鐨勬煡璇�( 褰撳鍣ㄥ彿鏉ヨ嚜 [ 瀹瑰櫒璐у搧 ] 鏃�)</param> /// <returns></returns> public static LocCntrCg GetLocCntrCg(string cntrCode, bool skipCgDetail = false) { var db = new SqlHelper<object>().GetInstance(); @@ -112,35 +90,20 @@ } /// <summary> - /// [缁戝畾[璐т綅-瀹瑰櫒]淇℃伅](璁剧疆璐т綅鏁伴噺涓�;涓嶄細妫�煡loc鏄惁涓簄ull) + /// 缁戝畾 [ 璐т綅瀹瑰櫒 ] 淇℃伅 ( 璁剧疆 [ 璐т綅鏁伴噺 ] = 1 ) /// </summary> + /// <remarks><b>[ 娉ㄦ剰 ]</b> 涓嶄細妫�煡 loc 鈮�null</remarks> /// <param name="loc"></param> /// <param name="cntrCode"></param> /// <returns></returns> - public static TN_Loc_Container BindLocCntr(ref TN_Location loc, string cntrCode) { + public static TN_Loc_Container BindLocCntr(TN_Location loc, string cntrCode) { var locCntrRel = new TN_Loc_Container { S_LOC_CODE = loc.S_CODE, S_CNTR_CODE = cntrCode, }; if (loc.N_CURRENT_NUM != 0) { - LogHelper.Warn($"缁戝畾璐т綅瀹瑰櫒:绋嬪簭姝e湪灏濊瘯缁橻瀹瑰櫒鏁伴噺]涓嶆槸0鐨勮揣浣�璁剧疆[瀹瑰櫒鏁伴噺]涓�!璐т綅='{loc.S_CODE}',瀹瑰櫒鏁伴噺={loc.N_CURRENT_NUM}"); - } - - loc.N_CURRENT_NUM = 1; - loc.T_MODIFY = DateTime.Now; - - return locCntrRel; - } - - public static TN_Loc_Container BindLocCntrs(ref TN_Location loc, List<string> cntrCodes) { - var locCntrRel = new TN_Loc_Container { - S_LOC_CODE = loc.S_CODE, - S_CNTR_CODE = string.Join(",", cntrCodes) - }; - - if (loc.N_CURRENT_NUM != 0) { - LogHelper.Warn($"缁戝畾璐т綅瀹瑰櫒:绋嬪簭姝e湪灏濊瘯缁橻瀹瑰櫒鏁伴噺]涓嶆槸0鐨勮揣浣�璁剧疆[瀹瑰櫒鏁伴噺]涓�!璐т綅='{loc.S_CODE}',瀹瑰櫒鏁伴噺={loc.N_CURRENT_NUM}"); + LogHelper.Warn($"缁戝畾璐т綅瀹瑰櫒:绋嬪簭姝e湪灏濊瘯缁橻瀹瑰櫒鏁伴噺]涓嶆槸0鐨勮揣浣�璁剧疆[瀹瑰櫒鏁伴噺]涓�!!璐т綅='{loc.S_CODE}',瀹瑰櫒鏁伴噺={loc.N_CURRENT_NUM}"); } loc.N_CURRENT_NUM = 1; @@ -150,9 +113,34 @@ } /// <summary> + /// 缁戝畾 [ 璐т綅瀹瑰櫒 ] 淇℃伅 ( 璁剧疆 [ 璐т綅鏁伴噺 ] + list.Count ) + /// </summary> + /// <param name="loc"></param> + /// <param name="cntrCodes"></param> + /// <returns></returns> + public static TN_Loc_Container BindLocCntrs(TN_Location loc, List<string> cntrCodes) { + var locCntrRel = new TN_Loc_Container { + S_LOC_CODE = loc.S_CODE, + S_CNTR_CODE = string.Join(",", cntrCodes) + }; + + if (loc.N_CURRENT_NUM != 0) { + LogHelper.Warn($"缁戝畾璐т綅瀹瑰櫒:绋嬪簭姝e湪灏濊瘯缁橻瀹瑰櫒鏁伴噺]涓嶆槸0鐨勮揣浣�璁剧疆[瀹瑰櫒鏁伴噺]涓�!!璐т綅='{loc.S_CODE}',瀹瑰櫒鏁伴噺={loc.N_CURRENT_NUM}"); + } + + loc.N_CURRENT_NUM = 1; + loc.T_MODIFY = DateTime.Now; + + return locCntrRel; + } + #endregion + + private const bool __鍒涘缓浠诲姟妯″潡__ = false; // 浠呯敤浜庡垎娈�娌℃湁瀹炶川鎰忎箟 + #region 璧风偣 / 缁堢偣璐т綅閿�+ 鍒涘缓浠诲姟 + /// <summary> /// 璧风偣鍑哄簱閿� /// </summary> - /// <remarks>瑕佹眰: loc != null; 閿佺姸鎬�'鏃�;</remarks> + /// <remarks><b>[ 瑕佹眰 ]</b> loc 鈮�null ; 閿佺姸鎬�'鏃� ;</remarks> /// <param name="loc"></param> /// <param name="lockSource"></param> public static void LockStartLoc(TN_Location loc, string lockSource = "") { @@ -171,7 +159,7 @@ /// <summary> /// 缁堢偣鍏ュ簱閿� /// </summary> - /// <remarks>瑕佹眰: loc != null; 閿佺姸鎬�'鏃�;</remarks> + /// <remarks><b>[ 瑕佹眰 ]</b> loc 鈮�null ; 閿佺姸鎬�'鏃� ;</remarks> /// <param name="loc"></param> /// <param name="lockSource"></param> public static void LockEndLoc(TN_Location loc, string lockSource = "") { @@ -188,47 +176,29 @@ } /// <summary> - /// [鍒涘缓浠诲姟](闇�‘淇漵tartLoc/endLoc涓嶄负null;涓嶄細妫�煡璐т綅S_CODE,S_AREA_CODE灞炴�鏄惁鍚堟硶) + /// 鐢熸垚浠诲姟鍙�閫氬父鍙BuildTask浣跨敤,鏁呰涓虹鏈� /// </summary> - /// <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> - /// <param name="agv">AGV绫诲瀷</param> /// <returns></returns> - public static TN_Task BuildTask(TN_Location startLoc, TN_Location endLoc, string cntId, string type, int pri = 3, int agv = 1) { - TN_Task TN_Task = new TN_Task() { - S_CODE = GenerateTaskNo(), - S_START_AREA = startLoc.S_AREA_CODE, - S_END_AREA = endLoc.S_AREA_CODE, - S_START_LOC = startLoc.S_CODE, - S_END_LOC = endLoc.S_CODE, - S_CNTR_CODE = cntId, - S_TYPE = type, - N_PRIORITY = pri, - N_SCHEDULE_TYPE = agv, - N_B_STATE = 0, // 浠诲姟鍒涘缓鏃�榛樿绛夊緟 - }; - - LogHelper.Info($"鍒涘缓浠诲姟:浠诲姟鍙�'{TN_Task.S_CODE}'"); - - return TN_Task; + private static string GenerateTaskNo() { + //var id = SYSHelper.GetSerialNumber("浠诲姟鍙�, "TN"); + //var date = DateTime.Now.ToString("yyMMdd"); + //return $"TN{date}{id.ToString().PadLeft(4, '0')}"; + return SYSHelper.GenerateSN("浠诲姟鍙�, "TN", "yyMMdd"); } /// <summary> - /// [ 鍒涘缓浠诲姟,骞朵笂閿�] ( 闇�‘淇漵tartLoc/endLoc涓嶄负null ; 涓嶄細妫�煡璐т綅S_CODE,S_AREA_CODE灞炴�鏄惁鍚堟硶 ) + /// 鍒涘缓浠诲姟 /// </summary> - /// <remarks>瑕佹眰 : (1) startLoc / endLoc 鈮�null<br/>(2) startLoc / endLoc 瀛樺湪 S_CODE , S_AREA_CODE</remarks> + /// <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="cntId">瀹瑰櫒鍙�/param> - /// <param name="type">浠诲姟绫诲瀷(鍚嶇О)</param> + /// <param name="type">浠诲姟绫诲瀷 ( 鍚嶇О )</param> /// <param name="pri">浼樺厛绾�/param> - /// <param name="agv">AGV绫诲瀷</param> + /// <param name="agv">AGV 绫诲瀷</param> /// <returns></returns> - public static TN_Task BuildTaskWithLocLock(TN_Location startLoc, TN_Location endLoc, string cntId, string type, int pri = 3, int agv = 1) { - TN_Task TN_Task = new TN_Task() { + public static TN_Task BuildTask(TN_Location startLoc, TN_Location endLoc, string cntId, string type, int pri = 3, int agv = 1) { + TN_Task task = new TN_Task() { S_CODE = GenerateTaskNo(), S_START_AREA = startLoc.S_AREA_CODE, S_END_AREA = endLoc.S_AREA_CODE, @@ -241,20 +211,72 @@ N_B_STATE = 0, // 浠诲姟鍒涘缓鏃�榛樿绛夊緟 }; - LogHelper.Info($"鍒涘缓浠诲姟:浠诲姟鍙�'{TN_Task.S_CODE}'"); + LogHelper.Info($"鍒涘缓浠诲姟:浠诲姟鍙�'{task.S_CODE}',璧风偣璐т綅='',缁堢偣璐т綅='',瀹瑰櫒鍙�'',浠诲姟绫诲瀷"); - LockStartLoc(startLoc, TN_Task.S_CODE); - LockEndLoc(endLoc, TN_Task.S_CODE); - - return TN_Task; + return task; } + /// <summary> + /// 鍒涘缓浠诲姟 + 璐т綅閿�+ /// </summary> + /// <remarks><b>[ 瑕佹眰 ]</b> (1) startLoc / endLoc 鈮�null ; (2) 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="cntId">瀹瑰櫒鍙�/param> + /// <param name="type">浠诲姟绫诲瀷 ( 鍚嶇О )</param> + /// <param name="pri">浼樺厛绾�/param> + /// <param name="agv">AGV 绫诲瀷</param> + /// <returns></returns> + public static TN_Task BuildTaskAndLockLoc(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 + + private const bool __浠诲姟鍒嗗彂澶勭悊妯″潡__ = false; // 浠呯敤浜庡垎娈�娌℃湁瀹炶川鎰忎箟 + #region 浠诲姟鍒嗗彂 / 鎵ц / 璁板綍 internal static bool CheckActionRecordExist(string no, int code) { var db = new SqlHelper<TN_Task_Action>().GetInstance(); 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 bool UpdateTaskState(TN_Task task, string state) { + var res = false; + var db = new SqlHelper<TN_Task>().GetInstance(); + task.S_B_STATE = state; + res = db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE }).ExecuteCommand() > 0; + return res; + } + + internal static bool UpdateTaskState(TN_Task task) { + var res = false; + var db = new SqlHelper<TN_Task>().GetInstance(); + task.S_B_STATE = TN_Task.GetStateStr(task.N_B_STATE); + task.T_MODIFY = DateTime.Now; + res = db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_MODIFY }).ExecuteCommand() > 0; + return res; + } + + internal static bool UpdateEqTaskNo(TN_Task task) { + var res = false; + var db = new SqlHelper<TN_Task>().GetInstance(); + task.T_MODIFY = DateTime.Now; + res = db.Updateable(task).UpdateColumns(it => new { it.S_EQ_TASK_CODE, it.T_MODIFY }).ExecuteCommand() > 0; + return res; + } + + internal static TN_Task GetTask(string taskNo) { + var db = new SqlHelper<TN_Task>().GetInstance(); + var task = db.Queryable<TN_Task>().Where(a => a.S_CODE == taskNo).First(); + return task; + } + + 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鐘舵�涓�鏃朵篃鍙互瑙﹀彂 @@ -266,7 +288,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; @@ -275,10 +297,10 @@ 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) { - //鍒ゆ柇鏈夋病鏈夊彇璐у畬鎴�娌℃湁灏卞彉鎴愬け璐ャ�鏈夊彇璐у畬鎴愰粯璁ゅ畬鎴愪簡 (璺熸嵁椤圭洰鑰屽畾,鏈変簺椤圭洰浜哄伐鎷夎蛋浜嗕篃娌℃湁鏀惧埌缁堢偣) 銆�+ //鍒ゆ柇鏈夋病鏈夊彇璐у畬鎴�娌℃湁灏卞彉鎴愬け璐�鏈夊彇璐у畬鎴愰粯璁ゅ畬鎴愪簡 (璺熸嵁椤圭洰鑰屽畾,鏈変簺椤圭洰浜哄伐鎷夎蛋浜嗕篃娌℃湁鏀惧埌缁堢偣) task.N_B_STATE = 4; task.S_B_STATE = TN_Task.GetStateStr(task.N_B_STATE); db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE }).ExecuteCommand(); @@ -300,7 +322,8 @@ internal static List<TN_Task> GetWaitingTaskList() { var db = new SqlHelper<object>().GetInstance(); return db.Queryable<TN_Task>().Where(a => a.N_B_STATE == 0 && (a.S_B_STATE == "绛夊緟" || a.S_B_STATE == "寰呮帹閫�)).ToList(); - } + } + #endregion } /// <summary> -- Gitblit v1.9.1