海波 张
2025-07-07 00b6105b34870f6f5a33551534d0088f3f741906
process/TaskProcess.cs
@@ -33,6 +33,7 @@
using Container = HH.WCS.ZhongCeJinTan.wms.Container;
using static HH.WCS.ZhongCeJinTan.wms.WcsModel;
using Top.Api;
using HH.WCS.ZhongCeJinTan;
namespace HH.WCS.ZhongCeJinTan.process
{
@@ -162,17 +163,19 @@
                {
                    if (rfidFlag.S_RESULT.Contains("成功"))
                    {
                        LogHelper.Info($"任务号={mst.S_CODE},等待交管成功,修改参数6为1", "安全交互");
                        LogHelper.Info($"任务号={mst.S_CODE},等待交管成功,修改参数6为1,4为0", "安全交互");
                        NDCApi.ChangeOrderParam(mst.S_CODE, 4, "0");
                        NDCApi.ChangeOrderParam(mst.S_CODE, 6, "1");
                    }
                    else {
                        var startSite = LocationHelper.GetAgvSiteZc(mst.S_START_LOC);
                        var endSite = LocationHelper.GetAgvSiteZc(mst.S_END_LOC);
                        LogHelper.Info($"任务{mst.S_CODE}RFID校验失败,改参数1为{startSite},改参数2为{endSite},参数4为0,6为1", "改道安全交互");
                        LogHelper.Info($"任务{mst.S_CODE}RFID校验失败,改参数1为{startSite},改参数2为{endSite},参数4为0,6为1", "安全交互");
                        NDCApi.ChangeOrderParam(mst.S_CODE, 1, startSite);
                        NDCApi.ChangeOrderParam(mst.S_CODE, 2, endSite);
                        NDCApi.ChangeOrderParam(mst.S_CODE, 4, "0");
                        NDCApi.ChangeOrderParam(mst.S_CODE, 6, "1");
                        Thread.Sleep(1000);
                        NDCApi.ChangeOrderParam(mst.S_CODE, 6, "2");
                    }
                }
            }
