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.FJJT/wms/WMSHelper.cs | 1181 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 1,181 insertions(+), 0 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
new file mode 100644
index 0000000..3cce68b
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
@@ -0,0 +1,1181 @@
+锘縰sing HH.WCS.Mobox3.FJJF.models;
+using HH.WCS.Mobox3.FJJT.models;
+using HH.WCS.Mobox3.FJJT.models.other;
+using HH.WCS.Mobox3.FJJT.util;
+using Newtonsoft.Json;
+using NLog.Fluent;
+using SqlSugar;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+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.Settings;
+
+namespace HH.WCS.Mobox3.FJJT.wms {
+    /// <summary>
+    /// wms绠″埌浣滀笟
+    /// </summary>
+    internal class WMSHelper {
+        internal static string GenerateTaskNo() {
+            var id = SYSHelper.GetSerialNumber("浣滀笟鍙�, "OP");
+            var date = DateTime.Now.ToString("yyMMdd");
+            return $"OP{date}{id.ToString().PadLeft(4, '0')}";
+        }
+        internal static string GenerateSortingNo() {
+            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()
+        {
+            var id = SYSHelper.GetSerialNumber("鎶ヨ璁板綍鍗�, "AL");
+            var date = DateTime.Now.ToString("yyMMdd");
+            return $"AL{date}{id.ToString().PadLeft(4, '0')}";
+        }
+        internal static string GenerateTempCntrNo()
+        {
+            var id = SYSHelper.GetSerialNumber("涓存椂瀹瑰櫒鍙�, "CN");
+            var date = DateTime.Now.ToString("yyMMdd");
+            return $"CN{date}{id.ToString().PadLeft(4, '0')}";
+        }
+        internal static List<WMSTask> GetOperationListByState(string state) {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<WMSTask>().Where(a => a.S_B_STATE == state && a.S_FACTORY == Settings.FacCode).ToList();
+        }
+        internal static List<WMSTask> GetOperationListByState(int state) {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<WMSTask>().Where(a => a.N_B_STATE == state && a.S_FACTORY == Settings.FacCode).ToList();
+        }
+        internal static List<WMSTask> GetWaitingOperationList() {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<WMSTask>().Where(a => (a.N_B_STATE == 0 || a.N_B_STATE == 3) && a.S_FACTORY == Settings.FacCode).ToList();
+        }
+
+        internal static bool CreateWmsTask(WMSTask wmsTask) {
+            try {
+                var db = new SqlHelper<object>().GetInstance();
+                return db.Insertable<WMSTask>(wmsTask).ExecuteCommand() > 0;
+            }
+            catch (Exception ex) {
+                Console.WriteLine(ex.Message);
+                throw;
+            }
+        }
+
+        internal static bool DeleteWmsTask(string code)
+        {
+            try
+            {
+                var db = new SqlHelper<object>().GetInstance();
+                return db.Deleteable<WMSTask>().Where(a => a.S_CODE == code).ExecuteCommand() > 0;
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+                throw;
+            }
+        }
+
+        internal static WMSTask GetAwaitWmsTaskByMaterialCode(string materialCode) {
+            WMSTask wmsTask = null;
+            var db = new SqlHelper<object>().GetInstance();
+            var wmsTaskList = db.Queryable<WMSTask>()
+                .LeftJoin<CntrItemRel>((a,b) => a.S_CNTR_CODE == b.S_CNTR_CODE)
+                .Where((a, b) => a.N_B_STATE == 1 && b.S_ITEM_CODE.Trim() == materialCode && a.S_TYPE.Trim() == "鍙枡鍑哄簱浠诲姟").ToList();
+            foreach (var task in wmsTaskList)
+            {
+                var result = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == task.S_CODE && a.N_B_STATE > 0).Count() == 0;
+                if (result) 
+                {
+                    wmsTask = task;
+                    return wmsTask;
+                }
+            }
+            return wmsTask;
+        }
+
+        internal static WMSTask GetWmsTaskByCntr(string cntr, bool active = true)
+        {
+            WMSTask result = null;
+            var db = new SqlHelper<object>().GetInstance();
+            if (active)
+            {
+                result = db.Queryable<WMSTask>().Where(a => a.S_CNTR_CODE.Contains(cntr) && a.N_B_STATE < 2).First();
+            }
+            else
+            {
+                result = db.Queryable<WMSTask>().Where(a => a.S_CNTR_CODE.Contains(cntr)).First();
+            }
+            return result;
+        }
+
+        internal static Location GetEnd(WMSTask a) {
+            throw new NotImplementedException();
+        }
+
+        internal static Location GetStart(WMSTask a) {
+            throw new NotImplementedException();
+        }
+
+        internal static void UpdateTaskState(WMSTask task) {
+            var db = new SqlHelper<object>().GetInstance();
+            task.T_MODIFY = DateTime.Now;
+            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();
+            a.T_MODIFY = DateTime.Now;
+            return db.Updateable<WMSTask>(a).UpdateColumns(it => new { it.S_TYPE,it.S_END_LOC,it.S_END_AREA, it.T_MODIFY }).ExecuteCommand() > 0;
+        }
+
+        internal static WMSTask GetWmsTask(string code) {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<WMSTask>().Where(a => a.S_CODE.Trim() == code).First();
+        }
+
+        internal static WMSTask GetWmsTaskByEnd(string endLoc)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<WMSTask>().Where(a => a.S_END_LOC.Trim() == endLoc && a.N_B_STATE < 2).First();
+        }
+
+        internal static WMSTask GetWmsTaskByStart(string startLoc)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<WMSTask>().Where(a => a.S_START_LOC.Trim() == startLoc && a.N_B_STATE < 2).First();
+        }
+
+        internal static bool isFinishTask(string wmsTaskNo)
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            result = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE.Trim() == wmsTaskNo && a.N_B_STATE < 3).Count() == 0;
+            return result;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鎴愬瀷鏈鸿繑鏂欒揣浣�+        /// </summary>
+        /// <param name="locCode"></param>
+        /// <returns></returns>
+        public static SideLocConfig getReturnMaterialLocCode(string locCode)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            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 loc;
+        }
+        // --------------------------------------------------------绂忓缓浣抽�-----------------------------------------
+
+
+        /// <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>
+        /// <returns></returns>
+        public static DateTime getZZKInventoryInfo(string itemCode) 
+        {
+            DateTime inboundTime = DateTime.MinValue;
+            var db = new SqlHelper<object>().GetInstance();
+            string areaCode = Settings.areaPropertyList.Where(a => a.areaName.Contains("涓浆搴�)).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>
+        /// 鏌ヨ鍑哄簱寮�璧风偣
+        /// 娉細闇�繃婊ゅ爢鍨涙満鏁呴殰鐨勫贩閬�+        /// </summary>
+        /// <param name="areaCode"></param>
+        /// <param name="traySatus">0.榛樿銆�.寮傚父</param>
+        /// <param name="materialCode"></param>
+        /// <param name="trayCode"></param>
+        /// <returns></returns>
+        internal static Location getOutStockStartLoc(string areaCode ,string materialCode,int traySatus = 0, string trayCode = "")
+        {
+            Location loc = null;
+            var db = new SqlHelper<object>().GetInstance();
+
+            var queryable = db.Queryable<Location>()
+                .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE)
+                .LeftJoin<Container>((a, b, c) => b.S_CNTR_CODE == c.S_CODE)
+                .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 != "")
+            {
+                queryable = queryable.Where((a, b, c, d) => a.S_AREA_CODE.Trim() == areaCode);
+            }
+            else 
+            {
+                List<string> areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList();
+                queryable = queryable.Where((a, b, c, d) => areaCodes.Contains(a.S_AREA_CODE.Trim()));
+            }
+            if (traySatus == 0)
+            {
+                queryable = queryable.Where((a, b, c, d) => c.N_E_STATE == 0);
+            }
+            else if (traySatus == 1) 
+            {
+                queryable = queryable.Where((a, b, c, d) => c.N_E_STATE != 0);
+            }
+            if (materialCode != null && materialCode != "")
+            {
+                queryable = queryable.Where((a, b, c, d) => d.S_ITEM_CODE.Trim() == materialCode);
+            }
+            else 
+            {
+                queryable = queryable.Where((a, b, c, d) => d.S_ITEM_CODE == null);
+            }
+            if (trayCode != null && trayCode != "") 
+            {
+                queryable = queryable.Where((a, b, c, d) => b.S_CNTR_CODE.Trim() == trayCode);
+            }
+
+            loc = queryable.OrderBy((a, b, c, d) => d.T_INBOUND_TIME).First();
+            return loc;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鍏ュ簱缁堢偣璐т綅
+        /// </summary>
+        /// <param name="areaCode"></param>
+        /// <param name="trayStatus">0.绌鸿溅 1.婊¤溅 </param>
+        /// <param name="trayType"></param>
+        /// <returns></returns>
+        internal static Location getInStockEndLoc(string areaCode,int trayStatus, int trayType = 0)
+        {
+            LogHelper.Info("寮�鏌ヨ绔嬪簱缁堢偣璐т綅", "WMS");
+            Location location = null;
+            var db = new SqlHelper<object>().GetInstance();
+            try
+            {
+                string S_ZONE_CLS_CODE = "";
+                if (trayStatus == 0)
+                {
+                    S_ZONE_CLS_CODE = "KT";
+                }
+                else if (trayStatus == 1)
+                {
+                    S_ZONE_CLS_CODE = "ML";
+                }
+
+                if (areaCode == null)
+                {
+                    if (trayType != 0)
+                    {
+                        // 鏍规嵁鎵樼洏绫诲瀷鏌ヨ瀵瑰簲鐨勭珛搴撶紪鐮�+                        List<string> areaCodes = Settings.getCntrAreaList(trayType);
+                        LogHelper.Info($"鎵樼洏绫诲瀷瀵瑰簲鐨勫簱鍖猴細{JsonConvert.SerializeObject(areaCodes)}", "WMS");
+
+                        // 璁$畻绔嬪簱鐨勫绉巼锛屽彇瀹圭Н鐜囨渶澶х殑搴撳尯
+                        var areaList = db.Queryable<Location>()
+                        .LeftJoin<ZoneLoc>((a, b) => a.S_CODE == b.S_LOC_CODE)
+                        .LeftJoin<Zone>((a, b, c) => b.S_ZONE_CODE == c.S_CODE)
+                        .Where((a, b, c) => areaCodes.Contains(a.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)
+                        .GroupBy((a, b, c) => a.S_AREA_CODE)
+                        .Select((a, b, c) => new
+                        {
+                            S_AREA_CODE = a.S_AREA_CODE,
+                            num = SqlFunc.AggregateCount(a.S_CODE)
+                        })
+                        .MergeTable()
+                        .OrderByDescending(s => s.num)
+                        .ToList();
+                        LogHelper.Info($"鎸夊绉巼鎺掑簭鐨勫簱鍖猴細{JsonConvert.SerializeObject(areaList)}", "WMS");
+
+                        foreach (var item in areaList)
+                        {
+                            location = db.Queryable<Location>()
+                              .LeftJoin<ZoneLoc>((a, b) => a.S_CODE == b.S_LOC_CODE)
+                              .LeftJoin<Zone>((a, b, c) => b.S_ZONE_CODE == c.S_CODE)
+                              .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();
+                        }
+                    }
+
+                    // 搴撳尯瀹夊叏搴撳瓨鐩戞祴锛屽苟鎶ヨ
+                    /*  var safety_Inventory = getSafetyInventory(areaCode,null, trayType.ToString());
+                      if (safety_Inventory != null) 
+                      {
+
+                      }*/
+                }
+                else 
+                {
+                    location = db.Queryable<Location>()
+                                 .LeftJoin<ZoneLoc>((a, b) => a.S_CODE == b.S_LOC_CODE)
+                                 .LeftJoin<Zone>((a, b, c) => b.S_ZONE_CODE == c.S_CODE)
+                                 .Where((a, b, c) => a.S_AREA_CODE.Trim() == areaCode && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && c.S_ZONE_CLS_CODE == S_ZONE_CLS_CODE)
+                                 .OrderBy((a, b, c) => a.N_LAYER)
+                                 .First();
+                }
+                LogHelper.Info($"鏌ヨ缁撴潫,绔嬪簱缁堢偣璐т綅:{JsonConvert.SerializeObject(location)}","WMS");
+            }
+            catch (Exception ex) 
+            {
+                LogHelper.Info($"WMS鍐呴儴閿欒:鏌ヨ鍏ュ簱缁堢偣璐т綅(getInStockEndLoc)閿欒,閿欒鍘熷洜锛歿ex.Message}", "WMS");
+                throw ex;
+            }
+            return location;
+        }
+
+        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);
+            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="jtNo"></param>
+        /// <returns></returns>
+        public static SideLocConfig GetLineSideLoc(string jtNo)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<SideLocConfig>().Where(a => a.EQP.Trim() == jtNo).First();
+        }
+
+        /// <summary>
+        /// 鑾峰彇寮傚父搴撹揣浣�+        /// </summary>
+        /// <param name="areaCode"></param>
+        /// <returns></returns>
+        public static Location getAbnormalAreaLoc(string areaCode)
+        {
+            Location loc = null;
+            var db = new SqlHelper<object>().GetInstance();
+            loc = db.Queryable<Location>()
+                .LeftJoin<AbnormalAreaConfig>((a, b) => a.S_AREA_CODE == b.S_SUP_AREA)
+                .Where((a, b) => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && b.S_AREA_CODE.Trim() == areaCode)
+                .First();
+            return loc;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鎺ラ┏浣嶅叧鑱斿睘鎬�+        /// </summary>
+        /// <param name="locCode"></param>
+        /// <returns></returns>
+        public static TransfeRelevance GetTransfeRelevance(string locCode) {
+            var db = new SqlHelper<object>().GetInstance();
+           return db.Queryable<TransfeRelevance>().Where(a => a.S_LOC_CODE.Trim() == locCode).First();
+        }
+
+        /// <summary>
+        /// 鏌ヨ鎺ラ┏浣嶅叧鑱斿睘鎬�+        /// </summary>
+        /// <param name="locCode"></param>
+        /// <param name="isManual">璐т綅灞炴� (0.闈炰汉宸�1.浜哄伐)</param>
+        /// <returns></returns>
+        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() { N_IS_MANUAL = isManual } ).Where(a => a.S_LOC_CODE.Trim() == locCode).ExecuteCommand() > 0;
+            return result;
+        }
+
+        /// <summary>
+        /// 鏌ヨ绔嬪簱鎺ラ┏浣�+        /// 娉細鏌ヨ浠诲姟鏈�皯鐨勬帴椹充綅
+        /// </summary>
+        /// <param name="areaCode">搴撳尯</param>
+        /// <param name="type">鍔ㄤ綔绫诲瀷 锛�.鍏ュ簱鎺ラ┏浣� 2.鍑哄簱鎺ラ┏浣嶏級</param>
+        /// <returns></returns>
+        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.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),
+                    code = a.S_CODE.Trim()
+                })
+                .MergeTable() //闇�鍔燤ergeTable鎵嶈兘鎺掑簭缁熻杩囩殑鍒�+                .OrderBy(it => it.count)
+                .First();
+            if (loc != null) 
+            {
+              return  LocationHelper.GetLoc(loc.code);
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鐗╂枡淇℃伅
+        /// </summary>
+        /// <param name="materialCode"></param>
+        /// <returns></returns>
+        public static TN_Material GetMaterial(string materialCode) {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<TN_Material>().Where(a => a.S_ITEM_CODE.Trim() == materialCode).First();
+        }
+
+        /// <summary>
+        /// 鏌ヨ瀹夊叏搴撳瓨
+        /// </summary>
+        public static Safety_Inventory getSafetyInventory(string areaCode, string materialCode ,string trayType)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            var query = db.Queryable<Safety_Inventory>().Where(a => a.S_AREA_CODE.Trim() == areaCode);
+            if (materialCode != null) 
+            {
+                query = query.Where(a => a.S_MATERIAL_CODE == materialCode);
+            }
+            if (trayType != null) 
+            {
+                query = query.Where(a => a.S_PALLET_TYPE == trayType);
+            }
+            return query.First();
+        }
+
+        //------------------------------------------------MES涓棿琛�----------------------------------------------
+
+
+        /// <summary>
+        /// 璇诲彇MES涓嬫枡浠诲姟
+        /// 1.璇诲彇MES涓嬪彂浠诲姟琛�+        /// 2.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�+        /// 3.璇诲彇鍩虹鐗╂枡淇℃伅琛�+        /// </summary>
+        /// <param name="taskNo"></param>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        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涓嬪彂浠诲姟琛�+                var mesTask = db.Queryable<LjMesTask>().Where(a => a.ID == id && a.RECEIVE_FLAG.Trim() == "PENDING" ).OrderByDescending(a => a.T_CREATE).First();
+                if (mesTask != null)
+                {
+                    // 2.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�+                    res = updateCarrier(mesTask.PALLET_ID);
+                    if (res) 
+                    {
+                        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 
+                {
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鏈煡璇㈠埌MES涓嬪彂鐨勪换鍔�MES浠诲姟ID锛歿id}");
+                }
+                db.CommitTran();
+            }
+            catch (Exception ex)
+            {
+                res = false;
+                db.RollbackTran();
+                LogHelper.Info($"璇诲彇MES涓嬪彂浠诲姟澶辫触锛岄敊璇師鍥�{ex.Message}" , "WMS");
+                WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"璇诲彇MES涓嬪彂浠诲姟澶辫触锛岄敊璇師鍥�{ex.Message}");
+            }
+            return res;
+        }
+
+        public static bool updateCarrier(string palletId) 
+        {
+            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)
+                {
+                    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();
+                    }
+                }
+            }
+            else 
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鏈湪WMS绯荤粺涓煡璇㈠埌瀹瑰櫒淇℃伅,瀹瑰櫒缂栫爜锛歿palletId}");
+                res = false;
+            }
+            return res;
+        }
+
+        /// <summary>
+        /// 鏇存柊鎵樼洏鐗╂枡淇℃伅
+        /// </summary>
+        public static void updatePalletAndMateral()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            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)
+                {
+                    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();
+            }
+        }
+
+        /// <summary>
+        /// 鏇存柊鐗╂枡淇℃伅
+        /// </summary>
+        public static void updateMateral()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            var materialList = db.Queryable<LjItem>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING").ToList();
+            foreach (var item in materialList)
+            {
+                TN_Material material = db.Queryable<TN_Material>().Where(a => a.S_ITEM_CODE == item.MATERIAL_CODE).First();
+
+                if (material != null)
+                {
+                    material.S_ITEM_CODE = item.MATERIAL_CODE;
+                    material.S_ITEM_NAME = item.MATERIAL_NAME;
+                    material.S_SPEC = item.SPEC;
+                    material.S_MODEL = item.MODEL;
+                    material.S_UNIT = item.UNIT;
+                    material.S_MEMO = item.MEMO;
+                    db.Updateable(material).ExecuteCommand();
+                }
+                else
+                {
+                    material = new TN_Material()
+                    {
+                        S_ITEM_CODE = item.MATERIAL_CODE,
+                        S_ITEM_NAME = item.MATERIAL_NAME,
+                        S_SPEC = item.SPEC,
+                        S_MODEL = item.MODEL,
+                        S_UNIT = item.UNIT,
+                        S_MEMO = item.MEMO,
+                    };
+                    db.Insertable(material).ExecuteCommand();
+                }
+
+                item.RECEIVE_FLAG = "COMPLETE";
+                item.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
+                db.Updateable(item).ExecuteCommand();
+            }
+        }
+
+        /// <summary>
+        /// 鏌ヨ鎵樼洏鐗╂枡淇℃伅
+        /// </summary>
+        /// <param name="trayNo"></param>
+        /// <returns></returns>
+        internal static LjLotCarrier getLjCntrMaterial(string trayNo)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.PALLET_ID.Trim() == trayNo).First();
+            return lotCarrier;
+        }
+
+
+        /// <summary>
+        /// 鏌ヨMES鍙嶆枡浠诲姟
+        /// </summary>
+        /// <param name="cntrCode"></param>
+        /// <returns></returns>
+        internal static LjMesTask getLjMesTaskByCntr(string cntrCode)
+        {
+            // 1.鏌ヨMES浠诲姟琛�+            var db = new SqlHelper<object>().GetInstance();
+            var mesTask = db.Queryable<LjMesTask>().Where(a => a.PALLET_ID.Trim() == cntrCode && a.RECEIVE_FLAG.Trim() == "PENDING").OrderByDescending(a => a.T_CREATE).First();
+            return mesTask;
+        }
+
+        /// <summary>
+        /// 鏍规嵁鏈哄彴鍙锋煡璇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>
+        internal static LjMesTask getLjMesTaskByLoc(string positionId)
+        {
+            // 1.鏌ヨMES浠诲姟琛�+            var db = new SqlHelper<object>().GetInstance();
+            var mesTask = db.Queryable<LjMesTask>().Where(a =>  a.POSITION_ID.Trim() == positionId && a.RECEIVE_FLAG.Trim() == "PENDING").OrderByDescending(a => a.T_CREATE).First();
+            return mesTask;
+        }
+
+        /// <summary>
+        /// 鏇存柊MES浠诲姟涓棿琛�+        /// </summary>
+        /// <param name="mesTask"></param>
+        /// <returns></returns>
+        internal static bool updateLjMesTask(LjMesTask mesTask)
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            result = db.Updateable(mesTask).ExecuteCommand() > 0;
+            return result;
+        }
+
+        /// <summary>
+        /// 璇诲彇MES鍙枡浠诲姟
+        /// 1.澶囦唤瀹瑰櫒鐗╂枡淇℃伅  
+        /// 2.鏇存柊涓棿琛ㄧ姸鎬佷负宸茶
+        /// </summary>
+        /// <param name="taskNo"></param>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        internal static bool readLjMesCallItemTask(string taskNo, int id)
+        {
+            LogHelper.Info( $"璇诲彇MES鍙枡浠诲姟,浠诲姟鍙�{taskNo},MES涓嬪彂浠诲姟ID锛歿id}", "WMS");
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            try
+            {
+                db.BeginTran();
+                var mesTask = db.Queryable<LjMesTask>().Where(a => a.ID == id ).OrderByDescending(a => a.T_CREATE).First();
+                if (mesTask != null)
+                {
+                    mesTask.AGVORDER_ID = taskNo;
+                    mesTask.RETURN_CODE = "1";
+                    mesTask.RECEIVE_FLAG = "COMPLETE";
+                    mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
+                    result = db.Updateable(mesTask).ExecuteCommand() > 0;
+                }
+                else
+                {
+                    LogHelper.Info("鏈煡璇㈠埌MES涓嬪彂WMS浠诲姟", "WMS");
+                }
+                db.CommitTran();
+            }
+            catch (Exception ex)
+            {
+                db.RollbackTran();
+                LogHelper.Error("璇诲彇MES鍙枡浠诲姟锛孍RROR_MSG:" + ex.Message, ex, "WMS");
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 鏌ヨMES浠诲姟琛�+        /// </summary>
+        /// <param name="taskNo"></param>
+        /// <returns></returns>
+        public static LjMesTask GetLjMesTaskByAgvorderId(string taskNo) {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<LjMesTask>().Where(a => a.AGVORDER_ID.Trim() == taskNo).First();
+        }
+
+        /// <summary>
+        /// 鏌ヨMES浠诲姟琛�+        /// </summary>
+        /// <param name="mesTaskId"></param>
+        /// <returns></returns>
+        public static LjMesTask GetLjMesTaskById(int mesTaskId)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<LjMesTask>().Where(a => a.ID == mesTaskId).First();
+        }
+
+        /// <summary>
+        /// 鏌ヨMES浠诲姟琛�+        /// </summary>
+        /// <param name="receiveFlag">宸茶鏍囪瘑</param>
+        /// <returns></returns>
+        public static List<LjMesTask> GetLjMesTaskList(string receiveFlag )
+        {
+            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>
+        /// 鏇存柊MES浠诲姟鐘舵�
+        /// </summary>
+        /// <param name="taskNo"></param>
+        /// <param name="status">0:榛樿鍊�1锛氫换鍔″凡鐢熸垚 2锛氫换鍔¤繍琛屼腑 3锛氫换鍔″畬鎴�4锛氫换鍔″け璐�5锛氫换鍔″彇娑�6锛氬叾浠栭敊璇�绛�/param>
+        /// <param name="msg"></param>
+        /// <returns></returns>
+        public static bool updateMesTaskStatus(string taskNo, string status, string msg = "") 
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            result = db.Updateable<LjMesTask>().SetColumns(a => new LjMesTask() { RETURN_CODE = status , RECEIVE_MSG = msg}).Where(a => a.AGVORDER_ID.Trim() == taskNo).ExecuteCommand() > 0;
+            return result;
+        }
+
+        /// <summary>
+        /// 鏇存柊鍑哄簱浠诲姟涓棿琛ㄧ姸鎬�+        /// </summary>
+        /// <param name="taskNo"></param>
+        /// <param name="status">1锛氭墽琛屼腑锛�锛氬畬鎴�绛�/param>
+        /// <returns></returns>
+        public static bool updateMesOutTaskStatus(int taskNo, string status)
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            result = db.Updateable<LjLotOutTask>().SetColumns(a => new LjLotOutTask() { TASK_STATUS = status }).Where(a => a.ID == taskNo).ExecuteCommand() > 0;
+            return result;
+        }
+
+        /// <summary>
+        /// 娣诲姞搴撳瓨琛�+        /// </summary>
+        /// <param name="ljLotOnhand"></param>
+        /// <returns></returns>
+        public static bool addLjLotOnhand(LjLotOnhand ljLotOnhand) {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            ljLotOnhand.CREATION_DATE = DateTime.Now;
+            result = db.Insertable<LjLotOnhand>(ljLotOnhand).ExecuteCommand()>0;
+            return result;
+        }
+
+        /// <summary>
+        /// 娣诲姞鍑哄簱浠诲姟璁板綍
+        /// </summary>
+        /// <param name="locCode"></param>
+        /// <returns></returns>
+        public static bool addLotOutTask(string locCode) {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            var locCntrs = LocationHelper.GetLocCntr(locCode);
+            if (locCntrs != null && locCntrs.Count > 0) 
+            {
+                LjLotOutTask ljLotOutTask = new LjLotOutTask()
+                {
+                    PALLET_ID = locCntrs[0].S_CNTR_CODE,
+                    POSITION_ID = locCntrs[0].S_LOC_CODE,
+                    CREATION_DATE = DateTime.Now.ToString("yyyy-MM-dd"),
+                    TASK_STATUS = "1"       // 1.鎵ц涓�+                };
+
+                var cntrItems = ContainerHelper.GetCntrItemRel(locCntrs[0].S_CNTR_CODE);
+                if (cntrItems != null && cntrItems.Count > 0)
+                {
+                    ljLotOutTask.MATERIAL_CODE = cntrItems[0].S_ITEM_CODE;
+                    ljLotOutTask.LOT_NAME = cntrItems[0].S_BATCH_NO;
+                    ljLotOutTask.QC_STATUS = cntrItems[0].S_ITEM_STATE;
+                    ljLotOutTask.UNIT = cntrItems[0].S_UOM;
+                    ljLotOutTask.QTY = (int)cntrItems[0].F_QTY;
+                }
+                result = db.Insertable<LjLotOutTask>(ljLotOutTask).ExecuteCommand() > 0;
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 鏇存柊鍑哄簱浠诲姟璁板綍
+        /// </summary>
+        /// <param name="cntrCode"></param>
+        /// <param name="status"></param>
+        /// <returns></returns>
+        public static bool updateLotOutTask(string cntrCode,string status)
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            var ljLotOutTask = db.Queryable<LjLotOutTask>().Where(a => a.PALLET_ID == cntrCode && a.TASK_STATUS == "1").OrderByDescending(a => a.T_CREATE).First();
+            if (ljLotOutTask != null) {
+                ljLotOutTask.TASK_STATUS = status;
+                result = db.Updateable<LjLotOutTask>(ljLotOutTask).ExecuteCommand()>0;
+            }
+            return result;
+        }
+
+        // -----------------------------------------鏂滆涓棿琛�---------------------------------------------
+
+        /// <summary>
+        /// 鏇存柊MES浠诲姟鐘舵�
+        /// </summary>
+        /// <returns></returns>
+        public static bool updateXcTaskStatus(LjXcTask xcTask)
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            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 = 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 = 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;
+        }
+
+
+        /// <summary>
+        /// 鏌ヨ鏂滆浠诲姟琛�+        /// </summary>
+        /// <param name="mesTaskId"></param>
+        /// <returns></returns>
+        public static LjXcTask GetLjXcTaskById(int mesTaskId)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<LjXcTask>().Where(a => a.ID == mesTaskId).First();
+        }
+
+        /// <summary>
+        /// 鏌ヨ鏂滆鍑哄簱浠诲姟琛�+        /// </summary>
+        /// <param name="taskStatus"></param>
+        /// <param name="receiveFlag"></param>
+        /// <returns></returns>
+        public static List<LjXcOutTask> getLjXcOutTask(string receiveFlag ,string taskStatus)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<LjXcOutTask>().Where(a =>  a.RECEIVE_FLAG == receiveFlag && a.TASK_STATUS == taskStatus).ToList();
+        }
+
+    }
+}

--
Gitblit v1.9.1