杨前锦
5 小时以前 06a8b6963d6d4f229d4e196b4b09ce57e2cbf2dd
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
@@ -1,4 +1,5 @@
using HH.WCS.Mobox3.FJJF.models;
using HH.WCS.Mobox3.FJJT.dispatch;
using HH.WCS.Mobox3.FJJT.models;
using HH.WCS.Mobox3.FJJT.models.other;
using HH.WCS.Mobox3.FJJT.util;
@@ -17,6 +18,7 @@
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using static HH.WCS.Mobox3.FJJT.api.ApiModel;
using static HH.WCS.Mobox3.FJJT.util.ExcetionHelper;
using static HH.WCS.Mobox3.FJJT.util.Settings;
namespace HH.WCS.Mobox3.FJJT.wms {
@@ -214,66 +216,6 @@
        /// <summary>
        /// 查询逻辑配置表
        /// </summary>
        /// <param name="taskType">任务类型</param>
        /// <returns></returns>
        internal static List<LogicConfig> getLogicConfigByTaskType(string taskType)
        {
            var db = new SqlHelper<object>().GetInstance();
            var logicConfigList = db.Queryable<LogicConfig>()
                .Where(a => a.S_TASK_TYPE.Trim() == taskType && a.S_ENABLE.Trim() == "是")
                .OrderBy(a => a.S_PRI)
                .ToList();
            return logicConfigList;
        }
        /// <summary>
        /// 查询逻辑配置表
        /// </summary>
        /// <param name="hcLocCode">补空缓存位</param>
        /// <returns></returns>
        internal static LogicConfig getLogicConfigByHcLoc(string hcLocCode)
        {
            var db = new SqlHelper<object>().GetInstance();
            var logicConfig = db.Queryable<LogicConfig>()
                .Where(a => a.S_LKBKHCLOC.Trim() == hcLocCode && a.S_ENABLE.Trim() == "是")
                .OrderBy(a => a.S_PRI)
                .First();
            return logicConfig;
        }
        /// <summary>
        /// 查询逻辑配置表
        /// </summary>
        /// <param name="mtjbLoc">满料接驳位</param>
        /// <returns></returns>
        internal static LogicConfig getLogicConfigByMtjbLoc(string mtjbLoc)
        {
            var db = new SqlHelper<object>().GetInstance();
            var logicConfig = db.Queryable<LogicConfig>()
                .Where(a => a.S_MTJBLOC.Trim() == mtjbLoc && a.S_ENABLE.Trim() == "是")
                .OrderBy(a => a.S_PRI)
                .First();
            return logicConfig;
        }
        /// <summary>
        /// 查询逻辑配置表
        /// </summary>
        /// <param name="jtCode"></param>
        /// <returns></returns>
        internal static LogicConfig getLogicConfigByJtCode(string jtCode)
        {
            var db = new SqlHelper<object>().GetInstance();
            var logicConfig = db.Queryable<LogicConfig>()
                .Where(a => a.S_JT_CODE.Trim() == jtCode && a.S_ENABLE.Trim() == "是")
                .OrderBy(a => a.S_PRI)
                .First();
            return logicConfig;
        }
        /// <summary>
        /// 查询某个物料在中转库的库存信息
        /// </summary>
        /// <param name="itemCode"></param>
@@ -282,7 +224,7 @@
        {
            DateTime inboundTime = DateTime.MinValue;
            var db = new SqlHelper<object>().GetInstance();
            string areaCode = Settings.areaPropertyList.Where(a => a.areaName.Contains("中转库")).Select(a => a.areaCode).FirstOrDefault();
            string areaCode = Settings.areaRelevanceList.Where(a => a.areaCode.Contains("ZZFZLKQ")).Select(a => a.areaCode).FirstOrDefault();
            if (areaCode != null) 
            {
                    inboundTime = db.Queryable<CntrItemRel>()
@@ -328,7 +270,7 @@
            }
            else 
            {
                List<string> areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList();
                List<string> areaCodes = Settings.areaRelevanceList.Select(a => a.areaCode).ToList();
                queryable = queryable.Where((a, b, c, d) => areaCodes.Contains(a.S_AREA_CODE.Trim()));
            }
            if (traySatus == 0)
@@ -518,6 +460,31 @@
        }
        /// <summary>
        /// 查询有空工装的固定空工装出库站台
        /// </summary>
        /// <param name="areaCode"></param>
        /// <returns></returns>
        public static Location GetFullFixedOutLoc(string areaCode)
        {
            var db = new SqlHelper<object>().GetInstance();
            return db.Queryable<Location>()
                .LeftJoin<TransfeRelevance>((a,b) => b.S_LOC_CODE == a.S_CODE)
                .Where((a, b) => a.S_AREA_CODE.Trim() == areaCode && b.N_IS_FIXED_OUT == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 1).First();
        }
        /// <summary>
        /// 查询所有空的固定空工装出库站台
        /// </summary>
        /// <returns></returns>
        public static List<Location> GetEmptyFixedOutLocList()
        {
            var db = new SqlHelper<object>().GetInstance();
            return db.Queryable<Location>()
                .LeftJoin<TransfeRelevance>((a, b) => b.S_LOC_CODE == a.S_CODE)
                .Where((a, b) =>  b.N_IS_FIXED_OUT == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0).ToList();
        }
        /// <summary>
        /// 查询接驳位关联属性
        /// </summary>
        /// <param name="locCode"></param>
@@ -588,6 +555,59 @@
            return query.First();
        }
        public static BufferLocConfig GetBufferLocConfig(string locCode)
        {
            var db = new SqlHelper<object>().GetInstance();
            return db.Queryable<BufferLocConfig>().Where(a => a.S_LOC_CODE == locCode).First();
        }
        public static BufferLocConfig GetBufferLocConfigByJtNo(string jtNo)
        {
            var db = new SqlHelper<object>().GetInstance();
            return db.Queryable<BufferLocConfig>().Where(a => a.S_OFF_LINE_JT_NO == jtNo).First();
        }
        /// <summary>
        /// 查询空工装缓存位(非直连)
        /// </summary>
        /// <param name="areaCode"></param>
        /// <returns></returns>
        public static Location getEmptyBufferLoc(string areaCode)
        {
            var db = new SqlHelper<object>().GetInstance();
            var emptyBufferLocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == areaCode && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").ToList();
            if (emptyBufferLocList.Count > 0)
            {
                foreach (var bufferLoc in emptyBufferLocList)
                {
                    var bufferLocConfig = GetBufferLocConfig(bufferLoc.S_CODE);
                    return bufferLoc;
                    // 业务代码,勿删
                   /* var deviceStatusDatas = WCSDispatch.getDeviceStatus(new List<string>() { bufferLocConfig.S_DEVICE_NO });
                    if (deviceStatusDatas != null && deviceStatusDatas.Count > 0)
                    {
                        var deviceStatus = deviceStatusDatas[0];
                        if (deviceStatus.workStatus == 1 && deviceStatus.manualStatus == 0)
                        {
                            return bufferLoc;
                        }
                        else
                        {
                            WMSHelper.addAlarmRecord("流程异常", "高", $"设备号:{bufferLocConfig.S_DEVICE_NO},设备当前处于不可用状态,请联系管理人员调整设备状态");
                            throw new BusinessException($"设备号:{bufferLocConfig.S_DEVICE_NO},设备当前处于不可用状态,请联系管理人员调整设备状态");
                        }
                    }
                    else
                    {
                        WMSHelper.addAlarmRecord("流程异常", "高", $"设备号:{bufferLocConfig.S_DEVICE_NO},查询设备状态失败,请联系工作人员查看设备是否正常");
                        throw new BusinessException($"设备号:{bufferLocConfig.S_DEVICE_NO},查询设备状态失败,请联系工作人员查看设备是否正常");
                    }*/
                }
            }
            return null;
        }
        //------------------------------------------------MES中间表-----------------------------------------------
