From 2d3ee03961d6cfbde70342e8a97bc7b05d0b0dc3 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 21 七月 2025 17:27:34 +0800 Subject: [PATCH] 优化代码, 封装货位锁和创建任务流程, 数据库事务等 --- wms/WCSHelper.cs | 106 +++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 79 insertions(+), 27 deletions(-) diff --git a/wms/WCSHelper.cs b/wms/WCSHelper.cs index d145c3a..1e7b40c 100644 --- a/wms/WCSHelper.cs +++ b/wms/WCSHelper.cs @@ -53,7 +53,7 @@ } /// <summary> - /// ![[寮冪敤|鐞嗙敱:涓嶇伒娲�娑夊強涓氬姟杩囦簬鍏蜂綋]]妫�煡瀹瑰櫒绫诲瀷鏄惁姝g‘ + /// <!--寮冪敤|鐞嗙敱:涓嶇伒娲�娑夊強涓氬姟杩囦簬鍏蜂綋-->妫�煡瀹瑰櫒绫诲瀷鏄惁姝g‘ /// </summary> /// <param name="cntrCode"></param> /// <param name="cntrType"></param> @@ -96,7 +96,7 @@ if (locCntrRel != null) { location = db.Queryable<TN_Location>().Where(l => l.S_CODE == locCntrRel.S_LOC_CODE).First(); if (location == null) { - LogHelper.Warn($""); + LogHelper.Warn($"鑾峰彇瀹瑰櫒鍏宠仈淇℃伅:[璐т綅瀹瑰櫒鍏崇郴]瀛樺湪,浣哰璐т綅]涓嶅瓨鍦�瀹瑰櫒='{cntrCode}',璐т綅='{locCntrRel.S_LOC_CODE}'"); } } if (location != null) { @@ -112,19 +112,39 @@ } /// <summary> - /// 缁戝畾[璐т綅-瀹瑰櫒]淇℃伅 + /// [缁戝畾[璐т綅-瀹瑰櫒]淇℃伅](璁剧疆璐т綅鏁伴噺涓�;涓嶄細妫�煡loc鏄惁涓簄ull) /// </summary> - /// <param name="startLoc"></param> + /// <param name="loc"></param> /// <param name="cntrCode"></param> /// <returns></returns> - public static TN_Loc_Container BindLocCntr(ref TN_Location startLoc, string cntrCode) { + public static TN_Loc_Container BindLocCntr(ref TN_Location loc, string cntrCode) { var locCntrRel = new TN_Loc_Container { - S_LOC_CODE = startLoc.S_CODE, + S_LOC_CODE = loc.S_CODE, S_CNTR_CODE = cntrCode, }; - startLoc.N_CURRENT_NUM = 1; - startLoc.T_MODIFY = DateTime.Now; + 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}"); + } + + loc.N_CURRENT_NUM = 1; + loc.T_MODIFY = DateTime.Now; return locCntrRel; } @@ -132,70 +152,102 @@ /// <summary> /// 璧风偣鍑哄簱閿� /// </summary> + /// <remarks>瑕佹眰: loc != null; 閿佺姸鎬�'鏃�;</remarks> /// <param name="loc"></param> /// <param name="lockSource"></param> - public static void LockStartLoc(ref TN_Location loc, string lockSource = "") { - if (loc == null) { - throw new ArgumentNullException(); // 鎺ュ彈璐т綅loc涓虹┖鏃剁洿鎺ユ姏寮傚父(閫氬父涓嶄細鍙戠敓) - } - + public static void LockStartLoc(TN_Location loc, string lockSource = "") { if (loc.N_LOCK_STATE != 0 || loc.S_LOCK_STATE != "鏃�) { - LogHelper.Warn($"璧风偣鍑哄簱閿�绋嬪簭姝e湪灏濊瘯缁欏綋鍓峓閿佺姸鎬乚涓嶆槸'鏃�鐨勮揣浣嶄笂閿�璐т綅='{loc.S_CODE}',閿佺姸鎬�({loc.N_LOCK_STATE},{loc.S_LOCK_STATE})"); + LogHelper.Warn($"璧风偣鍑哄簱閿�绋嬪簭姝e湪灏濊瘯缁欏綋鍓峓閿佺姸鎬乚鈮�鏃�鐨勮揣浣嶄笂閿�璐т綅='{loc.S_CODE}',閿佺姸鎬�({loc.N_LOCK_STATE},{loc.S_LOCK_STATE})"); } loc.N_LOCK_STATE = 2; // 璧风偣鍑哄簱閿� loc.S_LOCK_STATE = TN_Location.GetLockStateStr(2); // 璧风偣鍑哄簱閿� loc.S_LOCK_OP = lockSource; loc.T_MODIFY = System.DateTime.Now; + + LogHelper.Info($"璧风偣鍑哄簱閿�璧风偣璐т綅'{loc.S_CODE}'璁剧疆[鍑哄簱閿乚"); } /// <summary> /// 缁堢偣鍏ュ簱閿� /// </summary> + /// <remarks>瑕佹眰: loc != null; 閿佺姸鎬�'鏃�;</remarks> /// <param name="loc"></param> /// <param name="lockSource"></param> - public static void LockEndLoc(ref TN_Location loc, string lockSource = "") { - if (loc == null) { - throw new ArgumentNullException(); // 鎺ュ彈璐т綅loc涓虹┖鏃剁洿鎺ユ姏寮傚父(閫氬父涓嶄細鍙戠敓) - } - + public static void LockEndLoc(TN_Location loc, string lockSource = "") { if (loc.N_LOCK_STATE != 0 || loc.S_LOCK_STATE != "鏃�) { - LogHelper.Warn($"璧风偣鍑哄簱閿�绋嬪簭姝e湪灏濊瘯缁欏綋鍓峓閿佺姸鎬乚涓嶆槸'鏃�鐨勮揣浣嶄笂閿�璐т綅='{loc.S_CODE}',閿佺姸鎬�({loc.N_LOCK_STATE},{loc.S_LOCK_STATE})"); + LogHelper.Warn($"缁堢偣鍏ュ簱閿�绋嬪簭姝e湪灏濊瘯缁欏綋鍓峓閿佺姸鎬乚鈮�鏃�鐨勮揣浣嶄笂閿�璐т綅='{loc.S_CODE}',閿佺姸鎬�({loc.N_LOCK_STATE},{loc.S_LOCK_STATE})"); } - loc.N_LOCK_STATE = 1; // 缁堢偣鍑哄簱閿�- loc.S_LOCK_STATE = TN_Location.GetLockStateStr(1); // 缁堢偣鍑哄簱閿�+ loc.N_LOCK_STATE = 1; // 缁堢偣鍏ュ簱閿�+ loc.S_LOCK_STATE = TN_Location.GetLockStateStr(1); // 缁堢偣鍏ュ簱閿� loc.S_LOCK_OP = lockSource; loc.T_MODIFY = System.DateTime.Now; + + LogHelper.Info($"缁堢偣鍏ュ簱閿�缁堢偣璐т綅='{loc.S_CODE}',鏉ユ簮='{lockSource}'"); } /// <summary> - /// 鍒涘缓浠诲姟 + /// [鍒涘缓浠诲姟](闇�‘淇漵tartLoc/endLoc涓嶄负null;涓嶄細妫�煡璐т綅S_CODE,S_AREA_CODE灞炴�鏄惁鍚堟硶) /// </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="agvType">AGV绫诲瀷</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 agvType = 1) { + 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 = agvType, + N_SCHEDULE_TYPE = agv, N_B_STATE = 0, // 浠诲姟鍒涘缓鏃�榛樿绛夊緟 - S_CNTR_CODE = cntId, }; + + LogHelper.Info($"鍒涘缓浠诲姟:浠诲姟鍙�'{TN_Task.S_CODE}'"); return TN_Task; } + /// <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> + /// <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 BuildTaskWithLocLock(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}'"); + + LockStartLoc(startLoc, TN_Task.S_CODE); + LockEndLoc(endLoc, TN_Task.S_CODE); + + return TN_Task; + } internal static bool CheckActionRecordExist(string no, int code) { var db = new SqlHelper<TN_Task_Action>().GetInstance(); -- Gitblit v1.9.1