@@ -201,13 +204,16 @@
        /// <param name="state"></param>
        internal static void OperateStatus(WMSTask mst, int state)
        {
            if (state == 4)
            if (state == 4)//取货完成
            {
                CacheBitUpdate(mst, true);
            }
            if (state == 6)//卸货完成
            {
                CacheBitUpdate(mst, false);
                //退库任务不绑定
                if (!LocationHelper.GetErroArea(mst.S_END_AREA)) {
                    CacheBitUpdate(mst, false);
                }
            }
            if (state == 7)
            {
@@ -230,8 +236,7 @@
            try
            {
               
                //判断接驳位可用
                var flag = true;
                //空托入库判断空托出缓存表,有对应记录直接改道到缓存表终点
                if (workFlow.FLOWCODE=="3") {
@@ -260,33 +265,84 @@
                            //改一段任务终点
                            task.S_END_LOC = end.S_CODE;
                            task.S_END_AREA = end.S_AREA_CODE;
                            db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_END_AREA }).ExecuteCommand();
                            task.S_END_AREA_NAME = end.S_AREA_Name;
                            db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_END_AREA ,it.S_END_AREA_NAME}).ExecuteCommand();
                            kt.Status = "Y";
                            db.Updateable(kt).UpdateColumns(it => new { it.Status }).ExecuteCommand();
                            db.CommitTran();
                            var site = LocationHelper.GetAgvSiteZc(end.S_CODE);
                            LogHelper.Info($"任务{task.S_CODE}改道成功,改参数2为{site},参数6为2,4为0", "改道安全交互");
                            NDCApi.ChangeOrderParam(task.S_CODE, 2, site);
                            NDCApi.ChangeOrderParam(task.S_CODE, 6, "2");
                            NDCApi.ChangeOrderParam(task.S_CODE, 4, "0");
                            Thread.Sleep(1000);
                            NDCApi.ChangeOrderParam(task.S_CODE, 6, "2");
                            return;
                        }
                       
                    }
                }
                //判断巷道可用
                var flag = true;
                //判断接驳位可用
                var flag1 = true;
                if (workFlow.FLOWNAME.Contains("入库"))
                {
                    List<Location> balanceConnectionList = new List<Location>();
                    var loc1 = LocationHelper.GetLocOne(wcsTask.S_END_LOC);
                    //查找可用巷道
                    //判断可用巷道
                    var rowdwa = db.Queryable<RoadWayEnable>().Where(x => x.areaCode == wcsTask.S_END_AREA && x.status == "0" && x.roadWay == loc1.N_ROADWAY.ToString()).First();
                    if (rowdwa == null)
                    {
                        LogHelper.Info($"当前任务{task.S_CODE}判断巷道可用,当前库区{wcsTask.S_END_AREA}当前巷道{loc1.N_ROADWAY}可用,不需要改道", "改道安全交互");
                        LogHelper.Info($"当前任务{task.S_CODE}判断巷道可用,当前库区{wcsTask.S_END_AREA}当前巷道{loc1.N_ROADWAY}可用", "改道安全交互");
                        flag = false;
                    }
                    //判断可用接驳位
                    var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION);
                    var usableConnectionList = WcsTask.WcsPositionAvailable(task.S_CODE, connectionList);
                    if (usableConnectionList != null && usableConnectionList.code == "0")
                    {
                        balanceConnectionList = LocationHelper.GetConnectionListByst(usableConnectionList.available);
                        foreach (var item in balanceConnectionList)
                        {
                            if (item.S_CODE.Contains(task.S_END_LOC))
                            {
                                flag1 = false;
                                LogHelper.Info($"当前任务{task.S_CODE}接驳位{item.S_CODE}可用", "改道安全交互");
                                break;
                            }
                        }
                    }
                    else
                    {
                        LogHelper.Info($"当前任务{task.S_CODE}当前巷道不可用,需要改道", "改道安全交互");
                        LogHelper.Info($"判断接驳位是否可用接口回复异常", "改道安全交互");
                        throw new Exception($"判断接驳位是否可用接口回复异常");
                    }
                    if (flag || flag1)
                    {
                        LogHelper.Info($"当前任务{task.S_CODE}接驳位{task.S_END_LOC}或者当前库区{wcsTask.S_END_AREA}当前巷道{loc1.N_ROADWAY}不可用,需要改道", "改道安全交互");
                        Location connection = null;
                        Location end = null;
                        //立库均衡后货位集合
                        List<Location> balanceLocList = new List<Location>();
                        var endLoc = LocationHelper.GetLocOne(wcsTask.S_END_LOC);
                        List<Location> endList;
                        if (!string.IsNullOrEmpty(workFlow.ZONECODE))
@@ -298,8 +354,41 @@
                            endList = LocationHelper.GetAllLocList1(workFlow.ENDAREA);
                        }
                        var end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                        balanceLocList = LocationHelper.FindBalanceEndLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                        balanceConnectionList = LocationHelper.GetConnectionListByst(usableConnectionList.available);
                        foreach (var item in balanceLocList)
                        {
                            if (item.S_LOCK_STATE == "无" && item.N_CURRENT_NUM == 0)
                            {
                                //LogHelper.Info($"改道安全交互item信息" + JsonConvert.SerializeObject(item), "改道安全交互");
                                foreach (var item1 in balanceConnectionList)
                                {
                                    if (item1.CONNEC_ROADWAY == item.N_ROADWAY && item1.N_CURRENT_NUM < 2)
                                    {
                                        connection = item1;
                                        end = item;
                                        LogHelper.Info($"当前任务{task.S_CODE}寻找到可用接驳位{connection}", "改道安全交互");
                                        break;
                                    }
                                }
                                if (end != null)
                                {
                                    LogHelper.Info($"当前任务{task.S_CODE}寻找到终点{end.S_CODE}", "改道安全交互");
                                    break;
                                }
                            }
                        }
                        if (connection == null)
                        {
                            throw new Exception($"改道寻找不到可用接驳位");
                        }
                        LogHelper.Info($"当前任务{task.S_CODE},当前巷道不可用,需要改道,新终点信息" + JsonConvert.SerializeObject(end), "改道安全交互");
                        if (end == null)
                        {
@@ -314,79 +403,35 @@
                        wcsTask.S_END_LOC = end.S_CODE;
                        db.Updateable(wcsTask).UpdateColumns(it => new { it.S_END_LOC }).ExecuteCommand();
                        db.CommitTran();
                    }
                        LocationHelper.LockLoc(connection.S_CODE, "入库锁", 1);
                        var endLoc1 = LocationHelper.GetLocOne(task.S_END_LOC);
                        endLoc1.N_LOCK_STATE = 0;
                        endLoc1.S_LOCK_STATE = "无";
                        db.BeginTran();
                        db.Updateable(endLoc1).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand();
                        //改一段任务终点
                        task.S_END_LOC = connection.S_CODE;
                        task.S_END_AREA = connection.S_AREA_CODE;
                        task.S_END_AREA_NAME = connection.S_AREA_Name;
                        db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_END_AREA,it.S_END_AREA_NAME }).ExecuteCommand();
                        //改二段任务起点
                        wcsTask.S_START_LOC = connection.S_CODE;
                        wcsTask.S_START_AREA = connection.S_AREA_CODE;
                    var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION);
                    var usableConnectionList = WcsTask.WcsPositionAvailable(task.S_CODE, connectionList);
                    if (usableConnectionList != null && usableConnectionList.code == "0")
                    {
                        foreach (var item in usableConnectionList.available)
                        {
                            var con = LocationHelper.GetLoc(item);
                            if (con.S_CODE.Contains(task.S_END_LOC))
                            {
                        wcsTask.S_START_AREA_NAME = connection.S_AREA_Name;
                        db.Updateable(wcsTask).UpdateColumns(it => new { it.S_START_LOC, it.S_START_AREA,it.S_START_AREA_NAME}).ExecuteCommand();
                        db.CommitTran();
                                flag = false;
                                LogHelper.Info($"当前任务{task.S_CODE}接驳位{con.S_CODE}可用,不需要改道,直接修改参数6为1,4为1024", "改道安全交互");
                                NDCApi.ChangeOrderParam(task.S_CODE, 6, "1");
                                NDCApi.ChangeOrderParam(task.S_CODE, 4, "1024");
                                break;
                            }
                        }
                    }
                    else
                    {
                        LogHelper.Info($"判断接驳位是否可用接口回复异常", "改道安全交互");
                        throw new Exception($"判断接驳位是否可用接口回复异常");
                    }
                    if (flag)
                    {
                        LogHelper.Info($"当前任务{task.S_CODE}接驳位不可用,需要改道", "改道安全交互");
                        var connection = "";
                        foreach (var item in usableConnectionList.available)
                        {
                            var con = LocationHelper.GetLoc(item);
                            if (con.N_CURRENT_NUM < 2)
                            {
                                connection = con.S_CODE;
                                LogHelper.Info($"改道寻找到可用接驳位{connection}", "改道安全交互");
                                break;
                            }
                        }
                        if (connection == "")
                        {
                            throw new Exception($"改道寻找不到可用接驳位");
                        }
                        var loc = LocationHelper.GetLocOne(connection);
                            LocationHelper.LockLoc(loc.S_CODE, "入库锁", 1);
                            var endLoc = LocationHelper.GetLocOne(task.S_END_LOC);
                            endLoc.N_LOCK_STATE = 0;
                            endLoc.S_LOCK_STATE = "无";
                            db.BeginTran();
                            db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand();
                            //改一段任务终点
                            task.S_END_LOC = loc.S_CODE;
                            task.S_END_AREA = loc.S_AREA_CODE;
                            db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_END_AREA }).ExecuteCommand();
                            //改二段任务起点
                            wcsTask.S_START_LOC = loc.S_CODE;
                            wcsTask.S_START_AREA = loc.S_AREA_CODE;
                            db.Updateable(wcsTask).UpdateColumns(it => new { it.S_START_LOC ,it.S_START_AREA}).ExecuteCommand();
                            db.CommitTran();
                            var site = LocationHelper.GetAgvSiteZc(loc.S_CODE);
                            LogHelper.Info($"任务{task.S_CODE}改道成功,改参数2为{site},参数6为2,4为1024", "改道安全交互");
                            NDCApi.ChangeOrderParam(task.S_CODE, 2, site);
                            NDCApi.ChangeOrderParam(task.S_CODE, 6, "2");
                            NDCApi.ChangeOrderParam(task.S_CODE, 4, "1024");
                        var site = LocationHelper.GetAgvSiteZc(connection.S_CODE);
                        LogHelper.Info($"任务{task.S_CODE}改道成功,改参数2为{site},参数6为2,4为1024", "改道安全交互");
                        NDCApi.ChangeOrderParam(task.S_CODE, 2, site);
                        NDCApi.ChangeOrderParam(task.S_CODE, 4, "1024");
                        Thread.Sleep(1000);
                        NDCApi.ChangeOrderParam(task.S_CODE, 6, "2");
                        //} else if (workFlow.FLOWNAME.Contains("出库")) {
                        //    var endLoc = LocationHelper.GetLocOne(task.S_START_LOC);
