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