From 16d2162a833cebeae72c363962917bb9da8145ef Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期五, 06 六月 2025 17:34:47 +0800 Subject: [PATCH] 福建佳通优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/wms/WMSHelper.cs | 245 ++++++++++++++++++++++++++++++++---------------- 1 files changed, 164 insertions(+), 81 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/wms/WMSHelper.cs index cefdf93..b6d7694 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/wms/WMSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/wms/WMSHelper.cs @@ -1,4 +1,5 @@ 锘縰sing HH.WCS.Mobox3.YNJT_BZP.api; +using HH.WCS.Mobox3.YNJT_BZP.dispatch; using HH.WCS.Mobox3.YNJT_BZP.models; using HH.WCS.Mobox3.YNJT_BZP.models.other; using HH.WCS.Mobox3.YNJT_BZP.util; @@ -6,6 +7,7 @@ using NLog.Fluent; using SqlSugar; using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; @@ -419,25 +421,37 @@ return result; } - /// <summary> - /// 鑾峰彇绌烘墭寮�璐т綅 - /// </summary> - /// <param name="trayType"></param> - /// <returns></returns> - public static Location GetEmptyTrayStartLoc(int trayType) + /// <summary> + /// 鑾峰彇绌烘墭寮�璐т綅 + /// </summary> + /// <param name="trayType"></param> + /// <param name="exclude">鏄惁鎺掗櫎姣嶆嫋缂撳瓨浣�0.涓嶆帓闄�1.鎺掗櫎</param> + /// <returns></returns> + public static Location GetEmptyTrayStartLoc(int trayType ,int exclude = 1) { Location result = null; try { // 1銆佹煡璇㈠綋鍓嶅簱鍖�鎺�鐗╂枡 鏈夋墭鐩樼殑璐т綅 var db = new SqlHelper<object>().GetInstance(); - result = db.Queryable<Location>() + var query = db.Queryable<Location>() .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE) .LeftJoin<Container>((a, b, c) => b.S_CNTR_CODE == c.S_CODE) - .LeftJoin<CntrItemRel>((a,b,c,d) => c.S_CODE == d.S_CNTR_CODE) - .Where((a, b, c, d) => a.S_AREA_CODE == Settings.storeAreaCode && (trayType == 0 && a.N_CURRENT_NUM == 1 || trayType > 0 && a.N_CURRENT_NUM > 0) && a.N_LOCK_STATE == 0 && (a.C_ENABLE != "绂佺敤" && a.C_ENABLE != "N") && c.N_TYPE == trayType && d.S_ITEM_CODE == null) - .OrderByDescending((a, b, c, d) => a.N_LAYER) - .First(); + .LeftJoin<CntrItemRel>((a, b, c, d) => c.S_CODE == d.S_CNTR_CODE) + .Where((a, b, c, d) => a.S_AREA_CODE == Settings.storeAreaCode && (trayType == 0 && a.N_CURRENT_NUM == 1 || trayType > 0 && a.N_CURRENT_NUM > 0) && a.N_LOCK_STATE == 0 && (a.C_ENABLE != "绂佺敤" && a.C_ENABLE != "N") && c.N_TYPE == trayType && d.S_ITEM_CODE == null); + + if (exclude == 1) + { + List<string> bufferInLocs = Settings.baseTrayBufferLocList.Select(a => a.bufferInLoc).ToList(); + query = query.Where((a, b, c, d) => !bufferInLocs.Contains(a.S_CODE)); + } + else + { + List<string> bufferInLocs = Settings.baseTrayBufferLocList.Select(a => a.bufferInLoc).ToList(); + query = query.OrderByDescending((a, b, c, d) => bufferInLocs.Contains(a.S_CODE)); + } + + result = query.OrderByDescending((a, b, c, d) => a.N_LAYER).First(); } catch (Exception ex) { @@ -488,8 +502,9 @@ /// </summary> /// <param name="itemCode"></param> /// <param name="jbLoc"></param> + /// <param name="trayCode"></param> /// <returns></returns> - public static Location GetoutStockStartLoc(string itemCode ,string jbLoc = null) + public static Location GetoutStockStartLoc(string itemCode ,string trayCode = null ,string jbLoc = null) { LogHelper.Info("銆愯幏鍙栧嚭搴撳紑濮嬭揣浣嶃�", "WMS"); var db = new SqlHelper<object>().GetInstance(); @@ -510,6 +525,11 @@ && c.S_EFFECTIVE_TIME != null && c.S_EXPIRATION_TIME != null ); + + if (trayCode != null) + { + query = query.Where((a, b, c) => c.S_CNTR_CODE == trayCode); + } if (jbLoc != null) { @@ -534,12 +554,15 @@ /// <summary> /// 鑾峰彇鍏ュ簱缁堢偣璐т綅 + /// 鍏ュ簱绛栫暐 + /// 1.宸烽亾鍧囪 + /// 2.鐗╂枡鍧囪 /// </summary> /// <param name="locCode"></param> /// <param name="trayType"></param> /// <param name="inWay">鍏ュ簱鏂瑰紡 1.鑷姩鍏ュ簱 2.浜哄伐鍏ュ簱</param> /// <returns></returns> - public static Location GetInstockEndLoc(int trayType , string locCode = null , int inWay = 1) + public static Location GetInstockEndLoc(int trayType , string locCode = null , int inWay = 1 ,string itemCode = null) { LogHelper.Info("銆愯幏鍙栧叆搴撶粓鐐硅揣浣嶃�寮�鑾峰彇鍏ュ簱缁堢偣璐т綅", "WMS"); var db = new SqlHelper<object>().GetInstance(); @@ -604,7 +627,6 @@ LogHelper.Info($"銆愯幏鍙栧叆搴撶粓鐐硅揣浣嶃�婊¤冻鏉′欢鐨勭┖璐т綅鏁伴噺锛歿locList.Count}", "WMS"); } - LogHelper.Info($"銆愯幏鍙栧叆搴撶粓鐐硅揣浣嶃�寮�鏌ヨ宸烽亾鐨勫绉巼", "WMS"); var roadwayVolumeList = db.Queryable<Location>() .Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE == Settings.storeAreaCode && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && roadwayList.Contains(a.N_ROADWAY) && layerList.Contains(a.N_LAYER)) @@ -612,21 +634,39 @@ .Select(a => new { roadway = a.N_ROADWAY , num = SqlFunc.AggregateDistinctCount(a.S_CODE)}) .OrderBy(a => a.num) .ToList(); - LogHelper.Info($"銆愯幏鍙栧叆搴撶粓鐐硅揣浣嶃�鏌ヨ宸烽亾鐨勫绉巼锛屽苟鎸変粠澶у埌灏忔帓搴忥細{JsonConvert.SerializeObject(roadwayVolumeList)}", "WMS"); + LogHelper.Info($"銆愯幏鍙栧叆搴撶粓鐐硅揣浣嶃�鏌ヨ宸烽亾鐨勫绉巼锛屽苟鎸変粠灏忓埌澶ф帓搴忥細{JsonConvert.SerializeObject(roadwayVolumeList)}", "WMS"); + Dictionary<int,int> roadwayDic = new Dictionary<int,int>(); + foreach (var item in roadwayVolumeList) + { + roadwayDic.Add(item.roadway, item.num); + } + + LogHelper.Info($"銆愯幏鍙栧叆搴撶粓鐐硅揣浣嶃�寮�鏌ヨ宸烽亾鐨勫悓鐗╂枡鏁伴噺", "WMS"); + var roadwayItemNumList = 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.storeAreaCode && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && roadwayList.Contains(a.N_ROADWAY) && layerList.Contains(a.N_LAYER)) + .GroupBy((a, b, c) => a.N_ROADWAY) + .Select((a, b, c) => new { roadway = a.N_ROADWAY, volumNum = SqlFunc.AggregateDistinctCount(c.S_ITEM_CODE == itemCode) }) + .ToList(); + LogHelper.Info($"銆愯幏鍙栧叆搴撶粓鐐硅揣浣嶃�鏌ヨ宸烽亾鐨勫悓鐗╂枡鏁伴噺锛屽苟鎸変粠灏忓埌鍒版帓搴忥細{JsonConvert.SerializeObject(roadwayItemNumList)}", "WMS"); + + roadwayItemNumList = roadwayItemNumList.OrderBy(a => a.volumNum).ThenBy(a => roadwayDic[a.roadway]).ToList(); if (inWay == 1) { LogHelper.Info($"銆愯幏鍙栧叆搴撶粓鐐硅揣浣嶃�寮�寰幆鏌ヨ宸烽亾瀵瑰簲鎺ラ┏浣嶇殑鐘舵�", "WMS"); - foreach (var roadwayVolume in roadwayVolumeList) + foreach (var roadwayVolume in roadwayItemNumList) { - int roadway = 0; - if (roadwayVolume != null) - { - roadway = roadwayVolume.roadway; - } + int roadway = roadwayVolume.roadway; + LogHelper.Info($"銆愯幏鍙栧叆搴撶粓鐐硅揣浣嶃�鏌ヨ宸烽亾鍐呭爢鍨涙満鐨勮澶囩姸鎬�, "WMS"); - var agvJbLocList = Settings.getAgvJBLocList(inWay, roadway, 1); + List<string> deviceNos = new List<string>() { roadway.ToString()}; + LogHelper.Info($"璋冪敤WCS鐨勮澶囩姸鎬佹煡璇㈡帴鍙o紝鍙傛暟锛歿deviceNos}", "WMS"); + var deviceStatuses = WCSDispatch.getDeviceStatus(deviceNos); + + var agvJbLocList = Settings.getAgvJBLocList( roadway, 1); if (agvJbLocList.Count > 0) { foreach (var agvLocCode in agvJbLocList) @@ -691,6 +731,12 @@ return db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.errorBufferArea && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); } + /// <summary> + /// 鑾峰彇搴撳尯鎺掔殑璐т綅鍒楄〃 + /// </summary> + /// <param name="area"></param> + /// <param name="row"></param> + /// <returns></returns> public static List<Location> GetLocationList(string area , int row) { List<Location> result = new List<Location> (); try { @@ -702,8 +748,6 @@ } return result; } - - public static bool updateShiftOrderDetail(TN_YiKuDetail detail) { bool result = false; @@ -727,6 +771,42 @@ } /// <summary> + ///鑾峰彇绌烘墭缂撳瓨淇″彿鍒楄〃 + /// </summary> + /// <returns></returns> + public static List<EmptyTrayBuffer> getEmptyTrayBufferList() + { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<EmptyTrayBuffer>().Where(a => a.IS_CREATED == "N").ToList(); + } + + /// <summary> + /// 娣诲姞绌烘墭缂撳瓨淇″彿 + /// </summary> + /// <param name="emptyTrayBuffer"></param> + /// <returns></returns> + public static bool addEmptyTrayBuffer(EmptyTrayBuffer emptyTrayBuffer) + { + bool result = true; + var db = new SqlHelper<object>().GetInstance(); + result = db.Insertable<EmptyTrayBuffer>(emptyTrayBuffer).ExecuteCommand() > 0; + return result; + } + + /// <summary> + /// 鏇存柊绌烘墭缂撳瓨淇″彿 + /// </summary> + /// <param name="emptyTrayBuffer"></param> + /// <returns></returns> + public static bool updateEmptyTrayBuffer(EmptyTrayBuffer emptyTrayBuffer) + { + bool result = true; + var db = new SqlHelper<object>().GetInstance(); + result = db.Updateable<EmptyTrayBuffer>(emptyTrayBuffer).ExecuteCommand() > 0; + return result; + } + + /// <summary> /// 鎵归噺娣诲姞鐗╂枡鏉$爜淇℃伅 /// </summary> /// <returns></returns> @@ -737,12 +817,16 @@ try { db.BeginTran(); - itemBarcodeInfos.ForEach(a => { - var bo = db.Insertable<ItemBarcodeInfo>(a).ExecuteCommand() > 0; - if (!bo) + itemBarcodeInfos.ForEach(item => { + var itemBarcodeInfo = db.Queryable<ItemBarcodeInfo>().Where(a => a.S_BC_ENTRIED == item.S_BC_ENTRIED).First(); + if (itemBarcodeInfo == null) { - result = false; - LogHelper.Info($"娣诲姞鐗╂枡鏉$爜淇℃伅澶辫触锛岀墿鏂欐潯鐮佷俊鎭細{JsonConvert.SerializeObject(a)}", "GT"); + var bo = db.Insertable<ItemBarcodeInfo>(item).ExecuteCommand() > 0; + if (!bo) + { + result = false; + LogHelper.Info($"娣诲姞鐗╂枡鏉$爜淇℃伅澶辫触锛岀墿鏂欐潯鐮佷俊鎭細{JsonConvert.SerializeObject(item)}", "GT"); + } } }); if (result) @@ -774,26 +858,34 @@ { db.BeginTran(); updateMatlStatuses.ForEach(update => { - var bo = db.Updateable<CntrItemRel>().SetColumns(a => new CntrItemRel() { S_ITEM_STATE = update.jdge }).Where(a => a.S_CG_ID == update.bc_entried).ExecuteCommand() > 0; - if (!bo) + var itemBarcodeInfo = db.Queryable<ItemBarcodeInfo>().Where(a => a.S_BC_ENTRIED == update.bc_entried).First(); + if (itemBarcodeInfo != null) { - result = false; - LogHelper.Info($"鎵归噺鏇存柊鐗╂枡鐘舵�澶辫触锛岀墿鏂欐潯鐮佷俊鎭細{JsonConvert.SerializeObject(update)}", "GT"); + itemBarcodeInfo.S_JDGE = update.jdge; + db.Updateable(itemBarcodeInfo).ExecuteCommand(); + var cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CG_ID == update.bc_entried).First(); + if (cntrItemRel != null) + { + // 灏哅ES鐨勭墿鏂欑姸鎬佽浆鍖栨垚WMS鍙瘑鍒殑鐗╂枡鐘舵� + if (update.jdge == "" || update.jdge == null) + { + update.jdge = "OK"; + } + else if (update.jdge != "OK") + { + update.jdge = "HOLD"; + } + db.Updateable<CntrItemRel>().SetColumns(a => new CntrItemRel() { S_ITEM_STATE = update.jdge }).Where(a => a.S_CG_ID == update.bc_entried).ExecuteCommand(); + } } }); - if (result) - { - db.CommitTran(); - } - else - { - db.RollbackTran(); - } + db.CommitTran(); } catch (Exception ex) { LogHelper.Info($"鎵归噺鏇存柊鐗╂枡鐘舵�閿欒锛岄敊璇俊鎭細{ex.Message}", "GT"); db.RollbackTran(); + result = false; } return result; } @@ -811,48 +903,28 @@ db.BeginTran(); foreach (Overage overage in overages) { - bool bo = false; - var overage1 = db.Queryable<Overage>().Where(a => a.MCNGRP == overage.MCNGRP && a.ITEMPATT == overage.ITEMPATT).First(); + var overage1 = db.Queryable<Overage>().Where(a => a.RECID == overage.RECID).First(); if (overage1 != null) { + overage1.MCNGRP = overage.MCNGRP; + overage1.ITEMPATT = overage.ITEMPATT; overage1.OVERAGE = overage.OVERAGE; overage1.MINHOUR = overage.MINHOUR; overage1.FLAG_STS = overage.FLAG_STS; - bo = db.Updateable(overage1).ExecuteCommand() > 0; + db.Updateable(overage1).ExecuteCommand(); } else { - overage1 = new Overage() - { - MCNGRP = overage.MCNGRP, - ITEMPATT = overage.ITEMPATT, - OVERAGE = overage.OVERAGE, - MINHOUR = overage.MINHOUR, - FLAG_STS = overage.FLAG_STS - }; - bo = db.Insertable(overage1).ExecuteCommand() > 0; - } - if (!bo) - { - result = false; - LogHelper.Info($"鎵归噺鏇存柊鐗╂枡瀛樻斁鏃堕棿閰嶇疆淇℃伅澶辫触锛岄厤缃俊鎭細{JsonConvert.SerializeObject(overage)}", "GT"); - break; + db.Insertable(overage).ExecuteCommand(); } } - - if (result) - { - db.CommitTran(); - } - else - { - db.RollbackTran(); - } + db.CommitTran(); } catch (Exception ex) { LogHelper.Info($"鎵归噺鏇存柊鐗╂枡瀛樻斁鏃堕棿閰嶇疆淇℃伅閿欒锛岄敊璇俊鎭細{ex.Message}", "GT"); db.RollbackTran(); + result = false; } return result; } @@ -863,21 +935,21 @@ /// <returns></returns> public static Overage getOverage(string bc_entried) { - Overage overage = null; + var db = new SqlHelper<object>().GetInstance(); - overage = db.Queryable<Overage>().Where(a => a.ITEMPATT == bc_entried && a.MCNGRP == "1").First(); - if (overage == null) - { - string sub = bc_entried.Substring(0, 3); - overage = db.Queryable<Overage>().Where(a => a.ITEMPATT.Contains(sub) && a.MCNGRP == "1").First(); - } + // 鐩存帴鎵ц SQL锛堝弬鏁板寲鏌ヨ锛�+ var sql = "SELECT get_ovg_bar(@barcode, @mcngrp) AS overage_value"; + var sql1 = "SELECT get_minhour_bar(@barcode, @mcngrp) AS overage_value"; - if (overage == null) + // 浣跨敤鍖垮悕瀵硅薄浼犻�鍙傛暟 + var ovg_bar = db.Ado.SqlQuery<int>(sql, new { barcode = bc_entried, mcngrp = "1"}).First(); + var minhour_bar = db.Ado.SqlQuery<float>(sql1, new { barcode = bc_entried, mcngrp = "1"}).First(); + Overage overage = new Overage() { - string sub = bc_entried.Substring(0, 7); - overage = db.Queryable<Overage>().Where(a => a.ITEMPATT.Contains(sub) && a.MCNGRP == "1").First(); - } + MINHOUR = minhour_bar, + OVERAGE = ovg_bar + }; return overage; } @@ -893,7 +965,18 @@ try { db.BeginTran(); - result = db.Insertable(record).ExecuteCommand()> 0; + var synDataTimeRecord = db.Queryable<SynDataTimeRecord>().Where(a => a.S_SYN_TIME == record.S_SYN_TIME && a.RECORD_TABLE == record.RECORD_TABLE).First(); + if (synDataTimeRecord == null) + { + result = db.Insertable(record).ExecuteCommand() > 0; + } + else + { + synDataTimeRecord.N_SYN_NUM = record.N_SYN_NUM; + synDataTimeRecord.S_SYN_TIME = record.S_SYN_TIME; + result = db.Updateable(synDataTimeRecord).ExecuteCommand() > 0; + } + if (result) { db.CommitTran(); @@ -905,7 +988,7 @@ } catch (Exception ex) { - LogHelper.Info($"娣诲姞鍚屾鏁版嵁鏃堕棿璁板綍閿欒锛岄敊璇俊鎭細{ex.Message}", "GT"); + LogHelper.Info($"娣诲姞鏁版嵁鍚屾鏃堕棿璁板綍閿欒锛岄敊璇俊鎭細{ex.Message}", "GT"); db.RollbackTran(); } return result; -- Gitblit v1.9.1