@@ -399,6 +444,12 @@
                        //    db.CommitTran();
                        //    LocationHelper.LockLoc(loc.S_CODE, "出库锁", 2);
                        //}
                    }
                    else {
                        LogHelper.Info($"当前任务{task.S_CODE}接驳位{task.S_END_LOC}可用,当前库区{wcsTask.S_END_AREA}当前巷道{loc1.N_ROADWAY}可用,不需要改道,直接修改参数6为2,4为1024", "改道安全交互");
                        NDCApi.ChangeOrderParam(task.S_CODE, 4, "1024");
                        Thread.Sleep(1000);
                        NDCApi.ChangeOrderParam(task.S_CODE, 6, "2");
                    }
                }
@@ -695,14 +746,14 @@
                    var TrayLocation = db.Queryable<LocCntrRel>().Where(e => e.S_CNTR_CODE == model.TOOLS_NO).ToList();
                    if (TrayLocation.Count() > 0)
                    {
                        LogHelper.Info("查询到该工装已经绑定了货位信息", "物料绑定解绑");
                        throw new Exception("查询到该工装已经绑定了货位信息");
                        LogHelper.Info("查询到该工装托盘码已经绑定了货位信息", "物料绑定解绑");
                        throw new Exception("查询到该工装托盘码已经绑定了货位信息");
                    }
                    var TrayItems = db.Queryable<CntrItemRel>().Where(e => e.S_CNTR_CODE == model.TOOLS_NO).ToList();
                    if (TrayItems.Count() > 0)
                    {
                        LogHelper.Info("查询到该工装已经绑定了物料信息", "物料绑定解绑");
                        throw new Exception("查询到该工装已经绑定了物料信息");
                        LogHelper.Info("查询到该工装托盘码已经绑定了物料信息", "物料绑定解绑");
                        throw new Exception("查询到该工装托盘码已经绑定了物料信息");
                    }
                    var Locations = db.Queryable<Location>().Where(e => e.S_CODE == model.LOCATION_CODE)?.First();
                    if (Locations == null)