@@ -613,15 +633,18 @@
                if (mesTask != null)
                {
                    // 2.读取托盘物料信息表
                    res = updateCarrier(mesTask.PALLET_ID);
                    if (res)
                    var container = ContainerHelper.GetCntr(mesTask.PALLET_ID);
                    if (container != null)
                    {
                        mesTask.AGVORDER_ID = taskNo;
                        mesTask.RETURN_CODE = "1";
                        mesTask.RECEIVE_FLAG = "COMPLETE";
                        mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                        db.Updateable(mesTask).ExecuteCommand();
                        container.N_DETAIL_COUNT = mesTask.QTY == 0 ? 0 : 1;
                        ContainerHelper.UpdateCntr(container);
                        updateCarrier(mesTask.PALLET_ID);
                    }
                    mesTask.AGVORDER_ID = taskNo;
                    mesTask.RETURN_CODE = "1";
                    mesTask.RECEIVE_FLAG = "COMPLETE";
                    mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    db.Updateable(mesTask).ExecuteCommand();
                }
                else 
                {
@@ -643,88 +666,79 @@
        {
            bool res = true;
            var db = new SqlHelper<object>().GetInstance();
            var container = ContainerHelper.GetCntr(palletId);
            if (container != null)
            // 1.读取托盘物料信息表
            var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.PALLET_ID == palletId).OrderByDescending(a => a.CREATION_DATE).First();
            if (lotCarrier != null)
            {
                // 1.读取托盘物料信息表
                var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.PALLET_ID == palletId).OrderByDescending(a => a.CREATION_DATE).First();
                if (lotCarrier != null)
                CntrItemRel cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == palletId).First();
                if (cntrItemRel != null)
                {
                    CntrItemRel cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == palletId).First();
                    if (cntrItemRel != null)
                    cntrItemRel.S_CNTR_CODE = lotCarrier.PALLET_ID;
                    cntrItemRel.S_BATCH_NO = lotCarrier.LOT_NAME;
                    cntrItemRel.S_SERIAL_NO = lotCarrier.YCL_BATCH;
                    cntrItemRel.S_ITEM_CODE = lotCarrier.MATERIALCODE;
                    cntrItemRel.F_QTY = lotCarrier.QTY;
                    cntrItemRel.D_PRD_DATE = lotCarrier.PRODUCTION_DATE;
                    cntrItemRel.S_ITEM_STATE = lotCarrier.QC_STATUS;
                    cntrItemRel.D_EXP_DATE = lotCarrier.SHELFLIFE_DATE;
                    cntrItemRel.D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE;
                    db.Updateable(cntrItemRel).ExecuteCommand();
                }
                else
                {
                    cntrItemRel = new CntrItemRel()
                    {
                        cntrItemRel.S_CNTR_CODE = lotCarrier.PALLET_ID;
                        cntrItemRel.S_BATCH_NO = lotCarrier.LOT_NAME;
                        cntrItemRel.S_SERIAL_NO = lotCarrier.YCL_BATCH;
                        cntrItemRel.S_ITEM_CODE = lotCarrier.MATERIALCODE;
                        cntrItemRel.F_QTY = lotCarrier.QTY;
                        cntrItemRel.D_PRD_DATE = lotCarrier.PRODUCTION_DATE;
                        cntrItemRel.S_ITEM_STATE = lotCarrier.QC_STATUS;
                        cntrItemRel.D_EXP_DATE = lotCarrier.SHELFLIFE_DATE;
                        cntrItemRel.D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE;
                        db.Updateable(cntrItemRel).ExecuteCommand();
                        S_CNTR_CODE = lotCarrier.PALLET_ID,
                        S_BATCH_NO = lotCarrier.LOT_NAME,
                        S_SERIAL_NO = lotCarrier.YCL_BATCH,
                        S_ITEM_CODE = lotCarrier.MATERIALCODE,
                        F_QTY = lotCarrier.QTY,
                        D_PRD_DATE = lotCarrier.PRODUCTION_DATE,
                        S_ITEM_STATE = lotCarrier.QC_STATUS,
                        D_EXP_DATE = lotCarrier.SHELFLIFE_DATE,
                        D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE,
                    };
                    db.Insertable(cntrItemRel).ExecuteCommand();
                }
                lotCarrier.RECEIVE_FLAG = "COMPLETE";
                lotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
                db.Updateable(lotCarrier).UpdateColumns(a => new { a.RECEIVE_FLAG, a.RECEIVE_DATE }).ExecuteCommand();
                // 读取基础物料信息表
                var material = db.Queryable<LjItem>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.MATERIAL_CODE == lotCarrier.MATERIALCODE).OrderByDescending(a => a.CREATION_DATE).First();
                if (material != null)
                {
                    TN_Material tn_material = db.Queryable<TN_Material>().Where(a => a.S_ITEM_CODE == material.MATERIAL_CODE).First();
                    if (tn_material != null)
                    {
                        tn_material.S_ITEM_CODE = material.MATERIAL_CODE;
                        tn_material.S_ITEM_NAME = material.MATERIAL_NAME;
                        tn_material.S_SPEC = material.SPEC;
                        tn_material.S_MODEL = material.MODEL;
                        tn_material.S_UNIT = material.UNIT;
                        tn_material.S_MEMO = material.MEMO;
                        db.Updateable(material).ExecuteCommand();
                    }
                    else
                    {
                        cntrItemRel = new CntrItemRel()
                        tn_material = new TN_Material()
                        {
                            S_CNTR_CODE = lotCarrier.PALLET_ID,
                            S_BATCH_NO = lotCarrier.LOT_NAME,
                            S_SERIAL_NO = lotCarrier.YCL_BATCH,
                            S_ITEM_CODE = lotCarrier.MATERIALCODE,
                            F_QTY = lotCarrier.QTY,
                            D_PRD_DATE = lotCarrier.PRODUCTION_DATE,
                            S_ITEM_STATE = lotCarrier.QC_STATUS,
                            D_EXP_DATE = lotCarrier.SHELFLIFE_DATE,
                            D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE,
                            S_ITEM_CODE = material.MATERIAL_CODE,
                            S_ITEM_NAME = material.MATERIAL_NAME,
                            S_SPEC = material.SPEC,
                            S_MODEL = material.MODEL,
                            S_UNIT = material.UNIT,
                            S_MEMO = material.MEMO,
                        };
                        db.Insertable(cntrItemRel).ExecuteCommand();
                        db.Insertable(material).ExecuteCommand();
                    }
                    lotCarrier.RECEIVE_FLAG = "COMPLETE";
                    lotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
                    db.Updateable(lotCarrier).UpdateColumns(a => new { a.RECEIVE_FLAG, a.RECEIVE_DATE }).ExecuteCommand();
                    // 读取基础物料信息表
                    var material = db.Queryable<LjItem>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.MATERIAL_CODE == lotCarrier.MATERIALCODE).OrderByDescending(a => a.CREATION_DATE).First();
                    if (material != null)
                    {
                        TN_Material tn_material = db.Queryable<TN_Material>().Where(a => a.S_ITEM_CODE == material.MATERIAL_CODE).First();
                        if (tn_material != null)
                        {
                            tn_material.S_ITEM_CODE = material.MATERIAL_CODE;
                            tn_material.S_ITEM_NAME = material.MATERIAL_NAME;
                            tn_material.S_SPEC = material.SPEC;
                            tn_material.S_MODEL = material.MODEL;
                            tn_material.S_UNIT = material.UNIT;
                            tn_material.S_MEMO = material.MEMO;
                            db.Updateable(material).ExecuteCommand();
                        }
                        else
                        {
                            tn_material = new TN_Material()
                            {
                                S_ITEM_CODE = material.MATERIAL_CODE,
                                S_ITEM_NAME = material.MATERIAL_NAME,
                                S_SPEC = material.SPEC,
                                S_MODEL = material.MODEL,
                                S_UNIT = material.UNIT,
                                S_MEMO = material.MEMO,
                            };
                            db.Insertable(material).ExecuteCommand();
                        }
                        material.RECEIVE_FLAG = "COMPLETE";
                        material.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
                        db.Updateable(material).ExecuteCommand();
                    }
                    material.RECEIVE_FLAG = "COMPLETE";
                    material.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
                    db.Updateable(material).ExecuteCommand();
                }
            }
            else
            {
                WMSHelper.addAlarmRecord("流程异常", "中", $"未在WMS系统中查询到容器信息,容器编码:{palletId}");
                res = false;
            }
            return res;
        }