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