111
cjs
2025-06-19 ad678d0d42f126e5c0d0e2f22f373d9727fb37a5
HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
@@ -5,13 +5,15 @@
using HH.WCS.Mobox3.NFLZ.util;
using HH.WCS.Mobox3.NFLZ.wms;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Xml.Linq;
using static HH.WCS.Mobox3.NFLZ.api.OtherModel;
using static HH.WCS.Mobox3.NFLZ.dispatch.NDC;
using static HH.WCS.Mobox3.NFLZ.dispatch.NDCApi;
using static HH.WCS.Mobox3.NFLZ.wms.WMSHelper.AddChangeModel;
namespace HH.WCS.Mobox3.NFLZ.process
@@ -33,13 +35,13 @@
            {
                Console.WriteLine($"任务{mst.S_CODE} 货位{mst.S_START_LOC}取货完成,起点解绑容器{mst.S_CNTR_CODE}");
                LogHelper.Info($"任务{mst.S_CODE} 货位{mst.S_START_LOC}取货完成,起点解绑容器{mst.S_CNTR_CODE}");
                LocationHelper.UnBindingLoc(mst.S_START_LOC, mst.S_CNTR_CODE.Split(',').ToList());
                LocationHelper.UnBindingLoc(mst.S_START_LOC, mst.S_CNTR_CODE.Split(',').ToList(),mst.S_TYPE);
            }
            else
            {
                Console.WriteLine($"任务{mst.S_CODE} 货位{mst.S_END_LOC}卸货完成,终点绑定容器{mst.S_CNTR_CODE}");
                LogHelper.Info($"任务{mst.S_CODE} 货位{mst.S_END_LOC}卸货完成,终点绑定容器{mst.S_CNTR_CODE}");
                LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList());
                LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList(),mst.S_TYPE);
            }
        }
