From b7308bba3d7ffad271ce7fc7a93c8c45d76be87d Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期五, 13 六月 2025 17:21:03 +0800 Subject: [PATCH] 优化印尼佳通-硫化胚胎出入库逻辑策略优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/TEST.cs | 237 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 237 insertions(+), 0 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/TEST.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/TEST.cs new file mode 100644 index 0000000..5c25b26 --- /dev/null +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/TEST.cs @@ -0,0 +1,237 @@ +锘縰sing HH.WCS.Mobox3.FJJT.util; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; + +namespace HH.WCS.Mobox3.FJJT.wms +{ + /// <summary> + /// 瀵嗛泦鍨嬪簱鍖�+ /// </summary> + internal class TEST + { + static TEST() { + //InitRowLockTable(new List<string> { "PGKQ", "PGKTK" }); + } + + /// <summary> + /// 鏍规嵁搴撳尯鍜岀墿鏂欒幏鍙栧叆搴撶殑璐т綅锛堝爢鍙犲厛鑰冭檻鏍囧噯鐨勶紝瀹归噺閮芥槸涓�牱鐨勶紝渚嬪鍧囧窞閮芥槸3+3锛涗笉鑰冭檻宄ㄧ湁灞遍潪鏍�+2鍜�+1鍚屾椂瀛樺湪锛�+ /// </summary> + /// <param name="area"></param> + /// <param name="itemCode">濡傛灉itemCode鏄┖琛ㄧず绌哄鍣�/param> + /// <param name="standardCarryQty">鏍囧噯鎼繍鏁伴噺</param> + /// <returns></returns> + public static Location GetTN_Location4In(string area, string itemCode, string itemBatch, int standardCarryQty = 1) { + Location result = null; + + try { + //1.0 鑾峰彇姣忎竴鎺掓渶澶х殑鍒�+ //1.1 鍒ゆ柇褰撳墠鏁伴噺鏄笉鏄弧鐨勶紝濡傛灉鏄弧鐨勫苟涓旀槸鏈�ぇ鍒楋紝闇�鎺掗櫎 + var listMaxCol = new SqlHelper<Location>().GetInstance().Queryable<Location>().Where(a => a.S_AREA_CODE == area).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); + + //1.1 鏌ュ埌鎵�湁鏈夊鍣ㄧ殑鎺� + var db = new SqlHelper<object>().GetInstance(); + var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0 && a.S_AREA_CODE == area).Includes(a => a.LocCntrRel, a => a.CntrItemRels).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); + if (list.Count > 0) { + 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)) { + list.Remove(list[i]); + } + } + if (list.Count > 0) { + //1.21 鍔犺浇璐т綅鐨勫鍣ㄤ俊鎭�(mapper涔嬪墠鍙兘鏄煡璇㈠師濮嬫暟鎹紝濡傛灉鏈夊叾浠栨煡璇�mapper澶辨晥) + #region MyRegion + /* + Console.WriteLine("鍔犺浇璐т綅鐨勫鍣ㄤ俊鎭�); + db.ThenMapper(list, loc => { + loc.LocCntrRel = db.Queryable<LocCntrRel>().SetContext(x => x.S_LOC_CODE, () => loc.S_LOC_CODE, loc).FirstOrDefault(); + }); + + //1.22 鍔犺浇瀹瑰櫒鐨勭墿鏂欎俊鎭�+ Console.WriteLine("鍔犺浇瀹瑰櫒鐨勭墿鏂欎俊鎭�); + db.ThenMapper(list.Select(loc => loc.LocCntrRel), lcr => { + lcr.CntrItemRel = db.Queryable<CntrItemRel>().SetContext(x => x.S_CNTR_CODE, () => lcr.S_CNTR_CODE, lcr).FirstOrDefault(); + }); + */ + #endregion + //1.3 閬嶅巻鍒ゆ柇鐗╂枡绫诲瀷鏄惁鐩稿悓 + for (int i = 0; i < list.Count; i++) { + + //todo 杩橀渶瑕佸垽鏂攣 + + #region 绌哄鍣ㄦ垨鑰呮弧瀹瑰櫒鍒ゆ柇 ,濡傛灉鏄┖瀹瑰櫒 瀹瑰櫒鐗╂枡淇℃伅涓虹┖ + if (list[i].LocCntrRel != null) { + //LogHelper.Info("itemCode=" + itemCode); + if ((itemCode != null && list[i].LocCntrRel.CntrItemRels != null && list[i].LocCntrRel.CntrItemRels[0].S_ITEM_CODE.Trim() == itemCode && list[i].LocCntrRel.CntrItemRels[0].S_BATCH_NO.Trim() == itemBatch.Trim()) || (itemCode == null && list[i].LocCntrRel.CntrItemRels == null)) { + if (list[i].N_CURRENT_NUM < list[i].N_CAPACITY) { + //1.31 濡傛灉鎼繍鏁伴噺=1 + //1.32 鎼繍澶氫釜瀹瑰櫒锛屼緥濡�+3妯″紡 锛屽繀椤诲綋鍓嶆暟閲�0鎴�;濡傛灉鏄�+3+锛屽繀椤诲綋鍓嶆暟閲�0鎴�鎴� + if (list[i].N_CURRENT_NUM % standardCarryQty == 0) { + result = list[i]; + } + else { + //1.33 涓嶆弧瓒冲垯閫夋嫨鍚庝竴鍒楋紝鍚庝竴鍒楄偗瀹氭槸绌鸿揣浣�+ 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).OrderBy(a => a.N_COL).First(); + } + + } + else { + //褰撳墠璐т綅婊′簡锛屾瘮浠朿ol澶т竴浣嶇殑璐т綅锛屽悗涓�垪鑲畾鏄┖璐т綅 + 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).OrderBy(a => a.N_COL).First(); + } + + if (result != null) { + break; + } + } + } + else { + LogHelper.Info("璐т綅瀹瑰櫒鐗╂枡淇℃伅涓虹┖"); + } + + + #endregion + + } + } + } + if (result == null) { + //todo 杩橀渶瑕佸垽鏂攣 + #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓 + //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪 + list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area).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++) { + if (list[i].N_LOCK_STATE== 0) { + //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡 + var rowSumInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == list[i].N_ROW).Select(a => new { sum = SqlFunc.AggregateSum(a.N_CURRENT_NUM) }).First(); + if (rowSumInfo.sum == 0) { + result = list[i]; + break; + } + } + + } + #endregion + } + } + catch (Exception ex) { + + Console.WriteLine("GetTN_Location4In:" + ex.Message + ex.StackTrace); + LogHelper.Error("GetTN_Location4In:" + ex.Message, ex); + } + return result; + } + + /// <summary> + /// 鏍规嵁搴撳尯鍜岀墿鏂欒幏鍙栧嚭搴撶殑璐т綅锛堝爢鍙犲厛鑰冭檻鏍囧噯鐨勶紝瀹归噺閮芥槸涓�牱鐨勶紝渚嬪鍧囧窞閮芥槸3+3锛涗笉鑰冭檻宄ㄧ湁灞遍潪鏍�+2鍜�+1鍚屾椂瀛樺湪锛�+ /// </summary> + /// <param name="area"></param> + /// <param name="itemCode">濡傛灉itemCode鏄┖琛ㄧず绌哄鍣�/param> + /// <param name="standardCarryQty">鏍囧噯鎼繍鏁伴噺</param> + /// <returns></returns> + /// <returns></returns> + public static Location GetTN_Location4Out(string area, string itemCode, string itemBatch, int standardCarryQty = 1) { + Console.WriteLine($"area={area}"); + Location result = null; + var db = new SqlHelper<Location>().GetInstance(); + + //1.0 鏌ュ埌鎵�湁鏈夊鍣ㄧ殑鎺�var list = db.Queryable<TN_Location>().Where(a => a.N_CURRENT_NUM>0).Includes(a => a.LocCntrRel, a => a.CntrItemRel).ToList(); + var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0 && a.S_AREA_CODE == area).Includes(a => a.LocCntrRel, a => a.CntrItemRels).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); + //1.1 鍒ゆ柇褰撳墠鏁伴噺鏄笉鏄弧鐨勶紝濡傛灉鏄弧鐨勫苟涓旀槸鏈�ぇ鍒楋紝闇�鎺掗櫎 + if (list.Count > 0) { + //LogHelper.Info("GetTN_Location4Out:" + JsonConvert.SerializeObject(list)); + #region MyRegion + /* + //1.21 鍔犺浇璐т綅鐨勫鍣ㄤ俊鎭�+ db.ThenMapper(list, loc => { + loc.LocCntrRel = db.Queryable<LocCntrRel>().SetContext(x => x.S_LOC_CODE, () => loc.S_LOC_CODE, loc).FirstOrDefault(); + }); + //1.22 鍔犺浇瀹瑰櫒鐨勭墿鏂欎俊鎭�+ db.ThenMapper(list.Select(loc => loc.LocCntrRel), lcr => { + lcr.CntrItemRel = db.Queryable<CntrItemRel>().SetContext(x => x.S_CNTR_CODE, () => lcr.S_CNTR_CODE, lcr).FirstOrDefault(); + }); + */ + #endregion + //1.3 閬嶅巻鍒ゆ柇鐗╂枡绫诲瀷鏄惁鐩稿悓 + for (int i = 0; i < list.Count; i++) { + + //todo 杩橀渶瑕佸垽鏂攣 + + #region 绌哄鍣ㄦ垨鑰呮弧瀹瑰櫒鍒ゆ柇 ,濡傛灉鏄┖瀹瑰櫒 瀹瑰櫒鐗╂枡淇℃伅涓虹┖ + if (list[i].N_LOCK_STATE== 0 && list[i].LocCntrRel != null) { + if ((itemCode != null && list[i].LocCntrRel.CntrItemRels != null && list[i].LocCntrRel.CntrItemRels[0].S_ITEM_CODE.Trim() == itemCode && (itemBatch == null || list[i].LocCntrRel.CntrItemRels[0].S_BATCH_NO.Trim() == itemBatch.Trim())) || (itemCode == null && list[i].LocCntrRel.CntrItemRels == null)) { + //鎼繍閫夋嫨璐т綅 + //濡傛灉褰撳墠鍑哄簱浣嶅悗闈㈡湁绌轰綅锛屼笉鑳芥槸鍏ュ簱涓�+ var after = new SqlHelper<Location>().Get(a => a.S_AREA_CODE == area && a.N_ROW == list[i].N_ROW && a.N_COL == list[i].N_COL + 1); + if (after == null || after.N_LOCK_STATE== 0) { + result = list[i]; + } + if (result != null) { + break; + } + } + } + + + #endregion + + } + } + + return result; + } + + + private static List<int> GetRowsByArea(string area) { + var list = new SqlHelper<Location>().GetInstance().Queryable<Location>().Where(a => a.S_AREA_CODE == area).Distinct().Select(a => a.N_ROW).ToList(); + return list; + } + internal static void Test() { + //UnLockLoc("PGKQ-02-02"); + //LockLoc("PGKQ-02-02", "鍏ュ簱閿�); + //Binding("PGKQ-02-03", "AAA", "", 3); + //UnBinding("PGKQ-02-03", 2); + + //var full = GetTN_Location4In("PGKQ", "AAA"); + //var empty = GetTN_Location4In("PGKQ", null); + //var fullOut = GetTN_Location4Out("PGKQ", "AAA"); + //var emptyOut = GetTN_Location4Out("PGKQ", null); + //var TN_Locations = new SqlHelper<TN_Location>().GetList(); + //var LocCntrRels = new SqlHelper<LocCntrRel>().GetList(); + //var CntrItemRels = new SqlHelper<CntrItemRel>().GetList(); + + //var list = new SqlHelper<TN_Location>().GetInstance().Queryable<TN_Location>().LeftJoin<LocCntrRel>((l, lc) => l.S_LOC_CODE == lc.S_LOC_CODE).ToList(); + //var results = context.Client.Queryable<Employee>().Mapper(t=>t.Person, p=>p.PersonId).ToList(); + var db = new SqlHelper<object>().GetInstance(); + + //var list = db.Queryable<TN_Location>().Mapper(l => l.LocCntrRel, lcr => lcr.S_LOC_CODE).Where(a=>a.S_LOC_CODE== "PGKQ-01-01").ToList(); + + //澶氱骇鏌ヨ浼氬祵濂�闇�鎸囧畾瀵艰埅灞炴�鍜屼富閿紝寰幆宓屽鏌ヨ涓嶅缓璁�+ //[Navigate(NavigateType.OneToOne, nameof(S_LOC_CODE))]銆�[Navigate(NavigateType.OneToOne, nameof(S_CNTR_CODE))]銆乕SugarColumn(IsPrimaryKey = true)] + var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0).Includes(a => a.LocCntrRel, a => a.CntrItemRels).ToList(); + + + + #region MyRegion + /* + // SetContext涓嶄細鐢熸垚寰幆鎿嶄綔锛岄珮鎬ц兘 鍜岀洿鎺here鎬ц兘鏄笉涓�牱鐨�+ var list = db.Queryable<TN_Location>().Where(a => a.N_CURRENT_NUM > 0).ToList(); + //绗竴灞�+ db.ThenMapper(list, loc => { + loc.LocCntrRel = db.Queryable<LocCntrRel>().SetContext(x => x.S_LOC_CODE, () => loc.S_LOC_CODE, loc).FirstOrDefault(); + }); + //绗簩灞�+ db.ThenMapper(list.Select(loc => loc.LocCntrRel), lcr => { + lcr.CntrItemRel = db.Queryable<CntrItemRel>().SetContext(x => x.S_CNTR_CODE, () => lcr.S_CNTR_CODE, lcr).FirstOrDefault(); + }); + */ + #endregion + } + + } +} -- Gitblit v1.9.1