From d0a265713fd18162f3a82bdcd22e267df7298c7b Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期一, 26 五月 2025 08:59:52 +0800 Subject: [PATCH] 印尼佳通-半制品代码逻辑优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs | 807 +++++++++++++++++++++++--------------------------------- 1 files changed, 334 insertions(+), 473 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs index f4dc478..e2d0f97 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs @@ -1,9 +1,11 @@ -锘縰sing HH.WCS.Mobox3.YNJT_PT.api; +锘縰sing HH.WCS.Mobox3.YNJT_BZP_PT.models; +using HH.WCS.Mobox3.YNJT_PT.api; using HH.WCS.Mobox3.YNJT_PT.models; using HH.WCS.Mobox3.YNJT_PT.models.other; using HH.WCS.Mobox3.YNJT_PT.util; using Newtonsoft.Json; using NLog.Fluent; +using SqlSugar; using System; using System.Collections.Generic; using System.Linq; @@ -23,10 +25,10 @@ var date = DateTime.Now.ToString("yyMMdd"); return $"OP{date}{id.ToString().PadLeft(4, '0')}"; } - internal static string GenerateSortingNo() { - var id = SYSHelper.GetSerialNumber("鍒嗘嫞鍗�, "SO"); + internal static string GenerateTaskGroupNo() { + var id = SYSHelper.GetSerialNumber("浠诲姟缁�, "GP"); var date = DateTime.Now.ToString("yyMMdd"); - return $"SO{date}{id.ToString().PadLeft(4, '0')}"; + return $"GP{date}{id.ToString().PadLeft(4, '0')}"; } internal static List<WMSTask> GetOperationListByState(string state) { var db = new SqlHelper<object>().GetInstance(); @@ -77,130 +79,9 @@ return result; } - internal static bool CreateSortingOrder(List<string> list) { - var res = false; - //閬嶅巻鑾峰彇鍙戣揣鍗曪紝鐒跺悗鍒ゆ柇搴撳瓨锛屽鏋滃叏閮芥病搴撳瓨锛屽垯涓嶇敓鎴愬垎鎷e崟锛屽鏋滄湁鐢熸垚鍒嗘嫞鍗�- //鏇存柊娉㈡鍗曪紝鍗充娇鍙湁涓�釜鍙戣揣鍗曚篃鏇存柊娉㈡鍗�- var db = new SqlHelper<object>().GetInstance(); - var sortingOrderNo = ""; - SortingOrder sortingOrder = null; - try { - db.BeginTran(); - list.ForEach(a => { - var so = db.Queryable<ShippingOrder>().Includes(s => s.Details).Where(s => s.S_NO == a).First(); - //鍒ゆ柇搴撳瓨锛屽彧鏈夊凡缁忓叆搴撶殑鎵嶅彲浠ヨ绠楋紝鐮佺洏鐨勪笉绠楋紝鍏ュ簱鍚庡嚭搴撻�涓殑涔熻璁$畻锛岀爜鐩樺悗榛樿鍙緟鍏ュ簱锛屽叆搴撳悗鍙甯�- //鐢熸垚鍑哄簱浠诲姟锛屽彧鏈夋墭鐩樹綅缃湪绔嬪簱鎵嶉渶瑕佸垱寤哄嚭搴撲换鍔★紙鍏堝啓姝荤珛搴擄級 - //鍙湁鍏ㄩ儴鍒嗘嫞瀹屾垚鎵嶅厑璁稿洖搴擄紙涓�釜鎵樼洏鍙兘瀵瑰簲澶氫釜鍒嗘嫞鏄庣粏锛�+ - //鏌ユ壘浠撳簱閲忚〃鍜屽簱鍖洪噺琛紝鍑哄簱鍗曢渶瑕佸畾浣嶄粨搴撳拰搴撳尯浜嗭紝鍑哄簱瀹氫綅鐗╃悊搴撳尯灏辫锛屽叆搴撳彲鑳界墿鏂欏簱鍖鸿繕瑕佸尯鍒嗛�杈戝簱鍖�- - //鏆傛椂鍙煡浠撳簱閲忚〃锛堥噺琛ㄥ浣曢噸缃紝鏌ユ壘鎵�湁鏌ユ壘C_ENABLE=N鐨勶紝鍒ゆ柇濡傛灉鍦ㄤ粨搴撲腑锛屾敼鎴怸锛岀劧鍚庣粺璁★級 - - //鐢熸垚鍒嗘嫞鍗曟椂鍊欏鍔犱粨搴撻噺琛ㄥ垎閰嶉噺锛岀敓鎴愬垎鎷e崟鏄庣粏鏃跺�锛屽鍔犲簱鍖洪噺琛ㄥ垎閰嶉噺 - if (so != null && so.Details.Count > 0) { - var fail = true; - for (int i = 0; i < so.Details.Count; i++) { - var whi = db.Queryable<WHInventory>().Where(w => w.S_ITEM_CODE == so.Details[i].S_ITEM_CODE).First(); - if (whi != null && whi.F_QTY - whi.F_ALLOC_QTY > 0) { - //鏈夎揣灏卞嚭 - float qty = whi.F_QTY - whi.F_ALLOC_QTY > so.Details[i].F_QTY ? so.Details[i].F_QTY : whi.F_QTY - whi.F_ALLOC_QTY; - fail = false; - //鏈夊彲鐢ㄥ簱瀛橈紝鐢熸垚鍒嗘嫞鍗�- if (sortingOrderNo == "") { - sortingOrderNo = GenerateSortingNo(); - sortingOrder = new SortingOrder - { - S_NO = sortingOrderNo, - S_SHIPPING_NO = so.S_NO, - Composes = new List<SortingCompose>() - }; - //鍒涘缓鍒嗘嫞鍗�- db.Insertable(sortingOrder).ExecuteCommand(); - } - else { - //鑾峰彇鏈�柊鍒嗘嫞鍗�- sortingOrder = db.Queryable<SortingOrder>().Includes(s => s.Composes).Where(s => s.S_NO == sortingOrderNo).First(); - //鏇存柊鍒嗘嫞鍗曚腑鐨勫彂璐у崟鍗曞彿 - sortingOrder.S_SHIPPING_NO = sortingOrder.S_SHIPPING_NO + ";" + so.S_NO; - sortingOrder.T_MODIFY = DateTime.Now; - db.Updateable(sortingOrder).UpdateColumns(it => new { it.S_SHIPPING_NO, it.T_MODIFY }).ExecuteCommand(); - } - //鏌ヨ鍒嗘嫞鍗曞瓙琛紙姝e父鎯呭喌杩橀渶瑕佸鍔犳壒娆″垽鏂級 - var soc = db.Queryable<SortingCompose>().Where(s => s.S_ITEM_CODE == so.Details[i].S_ITEM_CODE && s.S_SORTING_NO == sortingOrder.S_NO).First(); - if (soc == null) { - soc = new SortingCompose - { - S_ITEM_CODE = so.Details[i].S_ITEM_CODE, - S_SORTING_NO = sortingOrder.S_NO, - F_QTY = qty, - N_ROW_NO = sortingOrder.Composes.Count() + 1, - S_BATCH_NO = so.Details[i].S_BATCH_NO - }; - - //鍒涘缓鍒嗘嫞鍗曞瓙琛�- db.Insertable(soc).ExecuteCommand(); - } - else { - soc.F_QTY += qty; - soc.T_MODIFY = DateTime.Now; - //鏇存柊鍒嗘嫞鍗曞瓙琛�- db.Updateable(soc).UpdateColumns(it => new { it.F_QTY, it.T_MODIFY }).ExecuteCommand(); - } - //鏇存柊浠撳簱閲忚〃鍒嗛厤閲�- whi.F_ALLOC_QTY += qty; - whi.T_MODIFY = DateTime.Now; - db.Updateable(whi).UpdateColumns(it => new { it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand(); - //璺熸柊鍙戣揣鍗曞瓙琛ㄩ厤璐ф暟閲�- so.Details[i].F_ACC_D_QTY += qty; - so.Details[i].T_MODIFY = DateTime.Now; - db.Updateable(so.Details[i]).UpdateColumns(it => new { it.F_ACC_D_QTY, it.T_MODIFY }).ExecuteCommand(); - } - - } - //鏇存柊鍙戣揣鍗曠姸鎬�- so.N_B_STATE = fail ? 5 : 1; - if (fail) { - so.S_NOTE = "娌℃湁搴撳瓨"; - } - so.S_WAVE_CODE = sortingOrderNo; - so.T_MODIFY = DateTime.Now; - db.Updateable(so).UpdateColumns(it => new { it.N_B_STATE, it.T_MODIFY, it.S_WAVE_CODE, it.S_NOTE }).ExecuteCommand(); - - } - - - //鏌ユ壘搴撳尯鍐呮墭鐩樼敓鎴愭墭鐩樻槑缁嗭紙鍖呮嫭鍒嗘嫞涓級鎬庝箞鍒ゆ柇搴撳唴锛熸煡鎵捐揣浣嶇粦瀹氾紵杩樻槸鎵樼洏涓婂姞鏍囪瘑姣旇緝濂斤紝濡傛灉鏄暣鎵樺嚭鐨勶紝鍒嗘嫞纭鍚庡幓鎺夊垎鎷f爣璇嗐� - //1銆佸彧鏈夌爜鐩樺叆搴撳悗鐨勬墠闇�鍔犳爣璇嗭紝鍒嗘嫞鍥炵殑涓嶇敤锛屽垎鎷e洖鐨勬爣璇嗚繕鍦紝娌℃湁鍙樸�鍐欐鐮佺洏鍏ョ殑瀹屾垚鍚庡姞鏍囪瘑锛屾暣鎵樺垎鎷g殑鍘绘帀鏍囪瘑锛岄槻姝㈠悗闈㈤噸鏂扮爜鐩樿剰鏁版嵁 - //2銆佹垨鑰呭叧鑱旀煡璇㈠簱鍐呯殑锛屽彧缁欏垎鎷e嚭鐨勫姞鏍囪瘑锛屾瘡娆″垎鎷e洖鍐嶆妸鏍囪瘑娓呴櫎浜嗭紙濡傛灉涓嶆竻闄ゅ甫鏍囪瘑鐨勪細寰堝锛岃繕涓嶅鍏ㄩ儴鍔犳爣璇嗭級锛屾暣鎵樼殑娓呴櫎銆�- //缁煎悎閫夋嫨杩樻槸鏂规1锛岃繖鏍峰垱寤哄垎鎷f槑缁嗭紝鍙渶瑕佹墭鐩樼墿鏂欎袱琛ㄦ煡璇㈠氨鑳藉畾浣嶆墭鐩橈紙濡傛灉淇℃伅涓嶅噯锛屽彲浠ラ噸缃級锛屾柟妗�闇�璐т綅銆佹墭鐩樸�鐗╂枡涓夎〃鑱旀煡 - - //鏆傛椂涓嶈搴撳尯锛屾爣璇嗙敤瀹瑰櫒琛�C_ENABLE 鏉ュ垽鏂紝琛ㄧず鑳戒笉鑳藉嚭搴�- - //鎵ц鍒嗘嫞鍒涘缓浠诲姟锛岄亶鍘嗗垎鎷f槑缁嗕腑鐨勬墭鐩橈紝濡傛灉鍦ㄤ粨搴撳氨鍑哄簱锛屽鏋滀笉鍦ㄥ氨涓嶇敤鍑哄簱 - - - }); - //鍏ㄩ儴鍒嗘嫞鍗曠敓鎴愪箣鍚庡皢鍒嗘嫞鍗曠姸鎬佽缃负寮�閰嶈揣,娉㈡鍙蜂负鍙戣揣鍗�- sortingOrder = db.Queryable<SortingOrder>().Where(s => s.S_NO == sortingOrderNo).First(); - sortingOrder.N_B_STATE = 1; - sortingOrder.T_MODIFY = DateTime.Now; - db.Updateable(sortingOrder).UpdateColumns(it => new { it.N_B_STATE, it.T_MODIFY }).ExecuteCommand(); - db.CommitTran(); - res = true; - } - catch (Exception ex) { - Console.WriteLine(ex.Message); - db.RollbackTran(); - } - return res; - - } - - internal static List<SortingDetail> GetSortingDetailByCntr(string cntr) { - var db = new SqlHelper<object>().GetInstance(); - var result = db.Queryable<SortingDetail>().Where(a => a.S_CNTR_CODE == cntr && a.N_B_STATE != 2).ToList(); - return result; - } + internal static bool CreateWmsTask(WMSTask wmsTask) { try { @@ -250,74 +131,7 @@ var db = new SqlHelper<object>().GetInstance(); return db.Queryable<WMSTask>().Where(a => a.S_CODE == code).First(); } - /* - internal static void CreateSortingOrderDetail(string so_no) { - //鍒嗘嫞鍗曢厤璐�- var db = new SqlHelper<object>().GetInstance(); - var so = db.Queryable<SortingOrder>().Includes(a => a.Composes).Where(a => a.S_NO == so_no && (a.N_B_STATE == 1 || a.N_B_STATE == 20)).First();// - if (so != null && so.Composes.Count > 0) { - db.BeginTran(); - try { - int rowNo = 1; - so.Composes.ForEach(a => { - //鎸夊垎鎷e崟瀛愯〃鍘婚厤璐э紝鏌ユ壘鍙敤鎵樼洏(鍏堟煡鎵�湁绗﹀悎鐨勶紝鍚庨潰鍐嶄紭鍖� - var cirList = db.Queryable<CntrItemRel>().Includes(c => c.Cntr).Where(c => c.Cntr.C_ENABLE == "Y" && c.S_ITEM_CODE == a.S_ITEM_CODE && (c.F_QTY - c.F_ALLOC_QTY) > 0).OrderBy(c => c.T_CREATE).ToList(); - for (int i = 0; i < cirList.Count; i++) { - var cir = cirList[i]; - var sd = new SortingDetail - { - N_ROW_NO = rowNo, - S_BATCH_NO = a.S_BATCH_NO, - S_ITEM_CODE = a.S_ITEM_CODE, - S_CNTR_CODE = cir.S_CNTR_CODE, - S_SORTING_NO = a.S_SORTING_NO - }; - bool needBreak = false; - if (cir.F_QTY - cir.F_ALLOC_QTY >= (a.F_QTY - a.F_ACC_S_QTY)) { - //瀹瑰櫒鍙敤鏁伴噺澶т簬鍒嗘嫞鍗曞瓙琛ㄨ姹傜殑鏁伴噺锛岀敓鎴愬垎鎷f槑缁嗭紝鐒跺悗璺冲嚭寰幆 - sd.F_QTY = a.F_QTY - a.F_ACC_S_QTY; - needBreak = true; - } - else { - //鐢熸垚鍒嗘嫞鏄庣粏锛岀户缁垱寤�- sd.F_QTY = cir.F_QTY - cir.F_ALLOC_QTY; - } - db.Insertable(sd).ExecuteCommand(); - rowNo++; - //鏇存柊瀹瑰櫒璐у搧琛ㄥ垎閰嶉噺 - cir.F_ALLOC_QTY += sd.F_QTY; - cir.T_MODIFY = DateTime.Now; - db.Updateable(cir).UpdateColumns(it => new { it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand(); - //鏇存柊鍒嗘嫞鍗曞瓙琛ㄧ殑閲�- a.F_ACC_S_QTY += sd.F_QTY; - a.T_MODIFY = DateTime.Now; - db.Updateable(cir).UpdateColumns(it => new { it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand(); - if (needBreak) { - break; - } - } - }); - //鍏ㄩ儴鍒嗘嫞鍗曞瓙琛ㄧ敓鎴愬垎鎷f槑缁嗭紝淇敼鍒嗘嫞鍗曠姸鎬佷负閰嶈揣瀹屾垚(鍙嶆浠撳簱鐨勮揣鑳介厤鐨勯兘閰嶅畬浜嗭紝闄ら潪鏁版嵁鏈夊紓甯� - so.N_B_STATE = 2; - so.T_MODIFY = DateTime.Now; - db.Updateable(so).UpdateColumns(it => new { it.N_B_STATE, it.T_MODIFY }).ExecuteCommand(); - db.CommitTran(); - } - catch (Exception ex) { - Console.WriteLine(ex.Message); - db.RollbackTran(); - } - } - } - */ - /// <summary> - /// 鑾峰彇寮�閰嶈揣鐨勫垎鎷e崟锛屼竴娆℃�鐢熸垚鍒嗘嫞鏄庣粏锛岄伩鍏嶇敓鎴愪竴鍗婂啀鐢熸垚锛屾墍浠ュ垱寤哄垎鎷f槑缁嗙殑鏃跺�鍔犱笂浜嬪姟 - /// </summary> - /// <returns></returns> - internal static List<SortingOrder> GetWaitingSortingOrderList() { - var db = new SqlHelper<object>().GetInstance(); - return db.Queryable<SortingOrder>().Includes(a => a.Composes).Where(a => a.N_B_STATE == 1 || a.N_B_STATE == 20).ToList(); - } + /// <summary> /// 鑾峰彇閰嶈揣瀹屾垚鐨勫垎鎷e崟锛屾瘡涓垎鎷e崟鍗曠嫭鍒涘缓鍒嗘嫞浣滀笟 /// </summary> @@ -509,288 +323,335 @@ return result; } - public static Location GetLocation4InEmptyRow() + + // ----------------------------------------------- 鍗板凹浣抽� - 纭寲-------------------------------------------- + + /// <summary> + /// 娣诲姞鎴愬瀷鏈轰笅绾胯褰�+ /// </summary> + /// <param name="record"></param> + /// <returns></returns> + public static bool addOffLineRecord(OffLineRecord record) { - Location result = null; - try - { - var db = new SqlHelper<object>().GetInstance(); - - #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓 - //Console.WriteLine("鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓"); - //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪 - var list = db.Queryable<Location>().OrderBy(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList(); - //2.1 閫変竴涓┖鎺�- for (int i = 0; i < list.Count; i++) - { - var other = db.Queryable<Location>().Where(a => a.S_AREA_CODE == list[i].S_AREA_CODE && a.N_ROW == list[i].N_ROW && a.S_LOCK_STATE != "鏃�).First(); - if (list[i].N_LOCK_STATE == 0 && other == null) - { - //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡 - var rowSumInfo = db.Queryable<Location>().Where(l => l.S_AREA_CODE == list[i].S_AREA_CODE && l.N_ROW == list[i].N_ROW && l.N_CURRENT_NUM != 0).Count(); - if (rowSumInfo == 0) - { - result = list[i]; - break; - } - } - } - #endregion - - if (result != null && (!string.IsNullOrEmpty(result.C_ENABLE) && (result.C_ENABLE == "绂佺敤" || result.C_ENABLE == "N"))) - { - //绂佺敤浜嗛�鎷╁悗闈竴涓揣浣�- Console.WriteLine("绂佺敤浜嗛�鎷╁悗闈竴涓揣浣�); - result = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE == result.S_AREA_CODE && a.N_ROW == result.N_ROW && (string.IsNullOrEmpty(a.C_ENABLE) || (a.C_ENABLE != "绂佺敤" && a.C_ENABLE != "N")) && a.N_COL > result.N_COL).First(); - } - } - catch (Exception ex) - { - - LogHelper.Error("GetLocation4InEmptyRow:" + ex.Message, ex); - } - return result; - } - - internal static Location GetInstockEnd(string item) - { - var db = new SqlHelper<object>().GetInstance(); - Location end = null; - // 鏌ヨ鐩稿悓鐗╂枡鐨勬帓鏄惁鏈夊彲鏀捐揣鐨勫簱浣�- var listMaxCol = db.Queryable<Location>() - .LeftJoin<LocCntrRel>((l, lc) => l.S_CODE == lc.S_LOC_CODE) - .LeftJoin<CntrItemRel>((l, lc, ci) => lc.S_CNTR_CODE == ci.S_CNTR_CODE) - .Where((l, lc, ci) => l.N_CURRENT_NUM > 0 && ci.S_ITEM_CODE == item && l.S_AREA_CODE != Settings.BufferArea) - .OrderByDescending((l, lc, ci) => l.N_COL).Take(1).PartitionBy((l, lc, ci) => l.N_ROW).ToList(); - - foreach (var loc in listMaxCol) - { - //鎺掓湁閿佷篃鎺掗櫎 - var other = db.Queryable<Location>().Where(a => a.S_AREA_CODE == loc.S_AREA_CODE && a.N_ROW == loc.N_ROW && a.S_LOCK_STATE != "鏃� && a.N_LOCK_STATE != 0).First(); - if (other != null) - { - continue; - } - - end = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE == loc.S_AREA_CODE && a.N_ROW == loc.N_ROW && a.N_CURRENT_NUM < a.N_CAPACITY && (string.IsNullOrEmpty(a.C_ENABLE) || (a.C_ENABLE != "绂佺敤" && a.C_ENABLE != "N")) && a.N_COL >= loc.N_COL).First(); - if (end != null) { - return end; - } - } - // 濡傛灉娌℃湁锛屽垯闅忔満鏀剧┖鐨勬帓 - if (end == null) { - end = GetLocation4InEmptyRow(); - } - return end; - } - - public static Location GetShiftStockStart(string area ,int row) - { - Location result = null; - try - { - // 1銆佹煡璇㈠綋鍓嶅簱鍖�鎺�鐗╂枡 鏈夋墭鐩樼殑璐т綅 - var db = new SqlHelper<object>().GetInstance(); - result = db.Queryable<Location>() - .Where(l => l.N_CURRENT_NUM > 0 && l.S_AREA_CODE == area && l.N_ROW == row && l.N_LOCK_STATE == 0 && (l.C_ENABLE != "绂佺敤" && l.C_ENABLE != "N")) - .Includes(l => l.LocCntrRel, l => l.CntrItemRel) - .OrderByDescending(l => l.N_COL) - .First(); - } - catch (Exception ex) - { - LogHelper.Error("GetShiftStockStart:" + ex.Message, ex); - } - return result; - } - - public static Location GetShiftStockStart(string area) - { - Location result = null; - try - { - // 1銆佹煡璇㈠綋鍓嶅簱鍖�鎺�鐗╂枡 鏈夋墭鐩樼殑璐т綅 - var db = new SqlHelper<object>().GetInstance(); - var listMaxCol = db.Queryable<Location>() - .Where(l => l.N_CURRENT_NUM > 0 && l.S_AREA_CODE == area) - .Includes(l => l.LocCntrRel, l => l.CntrItemRel) - .OrderByDescending(l => l.N_COL) - .Take(1) - .PartitionBy(l => l.N_ROW) - .ToList(); - - foreach (var loc in listMaxCol) - { - //鎺掓湁閿佷篃鎺掗櫎 - var other = db.Queryable<Location>().Where(a => a.S_AREA_CODE == loc.S_AREA_CODE && a.N_ROW == loc.N_ROW && a.S_LOCK_STATE != "鏃� && a.N_LOCK_STATE != 0).First(); - if (other != null) - { - continue; - } - return loc; - } - } - catch (Exception ex) - { - LogHelper.Error("GetShiftStockStart:" + ex.Message, ex); - } - return result; - } - - public static bool isRowLock(Location location) { - var db = new SqlHelper<object>().GetInstance(); - return db.Queryable<Location>().Where(a => a.S_AREA_CODE == location.S_AREA_CODE && a.N_ROW == location.N_ROW && a.S_LOCK_STATE != "鏃� && a.N_LOCK_STATE != 0).Count() > 0; - } - - public static Location GetShiftStockEnd(string area, int row) - { - Location result = null; - - try - { - //1.0 鑾峰彇姣忎竴鎺掓渶澶х殑鍒�- //1.1 鍒ゆ柇褰撳墠鏁伴噺鏄笉鏄弧鐨勶紝濡傛灉鏄弧鐨勫苟涓旀槸鏈�ぇ鍒楋紝闇�鎺掗櫎 - var listMaxCol = new SqlHelper<Location>().GetInstance().Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == row).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); - //1.1 鏌ュ埌鎵�湁鏈夋墭鐩樼殑鎺� - Console.WriteLine("鏌ュ埌鎵�湁鏈夋墭鐩樼殑鎺�"); - var db = new SqlHelper<object>().GetInstance(); - var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0 && a.S_AREA_CODE == area && a.N_ROW == row).Includes(a => a.LocCntrRel, a => a.CntrItemRel).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); - if (list.Count > 0) - { - //1.2 鏌ユ壘鍏跺畠灏哄鏈夋墭鐩樻垨鑰呴攣瀹氱殑鎺�- for (int i = list.Count - 1; i >= 0; i--) - { - //鎺掗櫎宸茬粡閿佸畾鐨勮揣浣�鍜�鏀炬弧浜嗕笖鏄渶澶у垪鐨勮揣浣�- if (list[i].N_LOCK_STATE != 0 || (list[i].N_CURRENT_NUM == list[i].N_CAPACITY && listMaxCol.Count(a => a.S_CODE == list[i].S_CODE) > 0)) - { - Console.WriteLine($"鎺掗櫎宸茬粡閿佸畾鐨勮揣浣�鍜�鏀炬弧浜嗕笖鏄渶澶у垪鐨勮揣浣�鎺抺list[i].N_ROW}"); - list.Remove(list[i]); - } - else - { - //鎺掓湁閿佷篃鎺掗櫎 - var other = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == list[i].N_ROW && a.S_LOCK_STATE != "鏃� && a.N_LOCK_STATE != 0).First(); - if (other != null) - { - Console.WriteLine($"鎺掗櫎鏈夐攣鐨勬帓{list[i].N_ROW}"); - list.Remove(list[i]); - } - } - } - Console.WriteLine($"鏈夋墭鐩樻帓鏁颁负{list.Count}"); - if (list.Count > 0) - { - - //1.3 閬嶅巻鍒ゆ柇鐗╂枡绫诲瀷鏄惁鐩稿悓 - Console.WriteLine("閬嶅巻鍒ゆ柇鐗╂枡绫诲瀷鏄惁鐩稿悓"); - for (int i = 0; i < list.Count; i++) - { - //todo 杩橀渶瑕佸垽鏂攣 - if (list[i].LocCntrRel != null && list[i].LocCntrRel.CntrItemRel != null) - { - if (list[i].N_CURRENT_NUM < list[i].N_CAPACITY) - { - result = list[i]; - } - else - { - Console.WriteLine("閫夋嫨鍚庨潰绌轰綅"); - result = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == list[i].N_ROW && a.N_COL > list[i].N_COL && a.C_ENABLE == "Y").OrderBy(a => a.N_COL).First(); - } - - if (result != null) - { - break; - } - } - - } - } - } - - if (result == null) - { - #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓 - //Console.WriteLine("鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓"); - //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪 - list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == row).OrderBy(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList(); - //2.1 閫変竴涓┖鎺�- for (int i = 0; i < list.Count; i++) - { - var other = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == list[i].N_ROW && a.S_LOCK_STATE != "鏃�).First(); - if (list[i].N_LOCK_STATE == 0 && other == null) - { - //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡 - var rowSumInfo = db.Queryable<Location>().Where(l => l.S_AREA_CODE == area && l.N_ROW == list[i].N_ROW && l.N_CURRENT_NUM != 0).Count(); - if (rowSumInfo == 0) - { - result = list[i]; - break; - } - } - } - #endregion - } - - if (result != null && (!string.IsNullOrEmpty(result.C_ENABLE) && (result.C_ENABLE == "绂佺敤" || result.C_ENABLE == "N"))) - { - //绂佺敤浜嗛�鎷╁悗闈竴涓揣浣�- //Console.WriteLine("绂佺敤浜嗛�鎷╁悗闈竴涓揣浣�); - result = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE == area && a.N_ROW == result.N_ROW && (string.IsNullOrEmpty(a.C_ENABLE) || (a.C_ENABLE != "绂佺敤" && a.C_ENABLE != "N")) && a.N_COL > result.N_COL).First(); - } - } - catch (Exception ex) - { - LogHelper.Error("GetLocation4InFinish:" + ex.Message, ex); - } - return result; - } - - - public static List<Location> GetLocationList(string area , int row) { - List<Location> result = new List<Location> (); - try { - var db = new SqlHelper<object>().GetInstance(); - result = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == row).Includes(a => a.LocCntrRel, a => a.CntrItemRel).ToList(); - } - catch (Exception ex) { - LogHelper.Error("GetLocationList:" + ex.Message, ex); - } - return result; - } - - public static List<TN_YiKuDetail> getShiftOrderDetail(string orderNo = null) { - var db = new SqlHelper<object>().GetInstance(); - List<TN_YiKuDetail> details = new List<TN_YiKuDetail>(); - var orderList = db.Queryable<TN_YiKuOrder>().Where(a => a.S_B_STATE == "鎵ц").ToList(); - foreach (var order in orderList) - { - var detail = db.Queryable<TN_YiKuDetail>().Where(a => order.S_NO == a.S_NO).First(); - if (detail != null) - { - details.Add(detail); - } - } - return details; - } - - public static bool updateShiftOrderDetail(TN_YiKuDetail detail) { bool result = false; var db = new SqlHelper<object>().GetInstance(); - LogHelper.Info("绉诲簱瀹屾垚鏁伴噺鍙樻洿鍙傛暟锛� + JsonConvert.SerializeObject(detail), "TSSG"); - result = db.Updateable<TN_YiKuDetail>() - .SetColumns(a => new TN_YiKuDetail() { N_COMPLETE_NUM = a.N_COMPLETE_NUM + 1 }) - .Where(a => a.S_NO == detail.S_NO - && a.S_START_AREA == detail.S_START_AREA - && a.S_START_ROW == detail.S_START_ROW - && a.S_END_AREA == detail.S_END_AREA - && a.S_END_ROW == detail.S_END_ROW - ) - .ExecuteCommand() > 0; + var offLineRecord = db.Queryable<OffLineRecord>().Where(a => a.S_RFID == record.S_RFID).First(); + if (offLineRecord != null) + { + offLineRecord.S_LOC = record.S_LOC; + offLineRecord.N_IS_URGENT = record.N_IS_URGENT; + offLineRecord.T_OFF_TIME = record.T_OFF_TIME; + offLineRecord.N_IS_FULL = record.N_IS_FULL; + result = db.Updateable(offLineRecord).ExecuteCommand() > 0; + } + else + { + result = db.Insertable(record).ExecuteCommand() > 0; + } + return result; + } - var completeResult = db.Queryable<TN_YiKuDetail>().Where(a => a.S_NO == detail.S_NO && a.N_QTY > a.N_COMPLETE_NUM).Count() == 0; - if(completeResult) { - result = db.Updateable<TN_YiKuOrder>().SetColumns(a => new TN_YiKuOrder() { S_B_STATE = "瀹屾垚" }).Where(a => a.S_NO == detail.S_NO).ExecuteCommand() > 0; + /// <summary> + /// 鏌ヨ鎴愬瀷鏈轰笅绾胯褰�+ /// </summary> + /// <param name="rfid"></param> + /// <returns></returns> + public static OffLineRecord getOffLineRecord(string rfid) + { + OffLineRecord offLineRecord = null; + var db = new SqlHelper<object>().GetInstance(); + if (rfid != null) + { + offLineRecord = db.Queryable<OffLineRecord>().Where(a => a.S_RFID == rfid).First(); + } + return offLineRecord; + } + + /// <summary> + /// 鏌ヨ鐗╂枡鏉$爜淇℃伅 + /// </summary> + /// <param name="barcode"></param> + /// <returns></returns> + public static GreenTireInformation GetGreenTireInformation(string barcode) + { + GreenTireInformation greenTireInformation = null; + var db = new SqlHelper<object>().GetInstance(); + if (barcode != null) + { + greenTireInformation = db.Queryable<GreenTireInformation>().Where(a => a.BARCODE == barcode).First(); + } + return greenTireInformation; + } + + /// <summary> + /// 鏌ヨ鍏ュ簱缁堢偣璐т綅 + /// </summary> + /// <param name="itemCode"></param> + /// <param name="locNum">1.鍗曡揣浣�2.鍙岃揣浣�/param> + /// <returns></returns> + public static List<Location> getInStockEndLoc(string itemCode, int locNum) + { + var db = new SqlHelper<object>().GetInstance(); + List<Location> locations = new List<Location>(); + // 1.鎸夊绉巼浠庡ぇ鍒板皬锛屽宸烽亾杩涜鎺掑簭 + var roadwayOrderList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y") + .GroupBy(a => a.N_ROADWAY) + .Select(a => new { roadway = a.N_ROADWAY , num = SqlFunc.AggregateCount(a.S_CODE)}) + .OrderByDescending(a => a.num) + .ToList(); + + // 鏌ヨ鍗曡揣浣�+ if (locNum == 1) + { + foreach (var order in roadwayOrderList) + { + // 1. 鏌ヨ1鍙疯揣浣嶆槸鍚︽湁鐩稿悓鐗╂枡,鏈夛紝鍒欐煡璇㈠搴旂殑2鍙疯揣浣嶆槸鍚︿负绌�+ var oneLocList = db.Queryable<Location>() + .LeftJoin<LocCntrRel>((a,b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<CntrItemRel>((a,b,c) => b.S_CNTR_CODE == c.S_CNTR_CODE) + .Where((a, b, c) => a.S_AREA_CODE == Settings.stockArea + && a.N_ROADWAY == order.roadway + && a.N_COL % 2 == 1 + && a.N_CURRENT_NUM == 1 + && a.N_LOCK_STATE == 0 + && a.C_ENABLE == "Y" + && c.S_ITEM_CODE == itemCode + ) + .OrderBy(a => a.N_LAYER).OrderBy(a => a.N_COL) + .ToList(); + if (oneLocList.Count > 0) + { + foreach (var loc in oneLocList) + { + var twoLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); + if (twoLoc != null) + { + locations.Add(twoLoc); + return locations; + } + } + } + + // 2.鏌ヨ2鍙疯揣浣嶆槸鍚︽湁鐩稿悓鐗╂枡锛屾湁锛屽垯鏌ヨ瀵瑰簲鐨�鍙蜂綅鏄惁涓虹┖ + if (locations.Count == 0) + { + var twoLocList = db.Queryable<Location>() + .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<CntrItemRel>((a, b, c) => b.S_CNTR_CODE == c.S_CNTR_CODE) + .Where((a, b, c) => a.S_AREA_CODE == Settings.stockArea + && a.N_ROADWAY == order.roadway + && a.N_COL % 2 == 0 + && a.N_CURRENT_NUM == 1 + && a.N_LOCK_STATE == 0 + && a.C_ENABLE == "Y" + && c.S_ITEM_CODE == itemCode + ) + .OrderBy(a => a.N_LAYER).OrderBy(a => a.N_COL) + .ToList(); + + if (twoLocList.Count > 0) + { + foreach (var loc in twoLocList) + { + var oneLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); + if (oneLoc != null) + { + locations.Add(oneLoc); + return locations; + } + } + } + } + + // 3.娌℃湁鐩稿悓鐗╂枡鐨�浼樺厛鏀剧鐢ㄨ揣浣嶆梺杈癸紙鍗曚竴璐т綅锛�+ if (locations.Count == 0) + { + var disableLocList= db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.C_ENABLE == "N").OrderBy(a => a.N_LAYER).ToList(); + foreach (var loc in disableLocList) + { + // 璐т綅涓�鍙蜂綅锛屽垯鏌ヨ瀵瑰簲浜屽彿浣嶆槸鍚︿负绌�+ if (loc.N_LAYER % 2 == 1) + { + var twoLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); + if (twoLoc != null) + { + locations.Add(twoLoc); + return locations; + } + } + + // 璐т綅涓�鍙蜂綅锛屽垯鏌ヨ瀵瑰簲涓�彿浣嶆槸鍚︿负绌�+ if (loc.N_LAYER % 2 == 0) + { + var oneLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); + if (oneLoc != null) + { + locations.Add(oneLoc); + return locations; + } + } + } + } + + // 4.娌℃湁鐩稿悓鐗╂枡鐨勶紝涓旂鐢ㄨ揣浣嶆梺杈规病鏈夌┖璐т綅锛屽垯浼樺厛鏀�鍙蜂綅 + if (locations.Count == 0) + { + oneLocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_COL % 2 == 1 && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => a.N_LAYER).OrderByDescending(a => a.N_COL).ToList(); + if (oneLocList.Count > 0) + { + locations.Add(oneLocList[0]); + return locations; + } + } + } + } + + // 鏌ヨ鍙岃揣浣�+ if (locNum == 2) + { + foreach (var order in roadwayOrderList) + { + var oneLocList = db.Queryable<Location>().Where( a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_COL % 2 == 1 && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => a.N_LAYER).OrderBy(a => a.N_COL).ToList(); + foreach (var loc in oneLocList) + { + var twoLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); + if (twoLoc != null) + { + locations.Add(loc); + locations.Add(twoLoc); + return locations; + } + } + } + } + return locations; + } + + /// <summary> + /// 鏌ヨ寮傚父鍖虹┖璐т綅 + /// </summary> + /// <param name="areaCode"></param> + public static Location getAbnormalAreaEmptyLoc(string areaCode) + { + Location location = new Location(); + var db = new SqlHelper<object>().GetInstance(); + location = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaCode && a.N_CURRENT_NUM == 0 && a.C_ENABLE == "Y" && a.N_LOCK_STATE == 0).First(); + return location; + } + + /// <summary> + /// 鏌ヨ宸烽亾浠诲姟鏈�皯鐨勬帴椹充綅 + /// </summary> + /// <returns></returns> + public static Location getMinTaskMiddleLoc(int type) + { + Location location = new Location(); + var db = new SqlHelper<object>().GetInstance(); + var roadwayGroup = db.Queryable<Location>() + .LeftJoin<WCSTask>((a,b) => a.S_CODE == b.S_END_LOC && b.N_B_STATE < 3) + .Where((a, b) => a.S_AREA_CODE == Settings.stockArea && b.S_CODE != null ) + .GroupBy((a, b) => a.N_ROADWAY) + .Select( (a, b) => new { roadway = a.N_ROADWAY , num = SqlFunc.AggregateDistinctCount(a.S_CODE)}) + .OrderBy(a => a.num) + .ToList(); + + foreach (var item in roadwayGroup) + { + // 1.鏌ヨ宸烽亾鍐呯殑鍫嗗灈鏈虹姸鎬佹槸鍚︽甯�+ + // 2.鏌ヨ鎺ラ┏浣�+ var connectLoc = Settings.connectLocList.Where(a => a.type == type && a.roadway == item.roadway).FirstOrDefault(); + if (connectLoc != null) + { + location = LocationHelper.GetLoc(connectLoc.locCode); + break; + } + } + return location; + } + + /// <summary> + /// 鏌ヨ鐗╂枡瀛樻斁鏃堕棿閰嶇疆淇℃伅 + /// </summary> + /// <param name="bc_entried"></param> + /// <returns></returns> + public static Overage getOverage(string bc_entried) + { + + var db = new SqlHelper<object>().GetInstance(); + + // 鐩存帴鎵ц SQL锛堝弬鏁板寲鏌ヨ锛�+ var sql = "SELECT get_ovg_bar(@barcode, @mcngrp) AS overage_value"; + var sql1 = "SELECT get_minhour_bar(@barcode, @mcngrp) AS overage_value"; + + // 浣跨敤鍖垮悕瀵硅薄浼犻�鍙傛暟 + var ovg_bar = db.Ado.SqlQuery<int>(sql, new { barcode = bc_entried, mcngrp = "0" }); + var minhour_bar = db.Ado.SqlQuery<float>(sql1, new { barcode = bc_entried, mcngrp = "0" }); + if (ovg_bar.Count > 0 && minhour_bar.Count > 0) + { + Overage overage = new Overage() + { + MINHOUR = minhour_bar[0], + OVERAGE = ovg_bar[0] + }; + return overage; + } + return null; + } + + public static bool bindBarcodeItemInfo( string cntrCode,GreenTireInformation greenTireInformation) + { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + var cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrCode).First(); + if (cntrItemRel == null) + { + var overage = getOverage(greenTireInformation.BARCODE); + DateTime txndate = DateTime.Parse(greenTireInformation.TXNDATE); + DateTime minTime = txndate.AddHours(overage.MINHOUR); + DateTime maxTime = txndate.AddDays(overage.OVERAGE); + cntrItemRel = new CntrItemRel() + { + S_CG_ID = greenTireInformation.BARCODE, + S_ITEM_CODE = greenTireInformation.ITEMCODE, + S_CNTR_CODE = cntrCode, + S_CELL_NO = greenTireInformation.TIRECODE, + F_QTY = greenTireInformation.QTY, + S_MCN = greenTireInformation.MCN, + S_OPR = greenTireInformation.OPR, + S_OPR02 = greenTireInformation.OPR02, + S_OPR03 = greenTireInformation.OPR03, + S_OPR04 = greenTireInformation.OPR04, + S_WINDUP = greenTireInformation.WINDUP, + S_TXNDATE = greenTireInformation.TXNDATE, + S_DATE_SHIFT = greenTireInformation.DATE_SHIFT, + S_EFFECTIVE_TIME = minTime.ToString("yyyy-MM-dd HH:mm:ss"), + S_EXPIRATION_TIME = maxTime.ToString("yyyy-MM-dd HH:mm:ss"), + }; + result = db.Insertable(cntrItemRel).ExecuteCommand() > 0; + } + else + { + var overage = getOverage(greenTireInformation.BARCODE); + DateTime txndate = DateTime.Parse(greenTireInformation.TXNDATE); + DateTime minTime = txndate.AddHours(overage.MINHOUR); + DateTime maxTime = txndate.AddDays(overage.OVERAGE); + cntrItemRel.S_CG_ID = greenTireInformation.BARCODE; + cntrItemRel.S_ITEM_CODE = greenTireInformation.ITEMCODE; + cntrItemRel.S_CNTR_CODE = cntrCode; + cntrItemRel.S_CELL_NO = greenTireInformation.TIRECODE; + cntrItemRel.F_QTY = greenTireInformation.QTY; + cntrItemRel.S_MCN = greenTireInformation.MCN; + cntrItemRel.S_OPR = greenTireInformation.OPR; + cntrItemRel.S_OPR02 = greenTireInformation.OPR02; + cntrItemRel.S_OPR03 = greenTireInformation.OPR03; + cntrItemRel.S_OPR04 = greenTireInformation.OPR04; + cntrItemRel.S_WINDUP = greenTireInformation.WINDUP; + cntrItemRel.S_TXNDATE = greenTireInformation.TXNDATE; + cntrItemRel.S_DATE_SHIFT = greenTireInformation.DATE_SHIFT; + cntrItemRel.S_EFFECTIVE_TIME = minTime.ToString("yyyy-MM-dd HH:mm:ss"); + cntrItemRel.S_EXPIRATION_TIME = maxTime.ToString("yyyy-MM-dd HH:mm:ss"); + result = db.Updateable(cntrItemRel).ExecuteCommand() > 0; } return result; } -- Gitblit v1.9.1