@@ -894,6 +945,9 @@
                            ContainerHelper.delCntr(task.S_CNTR_CODE);
                            ContainerHelper.delCntrItem(task.S_CNTR_CODE);
                        }
                        else {
                           WcsTask.WcsCancellTask(wcsTask);
                        }
                        
                       
                        TaskHelper.Fail(wcsTask);
@@ -927,6 +981,9 @@
                        {
                            ContainerHelper.delCntr(task.S_CNTR_CODE);
                            ContainerHelper.delCntrItem(task.S_CNTR_CODE);
                        }
                        else {
                            WcsTask.WcsCancellTask(wcsTask);
                        }
                        TaskHelper.Fail(wcsTask);
                        TaskProcess.OperateStatus(wcsTask, 7);
@@ -1394,50 +1451,10 @@
                        throw new Exception($"起点:{model.Location_From},没找到或有锁");
                    }
                    //接驳位
                    var connection = "";
                    //接驳位库区名称
                    var connectionArea = "";
                    //如果需要下发wcs立库,则需要寻找可用接驳位
                    if (workFlow.SENDWCS == "Y") {
                        //正式代码,调用接口寻找可用接驳位
                        var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION);
                        var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList);
                        if (usableConnectionList != null && usableConnectionList.code == "0")
                        {
                            //根据接驳位任务数量获取均衡接驳位集合优先任务数少的接驳位
                            var balanceConnectionList =  LocationHelper.GetBalanceConnectionList(usableConnectionList.available);
                            LogHelper.Info($"ZCSendTask入库任务下发寻找均衡接驳位"+JsonConvert.SerializeObject(balanceConnectionList), "Mes任务下发");
                            foreach (var item in balanceConnectionList)
                            {
                                if (item.loc.N_CURRENT_NUM<2)
                                {
                                    connection = item.loc.S_CODE;
                                    connectionArea = item.loc.S_AREA_Name;
                                    LogHelper.Info($"ZCSendTask入库任务下发寻找到可用接驳位{connection}", "Mes任务下发");
                                    break;
                                }
                            }
                        }
                        else
                        {
                            LogHelper.Info($"ZCSendTask入库任务下发寻找接驳位失败", "Mes任务下发");
                            throw new Exception($"ZCSendTask入库任务下发寻找接驳位失败");
                        }
                        if (connection == "")
                        {
                            LogHelper.Info($"ZCSendTask入库任务下发寻找接驳位失败", "Mes任务下发");
                            throw new Exception($"ZCSendTask入库任务下发寻找接驳位失败");
                        }
                    }
                    //查找终点
                    List<Location> endList ;
                    List<Location> endList;
                    Location end = null;
