From 06a8b6963d6d4f229d4e196b4b09ce57e2cbf2dd Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期四, 24 七月 2025 17:21:40 +0800
Subject: [PATCH] 印尼佳通-GT服务开发

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs |  294 ++++++++++++++++++++++++++++++----------------------------
 1 files changed, 154 insertions(+), 140 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
index 3cce68b..b314fce 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
@@ -1,4 +1,5 @@
 锘縰sing HH.WCS.Mobox3.FJJF.models;
+using HH.WCS.Mobox3.FJJT.dispatch;
 using HH.WCS.Mobox3.FJJT.models;
 using HH.WCS.Mobox3.FJJT.models.other;
 using HH.WCS.Mobox3.FJJT.util;
@@ -17,6 +18,7 @@
 using System.Threading.Tasks;
 using System.Web.UI.WebControls;
 using static HH.WCS.Mobox3.FJJT.api.ApiModel;
+using static HH.WCS.Mobox3.FJJT.util.ExcetionHelper;
 using static HH.WCS.Mobox3.FJJT.util.Settings;
 
 namespace HH.WCS.Mobox3.FJJT.wms {
@@ -214,66 +216,6 @@
 
 
         /// <summary>
-        /// 鏌ヨ閫昏緫閰嶇疆琛�-        /// </summary>
-        /// <param name="taskType">浠诲姟绫诲瀷</param>
-        /// <returns></returns>
-        internal static List<LogicConfig> getLogicConfigByTaskType(string taskType)
-        {
-            var db = new SqlHelper<object>().GetInstance();
-            var logicConfigList = db.Queryable<LogicConfig>()
-                .Where(a => a.S_TASK_TYPE.Trim() == taskType && a.S_ENABLE.Trim() == "鏄�)
-                .OrderBy(a => a.S_PRI)
-                .ToList();
-            return logicConfigList;
-        }
-
-        /// <summary>
-        /// 鏌ヨ閫昏緫閰嶇疆琛�-        /// </summary>
-        /// <param name="hcLocCode">琛ョ┖缂撳瓨浣�/param>
-        /// <returns></returns>
-        internal static LogicConfig getLogicConfigByHcLoc(string hcLocCode)
-        {
-            var db = new SqlHelper<object>().GetInstance();
-            var logicConfig = db.Queryable<LogicConfig>()
-                .Where(a => a.S_LKBKHCLOC.Trim() == hcLocCode && a.S_ENABLE.Trim() == "鏄�)
-                .OrderBy(a => a.S_PRI)
-                .First();
-            return logicConfig;
-        }
-
-        /// <summary>
-        /// 鏌ヨ閫昏緫閰嶇疆琛�-        /// </summary>
-        /// <param name="mtjbLoc">婊℃枡鎺ラ┏浣�/param>
-        /// <returns></returns>
-        internal static LogicConfig getLogicConfigByMtjbLoc(string mtjbLoc)
-        {
-            var db = new SqlHelper<object>().GetInstance();
-            var logicConfig = db.Queryable<LogicConfig>()
-                .Where(a => a.S_MTJBLOC.Trim() == mtjbLoc && a.S_ENABLE.Trim() == "鏄�)
-                .OrderBy(a => a.S_PRI)
-                .First();
-            return logicConfig;
-        }
-
-        /// <summary>
-        /// 鏌ヨ閫昏緫閰嶇疆琛�-        /// </summary>
-        /// <param name="jtCode"></param>
-        /// <returns></returns>
-        internal static LogicConfig getLogicConfigByJtCode(string jtCode)
-        {
-            var db = new SqlHelper<object>().GetInstance();
-            var logicConfig = db.Queryable<LogicConfig>()
-                .Where(a => a.S_JT_CODE.Trim() == jtCode && a.S_ENABLE.Trim() == "鏄�)
-                .OrderBy(a => a.S_PRI)
-                .First();
-            return logicConfig;
-        }
-
-        /// <summary>
         /// 鏌ヨ鏌愪釜鐗╂枡鍦ㄤ腑杞簱鐨勫簱瀛樹俊鎭�         /// </summary>
         /// <param name="itemCode"></param>
@@ -282,7 +224,7 @@
         {
             DateTime inboundTime = DateTime.MinValue;
             var db = new SqlHelper<object>().GetInstance();
-            string areaCode = Settings.areaPropertyList.Where(a => a.areaName.Contains("涓浆搴�)).Select(a => a.areaCode).FirstOrDefault();
+            string areaCode = Settings.areaRelevanceList.Where(a => a.areaCode.Contains("ZZFZLKQ")).Select(a => a.areaCode).FirstOrDefault();
             if (areaCode != null) 
             {
                     inboundTime = db.Queryable<CntrItemRel>()
@@ -328,7 +270,7 @@
             }
             else 
             {
-                List<string> areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList();
+                List<string> areaCodes = Settings.areaRelevanceList.Select(a => a.areaCode).ToList();
                 queryable = queryable.Where((a, b, c, d) => areaCodes.Contains(a.S_AREA_CODE.Trim()));
             }
             if (traySatus == 0)
@@ -518,6 +460,31 @@
         }
 
         /// <summary>
+        /// 鏌ヨ鏈夌┖宸ヨ鐨勫浐瀹氱┖宸ヨ鍑哄簱绔欏彴
+        /// </summary>
+        /// <param name="areaCode"></param>
+        /// <returns></returns>
+        public static Location GetFullFixedOutLoc(string areaCode)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<Location>()
+                .LeftJoin<TransfeRelevance>((a,b) => b.S_LOC_CODE == a.S_CODE)
+                .Where((a, b) => a.S_AREA_CODE.Trim() == areaCode && b.N_IS_FIXED_OUT == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 1).First();
+        }
+
+        /// <summary>
+        /// 鏌ヨ鎵�湁绌虹殑鍥哄畾绌哄伐瑁呭嚭搴撶珯鍙�+        /// </summary>
+        /// <returns></returns>
+        public static List<Location> GetEmptyFixedOutLocList()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<Location>()
+                .LeftJoin<TransfeRelevance>((a, b) => b.S_LOC_CODE == a.S_CODE)
+                .Where((a, b) =>  b.N_IS_FIXED_OUT == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0).ToList();
+        }
+
+        /// <summary>
         /// 鏌ヨ鎺ラ┏浣嶅叧鑱斿睘鎬�         /// </summary>
         /// <param name="locCode"></param>
@@ -588,6 +555,59 @@
             return query.First();
         }
 
+        public static BufferLocConfig GetBufferLocConfig(string locCode) 
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<BufferLocConfig>().Where(a => a.S_LOC_CODE == locCode).First();
+        }
+
+        public static BufferLocConfig GetBufferLocConfigByJtNo(string jtNo)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<BufferLocConfig>().Where(a => a.S_OFF_LINE_JT_NO == jtNo).First();
+        }
+
+        /// <summary>
+        /// 鏌ヨ绌哄伐瑁呯紦瀛樹綅(闈炵洿杩�
+        /// </summary>
+        /// <param name="areaCode"></param>
+        /// <returns></returns>
+        public static Location getEmptyBufferLoc(string areaCode) 
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            var emptyBufferLocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == areaCode && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").ToList();
+            if (emptyBufferLocList.Count > 0) 
+            {
+                foreach (var bufferLoc in emptyBufferLocList)
+                {
+                    var bufferLocConfig = GetBufferLocConfig(bufferLoc.S_CODE);
+
+                    return bufferLoc;
+                    // 涓氬姟浠g爜锛屽嬁鍒�+                   /* var deviceStatusDatas = WCSDispatch.getDeviceStatus(new List<string>() { bufferLocConfig.S_DEVICE_NO });
+                    if (deviceStatusDatas != null && deviceStatusDatas.Count > 0)
+                    {
+                        var deviceStatus = deviceStatusDatas[0];
+                        if (deviceStatus.workStatus == 1 && deviceStatus.manualStatus == 0)
+                        {
+                            return bufferLoc;
+                        }
+                        else
+                        {
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"璁惧鍙�{bufferLocConfig.S_DEVICE_NO},璁惧褰撳墠澶勪簬涓嶅彲鐢ㄧ姸鎬侊紝璇疯仈绯荤鐞嗕汉鍛樿皟鏁磋澶囩姸鎬�);
+                            throw new BusinessException($"璁惧鍙�{bufferLocConfig.S_DEVICE_NO},璁惧褰撳墠澶勪簬涓嶅彲鐢ㄧ姸鎬侊紝璇疯仈绯荤鐞嗕汉鍛樿皟鏁磋澶囩姸鎬�);
+                        }
+                    }
+                    else
+                    {
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"璁惧鍙�{bufferLocConfig.S_DEVICE_NO},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
+                        throw new BusinessException($"璁惧鍙�{bufferLocConfig.S_DEVICE_NO},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
+                    }*/
+                }
+            }
+            return null;
+        }
+
         //------------------------------------------------MES涓棿琛�----------------------------------------------
 
 
@@ -613,15 +633,18 @@
                 if (mesTask != null)
                 {
                     // 2.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�-                    res = updateCarrier(mesTask.PALLET_ID);
-                    if (res) 
+                    var container = ContainerHelper.GetCntr(mesTask.PALLET_ID);
+                    if (container != null) 
                     {
-                        mesTask.AGVORDER_ID = taskNo;
-                        mesTask.RETURN_CODE = "1";
-                        mesTask.RECEIVE_FLAG = "COMPLETE";
-                        mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-                        db.Updateable(mesTask).ExecuteCommand();
+                        container.N_DETAIL_COUNT = mesTask.QTY == 0 ? 0 : 1;
+                        ContainerHelper.UpdateCntr(container);
+                        updateCarrier(mesTask.PALLET_ID);
                     }
+                    mesTask.AGVORDER_ID = taskNo;
+                    mesTask.RETURN_CODE = "1";
+                    mesTask.RECEIVE_FLAG = "COMPLETE";
+                    mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                    db.Updateable(mesTask).ExecuteCommand();
                 }
                 else 
                 {
@@ -643,88 +666,79 @@
         {
             bool res = true;
             var db = new SqlHelper<object>().GetInstance();
-            var container = ContainerHelper.GetCntr(palletId);
-            if (container != null)
+            // 1.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�+            var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.PALLET_ID == palletId).OrderByDescending(a => a.CREATION_DATE).First();
+            if (lotCarrier != null)
             {
-                // 1.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�-                var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.PALLET_ID == palletId).OrderByDescending(a => a.CREATION_DATE).First();
-                if (lotCarrier != null)
+                CntrItemRel cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == palletId).First();
+                if (cntrItemRel != null)
                 {
-                    CntrItemRel cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == palletId).First();
-                    if (cntrItemRel != null)
+                    cntrItemRel.S_CNTR_CODE = lotCarrier.PALLET_ID;
+                    cntrItemRel.S_BATCH_NO = lotCarrier.LOT_NAME;
+                    cntrItemRel.S_SERIAL_NO = lotCarrier.YCL_BATCH;
+                    cntrItemRel.S_ITEM_CODE = lotCarrier.MATERIALCODE;
+                    cntrItemRel.F_QTY = lotCarrier.QTY;
+                    cntrItemRel.D_PRD_DATE = lotCarrier.PRODUCTION_DATE;
+                    cntrItemRel.S_ITEM_STATE = lotCarrier.QC_STATUS;
+                    cntrItemRel.D_EXP_DATE = lotCarrier.SHELFLIFE_DATE;
+                    cntrItemRel.D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE;
+                    db.Updateable(cntrItemRel).ExecuteCommand();
+                }
+                else
+                {
+                    cntrItemRel = new CntrItemRel()
                     {
-                        cntrItemRel.S_CNTR_CODE = lotCarrier.PALLET_ID;
-                        cntrItemRel.S_BATCH_NO = lotCarrier.LOT_NAME;
-                        cntrItemRel.S_SERIAL_NO = lotCarrier.YCL_BATCH;
-                        cntrItemRel.S_ITEM_CODE = lotCarrier.MATERIALCODE;
-                        cntrItemRel.F_QTY = lotCarrier.QTY;
-                        cntrItemRel.D_PRD_DATE = lotCarrier.PRODUCTION_DATE;
-                        cntrItemRel.S_ITEM_STATE = lotCarrier.QC_STATUS;
-                        cntrItemRel.D_EXP_DATE = lotCarrier.SHELFLIFE_DATE;
-                        cntrItemRel.D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE;
-                        db.Updateable(cntrItemRel).ExecuteCommand();
+                        S_CNTR_CODE = lotCarrier.PALLET_ID,
+                        S_BATCH_NO = lotCarrier.LOT_NAME,
+                        S_SERIAL_NO = lotCarrier.YCL_BATCH,
+                        S_ITEM_CODE = lotCarrier.MATERIALCODE,
+                        F_QTY = lotCarrier.QTY,
+                        D_PRD_DATE = lotCarrier.PRODUCTION_DATE,
+                        S_ITEM_STATE = lotCarrier.QC_STATUS,
+                        D_EXP_DATE = lotCarrier.SHELFLIFE_DATE,
+                        D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE,
+                    };
+                    db.Insertable(cntrItemRel).ExecuteCommand();
+                }
+
+                lotCarrier.RECEIVE_FLAG = "COMPLETE";
+                lotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
+                db.Updateable(lotCarrier).UpdateColumns(a => new { a.RECEIVE_FLAG, a.RECEIVE_DATE }).ExecuteCommand();
+
+                // 璇诲彇鍩虹鐗╂枡淇℃伅琛�+                var material = db.Queryable<LjItem>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.MATERIAL_CODE == lotCarrier.MATERIALCODE).OrderByDescending(a => a.CREATION_DATE).First();
+                if (material != null)
+                {
+                    TN_Material tn_material = db.Queryable<TN_Material>().Where(a => a.S_ITEM_CODE == material.MATERIAL_CODE).First();
+
+                    if (tn_material != null)
+                    {
+                        tn_material.S_ITEM_CODE = material.MATERIAL_CODE;
+                        tn_material.S_ITEM_NAME = material.MATERIAL_NAME;
+                        tn_material.S_SPEC = material.SPEC;
+                        tn_material.S_MODEL = material.MODEL;
+                        tn_material.S_UNIT = material.UNIT;
+                        tn_material.S_MEMO = material.MEMO;
+                        db.Updateable(material).ExecuteCommand();
                     }
                     else
                     {
-                        cntrItemRel = new CntrItemRel()
+                        tn_material = new TN_Material()
                         {
-                            S_CNTR_CODE = lotCarrier.PALLET_ID,
-                            S_BATCH_NO = lotCarrier.LOT_NAME,
-                            S_SERIAL_NO = lotCarrier.YCL_BATCH,
-                            S_ITEM_CODE = lotCarrier.MATERIALCODE,
-                            F_QTY = lotCarrier.QTY,
-                            D_PRD_DATE = lotCarrier.PRODUCTION_DATE,
-                            S_ITEM_STATE = lotCarrier.QC_STATUS,
-                            D_EXP_DATE = lotCarrier.SHELFLIFE_DATE,
-                            D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE,
+                            S_ITEM_CODE = material.MATERIAL_CODE,
+                            S_ITEM_NAME = material.MATERIAL_NAME,
+                            S_SPEC = material.SPEC,
+                            S_MODEL = material.MODEL,
+                            S_UNIT = material.UNIT,
+                            S_MEMO = material.MEMO,
                         };
-                        db.Insertable(cntrItemRel).ExecuteCommand();
+                        db.Insertable(material).ExecuteCommand();
                     }
 
-                    lotCarrier.RECEIVE_FLAG = "COMPLETE";
-                    lotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
-                    db.Updateable(lotCarrier).UpdateColumns(a => new { a.RECEIVE_FLAG, a.RECEIVE_DATE }).ExecuteCommand();
-
-                    // 璇诲彇鍩虹鐗╂枡淇℃伅琛�-                    var material = db.Queryable<LjItem>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.MATERIAL_CODE == lotCarrier.MATERIALCODE).OrderByDescending(a => a.CREATION_DATE).First();
-                    if (material != null)
-                    {
-                        TN_Material tn_material = db.Queryable<TN_Material>().Where(a => a.S_ITEM_CODE == material.MATERIAL_CODE).First();
-
-                        if (tn_material != null)
-                        {
-                            tn_material.S_ITEM_CODE = material.MATERIAL_CODE;
-                            tn_material.S_ITEM_NAME = material.MATERIAL_NAME;
-                            tn_material.S_SPEC = material.SPEC;
-                            tn_material.S_MODEL = material.MODEL;
-                            tn_material.S_UNIT = material.UNIT;
-                            tn_material.S_MEMO = material.MEMO;
-                            db.Updateable(material).ExecuteCommand();
-                        }
-                        else
-                        {
-                            tn_material = new TN_Material()
-                            {
-                                S_ITEM_CODE = material.MATERIAL_CODE,
-                                S_ITEM_NAME = material.MATERIAL_NAME,
-                                S_SPEC = material.SPEC,
-                                S_MODEL = material.MODEL,
-                                S_UNIT = material.UNIT,
-                                S_MEMO = material.MEMO,
-                            };
-                            db.Insertable(material).ExecuteCommand();
-                        }
-
-                        material.RECEIVE_FLAG = "COMPLETE";
-                        material.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
-                        db.Updateable(material).ExecuteCommand();
-                    }
+                    material.RECEIVE_FLAG = "COMPLETE";
+                    material.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
+                    db.Updateable(material).ExecuteCommand();
                 }
-            }
-            else 
-            {
-                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鏈湪WMS绯荤粺涓煡璇㈠埌瀹瑰櫒淇℃伅,瀹瑰櫒缂栫爜锛歿palletId}");
-                res = false;
             }
             return res;
         }

--
Gitblit v1.9.1