From b7308bba3d7ffad271ce7fc7a93c8c45d76be87d Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期五, 13 六月 2025 17:21:03 +0800
Subject: [PATCH] 优化印尼佳通-硫化胚胎出入库逻辑策略优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs |  171 +++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 119 insertions(+), 52 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 6dc19e8..66bc083 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
@@ -165,18 +165,39 @@
         }
 
         /// <summary>
-        /// 
+        /// 鏌ヨ鎴愬瀷鏈鸿繑鏂欒揣浣�         /// </summary>
         /// <param name="locCode"></param>
         /// <returns></returns>
-        public static string getReturnMaterialLocCode(string locCode)
+        public static SideLocConfig getReturnMaterialLocCode(string locCode)
         {
             var db = new SqlHelper<object>().GetInstance();
-            var returnMaterialLoc = db.Queryable<SideLocConfig>().Where(a => a.S_LOC_CODE.Trim() == locCode).First();
-            if (returnMaterialLoc != null) {
-                return returnMaterialLoc.S_RETURN_LOC_CODE;
+            return db.Queryable<SideLocConfig>().Where(a => a.S_LOC_CODE.Trim() == locCode).First();
+        }
+
+        /// <summary>
+        /// 鏌ヨ鎴愬瀷鏈哄彨鏂欎綅
+        /// </summary>
+        /// <param name="jtNo"></param>
+        /// <returns></returns>
+        public static Location getCallMaterialLocCode(string jtNo)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+
+            Location loc = null;
+            var returnMaterialLocs = db.Queryable<SideLocConfig>().Where(a => a.EQP.Trim() == jtNo).ToList();
+            if (returnMaterialLocs.Count > 0)
+            {
+                foreach (var item in returnMaterialLocs)
+                {
+                    loc = LocationHelper.GetLoc(item.S_LOC_CODE);
+                    if (loc.N_CURRENT_NUM == 0 && loc.N_LOCK_STATE == 0) 
+                    {
+                        break;
+                    }
+                }
             }
-            return null;
+            return loc;
         }
         // --------------------------------------------------------绂忓缓浣抽�-----------------------------------------
 
@@ -239,6 +260,34 @@
                 .OrderBy(a => a.S_PRI)
                 .First();
             return logicConfig;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鏌愪釜鐗╂枡鍦ㄤ腑杞簱鐨勫簱瀛樹俊鎭�+        /// </summary>
+        /// <param name="itemCode"></param>
+        /// <returns></returns>
+        public static List<CntrItemRel> getZZKInventoryInfo(string itemCode) 
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            List < CntrItemRel > cntrItemRels = new List<CntrItemRel>();
+            string areaCode = Settings.areaPropertyList.Where(a => a.areaName.Contains("涓浆搴�)).Select(a => a.areaCode).FirstOrDefault();
+            if (areaCode != null) 
+            {
+                cntrItemRels = db.Queryable<CntrItemRel>()
+                    .LeftJoin<LocCntrRel>((a, b) => a.S_CNTR_CODE == b.S_CNTR_CODE)
+                    .LeftJoin<Location>((a, b, c) => b.S_LOC_CODE == c.S_CODE)
+                    .LeftJoin<Container>((a, b, c, d) => a.S_CNTR_CODE == d.S_CODE)
+                    .Where((a, b, c, d) => c.S_AREA_CODE == areaCode 
+                                            && c.N_CURRENT_NUM == 1 
+                                            && c.N_LOCK_STATE == 0
+                                            && a.S_ITEM_CODE == itemCode
+                                            && d.N_E_STATE == 0             // 鎵樼洏姝e父
+                    )
+                    .OrderBy((a, b, c, d) => a.T_INBOUND_TIME)
+                    .ToList();
+            }
+            return cntrItemRels;
         }
 
         /// <summary>
@@ -307,7 +356,7 @@
                 string S_ZONE_CLS_CODE = "";
                 if (trayStatus == 0)
                 {
-                    S_ZONE_CLS_CODE = "KGZ";
+                    S_ZONE_CLS_CODE = "KT";
                 }
                 else if (trayStatus == 1)
                 {
@@ -346,10 +395,6 @@
                               .Where((a, b, c) => a.S_AREA_CODE.Trim() == item.S_AREA_CODE.Trim() && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && c.S_ZONE_CLS_CODE.Trim() == S_ZONE_CLS_CODE)
                               .OrderBy((a, b, c) => a.N_LAYER)
                               .First();
-                            if (location != null)
-                            {
-                                return location;
-                            }
                         }
                     }
 
