From c8f338feee0b6003d8f069b1d37fd9b90dd1b7f4 Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期一, 07 七月 2025 17:31:38 +0800 Subject: [PATCH] 印尼佳通优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/wms/WMSHelper.cs | 297 +++++++++++++++++++++++++++++++++++------------------------ 1 files changed, 177 insertions(+), 120 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 e7e2009..d720822 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; @@ -440,11 +442,13 @@ if (exclude == 1) { - query = query.Where((a, b, c, d) => a.S_CODE != Settings.baseTrayInBufferLoc); + List<string> bufferInLocs = Settings.baseTrayBufferLocList.Select(a => a.bufferInLoc).ToList(); + query = query.Where((a, b, c, d) => !bufferInLocs.Contains(a.S_CODE)); } - else + else { - query = query.OrderByDescending((a, b, c, d) => a.S_CODE == Settings.baseTrayInBufferLoc); + 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(); @@ -550,12 +554,16 @@ /// <summary> /// 鑾峰彇鍏ュ簱缁堢偣璐т綅 + /// 鍏ュ簱绛栫暐 + /// 1.宸烽亾鍧囪 + /// 2.鐗╂枡鍧囪 /// </summary> /// <param name="locCode"></param> /// <param name="trayType"></param> /// <param name="inWay">鍏ュ簱鏂瑰紡 1.鑷姩鍏ュ簱 2.浜哄伐鍏ュ簱</param> + /// <param name="itemCode">鐗╂枡缂栫爜</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(); @@ -620,7 +628,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)) @@ -628,21 +635,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) @@ -707,6 +732,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 { @@ -718,8 +749,6 @@ } return result; } - - public static bool updateShiftOrderDetail(TN_YiKuDetail detail) { bool result = false; @@ -743,6 +772,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> @@ -753,26 +818,22 @@ try { db.BeginTran(); - itemBarcodeInfos.ForEach(item => { - var itemBarcodeInfo = db.Queryable<ItemBarcodeInfo>().Where(a => a.S_BC_ENTRIED == item.S_BC_ENTRIED).First(); - if (itemBarcodeInfo == null) - { - var bo = db.Insertable<ItemBarcodeInfo>(item).ExecuteCommand() > 0; - if (!bo) + if (itemBarcodeInfos.Count > 0) + { + 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(item)}", "GT"); + var bo = db.Insertable<ItemBarcodeInfo>(item).ExecuteCommand() == 0; + if (bo) + { + result = false; + LogHelper.Info($"娣诲姞鐗╂枡鏉$爜淇℃伅澶辫触锛岀墿鏂欐潯鐮佷俊鎭細{JsonConvert.SerializeObject(item)}", "GT"); + } } - } - }); - if (result) - { - db.CommitTran(); + }); } - else - { - db.RollbackTran(); - } + db.CommitTran(); } catch (Exception ex) { @@ -780,6 +841,62 @@ db.RollbackTran(); } return result; + } + + /// <summary> + /// 鍚屾鏉$爜鐘舵�琛�+ /// </summary> + /// <returns></returns> + public static bool synBarcodeStatus(List<iWMS_semi_bld_BCstatus> model) + { + bool result = true; + var db = new SqlHelper<object>().GetInstance(); + try + { + db.BeginTran(); + if (model.Count > 0) + { + model.ForEach(update => { + db.Insertable(update).ExecuteCommand(); + }); + } + db.CommitTran(); + } + catch (Exception ex) + { + LogHelper.Info($"鍚屾鏉$爜鐘舵�琛ㄩ敊璇紝閿欒淇℃伅锛歿ex.Message}", "GT"); + db.RollbackTran(); + result = false; + } + return result; + } + + /// <summary> + /// 鍚屾鎶芥鐘舵�琛�+ /// </summary> + /// <returns></returns> + public static bool synSamplingStatus(List<iWMS_semi_bld_BCsample> model) + { + bool result = true; + var db = new SqlHelper<object>().GetInstance(); + try + { + db.BeginTran(); + if (model.Count > 0) + { + model.ForEach(update => { + db.Insertable(update).ExecuteCommand(); + }); + } + db.CommitTran(); + } + catch (Exception ex) + { + LogHelper.Info($"鍚屾鎶芥鐘舵�琛ㄩ敊璇紝閿欒淇℃伅锛歿ex.Message}", "GT"); + db.RollbackTran(); + result = false; + } + return result; } /// <summary> @@ -793,28 +910,22 @@ try { db.BeginTran(); - updateMatlStatuses.ForEach(update => { - var itemBarcodeInfo = db.Queryable<ItemBarcodeInfo>().Where(a => a.S_BC_ENTRIED == update.bc_entried).First(); - if (itemBarcodeInfo != null) - { - 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) + if (updateMatlStatuses.Count > 0) + { + updateMatlStatuses.ForEach(update => { + var itemBarcodeInfo = db.Queryable<ItemBarcodeInfo>().Where(a => a.S_BC_ENTRIED == update.bc_entried).First(); + if (itemBarcodeInfo != null) { - // 灏哅ES鐨勭墿鏂欑姸鎬佽浆鍖栨垚WMS鍙瘑鍒殑鐗╂枡鐘舵� - if (update.jdge == "" || update.jdge == null) + 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) { - update.jdge = "OK"; + db.Updateable<CntrItemRel>().SetColumns(a => new CntrItemRel() { S_ITEM_STATE = update.jdge }).Where(a => a.S_CG_ID == update.bc_entried).ExecuteCommand(); } - 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(); } - } - }); + }); + } db.CommitTran(); } catch (Exception ex) @@ -824,73 +935,6 @@ result = false; } return result; - } - - /// <summary> - /// 鎵归噺鏇存柊鐗╂枡鐘舵� - /// </summary> - /// <returns></returns> - public static bool batchUpdateMatlTimeConfig(List<Overage> overages) - { - bool result = true; - var db = new SqlHelper<object>().GetInstance(); - try - { - db.BeginTran(); - foreach (Overage overage in overages) - { - 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; - db.Updateable(overage1).ExecuteCommand(); - } - else - { - db.Insertable(overage).ExecuteCommand(); - } - } - db.CommitTran(); - } - catch (Exception ex) - { - LogHelper.Info($"鎵归噺鏇存柊鐗╂枡瀛樻斁鏃堕棿閰嶇疆淇℃伅閿欒锛岄敊璇俊鎭細{ex.Message}", "GT"); - db.RollbackTran(); - result = false; - } - return result; - } - /// <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 = "1"}); - var minhour_bar = db.Ado.SqlQuery<float>(sql1, new { barcode = bc_entried, mcngrp = "1"}); - 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; } /// <summary> @@ -937,12 +981,25 @@ /// <summary> /// 鏌ヨ涓婁竴娆$殑鍚屾鏃堕棿 /// </summary> - /// <param name="recordTable"></param> + /// <param name="tableType"></param> /// <returns></returns> - public static SynDataTimeRecord getLastDataSynTime(string recordTable) + public static string getDataLastSynTime(int tableType) { var db = new SqlHelper<object>().GetInstance(); - return db.Queryable<SynDataTimeRecord>().Where(a => a.RECORD_TABLE == recordTable).OrderByDescending(a => a.T_CREATE).First(); + string lastTime = null; + if (tableType == 1) + { + lastTime = db.Queryable<ItemBarcodeInfo>().OrderByDescending(a => a.LAST_MODIFY_TIME).Select(a => a.LAST_MODIFY_TIME).First(); + } + else if (tableType == 2) + { + + } + else if (tableType == 3) + { + + } + return lastTime; } } } -- Gitblit v1.9.1