杨前锦
2025-07-07 c8f338feee0b6003d8f069b1d37fd9b90dd1b7f4
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
New file
@@ -0,0 +1,1181 @@
using 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             // 托盘正常
                    )
                    .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.默认、1.异常</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">动作类型 (1.入库接驳位  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() //需要加MergeTable才能排序统计过的列
                .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($"查询到MES下发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>
        /// 根据机台号查询MES任务
        /// </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叫料任务,ERROR_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:执行中,2:完成 等</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>
        /// 将MES下发任务、托盘物料信息 转发给斜裁
        /// </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();
        }
    }
}