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 |  528 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 391 insertions(+), 137 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 2f82ac0..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;
@@ -11,11 +12,13 @@
 using System.Globalization;
 using System.Linq;
 using System.Linq.Expressions;
+using System.Numerics;
 using System.Reflection;
 using System.Runtime.ConstrainedExecution;
 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 {
@@ -32,6 +35,10 @@
             var id = SYSHelper.GetSerialNumber("鍒嗘嫞鍗�, "SO");
             var date = DateTime.Now.ToString("yyMMdd");
             return $"SO{date}{id.ToString().PadLeft(4, '0')}";
+        }
+        internal static int GenerateStockRecordNo()
+        {
+            return SYSHelper.GetSerialNumber("搴撳瓨璁板綍鍙�, "SR");
         }
 
         internal static string GenerateAlarmNo()
@@ -131,7 +138,13 @@
             task.S_B_STATE = WMSTask.GetStateStr(task.N_B_STATE);
             db.Updateable<WMSTask>(task).UpdateColumns(a => new { a.N_TYPE,a.N_B_STATE, a.S_B_STATE, a.T_MODIFY,a.T_END_TIME }).ExecuteCommand();
         }
-        
+
+        internal static void UpdateWmsTask(WMSTask task)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            task.T_MODIFY = DateTime.Now;
+            db.Updateable<WMSTask>(task).ExecuteCommand();
+        }
 
         internal static bool UpdateTaskEnd(WMSTask a) {
             var db = new SqlHelper<object>().GetInstance();
@@ -165,80 +178,70 @@
         }
 
         /// <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;
         }
         // --------------------------------------------------------绂忓缓浣抽�-----------------------------------------
 
 
         /// <summary>
-        /// 鏌ヨ閫昏緫閰嶇疆琛�+        /// 鏌ヨ鏌愪釜鐗╂枡鍦ㄤ腑杞簱鐨勫簱瀛樹俊鎭�         /// </summary>
-        /// <param name="taskType">浠诲姟绫诲瀷</param>
+        /// <param name="itemCode"></param>
         /// <returns></returns>
-        internal static List<LogicConfig> getLogicConfigByTaskType(string taskType)
+        public static DateTime getZZKInventoryInfo(string itemCode) 
         {
+            DateTime inboundTime = DateTime.MinValue;
             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;
+            string areaCode = Settings.areaRelevanceList.Where(a => a.areaCode.Contains("ZZFZLKQ")).Select(a => a.areaCode).FirstOrDefault();
+            if (areaCode != null) 
+            {
+                    inboundTime = 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)
+                    .Select((a, b, c, d) => a.T_INBOUND_TIME)
+                    .First();
+            }
+            return inboundTime;
         }
 
         /// <summary>
@@ -261,9 +264,14 @@
                 .LeftJoin<CntrItemRel>((a, b, c, d) => c.S_CODE == d.S_CNTR_CODE)
                 .Where((a, b, c, d) =>  a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE.Trim() == "Y"  );
 
-            if (areaCode != null && areaCode != "") 
+            if (areaCode != null && areaCode != "")
             {
-                queryable = queryable.Where((a, b, c, d ) => a.S_AREA_CODE.Trim() == areaCode);
+                queryable = queryable.Where((a, b, c, d) => a.S_AREA_CODE.Trim() == areaCode);
+            }
+            else 
+            {
+                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)
             {
@@ -307,7 +315,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 +354,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 +373,7 @@
                                  .OrderBy((a, b, c) => a.N_LAYER)
                                  .First();
                 }
-                LogHelper.Info($"鏌ヨ缁撴潫,绔嬪簱缁堢偣璐т綅:{location}","WMS");
+                LogHelper.Info($"鏌ヨ缁撴潫,绔嬪簱缁堢偣璐т綅:{JsonConvert.SerializeObject(location)}","WMS");
             }
             catch (Exception ex) 
             {
@@ -379,28 +383,54 @@
             return location;
         }
 