@@ -1445,55 +1462,121 @@
                    {
                        endList = LocationHelper.GetZoneLoc(workFlow.ZONECODE);
                    }
                    else {
                    else
                    {
                        endList = LocationHelper.GetAllLocList1(workFlow.ENDAREA);
                    }
                    if (workFlow.FLOWCODE == "1")
                    {
                        //满托入
                        end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                    }
                    else if (workFlow.FLOWCODE == "3")
                    {
                        //空托入 优先入缓存区,没有入立库区
                        //var ktHcq = Settings.EmptyPalletBufferArea;
                        cntrCount = 0;
                        //var endList1 = LocationHelper.GetAllLocList1(ktHcq);
                        //end = LocationHelper.FindEndcolByLoc(endList1, ktHcq);
                        //LogHelper.Info($"ZCSendTask入库任务寻找空托缓存区终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发");
                        //if (end == null)
                        //{
                            LogHelper.Info($"ZCSendTask入库任务没找到空托缓存区终点,寻找立库区空货位", "Mes任务下发");
                            end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                        //}
                        //else
                        //{
                        //    connection = "";
                        //}
                    }
                    else if (workFlow.FLOWCODE == "2")
                    //立库均衡后货位集合
                    List<Location> balanceLocList = new List<Location>();
                    //接驳位
                    var connection = "";
                    //接驳位库区名称
                    var connectionArea = "";
                    //如果需要下发wcs立库,则需要寻找可用接驳位
                    if (workFlow.SENDWCS == "Y")
                    {
                        //85纤维 95钢丝一段任务入三层货架
                        if (TOOLSTYPE == "85" || TOOLSTYPE == "95")
                        //正式代码,调用接口寻找可用接驳位
                        var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION);
                        var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList);
                        if (usableConnectionList != null && usableConnectionList.code == "0")
                        {
                            end = LocationHelper.FindEndcolByLoc(endList, workFlow.ENDAREA);
                            LogHelper.Info($"ZCSendTask入库任务85纤维 95钢丝一段任务入三层货架终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发");
                            var balanceConnectionList = LocationHelper.GetConnectionListByst(usableConnectionList.available);
                            LogHelper.Info($"ZCSendTask入库任务下发寻找可用接驳位" + JsonConvert.SerializeObject(balanceConnectionList), "Mes任务下发");
                            if (workFlow.FLOWCODE == "1" || workFlow.FLOWCODE == "2")
                            {
                                //满托入
                                balanceLocList = LocationHelper.FindBalanceEndLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                                if (TOOLSTYPE == "25" || TOOLSTYPE == "35") {
                                    LogHelper.Info($"ZCSendTask入库任务工装是二合一库,需要物料均衡", "Mes任务下发");
                                    balanceLocList = LocationHelper.RoadWayBalance1ByItem(balanceLocList, model.PROD_NO);
                                }
                            }
                            else if (workFlow.FLOWCODE == "3")
                            {
                                //空托入立库区
                                cntrCount = 0;
                                LogHelper.Info($"ZCSendTask入库任务,寻找立库区空货位", "Mes任务下发");
                                balanceLocList = LocationHelper.FindBalanceEndLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                            }
                            LogHelper.Info($"ZCSendTask入库任务下发寻找终点数量{balanceLocList.Count}", "Mes任务下发");
                            foreach (var item in balanceLocList)
                            {
                                if (item.S_LOCK_STATE == "无" && item.N_CURRENT_NUM == 0)
                                {
                                   // LogHelper.Info($"ZCSendTask入库任务下发item信息" + JsonConvert.SerializeObject(item), "Mes任务下发");
                                    foreach (var item1 in balanceConnectionList)
                                    {
                                        if (item1.CONNEC_ROADWAY == item.N_ROADWAY && item1.N_CURRENT_NUM < 2)
                                        {
                                            connection = item1.S_CODE;
                                            connectionArea = item1.S_AREA_Name;
                                            end = item;
                                            LogHelper.Info($"ZCSendTask入库任务下发寻找到可用接驳位{connection}", "Mes任务下发");
                                            break;
                                        }
                                    }
                                    if (end!=null)
                                    {
                                        LogHelper.Info($"ZCSendTask入库任务下发寻找到终点{end.S_CODE}", "Mes任务下发");
                                        break;
                                    }
                                }
                            }
                            if (connection == "")
                            {
                                LogHelper.Info($"ZCSendTask入库任务下发没找到接驳位", "Mes任务下发");
                                throw new Exception($"ZCSendTask入库任务下发没找到接驳位");
                            }
                        }
                        else
                        {
                            end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                            LogHelper.Info($"ZCSendTask入库任务下发寻找接驳位接口失败", "Mes任务下发");
                            throw new Exception($"ZCSendTask入库任务下发寻找接驳位接口失败");
                        }
                    }
                    else if (workFlow.FLOWCODE == "12")
                    {
                        //空架子入
                        end = LocationHelper.FindEndcolByLoc(endList, workFlow.ENDAREA);
                        cntrCount = 0;
                        //生成空架子虚拟号
                        cntrCode = ContainerHelper.GenerateCntrNo();
                    }
                    else {
                        if (workFlow.FLOWCODE == "3")
                        {
                            end = LocationHelper.FindEndcolByLoc(endList, workFlow.ENDAREA);
                        }
                        else if (workFlow.FLOWCODE == "2")
                        {
                            //85纤维 95钢丝一段任务入三层货架
                              end = LocationHelper.FindEndcolByLoc(endList, workFlow.ENDAREA);
                              LogHelper.Info($"ZCSendTask入库任务85纤维 95钢丝一段任务入三层货架终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发");
                        }
                        else if (workFlow.FLOWCODE == "12")
                        {
                            //空架子入
                            end = LocationHelper.FindEndcolByLoc(endList, workFlow.ENDAREA);
                            cntrCount = 0;
                            //生成空架子虚拟号
                            cntrCode = ContainerHelper.GenerateCntrNo();
                        }
                        else if (workFlow.FLOWCODE == "0")
                        {
                            //钢丝入库
                            end = LocationHelper.FindEndcolByLoc(endList, workFlow.ENDAREA);
                        }
                     }
                    LogHelper.Info($"ZCSendTask入库任务下发终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发");