@@ -369,7 +414,7 @@
                                  .OrderBy((a, b, c) => a.N_LAYER)
                                  .First();
                 }
-                LogHelper.Info($"鏌ヨ缁撴潫,绔嬪簱缁堢偣璐т綅:{location}","WMS");
+                LogHelper.Info($"鏌ヨ缁撴潫,绔嬪簱缁堢偣璐т綅:{JsonConvert.SerializeObject(location)}","WMS");
             }
             catch (Exception ex) 
             {
@@ -381,15 +426,27 @@
 
         public static bool addAlarmRecord(string alarmType , string alarmLevel ,string alarmMsg ,string logSite = "WMS") {
             var db = new SqlHelper<object>().GetInstance();
+            bool result = true;
             LogHelper.Info(alarmMsg, logSite);
-            AlarmRecord alarmRecord = new AlarmRecord() {
-                S_ALARM_CODE = GenerateAlarmNo(),
-                S_ALARM_TYPE = alarmType,
-                S_ALARM_LEVEL = alarmLevel,
-                S_ALARM_MSG = alarmMsg,
-                S_FILE_NAME = logSite,
-            };    
-           return db.Insertable<AlarmRecord>(alarmRecord).ExecuteCommand()>0;
+            var alarmRecord = db.Queryable<AlarmRecord>().Where(a => a.N_IS_READ == 0 && a.S_ALARM_MSG == alarmMsg).First();
+            if (alarmRecord == null)
+            {
+                alarmRecord = new AlarmRecord()
+                {
+                    S_ALARM_CODE = GenerateAlarmNo(),
+                    S_ALARM_TYPE = alarmType,
+                    S_ALARM_LEVEL = alarmLevel,
+                    S_ALARM_MSG = alarmMsg,
+                    S_FILE_NAME = logSite,
+                };
+                result = db.Insertable<AlarmRecord>(alarmRecord).ExecuteCommand() > 0;
+            }
+            else 
+            {
+                alarmRecord.T_MODIFY = DateTime.Now;
+                result = db.Updateable<AlarmRecord>(alarmRecord).ExecuteCommand() > 0;
+            }
+            return result;
         }
 
         public static bool addRfidAnomalyRecord(string rfid ,int anomalyType ,string locCode ,string taskNo) 
@@ -403,18 +460,18 @@
                 S_LOC_CODE = locCode,
                 S_TASK_NO = taskNo
             };
-            return db.Insertable<AlarmRecord>(anomalyRecord).ExecuteCommand() > 0;
+            return db.Insertable<RfidAnomalyRecord>(anomalyRecord).ExecuteCommand() > 0;
         }
 
         /// <summary>
         /// 鏌ヨ鎴愬瀷鏈虹嚎杈�         /// </summary>
-        /// <param name="locCode"></param>
+        /// <param name="jtNo"></param>
         /// <returns></returns>
-        public static SideLocConfig GetLineSideLoc(string locCode)
+        public static SideLocConfig GetLineSideLoc(string jtNo)
         {
             var db = new SqlHelper<object>().GetInstance();
-            return db.Queryable<SideLocConfig>().Where(a => a.S_LOC_CODE.Trim() == locCode).First();
+            return db.Queryable<SideLocConfig>().Where(a => a.EQP.Trim() == jtNo).First();
         }
 
         /// <summary>