@@ -677,10 +679,11 @@
            if (mst.S_TYPE.Contains("满托下线"))
            {
                LogHelper.Info($"空托任务生成处理,任务类型:{mst.S_TYPE}");
                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯空托" && a.enable == 1).First();
                string areaName = mst.S_TYPE.Contains("库存") ? "瓶胚非即产空框" : "瓶胚即产空框";
                var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First();
                if(areaInfo != null)
                {
                    startLoca = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First();
                    startLoca = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").OrderBy(a => a.N_ROW).First();
                    if (startLoca != null)
                    {
                        LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca));
@@ -706,19 +709,12 @@
                LogHelper.Info($"满托任务生成处理,任务类型:{mst.S_TYPE}");
                string startArea = "";
                LinZhiBCPWorkOrder bcpW = null;
                if (mst.S_TYPE.Contains("瓶坯"))
                {
                    bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("农夫林芝-瓶坯翻斗机") && a.S_WorkState == "执行中").First();
                }
                else
                {
                    bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("农夫林芝-瓶盖翻斗机") && a.S_WorkState == "执行中").First();
                }
                bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_WorkNo == mst.S_WORK_NO && a.S_WorkState == "执行中").First();
                if (mst.S_TYPE.Contains("瓶盖"))
                {
                    //瓶盖无即产即用和非即产即用
                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖非即产即用" && a.enable == 1).FirstOrDefault();
                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖非即产满框" && a.enable == 1).FirstOrDefault();
                    if (bcpInfo != null)
                    {
                        startLoca = DeviceProcess.getFDSXArea(db, bcpW, bcpInfo.areaCode);
@@ -728,18 +724,14 @@
                {
                    if (bcpW.S_UsingNow == "Y")
                    {
                        LogHelper.Info($"瓶坯即产即用A库区查找");
                        startArea = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产即用A" && a.enable == 1).FirstOrDefault().areaCode;
                        LogHelper.Info($"瓶胚即产满框 查找");
                        startArea = Settings.areaInfos.Where(a => a.areaName == "瓶胚即产满框" && a.enable == 1).FirstOrDefault().areaCode;
                        startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
                        if (startLoca == null)
                        {
                            LogHelper.Info($"瓶坯即产即用A库区未找到满托,去瓶坯即产即用B库区查找");
                            startLoca = TaskProcess.BCPInOrOut(db, true, "瓶坯即产即用B", bcpW.S_ItemCode);
                        }
                    }
                    else
                    {
                        startArea = Settings.areaInfos.Where(a => a.areaName == "瓶坯非即产即用" && a.enable == 1).FirstOrDefault().areaCode;
                        string areaName = bcpW.S_PLineNo.Split('-')[1].Substring(0, 1) + "号瓶胚翻斗机非即产满框";
                        startArea = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault().areaCode;
                        startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
                    }
                }
@@ -1141,21 +1133,43 @@
                    Console.WriteLine($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}");
                    LogHelper.Info($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}");
                    bool action = true;
                    var dic = new Dictionary<string, string>();
                    //var dic1 = new Dictionary<string, string>();
                    //dic.Add("Pri", mst.N_PRIORITY.ToString());
                    //dic.Add("No", mst.S_CODE.Trim());
                    dic.Add("From", Extend1);
                    dic.Add("To", Extend2);
                    dic.Add("Func", Extend3);
                    dic.Add("Data", Extend4);
                    //var dic = new Dictionary<string, string>();
                    ////var dic1 = new Dictionary<string, string>();
                    ////dic.Add("Pri", mst.N_PRIORITY.ToString());
                    ////dic.Add("No", mst.S_CODE.Trim());
                    //dic.Add("From", Extend1);
                    //dic.Add("To", Extend2);
                    //dic.Add("Func", Extend3);
                    //dic.Add("Data", Extend4);
                    //
                    //if (ConveryTaskList.Contains(taskType) || taskType.Contains("移库"))
                    //{
                    //    dic.Add("ItemHeight", Extend5);
                    //    dic.Add("CntrType", Extend6);
                    //    dic.Add("FromCol", Extend7);
                    //    dic.Add("ToCol", Extend8);
                    //    if (taskType.Contains("移库") || taskType.Contains("成品下线") || taskType.Contains("零头下线"))
                    //    {
                    //        LogHelper.Info($"移库:Extend5:{Extend5},Extend6:{Extend6},Extend7:{Extend7},Extend8:{Extend8},");
                    //        if (Extend5 == "" || Extend6 == "" || Extend7 == "" || Extend8 == "")
                    //        {
                    //            action = false;
                    //        }
                    //    }
                    //}
                    var dic = new List<param>
                    {
                        new param() { name = "From", value = Extend1 },
                        new param() { name = "To", value = Extend2 },
                        new param() { name = "Func", value = Extend3 },
                        new param() { name = "Data", value = Extend4 }
                    };
                    if (ConveryTaskList.Contains(taskType) || taskType.Contains("移库"))
                    {
                        dic.Add("ItemHeight", Extend5);
                        dic.Add("CntrType", Extend6);
                        dic.Add("FromCol", Extend7);
                        dic.Add("ToCol", Extend8);
                        dic.Add(new param(){name = "ItemHeight", value = Extend5});
                        dic.Add(new param(){name = "CntrType", value = Extend6});
                        dic.Add(new param(){name = "FromCol", value = Extend7});
                        dic.Add(new param(){name = "ToCol", value = Extend8});
                        if (taskType.Contains("移库") || taskType.Contains("成品下线") || taskType.Contains("零头下线"))
                        {
                            LogHelper.Info($"移库:Extend5:{Extend5},Extend6:{Extend6},Extend7:{Extend7},Extend8:{Extend8},");
@@ -1165,13 +1179,13 @@
                            }
                        }
                    }
                    if (action)
                    {
                        var res = new AGVResult();
                        res = NDC.AddNewOrderNew(TsNo,mst.N_PRIORITY,mst.S_CODE, dic);
                        var res = new AgvApiResult();
                        //res = NDC.AddNewOrderNew(TsNo,mst.N_PRIORITY,mst.S_CODE, dic);
                        res = NDCApi.AddOrderNew(TsNo, mst.N_PRIORITY, mst.S_CODE,dic);
                        if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009))
                        if (res != null && (res.err_code == 0 || res.err_code == 50009))
                        {
                            mst.N_B_STATE = 1;
                            WCSHelper.UpdateStatus(mst, "已推送");
@@ -1436,22 +1450,53 @@
            return result;
        }
        internal static Location getMStartLoc(SqlSugarClient db)
        internal static Location getMStartLoc(SqlSugarClient db, string usingNow)
        {
            Location result = null;
            var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯注塑机空托" && a.enable == 1).FirstOrDefault();
            if(areaInfo != null)
            if(usingNow == "Y")
            {
                var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First();
                if(locInfo != null)
                //即产即用
                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶胚即产空框" && a.enable == 1).FirstOrDefault();
                if (areaInfo != null)
                {
                    result = locInfo;
                    var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First();
                    if (locInfo != null)
                    {
                        result = locInfo;
                    }
                }
                else
                {
                    LogHelper.Info("瓶胚即产空框未配置");
                }
            }
            else
            {
                LogHelper.Info("瓶坯注塑机空托未配置");
                //非即产即用
                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶胚非即产空框" && a.enable == 1).FirstOrDefault();
                if (areaInfo != null)
                {
                    var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
                    if(locList.Count > 0)
                    {
                        foreach(var a in locList)
                        {
                            int row = a.N_ROW;
                            var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_ROW == row && b.S_LOCK_STATE.Contains("锁")).First();
                            if(lockInfo == null)
                            {
                                result = a;
                                break;
                            }
                        }
                    }
                }
                else
                {
                    LogHelper.Info("瓶胚非即产空框未配置");
                }
            }
            return result;
        }
