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 | 112 +++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 86 insertions(+), 26 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..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; @@ -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,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(); @@ -620,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)) @@ -628,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) @@ -707,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 { @@ -718,8 +748,6 @@ } return result; } - - public static bool updateShiftOrderDetail(TN_YiKuDetail detail) { bool result = false; @@ -739,6 +767,42 @@ 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; } + return result; + } + + /// <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; } @@ -879,18 +943,14 @@ 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) + 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() { - Overage overage = new Overage() - { - MINHOUR = minhour_bar[0], - OVERAGE = ovg_bar[0] - }; - return overage; - } - return null; + MINHOUR = minhour_bar, + OVERAGE = ovg_bar + }; + return overage; } /// <summary> -- Gitblit v1.9.1