-        public static bool addAlarmRecord(string alarmType , string alarmLevel ,string alarmMsg ,string logSite = "WMS") {
+        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) 
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            RfidAnomalyRecord anomalyRecord = new RfidAnomalyRecord()
+            {
+                S_RFID = rfid,
+                N_ANOMALY_TYPE = anomalyType,
+                S_ANOMALY_TYPE = RfidAnomalyRecord.getAnomalyType(anomalyType),
+                S_LOC_CODE = locCode,
+                S_TASK_NO = taskNo
+            };
+            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>
@@ -430,37 +460,41 @@
         }
 
         /// <summary>
-        /// 鏌ヨ鎺ラ┏浣嶅叧鑱斿睘鎬�-        /// 娉細
-        /// 1.鏌ヨ寮傚父鍖鸿揣浣�+        /// 鏌ヨ鏈夌┖宸ヨ鐨勫浐瀹氱┖宸ヨ鍑哄簱绔欏彴
         /// </summary>
-        /// <param name="areaCode">搴撳尯</param>
-        /// <param name="type">绫诲瀷 1.绔嬪簱鎺ラ┏浣�2.缂撳瓨浣�/param>
-        /// <param name="property">璐т綅灞炴�锛�.鐩磋繛 2.闈炵洿杩�3.浜哄伐 4.鍥哄畾绔欏彴锛�/param>
-        /// <param name="actType">鍔ㄤ綔绫诲瀷锛�.榛樿 1.鍏ュ簱 2.鍑哄簱锛�/param>
+        /// <param name="areaCode"></param>
         /// <returns></returns>