@@ -1469,55 +1514,57 @@
            LogHelper.Info($"瓶坯注塑满托下线:类型:{taskName},物料编码:{itemCode}");
            if (taskName.Contains("即产"))
            {
                //即产即用工单,下线到即产即用库区
                //即产即用库区有两个线边库,如果即产即用A库区满,则放到即产即用B库区,若即产即用库区都满,则放到瓶坯库区
                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产即用A" && a.enable == 1).FirstOrDefault();
                //注塑机急产即用下线,首先下线到即产即用满框线边,满眶线边满了,下到即产即用满框缓存区,满框缓存区满了,下到入库接驳堆叠位
                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶胚即产满框" && a.enable == 1).FirstOrDefault();
                if(areaInfo != null)
                {
                    var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First();
                    var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_ROW).First();
                    if(locInfo != null)
                    {
                        result = locInfo;
                    }
                }
                else
                {
                    LogHelper.Info($"瓶坯注塑满托下线:瓶坯即产即用A 未配置");
                    LogHelper.Info($"瓶坯注塑满托下线:瓶胚即产满框 未配置");
                }
                if (result == null)
                {
                    result = TaskProcess.BCPInOrOut(db, true, "瓶坯即产即用B", itemCode);
                    result = TaskProcess.BCPInOrOut(db, true, "瓶胚即产满框缓存", itemCode);
                }
                if(result == null)
                {
                    result = TaskProcess.BCPInOrOut(db, true, "瓶坯库区", itemCode);
                    result = getJBLoc(db, result);
                }
            }
            else
            {
                //非即产即用工单,下线到非即产即用库区
                //非即产即用库区只有一个线边库,如果线边库满,则放到瓶坯库区
                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯非即产即用" && a.enable == 1).FirstOrDefault();
                if (areaInfo != null)
                {
                    var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First();
                    if (locInfo != null)
                    {
                        result = locInfo;
                    }
                result = getJBLoc(db, result);
            }
            return result;
        }
        private static Location getJBLoc(SqlSugarClient db, Location result)
        {
            //注塑机非即产即用下线,下到入库接驳堆叠位
            var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶胚入库接驳" && a.enable == 1).FirstOrDefault();
            if (areaInfo != null)
            {
                var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First();
                if (locInfo != null)
                {
                    result = locInfo;
                }
                else
                {
                    LogHelper.Info($"瓶坯注塑满托下线:瓶坯非即产即用 未配置");
                }
                if (result == null)
                {
                    result = TaskProcess.BCPInOrOut(db, true, "瓶坯库区", itemCode);
                    LogHelper.Info("瓶坯注塑满托下线:瓶坯入库接驳位暂时未查询到可用货位");
                }
            }
            else
            {
                LogHelper.Info($"瓶坯注塑满托下线:瓶胚入库接驳 未配置");
            }
            return result;
        }