@@ -1518,7 +1601,7 @@
                        var EXPIRED_TIME = model.EXPIRED_TIME.ToString();
                        if (EXPIRED_TIME == "0001/1/1 0:00:00")
                        {
                            rel.expireTime = model.SHELF_LIFE_TIME.AddHours(model.EXPIRED_REP);
                            rel.expireTime = model.PRODUCE_TIME.AddHours(model.EXPIRED_REP);
                            LogHelper.Info($"失效时间为0001/1/1 0:00:00,修改为:{rel.expireTime}", "Mes任务下发");
                        }
                        else
@@ -1529,7 +1612,7 @@
                        var SHELF_LIFE_TIME = model.SHELF_LIFE_TIME.ToString();
                        if (SHELF_LIFE_TIME == "0001/1/1 0:00:00")
                        {
                            rel.takeEffectTime = model.SHELF_LIFE_TIME.AddHours(-model.SHELF_REP);
                            rel.takeEffectTime = model.PRODUCE_TIME.AddHours(-model.SHELF_REP);
                            LogHelper.Info($"生效时间为0001/1/1 0:00:00,修改为:{rel.takeEffectTime}", "Mes任务下发");
                        }
                        else
@@ -1701,17 +1784,18 @@
                    if (workFlow.FLOWCODE == "9")
                    if (workFlow.FLOWCODE == "9" || workFlow.FLOWCODE == "4")
                    {
                        if (TOOLSTYPE == "85" || TOOLSTYPE == "95")
                        {
                            start = LocationHelper.FindStartcolByHjLoclistAndItem(strrtList, model.PROD_NO, workFlow.STARTAREA);
                            LogHelper.Info($"ZCSendTask出库任务85纤维 95钢丝一段任务三层货架起点信息" + JsonConvert.SerializeObject(start), "Mes任务下发");
                        }
                        else {
                        else
                        {
                            //根据制品编号寻找立库区对应物料托盘
                            start = LocationHelper.FindStartcolByLoclistAndItem(strrtList, model.PROD_NO, workFlow.STARTAREA, workFlow.ROADWAY);
                            if (start==null)
                            start = LocationHelper.FindStartcolByLoclistAndItem(strrtList, model.PROD_NO, workFlow.STARTAREA, workFlow.ROADWAY,workFlow.CONNECTION);
                            if (start == null)
                            {
                                strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA);
                                var itemFlag = LocationHelper.FindStartcolByLoclistAndItemFlag(strrtList, model.PROD_NO, workFlow.STARTAREA);
@@ -1732,7 +1816,8 @@
                    }
                    else if (workFlow.FLOWCODE == "7") {
                    else if (workFlow.FLOWCODE == "7")
                    {
                        //寻找立库区空托
                        //start = LocationHelper.FindStartcolByLoclistAndcntr(strrtList, workFlow.STARTAREA);
                        //if (start == null)
@@ -1754,7 +1839,8 @@
                        //先查询有没有同终点缓存的记录
                        if (endLocFlag) {
                        if (endLocFlag)
                        {
                            var ktTask = TaskHelper.GetMesKtTask(end.S_CODE);
                            if (ktTask != null)
                            {
@@ -1763,7 +1849,7 @@
                            }
                        }
                        MesKtTask req = new MesKtTask()
                        {
@@ -1773,7 +1859,7 @@
                            CreateDate = DateTime.Now,
                            BUSI_TYPE = model.BUSI_TYPE,
                            TOOLS_TPYE = TOOLSTYPE,
                            task_no=model.task_no,
                            task_no = model.task_no,
                            Status = "N"
                        };
@@ -1794,6 +1880,12 @@
                            LogHelper.Info($"ZCSendTask空托出缓存失败", "Mes任务下发");
                            throw new Exception($"ZCSendTask空托出缓存失败");
                        }
                    }
                    else if (workFlow.FLOWCODE == "5")
                    {
                        //寻找货架区空托
                        start = LocationHelper.FindStartcolByHjArea(strrtList, workFlow.STARTAREA);
                        LogHelper.Info($"ZCSendTask出库任务钢丝空托一段任务起点信息" + JsonConvert.SerializeObject(start), "Mes任务下发");
                    }
@@ -1840,7 +1932,7 @@
                        var balanceConnectionList = LocationHelper.GetBalanceConnectionList(connectionList);
                        foreach (var item in balanceConnectionList)
                        {
                            if (item.loc.N_CURRENT_NUM < 2)
                            if (item.loc.N_CURRENT_NUM < 2 && item.loc.CONNEC_ROADWAY==start.N_ROADWAY)
                            {
                                connection = item.loc.S_CODE;
                                connectionArea = item.loc.S_AREA_Name;
@@ -2267,7 +2359,99 @@
        ////如果需要下发wcs立库,则需要寻找可用接驳位
        //if (workFlow.SENDWCS == "Y")
        //{
        //    //正式代码,调用接口寻找可用接驳位
        //    var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION);
        //    var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList);
        //    if (usableConnectionList != null && usableConnectionList.code == "0")
        //    {
        //        //根据接驳位任务数量获取均衡接驳位集合优先任务数少的接驳位
        //        var balanceConnectionList = LocationHelper.GetBalanceConnectionList(usableConnectionList.available);
        //        LogHelper.Info($"ZCSendTask入库任务下发寻找均衡接驳位" + JsonConvert.SerializeObject(balanceConnectionList), "Mes任务下发");
        //        foreach (var item in balanceConnectionList)
        //        {
        //            if (item.loc.N_CURRENT_NUM < 2)
        //            {
        //                connection = item.loc.S_CODE;
        //                connectionArea = item.loc.S_AREA_Name;
        //                LogHelper.Info($"ZCSendTask入库任务下发寻找到可用接驳位{connection}", "Mes任务下发");
        //                break;
        //            }
        //        }
        //    }
        //    else
        //    {
        //        LogHelper.Info($"ZCSendTask入库任务下发寻找接驳位失败", "Mes任务下发");
        //        throw new Exception($"ZCSendTask入库任务下发寻找接驳位失败");
        //    }
        //    if (connection == "")
        //    {
        //        LogHelper.Info($"ZCSendTask入库任务下发寻找接驳位失败", "Mes任务下发");
        //        throw new Exception($"ZCSendTask入库任务下发寻找接驳位失败");
        //    }
        //}
        //if (workFlow.FLOWCODE == "1")
        //{
        //    //满托入
        //   end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
        //}
        //else if (workFlow.FLOWCODE == "3")
        //{
        //    if (TOOLSTYPE == "35" || TOOLSTYPE == "75")
        //    {
        //        //空托入 优先入缓存区,没有入立库区
        //        //var ktHcq = Settings.EmptyPalletBufferArea;
        //        cntrCount = 0;
        //        //var endList1 = LocationHelper.GetAllLocList1(ktHcq);
        //        //end = LocationHelper.FindEndcolByLoc(endList1, ktHcq);
        //        //LogHelper.Info($"ZCSendTask入库任务寻找空托缓存区终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发");
        //        //if (end == null)
        //        //{
        //        LogHelper.Info($"ZCSendTask入库任务没找到空托缓存区终点,寻找立库区空货位", "Mes任务下发");
        //        end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
        //        //}
        //        //else
        //        //{
        //        //    connection = "";
        //        //}
        //    }
        //    else
        //    {
        //        end = LocationHelper.FindEndcolByLoc(endList, workFlow.ENDAREA);
        //    }
        //}
        //else if (workFlow.FLOWCODE == "2")
        //{
        //    //85纤维 95钢丝一段任务入三层货架
        //    if (TOOLSTYPE == "85" || TOOLSTYPE == "95")
        //    {
        //        end = LocationHelper.FindEndcolByLoc(endList, workFlow.ENDAREA);
        //        LogHelper.Info($"ZCSendTask入库任务85纤维 95钢丝一段任务入三层货架终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发");
        //    }
        //    else
        //    {
        //        end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
        //    }
        //}
        //else if (workFlow.FLOWCODE == "12")
        //{
        //    //空架子入
        //    end = LocationHelper.FindEndcolByLoc(endList, workFlow.ENDAREA);
        //    cntrCount = 0;
        //    //生成空架子虚拟号
        //    cntrCode = ContainerHelper.GenerateCntrNo();
        //}
        //else if (workFlow.FLOWCODE == "0")
        //{
        //    //钢丝入库
        //    end = LocationHelper.FindEndcolByLoc(endList, workFlow.ENDAREA);
        //}
        public class signalInfo