From b079910e5de15863c26e479ffab15cc45d706f1a Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 19 五月 2025 16:25:22 +0800 Subject: [PATCH] 测试修复轮询出库、抽检流程的问题 --- Models/TN_Outbound_Order.cs | 2 Program.cs | 15 - Services/WmsService.cs | 2 /dev/null | 0 Models/TN_Outbound_Detail.cs | 2 Models/TN_Task.cs | 8 Controllers/DebugController.cs | 2 Helpers/AgvHelper.cs | 2 ServiceCore/OutboundCore.cs | 56 +++++--- HH.WCS.Mobox3.DSZSH.csproj | 2 Services/DebugService.cs | 38 ++-- Helpers/DbHelper.cs | 3 Dtos/Request/DebugRequest.cs | 2 ServiceCore/CheckCore.cs | 43 +++-- Models/TN_Container_Item.cs | 4 Models/TN_Check_Detail.cs | 7 Services/MoboxService.cs | 133 +++++++++++++++---- Models/TN_CG_Detail.cs | 19 +- ServiceCore/ShiftCore.cs | 40 +++-- 19 files changed, 244 insertions(+), 136 deletions(-) diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/5c57b4d0-dbd7-49e3-9f10-3d5a4d6dc3f3.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/5c57b4d0-dbd7-49e3-9f10-3d5a4d6dc3f3.vsidx deleted file mode 100644 index e5b9ec0..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/5c57b4d0-dbd7-49e3-9f10-3d5a4d6dc3f3.vsidx +++ /dev/null Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/7b1f7e4e-45eb-4263-a455-827cb67bccfe.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/7b1f7e4e-45eb-4263-a455-827cb67bccfe.vsidx deleted file mode 100644 index 771f809..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/7b1f7e4e-45eb-4263-a455-827cb67bccfe.vsidx +++ /dev/null Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/ab784fdf-fa93-4eaa-9449-8122428bc0ae.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/ab784fdf-fa93-4eaa-9449-8122428bc0ae.vsidx deleted file mode 100644 index 99f862c..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/ab784fdf-fa93-4eaa-9449-8122428bc0ae.vsidx +++ /dev/null Binary files differ diff --git a/Controllers/DebugController.cs b/Controllers/DebugController.cs index edb5232..a4b1496 100644 --- a/Controllers/DebugController.cs +++ b/Controllers/DebugController.cs @@ -29,7 +29,7 @@ { return DebugService.AgvSeriesReports(model); } - + /// <summary> /// 鍒濆鍖栨暟鎹簱 /// </summary> diff --git a/Dtos/Request/DebugRequest.cs b/Dtos/Request/DebugRequest.cs index a111853..b752402 100644 --- a/Dtos/Request/DebugRequest.cs +++ b/Dtos/Request/DebugRequest.cs @@ -27,7 +27,7 @@ } public class CoverInfo { - public bool IsCover { set; get; } = true; + public bool IsCover { set; get; } = false; } } } diff --git a/HH.WCS.Mobox3.DSZSH.csproj b/HH.WCS.Mobox3.DSZSH.csproj index 35d7c1e..d552ec5 100644 --- a/HH.WCS.Mobox3.DSZSH.csproj +++ b/HH.WCS.Mobox3.DSZSH.csproj @@ -248,7 +248,7 @@ <Compile Include="Helpers\ExprHelper.cs" /> <Compile Include="Helpers\PathHelper.cs" /> <Compile Include="Helpers\DbHelper.cs" /> - <Compile Include="Models\TN_CNTR_ITEM.cs" /> + <Compile Include="Models\TN_Container_Item.cs" /> <Compile Include="Models\TN_Check_Detail.cs" /> <Compile Include="Models\TN_Check_Order.cs" /> <Compile Include="Models\TN_Inbound_Order.cs" /> diff --git a/Helpers/AgvHelper.cs b/Helpers/AgvHelper.cs index dda731c..28b1eab 100644 --- a/Helpers/AgvHelper.cs +++ b/Helpers/AgvHelper.cs @@ -29,7 +29,7 @@ public static bool IsNextStateOk(int lastState, int nextState) { var lastPri = GetPri(lastState); var nextPri = GetPri(nextState); - return lastPri != 0 && nextPri != 0 && lastPri <= nextState; + return lastPri != 0 && nextPri != 0 && lastPri <= nextPri; } /// <summary> diff --git a/Helpers/DbHelper.cs b/Helpers/DbHelper.cs index ebe4313..da9acf3 100644 --- a/Helpers/DbHelper.cs +++ b/Helpers/DbHelper.cs @@ -52,8 +52,7 @@ }; // 閰嶇疆AOP鏃ュ織 - //db.Aop.OnLogExecuting = (sql, pars) => - //{ + //db.Aop.OnLogExecuting = (sql, pars) => { // Console.WriteLine(sql); // 杈撳嚭绾疭QL璇彞 //}; diff --git a/Models/TN_CG_Detail.cs b/Models/TN_CG_Detail.cs index 11893d2..0868e82 100644 --- a/Models/TN_CG_Detail.cs +++ b/Models/TN_CG_Detail.cs @@ -6,6 +6,7 @@ /// </summary> [SugarTable("TN_CG_Detail")] public class TN_CG_Detail : BaseModel { + #region 鍩烘湰灞炴� /// <summary> /// 鏂欑鍟嗗搧鏍囪瘑 /// </summary> @@ -19,7 +20,7 @@ /// <summary> /// 鐗╂枡鍚嶇О /// </summary> - public string S_ITEM_NAME { get; set; } = string.Empty; + public string S_ITEM_NAME { get; set; } = string.Empty; /// <summary> /// 瀹瑰櫒缂栫爜 @@ -44,13 +45,16 @@ /// <summary> /// 璐у搧鏁伴噺 /// </summary> - public int N_QTY { get; set; } = 0; + public int N_ITEM_NUM { get; set; } = 0; /// <summary> /// 鐗╂枡瑙勬牸 /// </summary> - public string S_SPE { get; set; } = string.Empty; + public string S_ITEM_SPEC { get; set; } = string.Empty; + #endregion + + #region 鎷撳睍 /// <summary> /// 鎵ц鏍囧噯 /// </summary> @@ -66,9 +70,10 @@ /// </summary> public string S_QUALITY_GRADE { get; set; } = string.Empty; - /// <summary> - /// 浜х嚎鍙�- /// </summary> - public int N_PRODUCT_LINE { get; set; } = 0; // NOTE 鍚庣画MES鍙兘浼氭彁渚涳紝鍏堝垱寤�+ ///// <summary> + ///// 浜х嚎鍙�+ ///// </summary> + //public int N_PRODUCT_LINE { get; set; } = 0; // NOTE 鍚庣画MES鍙兘浼氭彁渚涳紝鍏堝垱寤� + #endregion } } diff --git a/Models/TN_Check_Detail.cs b/Models/TN_Check_Detail.cs index 0d14c5f..8347a17 100644 --- a/Models/TN_Check_Detail.cs +++ b/Models/TN_Check_Detail.cs @@ -13,9 +13,12 @@ [SugarTable("TN_Check_Detail")] public class TN_Check_Detail : BaseModel { public string S_NO { get; set; } - public string S_ITEM_CODE { get; set; } - //public string S_ITEM_NAME { get; set; } + public string S_ITEM_NAME { get; set; } + + public string S_LOC_CODE { get; set; } + + public string S_CNTR_CODE { get; set; } public string S_BATCH_NO { get; set; } public string S_END_AREA { get; set; } diff --git a/Models/TN_CNTR_ITEM.cs b/Models/TN_Container_Item.cs similarity index 80% rename from Models/TN_CNTR_ITEM.cs rename to Models/TN_Container_Item.cs index f1f2c66..def46ad 100644 --- a/Models/TN_CNTR_ITEM.cs +++ b/Models/TN_Container_Item.cs @@ -10,8 +10,8 @@ /// <summary> /// 瀹瑰櫒-鐗╂枡绫诲瀷 鍏崇郴琛� /// </summary> - [SugarTable("TN_CNTR_ITEM")] - public class TN_CNTR_ITEM : BaseModel { + [SugarTable("TN_Container_Item")] + public class TN_Container_Item : BaseModel { public string S_CNTR_CODE { get; set; } public string S_ITEM_CODE { get; set; } } diff --git a/Models/TN_Outbound_Detail.cs b/Models/TN_Outbound_Detail.cs index 94ee21a..c678465 100644 --- a/Models/TN_Outbound_Detail.cs +++ b/Models/TN_Outbound_Detail.cs @@ -9,7 +9,7 @@ /// <summary> /// 鍑哄簱鍗曞彿 /// </summary> - public string S_NO { get; set; } + public string S_OO_NO { get; set; } /// <summary> /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚 diff --git a/Models/TN_Outbound_Order.cs b/Models/TN_Outbound_Order.cs index c3493cf..00d394d 100644 --- a/Models/TN_Outbound_Order.cs +++ b/Models/TN_Outbound_Order.cs @@ -45,7 +45,7 @@ public bool B_FORCE_OUT { get; set; } - [Navigate(NavigateType.OneToMany, nameof(TN_Outbound_Detail.S_NO))] + [Navigate(NavigateType.OneToMany, nameof(TN_Outbound_Detail.S_OO_NO))] public List<TN_Outbound_Detail> Details { get; set; } } } diff --git a/Models/TN_Task.cs b/Models/TN_Task.cs index c94cb52..25d04b1 100644 --- a/Models/TN_Task.cs +++ b/Models/TN_Task.cs @@ -84,10 +84,10 @@ public int N_END_LAYER { get; internal set; } public int N_CNTR_COUNT { get; internal set; } - /// <summary> - /// 鏄惁寮哄埗鍑哄簱锛�涓嶅己鍒�1寮哄埗 - /// </summary> - public int N_FORCE { get; set; } = 0; + ///// <summary> + ///// 鏄惁寮哄埗鍑哄簱锛�涓嶅己鍒�1寮哄埗 + ///// </summary> + //public int N_FORCE { get; set; } = 0; internal static string GetStateStr(int state) { // 0绛夊緟 1宸叉帹閫�2鎵ц 3瀹屾垚 4閿欒 diff --git a/Program.cs b/Program.cs index e77e060..d201d83 100644 --- a/Program.cs +++ b/Program.cs @@ -127,19 +127,14 @@ { List<Task> tasks = new List<Task>(); - //tasks.Add(GetTask(CheckCore.CheckOrderState)); - + // 杞锛氬嚭搴撳崟鐘舵� tasks.Add(GetTask(OutboundCore.CheckOrderState)); + // 杞锛氭娊妫�崟鐘舵� + tasks.Add(GetTask(CheckCore.CheckOrderState)); - // 娣诲姞浠诲姟鎺ㄩ�绾跨▼ - //tasks.Add(GetTask(WCSCore.Dispatch)); - - // 娣诲姞鑷畾涔夌嚎绋�- //tasks.Add(GetTask(Monitor.CheckEmptyCnt));//妫�祴绌烘墭鐩�- - // 鏍规嵁S7/Modbus鍗忚鍒ゆ柇杈撻�绾跨殑淇″彿 鍘熸潗鏂欎骇绾垮簱鍖�>婊℃墭缂撳瓨搴撳尯锛岀┖鎵樼紦瀛樺簱鍖�>鍘熸潗鏂欎骇绾垮簱鍖�- //tasks.Add(GetTask(Monitor.CheckS7Devices)); + // 杞锛氱Щ搴撳崟鐘舵� + tasks.Add(GetTask(ShiftCore.CheckOrderState)); Task.WaitAll(tasks.ToArray()); } diff --git a/ServiceCore/CheckCore.cs b/ServiceCore/CheckCore.cs index d0a4747..eae3ca4 100644 --- a/ServiceCore/CheckCore.cs +++ b/ServiceCore/CheckCore.cs @@ -7,14 +7,15 @@ namespace HH.WCS.Mobox3.DSZSH.ServiceCore { public class CheckCore { public static void CheckOrderState() { + var db = DbHelper.GetDbClient(); try { - var order = db.Queryable<TN_Check_Order>() + var order = db.Queryable<TN_Check_Detail>() .Where(c => c.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟) .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc).First(); if (order == null) { - LogHelper.Info("鏆傛棤寰呮墽琛岀殑鎶芥鍗�); + LogHelper.Info("杞--鎶芥--鏆傛棤寰呮墽琛岀殑Order"); return; } @@ -28,16 +29,6 @@ } foreach (var detail in detailList) { - var startLocCntrRel = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail> - ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE) - .Where((l, c, d) => d.S_ITEM_CODE == detail.S_ITEM_CODE && d.S_BATCH_NO == detail.S_BATCH_NO) - .Select((l, c) => c) // 閫夋嫨 LocCntrRel - .First(); // 闅忔満鎶芥锛屼笉鎺掑簭 - - if (startLocCntrRel == null) { - LogHelper.Info("娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�); - continue; - } var endLoc = db.Queryable<TN_Location>() .Where(l => l.S_AREA_CODE == detail.S_END_AREA) @@ -45,7 +36,7 @@ .Where(ExprHelper.LocIsEmpty).First(); if (endLoc == null) { - LogHelper.Info("鏌ヨ锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅"); + LogHelper.Info("杞--鎶芥锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛�); continue; } @@ -53,10 +44,10 @@ detail.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓� if (db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { tran.RollbackTran(); - LogHelper.Info($"鏇存柊澶辫触锛氫慨鏀规娊妫�崟鏄庣粏琛ㄧ姸鎬佷负瀹屾垚"); + LogHelper.Info($"杞--鎶芥锛氫慨鏀规娊妫�崟鏄庣粏琛ㄧ姸鎬佷负瀹屾垚--澶辫触锛�); } - if (TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, + if (TaskHelper.LogCreateTask(detail.S_LOC_CODE, detail.S_CNTR_CODE, endLoc.S_CODE, TaskName.鎶芥_鍑哄簱)) { tran.CommitTran(); } @@ -72,33 +63,45 @@ } public static void UpdateTaskState(int spotStateCode) { + var db = DbHelper.GetDbClient(); var detail = db.Queryable<TN_Check_Detail>() .First(d => d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�; if (detail == null) { - LogHelper.Info("褰撳墠娌℃湁鎵ц涓殑鎶芥鍗曟槑缁嗛」鐩�); + LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚--鏌ヨDetail锛氬綋鍓嶆病鏈�鎵ц涓�鐨凞etail琛紒"); return; } using (var tran = db.Ado.UseTran()) { detail.N_B_STATE = spotStateCode; - db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand(); + if (db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚锛氫慨鏀笵etail鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + return; + } - if (db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 2) == - db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO)) { + var finishedCount = db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 3); + var allCount = db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO); + + LogHelper.Info($"鎶芥--AGV浠诲姟瀹屾垚锛氱粺璁′换鍔″凡瀹屾垚锛歿finishedCount} / {allCount}"); + + if (finishedCount == allCount) { // 褰撳墠order涓嬬殑detail锛屼换鍔¢兘宸茬粡瀹屾垚 if (db.Updateable<TN_Check_Order>().SetColumns(it => it.N_B_STATE == SpotStateCode.浠诲姟鎵ц瀹屾垚) .Where(it => it.S_NO == detail.S_NO) .ExecuteCommand() <= 0) { + tran.RollbackTran(); - LogHelper.Info("淇敼Order鐘舵�閿欒"); + LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + return; } } tran.CommitTran(); } } + } } diff --git a/ServiceCore/OutboundCore.cs b/ServiceCore/OutboundCore.cs index 5f684c3..488821a 100644 --- a/ServiceCore/OutboundCore.cs +++ b/ServiceCore/OutboundCore.cs @@ -4,6 +4,8 @@ using HH.WCS.Mobox3.DSZSH.Helpers; using HH.WCS.Mobox3.DSZSH.Models; +using Newtonsoft.Json; + namespace HH.WCS.Mobox3.DSZSH.ServiceCore { public class OutboundCore { public static void CheckOrderState() { @@ -14,24 +16,26 @@ .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc).First(); if (order == null) { - LogHelper.Info("杞锛氭殏鏃犲緟鎵ц鐨勫嚭搴撳崟"); + LogHelper.Info("杞--鍑哄簱--鏆傛棤寰呮墽琛岀殑Order"); return; } - if (db.Queryable<TN_Outbound_Detail>() - .First(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓� != null) { - LogHelper.Debug("杞锛氫笂涓�釜鍑哄簱浠诲姟浠嶅湪杩涜涓�); + var lastDetail = db.Queryable<TN_Outbound_Detail>() + .First(d => d.S_OO_NO == order.S_NO && d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�; + + if (lastDetail != null) { + LogHelper.Info($"杞--鍑哄簱--涓婁竴涓换鍔′粛鍦ㄨ繘琛屼腑锛� + JsonConvert.SerializeObject(lastDetail)); return; } var detail = db.Queryable<TN_Outbound_Detail>() - .Where(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟) + .Where(d => d.S_OO_NO == order.S_NO && d.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟) .OrderBy(d => d.T_CREATE, SqlSugar.OrderByType.Asc).First(); if (detail == null) { //order.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓� - LogHelper.Info("杞鍑哄簱锛氭殏鏃犲緟鎵ц鐨勪换鍔�); + LogHelper.Info($"杞--鍑哄簱--褰撳墠Order '{order.S_NO}' 鏆傛棤寰呮墽琛岀殑浠诲姟"); return; } @@ -40,7 +44,7 @@ .First(); if (startLocCntrRel == null) { - LogHelper.Info("杞锛氬嚭搴擄細娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�); + LogHelper.Info($"杞--鍑哄簱锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�); return; } @@ -50,7 +54,7 @@ .Where(ExprHelper.LocIsEmpty).First(); if (endLoc == null) { - LogHelper.Info("杞锛氬嚭搴擄細娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�); + LogHelper.Info($"杞--鍑哄簱锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛丼_NO涓�'{detail.S_OO_NO}'锛岃姹侫rea涓�'{detail.S_END_AREA}'"); return; } @@ -58,16 +62,15 @@ detail.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓� if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { tran.RollbackTran(); - LogHelper.Info($"杞锛氬嚭搴擄細鏇存柊澶辫触锛氫慨鏀规槑缁嗚〃鐘舵�涓哄畬鎴�); + LogHelper.Info($"杞--鍑哄簱--淇敼鏄庣粏琛ㄧ姸鎬佷负瀹屾垚澶辫触锛�); } - if (TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, + if (!TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, endLoc.S_CODE, TaskName.鎴愬搧鑳跺嚭搴�) { - tran.CommitTran(); - } - else { tran.RollbackTran(); } + + tran.CommitTran(); } } catch (Exception ex) { @@ -76,28 +79,39 @@ } public static void UpdateTaskState(int spotStateCode) { + var db = DbHelper.GetDbClient(); var detail = db.Queryable<TN_Outbound_Detail>() - .First(d => d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�; + .First(d => d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�; if (detail == null) { - LogHelper.Info("褰撳墠娌℃湁鎵ц涓殑鍑哄簱鍗曟槑缁嗛」鐩�); + LogHelper.Info("鍑哄簱--AGV鍙栬揣--鏌ヨDetail锛氬綋鍓嶆病鏈�鎵ц涓�鐨凞etail琛紒"); return; } using (var tran = db.Ado.UseTran()) { detail.N_B_STATE = spotStateCode; - db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand(); + if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info("鍑哄簱--AGV鍙栬揣锛氫慨鏀笵etail鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + return; + } - if (db.Queryable<TN_Outbound_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 2) == - db.Queryable<TN_Outbound_Detail>().Count(d => d.S_NO == detail.S_NO)) { + var finishedCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == detail.S_OO_NO && d.N_B_STATE == 3); + var allCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == detail.S_OO_NO); - if (db.Updateable<TN_Check_Order>().SetColumns(it => it.N_B_STATE == SpotStateCode.浠诲姟鎵ц瀹屾垚) - .Where(it => it.S_NO == detail.S_NO) + LogHelper.Info($"鍑哄簱--AGV鍙栬揣--缁熻浠诲姟宸插畬鎴愶細{finishedCount} / {allCount}"); + + if (finishedCount == allCount) { // 褰撳墠鍑哄簱鍗曚笅鐨勬墍鏈夋槑缁嗗崟锛屼换鍔¢兘宸茬粡瀹屾垚 + + if (db.Updateable<TN_Outbound_Order>().SetColumns(it => it.N_B_STATE == SpotStateCode.浠诲姟鎵ц瀹屾垚) + .Where(it => it.S_NO == detail.S_OO_NO) .ExecuteCommand() <= 0) { + tran.RollbackTran(); - LogHelper.Info("淇敼Order鐘舵�閿欒"); + LogHelper.Info("鍑哄簱--AGV鍙栬揣--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + return; } } diff --git a/ServiceCore/ShiftCore.cs b/ServiceCore/ShiftCore.cs index d74141e..c8d47ec 100644 --- a/ServiceCore/ShiftCore.cs +++ b/ServiceCore/ShiftCore.cs @@ -23,13 +23,13 @@ .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc).First(); if (order == null) { - LogHelper.Info("杞锛氭殏鏃犲緟鎵ц鐨勭Щ搴撳崟"); + LogHelper.Info("杞--绉诲簱--鏆傛棤寰呮墽琛岀殑Order"); return; } if (db.Queryable<TN_Shift_Detail>() .First(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓� != null) { - LogHelper.Debug("杞锛氫笂涓�釜绉诲簱浠诲姟浠嶅湪杩涜涓�); + LogHelper.Debug("杞--绉诲簱--涓婁竴涓换鍔′粛鍦ㄨ繘琛屼腑"); return; } @@ -40,7 +40,7 @@ if (detail == null) { //order.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓� - LogHelper.Info("杞绉诲簱锛氭殏鏃犲緟鎵ц鐨勪换鍔�); + LogHelper.Info("杞--绉诲簱--鏆傛棤寰呮墽琛岀殑浠诲姟"); return; } @@ -49,7 +49,7 @@ .First(); if (startLocCntrRel == null) { - LogHelper.Info("杞锛氱Щ搴擄細娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�); + LogHelper.Info("杞--绉诲簱锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�); return; } @@ -59,7 +59,7 @@ .Where(ExprHelper.LocIsEmpty).First(); if (endLoc == null) { - LogHelper.Info("杞锛氬嚭搴擄細娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�); + LogHelper.Info("杞--鍑哄簱锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛�); return; } @@ -67,16 +67,15 @@ detail.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓� if (db.Updateable<TN_Shift_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { tran.RollbackTran(); - LogHelper.Info($"杞锛氬嚭搴擄細鏇存柊澶辫触锛氫慨鏀规槑缁嗚〃鐘舵�涓哄畬鎴�); + LogHelper.Info($"杞--鍑哄簱锛氫慨鏀规槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�); } - if (TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, + if (!TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, endLoc.S_CODE, TaskName.鎴愬搧鑳跺嚭搴�) { - tran.CommitTran(); - } - else { tran.RollbackTran(); } + + tran.CommitTran(); } } catch (Exception ex) { @@ -85,28 +84,39 @@ } public static void UpdateTaskState(int spotStateCode) { + var db = DbHelper.GetDbClient(); var detail = db.Queryable<TN_Shift_Detail>() .First(d => d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�; if (detail == null) { - LogHelper.Info("褰撳墠娌℃湁鎵ц涓殑绉诲簱鍗曟槑缁嗛」鐩�); + LogHelper.Info("绉诲簱--AGV浠诲姟瀹屾垚--鏌ヨDetail锛氬綋鍓嶆病鏈�鎵ц涓�鐨凞etail琛紒"); return; } using (var tran = db.Ado.UseTran()) { detail.N_B_STATE = spotStateCode; - db.Updateable<TN_Shift_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand(); + if (db.Updateable<TN_Shift_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info("绉诲簱--AGV浠诲姟瀹屾垚锛氫慨鏀笵etail鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + return; + } - if (db.Queryable<TN_Shift_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 2) == - db.Queryable<TN_Shift_Detail>().Count(d => d.S_NO == detail.S_NO)) { + var finishedCount = db.Queryable<TN_Shift_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 3); + var allCount = db.Queryable<TN_Shift_Detail>().Count(d => d.S_NO == detail.S_NO); + + LogHelper.Info($"绉诲簱--AGV浠诲姟瀹屾垚锛氱粺璁′换鍔″凡瀹屾垚锛歿finishedCount} / {allCount}"); + + if (finishedCount == allCount) { // 褰撳墠order涓嬬殑detail锛屼换鍔¢兘宸茬粡瀹屾垚 if (db.Updateable<TN_Shift_Order>().SetColumns(it => it.N_B_STATE == SpotStateCode.浠诲姟鎵ц瀹屾垚) .Where(it => it.S_NO == detail.S_NO) .ExecuteCommand() <= 0) { + tran.RollbackTran(); - LogHelper.Info("淇敼Order鐘舵�閿欒"); + LogHelper.Info("绉诲簱--AGV浠诲姟瀹屾垚--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + return; } } diff --git a/Services/DebugService.cs b/Services/DebugService.cs index cbc8c2a..8537315 100644 --- a/Services/DebugService.cs +++ b/Services/DebugService.cs @@ -80,35 +80,37 @@ /// 鍒濆鏁版嵁搴撳缓绔� /// </summary> /// <returns></returns> - public static string CreateDatabase(bool cover = true) { + public static string CreateDatabase(bool cover = false) { try { var db = DbHelper.GetDbClient(); var entityTypes = new Type[] { - typeof(TN_CAR_IN), - typeof(TN_CG_Detail), - typeof(TN_Container), - typeof(TN_Loc_Container), - typeof(TN_Location), - typeof(TN_Task), - typeof(TN_Task_Action), - typeof(SysHelper.OI_SYS_MAXID), + //typeof(TN_CAR_IN), + //typeof(TN_CG_Detail), + //typeof(TN_Container), + //typeof(TN_Loc_Container), + //typeof(TN_Location), + //typeof(TN_Task), + //typeof(TN_Task_Action), + //typeof(SysHelper.OI_SYS_MAXID), - typeof(TN_Inbound_Order), + //typeof(TN_Inbound_Order), typeof(TN_Check_Detail), - typeof(TN_Check_Order), - typeof(TN_CNTR_ITEM), - typeof(TN_Outbound_Detail), - typeof(TN_Outbound_Order), + //typeof(TN_Check_Order), + //typeof(TN_CNTR_ITEM), + //typeof(TN_Outbound_Detail), + //typeof(TN_Outbound_Order), + //typeof(TN_Shift_Order), + //typeof(TN_Shift_Detail) }; using (var tran = db.Ado.UseTran()) { if (cover) { // 鍒犻櫎鎵�湁琛紙鎸変緷璧栧叧绯诲�搴忥級 - var tables = db.DbMaintenance.GetTableInfoList(); - foreach (var table in tables.OrderByDescending(t => t.Name)) { - db.DbMaintenance.DropTable(table.Name); - } + //var tables = db.DbMaintenance.GetTableInfoList(); + //foreach (var table in tables.OrderByDescending(t => t.Name)) { + // db.DbMaintenance.DropTable(table.Name); + //} // 鍒涘缓鏂拌〃 db.CodeFirst.InitTables(entityTypes); diff --git a/Services/MoboxService.cs b/Services/MoboxService.cs index 680d804..1e82ed8 100644 --- a/Services/MoboxService.cs +++ b/Services/MoboxService.cs @@ -3,6 +3,7 @@ using System.Linq; using HH.WCS.Mobox3.DSZSH.Consts; +using HH.WCS.Mobox3.DSZSH.Dispatch; using HH.WCS.Mobox3.DSZSH.Helper; using HH.WCS.Mobox3.DSZSH.Helpers; using HH.WCS.Mobox3.DSZSH.Models; @@ -371,11 +372,13 @@ public static SimpleResult CreateCheckOrder(CreateCheckOrderInfo model) { var db = DbHelper.GetDbClient(); try { + var orderNo = GenerateOrderNo("鎶芥鍗曞彿", "CN"); + // 缁戝畾鎿嶄綔锛氭彃鍏ュ嚭搴撳崟銆佹墍鏈夌殑鍑哄簱鍗曟槑缁� using (var tran = db.Ado.UseTran()) { var order = new TN_Check_Order { - S_NO = GenerateOrderNo("鎶芥鍗曞彿", "CN"), + S_NO = orderNo, S_ITEM_CODE = model.ItemCode, //S_ITEM_NAME = model.ItemName, S_BATCH_NO = model.BatchNo, @@ -388,20 +391,33 @@ return BuildSimpleResult(2, "鐢熸垚 鎶芥鍗�澶辫触锛� + JsonConvert.SerializeObject(order)); } - for (int i = 0; i < model.Qty; i++) { - var detail = new TN_Check_Detail { - S_NO = order.S_NO, - S_ITEM_CODE = model.ItemCode, - S_BATCH_NO = model.BatchNo, - S_END_AREA = model.EndArea - }; + var cgDetailList = SelectCgByTotalQty(model); - if (db.Insertable<TN_Check_Detail>(detail).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return BuildSimpleResult(3, "鐢熸垚 鎶芥鍗曟槑缁�澶辫触锛� + JsonConvert.SerializeObject(detail)); - } + if (cgDetailList.Count == 0) { + return BuildSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ユ娊妫�); } + foreach (var cgDetail in cgDetailList) { + var detail = new TN_Outbound_Detail { + S_OO_NO = orderNo, + S_ITEM_CODE = cgDetail.S_ITEM_CODE, + S_BATCH_NO = cgDetail.S_BATCH_NO, + S_CNTR_CODE = cgDetail.S_CNTR_CODE, + S_END_AREA = model.EndArea, + }; + + cgDetail.N_ITEM_STATE = 3; + cgDetail.S_ITEM_STATE = "姝e湪妫�獙"; + + if (db.Insertable<TN_Outbound_Detail>(detail).ExecuteCommand() <= 0 + && db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(4, "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + JsonConvert.SerializeObject(detail)); + } + + LogHelper.Debug("鍒涘缓鍑哄簱鍗曟槑缁嗘垚鍔燂細" + JsonConvert.SerializeObject(detail)); + } + tran.CommitTran(); } return BuildSimpleResult(0, $"鍒涘缓 鎶芥鍗�鎴愬姛"); @@ -556,6 +572,56 @@ } } + public static List<TN_CG_Detail> SelectCgByTotalQty(CreateCheckOrderInfo model) { + var db = DbHelper.GetDbClient(); + var result = new List<TN_CG_Detail>(); + var targetNum = model.Qty; + + try { + var targetCg = db.Queryable<TN_CG_Detail>().Where(a => a.S_ITEM_CODE == model.ItemCode + && a.N_ITEM_NUM > targetNum). + OrderBy(a => a.N_ITEM_NUM, OrderByType.Asc).First(); + if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠�+ { + result.Add(targetCg); + return result; + } + + var sortedMaterials = new List<TN_CG_Detail>(); + + 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.N_ITEM_NUM > 0) + .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) + .Where(d => d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮") + .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc) + .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); + + if (sortedMaterials.Count == 0) //娌℃湁婊¤冻鏉′欢鐨�+ { + return result; + } + + int countNum = 0; + foreach (var mat in sortedMaterials) { + countNum += mat.N_ITEM_NUM; + result.Add(mat); + if (countNum >= targetNum) { + break; + } + } + if (result.Sum(a => a.N_ITEM_NUM) >= targetNum) { + return result; + } + else { + result.Clear(); + return result; + } + } + catch (Exception ex) { + throw ex; + } + } + #endregion #region Mobox 鍔熻兘 @@ -584,14 +650,13 @@ return BuildSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�); } - // NOTE 濡傛灉鍒涘缓order鐨勬椂鍊欏氨鎸囧畾鍏蜂綋鍑哄簱鐗╂枡鐨刢ntr锛岄偅涔堝鏋滃湪鍒涘缓浠诲姟鍓嶏紝杩欎釜鐗╂枡琚敊璇娊妫�簡鎬庝箞鍔� foreach (var cgDetail in cgDetailList) { var detail = new TN_Outbound_Detail { - S_NO = orderNo, + S_OO_NO = orderNo, S_ITEM_CODE = cgDetail.S_ITEM_CODE, S_BATCH_NO = cgDetail.S_BATCH_NO, S_CNTR_CODE = cgDetail.S_CNTR_CODE, - N_COUNT = cgDetail.N_QTY, + N_COUNT = cgDetail.N_ITEM_NUM, S_END_AREA = model.EndArea }; @@ -646,10 +711,9 @@ return BuildSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�); } - // NOTE 濡傛灉鍒涘缓order鐨勬椂鍊欏氨鎸囧畾鍏蜂綋鍑哄簱鐗╂枡鐨刢ntr锛岄偅涔堝鏋滃湪鍒涘缓浠诲姟鍓嶏紝杩欎釜鐗╂枡琚敊璇娊妫�簡鎬庝箞鍔� foreach (var cgDetail in cgDetailList) { var detail = new TN_Outbound_Detail { - S_NO = orderNo, + S_OO_NO = orderNo, S_ITEM_CODE = cgDetail.S_ITEM_CODE, S_BATCH_NO = cgDetail.S_BATCH_NO, S_CNTR_CODE = cgDetail.S_CNTR_CODE, @@ -693,8 +757,8 @@ try { var targetCg = db.Queryable<TN_CG_Detail>().Where(a => a.S_ITEM_CODE == model.ItemCode - && a.N_QTY > targetNum). - OrderBy(a => a.N_QTY, OrderByType.Asc).First(); + && a.N_ITEM_NUM > targetNum). + OrderBy(a => a.N_ITEM_NUM, OrderByType.Asc).First(); if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠� { result.Add(targetCg); @@ -702,29 +766,42 @@ } // 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.N_QTY > 0) + + var sortedMaterials = new List<TN_CG_Detail>(); + + if (model.ForcedOut) { + 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.N_ITEM_NUM > 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.N_QTY, OrderByType.Desc) + .Where(d => d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸" + || d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮") + .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc) .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); + } + else { + 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.N_ITEM_NUM > 0) + .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) + .Where(d => d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸") + .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc) + .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); + } + if (sortedMaterials.Count == 0) //娌℃湁婊¤冻鏉′欢鐨� { return result; } - float countNum = 0; + int countNum = 0; foreach (var mat in sortedMaterials) { - countNum += mat.N_QTY; + countNum += mat.N_ITEM_NUM; result.Add(mat); if (countNum >= targetNum) { break; } } - if (result.Sum(a => a.N_QTY) >= targetNum) { + if (result.Sum(a => a.N_ITEM_NUM) >= targetNum) { return result; } else { diff --git a/Services/WmsService.cs b/Services/WmsService.cs index 2d58939..6118018 100644 --- a/Services/WmsService.cs +++ b/Services/WmsService.cs @@ -33,7 +33,7 @@ S_STANDARD = model.Standard, S_NET_WEIGHT = model.NetWeight, S_QUALITY_GRADE = model.QualityGrade, - N_PRODUCT_LINE = random.Next(0, 3), // NOTE 浜х嚎鍙凤細鐩墠闅忔満锛堝悗鏈熷彲鑳戒細鎸囧畾锛屾垨鑰匬DA缁戝畾鏃跺啀濉叆锛�+ //N_PRODUCT_LINE = random.Next(0, 3), // NOTE 浜х嚎鍙凤細鐩墠闅忔満锛堝悗鏈熷彲鑳戒細鎸囧畾锛屾垨鑰匬DA缁戝畾鏃跺啀濉叆锛� }; // 璐т綅瀹瑰櫒缁戝畾鐨勯�杈戯紝鍦ㄥソ杩愮涓嬬嚎PDA鐨勬祦绋嬩腑鎿嶄綔 -- Gitblit v1.9.1