@@ -1531,13 +1578,13 @@
        internal static Location BCPEmptyOut(SqlSugarClient db, string taskName)
        {
            Location result = null;
            //翻斗机库存空托下线(瓶盖)
            string endAreaName = taskName.Contains("瓶盖") ? "瓶盖空托" : "瓶坯空托";
            string endAreaName = taskName.Contains("瓶盖") ? "瓶盖非即产空框" : taskName.Contains("库存") ? "瓶胚非即产空框" : "瓶胚即产空框";
            var areaInfo = Settings.areaInfos.Where(a => a.areaName == endAreaName && a.enable == 1).FirstOrDefault();
            if(areaInfo != null)
            if (areaInfo != null)
            {
                var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First();
                if(locInfo != null)
                var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_ROW).First();
                if (locInfo != null)
                {
                    result = locInfo;
                }
@@ -1546,187 +1593,9 @@
            {
                LogHelper.Info($"{endAreaName}未配置");
            }
            return result;
        }
        /// <summary>
        /// 半成品移库
        /// </summary>
        /// <param name="action">true - 工单开启 false - 工单关闭</param>
        /// <param name="machine">设备</param>
        internal static void BCPYiKu(bool action, string machine)
        {
            var db = new SqlHelper<object>().GetInstance();
            Location startLoc = null;
            Location endLoc = null;
            if (action)
            {
                if(machine == "瓶坯翻斗机")
                {
                    //瓶坯翻斗机
                    //开启,判断工单类型,根据工单类型补充对应的库区 即产即用不补充
                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯非即产即用" && a.enable == 1).FirstOrDefault();
                    if (areaInfo != null)
                    {
                        var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "农夫林芝-瓶批翻斗机" && a.S_WorkState == "执行中").First();
                        if (workInfo.S_UsingNow == "N")
                        {
                            startLoc = TaskProcess.BCPInOrOut(db, false, "瓶坯库区", workInfo.S_ItemCode);
                            endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First();
                        }
                    }
                    else
                    {
                        LogHelper.Info("瓶坯非即产即用未配置");
                    }
                }
                if (machine == "瓶坯注塑机")
                {
                    //开启,查询 瓶坯空托 是否空托数量大于3托,如果不大于,则补空托
                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯注塑机空托" && a.enable == 1).FirstOrDefault();
                    if(areaInfo != null)
                    {
                        var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").ToList();
                        if(locList.Count > 2)
                        {
                            LogHelper.Info("瓶坯空托 补空托");
                            startLoc = TaskProcess.BCPInOrOut(db, false, "瓶坯库区","");
                            endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First();
                        }
                    }
                    else
                    {
                        LogHelper.Info("瓶坯注塑机空托未配置");
                    }
                }
                if (machine == "瓶盖翻斗机")
                {
                    //开启,查询 瓶盖非急产急用 物料是否满,不满则补充物料
                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖非即产即用" && a.enable == 1).FirstOrDefault();
                    if (areaInfo != null)
                    {
                        var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").First();
                        if(locInfo != null)
                        {
                            LogHelper.Info("瓶盖非即产即用 补满托");
                            var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "农夫林芝-瓶盖翻斗机" && a.S_WorkState == "执行中").First();
                            startLoc = TaskProcess.BCPInOrOut(db, false, "瓶盖库区", workInfo.S_ItemCode);
                            endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First();
                        }
                    }
                    else
                    {
                        LogHelper.Info("瓶盖非即产即用未配置");
                    }
                }
            }
            else
            {
                if (machine == "瓶坯翻斗机")
                {
                    //关闭,查询 瓶坯非即产即用 瓶坯即产即用A 瓶坯即产即用B 是否有物料,有则入库
                    var areaList = Settings.areaInfos.Where(a => (a.areaName == "瓶坯非即产即用" || a.areaName == "瓶坯即产即用A") && a.enable == 1).ToList();
                    if (areaList.Count > 0)
                    {
                        foreach(var a in areaList)
                        {
                            startLoc = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.areaCode && b.N_CURRENT_NUM > 0 && b.S_LOCK_STATE == "无").Includes(b => b.LocCntrRel).First();
                            if (startLoc != null) break;
                        }
                    }
                    if (startLoc == null)
                    {
                        var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产即用B" && a.enable == 1).FirstOrDefault();
                        if(areaInfo != null)
                        {
                            var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
                            if(locInfo.Count > 0)
                            {
                                foreach(var a in locInfo)
                                {
                                    int row = a.N_ROW;
                                    var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "入库锁" || b.S_LOCK_STATE == "出库锁")).First();
                                    if(lockInfo == null)
                                    {
                                        startLoc = a;
                                    }
                                }
                            }
                        }
                    }
                    if(startLoc != null)
                    {
                        if (startLoc.LocCntrRel != null)
                        {
                            var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == startLoc.LocCntrRel.S_CNTR_CODE).First();
                            if (itemInfo != null)
                            {
                                endLoc = TaskProcess.BCPInOrOut(db, true, "瓶坯库区", itemInfo.S_ITEM_CODE);
                            }
                        }
                    }
                }
                if (machine == "瓶坯注塑机")
                {
                    //关闭,查询 瓶坯空托 是否有空托,有则入库
                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯注塑机空托" && a.enable == 1).FirstOrDefault();
                    if (areaInfo != null)
                    {
                        startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First();
                        if(startLoc != null)
                        {
                            endLoc = TaskProcess.BCPInOrOut(db, true, "瓶坯库区", "");
                        }
                    }
                }
                if (machine == "瓶盖翻斗机")
                {
                    //关闭, 1、查询 瓶盖空托 是否还有托盘,有则入库  2、查询瓶盖非即产即用 是否有物料, 有则入库
                    //关闭,查询 瓶坯空托 是否有空托,有则入库
                    //查询空托库区
                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖空托" && a.enable == 1).FirstOrDefault();
                    if (areaInfo != null)
                    {
                        startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First();
                        if (startLoc != null)
                        {
                            endLoc = TaskProcess.BCPInOrOut(db, true, "瓶盖库区", "");
                        }
                    }
                    //查询满托库区
                    if(startLoc == null)
                    {
                        areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖非即产即用" && a.enable == 1).FirstOrDefault();
                        if (areaInfo != null)
                        {
                            startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First();
                            if (startLoc != null)
                            {
                                if(startLoc.LocCntrRel != null)
                                {
                                    var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == startLoc.LocCntrRel.S_CNTR_CODE).First();
                                    if(itemInfo != null)
                                    {
                                        endLoc = TaskProcess.BCPInOrOut(db, true, "瓶盖库区", itemInfo.S_ITEM_CODE);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (startLoc != null && endLoc != null)
            {
                WMSHelper.CreateOpTask(startLoc.S_CODE, endLoc.S_CODE, "入库", "半成品移库", startLoc.LocCntrRel.S_CNTR_CODE);
            }
        }
        /// <summary>
        /// FuLeWebPost
@@ -2472,5 +2341,7 @@
                }
            }
        }
    }
}