-        public static Location GetTransfeRelevanceLoc(string areaCode , string type ,string actType = "0" ,string property = "2" )
+        public static Location GetFullFixedOutLoc(string areaCode)
         {
-            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.S_TYPE.Trim() == type && b.S_PROPERTY == property && b.S_ACT_TYPE == actType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y")
-                .First();
-            return loc;
+            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>
-        /// <param name="property">璐т綅灞炴� (1.鐩磋繛 2.闈炵洿杩炪�3.浜哄伐 銆�.鍥哄畾绔欏彴)</param>
+        /// <param name="isManual">璐т綅灞炴� (0.闈炰汉宸�1.浜哄伐)</param>
         /// <returns></returns>
-        public static bool updateTransfeLocProperty(string locCode ,string property)
+        public static bool updateTransfeLocProperty(string locCode ,int isManual)
         {
             bool result = false;
             var db = new SqlHelper<object>().GetInstance();
-            result = db.Updateable<TransfeRelevance>().SetColumns(a => new TransfeRelevance() { S_PROPERTY = property } ).Where(a => a.S_LOC_CODE.Trim() == locCode).ExecuteCommand() > 0;
+            result = db.Updateable<TransfeRelevance>().SetColumns(a => new TransfeRelevance() { N_IS_MANUAL = isManual } ).Where(a => a.S_LOC_CODE.Trim() == locCode).ExecuteCommand() > 0;
             return result;
         }
 
@@ -469,17 +503,15 @@
         /// 娉細鏌ヨ浠诲姟鏈�皯鐨勬帴椹充綅
         /// </summary>
         /// <param name="areaCode">搴撳尯</param>
-        /// <param name="property">璐т綅灞炴� (1.鐩磋繛 2.闈炵洿杩炪�3.浜哄伐 銆�.鍥哄畾绔欏彴)</param>
-        /// <param name="type">绫诲瀷 1.绔嬪簱鎺ラ┏浣�2.缂撳瓨浣�3.鏈哄彴涓嬬嚎浣�4.寮傚父搴撲綅</param>
-        /// <param name="actType">鍔ㄤ綔绫诲瀷 1.鍏ュ簱  2.鍑哄簱</param>
+        /// <param name="type">鍔ㄤ綔绫诲瀷 锛�.鍏ュ簱鎺ラ┏浣� 2.鍑哄簱鎺ラ┏浣嶏級</param>
         /// <returns></returns>
-        public static Location GetMinTaskTransfeLoc(string areaCode , string type ,string actType, string property = "2")
+        public static Location GetMinTaskTransfeLoc(string areaCode ,int type)
         {
             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.S_TYPE.Trim() == type && b.S_ACT_TYPE.Trim() == actType && b.S_PROPERTY.Trim() == property  && a.N_LOCK_STATE < 3 && a.C_ENABLE == "Y")
+                .Where((a, b, c) => b.S_RELE_AREA.Trim() == areaCode  && b.N_TYPE == type && 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),
@@ -523,51 +555,192 @@
             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涓棿琛�----------------------------------------------
 
 
         /// <summary>
         /// 璇诲彇MES涓嬫枡浠诲姟
-        /// 1.澶囦唤瀹瑰櫒鐗╂枡淇℃伅  
-        /// 2.鏇存柊涓棿琛ㄧ姸鎬佷负宸茶
+        /// 1.璇诲彇MES涓嬪彂浠诲姟琛�+        /// 2.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�+        /// 3.璇诲彇鍩虹鐗╂枡淇℃伅琛�         /// </summary>
         /// <param name="taskNo"></param>
         /// <param name="id"></param>
         /// <returns></returns>
-        internal static LjMesTask readLjMesOffItemTask(string taskNo , int id)
+        internal static bool readLjMesOffItemTask(string taskNo , int id)
         {
+            bool res = true;
             LogHelper.Info($"鏌ヨ鍒癕ES涓嬪彂WMS浠诲姟,mesTaskId:{id},浠诲姟鍙�{taskNo}"  , "WMS");
             var db = new SqlHelper<object>().GetInstance();
             try
             {
                 db.BeginTran();
-                // 1.鏌ヨMES浠诲姟琛�+                // 1.璇诲彇MES涓嬪彂浠诲姟琛�                 var mesTask = db.Queryable<LjMesTask>().Where(a => a.ID == id && a.RECEIVE_FLAG.Trim() == "PENDING" ).OrderByDescending(a => a.T_CREATE).First();
                 if (mesTask != null)
                 {
-                    // 閲嶇疆绌哄伐瑁呬俊鎭�-                    ContainerHelper.AddContainer(mesTask.PALLET_ID, int.Parse(mesTask.PALLET_TYPE),mesTask.QTY == 0 ? 0 : 1);
-
+                    // 2.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�+                    var container = ContainerHelper.GetCntr(mesTask.PALLET_ID);
+                    if (container != null) 
+                    {
+                        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");
+                    mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                     db.Updateable(mesTask).ExecuteCommand();
                 }
                 else 
                 {
-                    LogHelper.Info("鏈煡璇㈠埌MES涓嬪彂WMS浠诲姟", "WMS");
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鏈煡璇㈠埌MES涓嬪彂鐨勪换鍔�MES浠诲姟ID锛歿id}");
                 }
                 db.CommitTran();
-                return mesTask;
             }
             catch (Exception ex)
             {
+                res = false;
                 db.RollbackTran();
                 LogHelper.Info($"璇诲彇MES涓嬪彂浠诲姟澶辫触锛岄敊璇師鍥�{ex.Message}" , "WMS");
                 WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"璇诲彇MES涓嬪彂浠诲姟澶辫触锛岄敊璇師鍥�{ex.Message}");
             }
-            return null;
+            return res;
+        }
+
+        public static bool updateCarrier(string palletId) 
+        {
+            bool res = true;
+            var db = new SqlHelper<object>().GetInstance();
+            // 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.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()
+                    {
+                        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
+                    {
+                        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();
+                }
+            }
+            return res;
         }
 
         /// <summary>
@@ -579,6 +752,7 @@
             var lotCarrierList = db.Queryable<LjLotCarrier>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING").ToList();
             foreach (var lotCarrier in lotCarrierList)
             {
+                // 鍐欏叆鏂滆鎵樼洏鐗╂枡淇℃伅涓棿琛�                 CntrItemRel cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == lotCarrier.PALLET_ID).First();
 
                 if (cntrItemRel != null)
@@ -665,7 +839,6 @@
         /// <returns></returns>
         internal static LjLotCarrier getLjCntrMaterial(string trayNo)
         {
-            // 1.鏌ヨMES浠诲姟琛�             var db = new SqlHelper<object>().GetInstance();
             var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.PALLET_ID.Trim() == trayNo).First();
             return lotCarrier;
@@ -686,7 +859,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>
@@ -707,8 +893,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;
         }