@@ -450,15 +507,15 @@
         /// </summary>
         /// <param name="areaCode">搴撳尯</param>
         /// <param name="property">璐т綅灞炴�锛�.鐩磋繛 2.闈炵洿杩烇級</param>
-        /// <param name="actType">鍔ㄤ綔绫诲瀷锛�.浜哄伐鎺ラ┏浣�1.鍏ュ簱鎺ラ┏浣�2.鍑哄簱鎺ラ┏浣嶏級</param>
+        /// <param name="type">鍔ㄤ綔绫诲瀷锛�.浜哄伐鎺ラ┏浣�1.鍏ュ簱鎺ラ┏浣�2.鍑哄簱鎺ラ┏浣嶏級</param>
         /// <returns></returns>
-        public static Location GetTransfeRelevanceLoc(string areaCode  ,int actType ,int property )
+        public static Location GetTransfeRelevanceLoc(string areaCode  ,int type ,int property )
         {
             Location loc = null;
             var db = new SqlHelper<object>().GetInstance();
             loc = db.Queryable<Location>()
                 .LeftJoin<TransfeRelevance>((a,b)=> a.S_CODE == b.S_LOC_CODE)
-                .Where((a, b) => b.S_RELE_AREA.Trim() == areaCode && b.N_PROPERTY == property && b.N_ACT_TYPE == actType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y")
+                .Where((a, b) => b.S_RELE_AREA.Trim() == areaCode && b.N_PROPERTY == property && b.N_TYPE == type && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y")
                 .First();
             return loc;
         }
@@ -482,16 +539,16 @@
         /// 娉細鏌ヨ浠诲姟鏈�皯鐨勬帴椹充綅
         /// </summary>
         /// <param name="areaCode">搴撳尯</param>
-        /// <param name="property">璐т綅灞炴� ( 0.浜哄伐 1.鐩磋繛 2.闈炵洿杩�</param>
-        /// <param name="actType">鍔ㄤ綔绫诲瀷 锛�.鍏ュ簱鎺ラ┏浣� 2.鍑哄簱鎺ラ┏浣嶏級</param>
+        /// <param name="property">璐т綅灞炴� ( 1.鐩磋繛 2.闈炵洿杩�</param>
+        /// <param name="type">鍔ㄤ綔绫诲瀷 锛�.鍏ュ簱鎺ラ┏浣� 2.鍑哄簱鎺ラ┏浣嶏級</param>
         /// <returns></returns>
-        public static Location GetMinTaskTransfeLoc(string areaCode ,int actType, int property)
+        public static Location GetMinTaskTransfeLoc(string areaCode ,int type, int property)
         {
             var db = new SqlHelper<object>().GetInstance();
             var loc = db.Queryable<Location>()
                 .LeftJoin<TransfeRelevance>((a,b) => a.S_CODE == b.S_LOC_CODE)
                 .LeftJoin<WCSTask>((a,b,c) => a.S_CODE == c.S_END_LOC && c.N_B_STATE < 3)
-                .Where((a, b, c) => b.S_RELE_AREA.Trim() == areaCode  && b.N_ACT_TYPE == actType && b.N_PROPERTY == property  && a.N_LOCK_STATE < 3 && a.C_ENABLE == "Y")
+                .Where((a, b, c) => b.S_RELE_AREA.Trim() == areaCode  && b.N_TYPE == type && b.N_PROPERTY == property  && a.N_LOCK_STATE < 3 && a.C_ENABLE == "Y")
                 .GroupBy((a, b, c) => a.S_CODE)
                 .Select((a, b, c) => new {
                     count = SqlFunc.AggregateCount(c.S_END_LOC),
@@ -698,7 +755,20 @@
         }
 
         /// <summary>
-        /// 鏌ヨMES鍙枡浠诲姟
+        /// 鏍规嵁鏈哄彴鍙锋煡璇ES浠诲姟
+        /// </summary>
+        /// <param name="jtNo"></param>
+        /// <returns></returns>
+        internal static LjMesTask getLjMesTaskByJtNo(string jtNo)
+        {
+            // 1.鏌ヨMES浠诲姟琛�+            var db = new SqlHelper<object>().GetInstance();
+            var mesTask = db.Queryable<LjMesTask>().Where(a => a.EQP.Trim() == jtNo && a.RECEIVE_FLAG.Trim() == "PENDING").OrderByDescending(a => a.T_CREATE).First();
+            return mesTask;
+        }
+
+        /// <summary>
+        /// 鏍规嵁鐐逛綅缂栧彿鏌ヨMES鍙枡浠诲姟
         /// </summary>
         /// <param name="positionId"></param>
         /// <returns></returns>
@@ -719,8 +789,6 @@
         {
             bool result = false;
             var db = new SqlHelper<object>().GetInstance();
-            mesTask.RECEIVE_FLAG = "COMPLETE";
-            mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
             result = db.Updateable(mesTask).ExecuteCommand() > 0;
             return result;
         }
@@ -895,30 +963,29 @@
         /// <summary>
         /// 涓嬪彂XC浠诲姟
         /// </summary>
-        /// <param name="mesTaksId"></param>
+        /// <param name="mesTask"></param>
         /// <returns></returns>
-        public static bool addLjXcTask(int mesTaksId) 
+        public static bool addLjXcTask(LjMesTask mesTask) 
         {
             bool result = false;
             var db = new SqlHelper<object>().GetInstance();
-            var ljMesTask = GetLjMesTaskById(mesTaksId);
-            if (ljMesTask != null) {
+            if (mesTask != null) {
                 LjXcTask ljXcTask = new LjXcTask() { 
-                    ID = ljMesTask.ID,
-                    POSITION_ID = ljMesTask.POSITION_ID,
-                    RETURN_CODE = ljMesTask.RETURN_CODE,
-                    MSG_TYPE = ljMesTask.MSG_TYPE,
-                    PALLET_TYPE = ljMesTask.PALLET_TYPE,
-                    MATERIAL_NAME = ljMesTask.MATERIAL_NAME,
-                    MATERIAL_CODE = ljMesTask.MATERIAL_CODE,
-                    QTY = ljMesTask.QTY,
-                    YCL_BATCH = ljMesTask.YCL_BATCH,
-                    PALLET_ID = ljMesTask.PALLET_ID,
-                    AGVORDER_ID = ljMesTask.AGVORDER_ID,
+                    ID = mesTask.ID,
+                    POSITION_ID = mesTask.POSITION_ID,
+                    RETURN_CODE = mesTask.RETURN_CODE,
+                    MSG_TYPE = mesTask.MSG_TYPE,
+                    PALLET_TYPE = mesTask.PALLET_TYPE,
+                    MATERIAL_NAME = mesTask.MATERIAL_NAME,
+                    MATERIAL_CODE = mesTask.MATERIAL_CODE,
+                    QTY = mesTask.QTY,
+                    YCL_BATCH = mesTask.YCL_BATCH,
+                    PALLET_ID = mesTask.PALLET_ID,
+                    AGVORDER_ID = mesTask.AGVORDER_ID,
                     CREATION_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
-                    RECEIVE_FLAG = ljMesTask.RECEIVE_FLAG,
-                    EQP = ljMesTask.EQP,
-                    PLAN_ID = ljMesTask.PLAN_ID
+                    RECEIVE_FLAG = mesTask.RECEIVE_FLAG,
+                    EQP = mesTask.EQP,
+                    PLAN_ID = mesTask.PLAN_ID
                 };
                 result = db.Insertable<LjXcTask>(ljXcTask).ExecuteCommand() > 0;
             }

--
Gitblit v1.9.1