@@ -782,6 +966,28 @@
         {
             var db = new SqlHelper<object>().GetInstance();
             return db.Queryable<LjMesTask>().Where(a =>  a.RECEIVE_FLAG.Trim() == receiveFlag ).ToList();
+        }
+
+        /// <summary>
+        /// 鏌ヨMES浠诲姟琛�鐜甫)
+        /// </summary>
+        /// <returns></returns>
+        public static List<LjMesTask> GetLjMesTaskListHD()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<LjMesTask>().Where(a => (a.PALLET_TYPE == "5" || a.PALLET_TYPE == "6") && (a.RETURN_CODE.Trim() == "0" || a.RETURN_CODE.Trim() == "1" || a.RETURN_CODE.Trim() == "2")).ToList();
+        }
+
+        /// <summary>
+        /// 鏇存柊MES浠诲姟鐘舵�
+        /// </summary>
+        /// <returns></returns>
+        public static bool updateMesTaskStatus(LjMesTask mesTask)
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            result = db.Updateable<LjMesTask>(mesTask).ExecuteCommand() > 0;
+            return result;
         }
 
         /// <summary>
@@ -879,36 +1085,84 @@
 
         // -----------------------------------------鏂滆涓棿琛�---------------------------------------------
 
-
         /// <summary>
-        /// 涓嬪彂XC浠诲姟
+        /// 鏇存柊MES浠诲姟鐘舵�
         /// </summary>
-        /// <param name="mesTaksId"></param>
         /// <returns></returns>
-        public static bool addLjXcTask(int mesTaksId) 
+        public static bool updateXcTaskStatus(LjXcTask xcTask)
         {
             bool result = false;
             var db = new SqlHelper<object>().GetInstance();
-            var ljMesTask = GetLjMesTaskById(mesTaksId);
-            if (ljMesTask != null) {
+            result = db.Updateable<LjXcTask>(xcTask).ExecuteCommand() > 0;
+            return result;
+        }
+
+        /// <summary>
+        /// 灏哅ES涓嬪彂浠诲姟銆佹墭鐩樼墿鏂欎俊鎭�杞彂缁欐枩瑁�+        /// </summary>
+        /// <param name="mesTask"></param>
+        /// <returns></returns>
+        public static bool addLjXcTask(LjMesTask mesTask) 
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            if (mesTask != null) {
+                if (mesTask.MSG_TYPE == "1") 
+                {
+                    // 杞彂鎵樼洏鐗╂枡淇℃伅
+                    var ljLotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.PALLET_ID == mesTask.PALLET_ID && a.RECEIVE_FLAG == "PENDING").OrderByDescending(a => a.CREATION_DATE).First();
+                    if (ljLotCarrier != null) 
+                    {
+                        LjXcCarrier ljXcCarrier = new LjXcCarrier() 
+                        {
+                            ID = ljLotCarrier.ID,
+                            PALLET_ID = ljLotCarrier.PALLET_ID,
+                            LOT_NAME = ljLotCarrier.LOT_NAME,
+                            YCL_BATCH = ljLotCarrier.YCL_BATCH,
+                            MATERIALCODE = ljLotCarrier.MATERIALCODE,
+                            QTY = ljLotCarrier.QTY,
+                            PRODUCTION_DATE = ljLotCarrier.PRODUCTION_DATE,
+                            QC_STATUS = ljLotCarrier.QC_STATUS,
+                            SHELFLIFE_DATE = ljLotCarrier.SHELFLIFE_DATE,
+                            MINSHELFLIFE_DATE = ljLotCarrier.MINSHELFLIFE_DATE,
+                            CREATION_DATE = ljLotCarrier.CREATION_DATE,
+                            RECEIVE_FLAG = ljLotCarrier.RECEIVE_FLAG,
+                        };
+                        var bo = db.Insertable<LjXcCarrier>(ljXcCarrier).ExecuteCommand() > 0;
+                        if (bo) 
+                        {
+                            ljLotCarrier.RECEIVE_FLAG = "COMPLETE";
+                            ljLotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                            db.Updateable<LjLotCarrier>(ljLotCarrier).ExecuteCommand();
+                        }
+                    }
+                }
+
                 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;
+                if (result) 
+                {
+                    mesTask.RETURN_CODE = "1";
+                    mesTask.RECEIVE_FLAG = "COMPLETE";
+                    mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                    db.Updateable<LjMesTask>(mesTask).ExecuteCommand();
+                }
             }
             return result;
         }

--
Gitblit v1.9.1