海波 张
2025-06-06 987b9256e007825401cef4fe18f250566eedf3d5
process/TaskProcess.cs
@@ -59,7 +59,7 @@
            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}");
                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());
            }
@@ -114,7 +114,7 @@
                    LogHelper.Info($"没找到任务{no},交互请求失败", "安全交互");
                }
            }
            else if (state == 1105)
            else if (state == 1003)
            {
                var workFlow = TaskHelper.selectWorkFlowByType(mst.N_TYPE.ToString(), mst.TOOLSTYPE);
@@ -138,11 +138,14 @@
                //开关关门申请
                DeviceProcess.Door(mst, forkliftNo, state);
            }
            else if (state == 1002) {
            else if (state == 1004) {
                LogHelper.Info($"等待交互,任务号={mst.S_CODE}", "安全交互");
                var wcsCode = mst.S_CODE.Replace(@"_1", "_2");
                LogHelper.Info($"等待交互,查询校验任务号={wcsCode}", "安全交互");
                //等待rfid校验
                var rfidFlag = TaskHelper.GetRfid(mst.S_CODE);
                var rfidFlag = TaskHelper.GetRfid(wcsCode);
                LogHelper.Info($"等待交互,任务号={mst.S_CODE},RFID校验信息"+JsonConvert.SerializeObject(rfidFlag), "安全交互");
                if (rfidFlag!=null)
@@ -224,27 +227,32 @@
                        //查找给定终点
                        var end = LocationHelper.GetLoc(kt.Location_To);
                        //LogHelper.Info($"当前任务{task.S_CODE}改道终点信息" + JsonConvert.SerializeObject(end), "改道安全交互");
                        //if (end == null || end.S_LOCK_STATE != "无")
                        //{
                        //    LogHelper.Info($"当前任务{task.S_CODE}改道终点失败,终点:{kt.Location_To},没找到或有锁", "改道安全交互");
                        //}
                        TaskHelper.Fail(wcsTask);
                        TaskProcess.OperateStatus(wcsTask, 7);
                        LocationHelper.LockLoc(end.S_CODE, "入库锁", 1);
                        db.BeginTran();
                        //改一段任务终点
                        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();
                        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为1", "改道安全交互");
                        NDCApi.ChangeOrderParam(task.S_CODE, 2, site);
                        NDCApi.ChangeOrderParam(task.S_CODE, 6, "1");
                        return;
                        if (end.S_LOCK_STATE=="无" && end.N_CURRENT_NUM==0)
                        {
                            //LogHelper.Info($"当前任务{task.S_CODE}改道终点信息" + JsonConvert.SerializeObject(end), "改道安全交互");
                            //if (end == null || end.S_LOCK_STATE != "无")
                            //{
                            //    LogHelper.Info($"当前任务{task.S_CODE}改道终点失败,终点:{kt.Location_To},没找到或有锁", "改道安全交互");
                            //}
                            TaskHelper.Fail(wcsTask);
                            TaskProcess.OperateStatus(wcsTask, 7);
                            LocationHelper.LockLoc(end.S_CODE, "入库锁", 1);
                            db.BeginTran();
                            //改一段任务终点
                            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();
                            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为1,4为0", "改道安全交互");
                            NDCApi.ChangeOrderParam(task.S_CODE, 2, site);
                            NDCApi.ChangeOrderParam(task.S_CODE, 6, "1");
                            NDCApi.ChangeOrderParam(task.S_CODE, 4, "0");
                            return;
                        }
                    }
                }
@@ -255,16 +263,25 @@
                    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($"判断巷道可用,当前库区{wcsTask.S_END_AREA}当前巷道{loc1.N_ROADWAY}可用,不需要改道", "改道安全交互");
                        LogHelper.Info($"当前任务{task.S_CODE}判断巷道可用,当前库区{wcsTask.S_END_AREA}当前巷道{loc1.N_ROADWAY}可用,不需要改道", "改道安全交互");
                    }
                    else
                    {
                        LogHelper.Info($"当前巷道不可用,需要改道", "改道安全交互");
                        LogHelper.Info($"当前任务{task.S_CODE}当前巷道不可用,需要改道", "改道安全交互");
                        var endLoc = LocationHelper.GetLocOne(wcsTask.S_END_LOC);
                        List<Location> endList;
                        if (!string.IsNullOrEmpty(workFlow.ZONECODE))
                        {
                            endList = LocationHelper.GetZoneLoc(workFlow.ZONECODE);
                        }
                        else
                        {
                            endList = LocationHelper.GetAllLocList1(workFlow.ENDAREA);
                        }
                        var endList = LocationHelper.GetAllLocList1(workFlow.ENDAREA);
                        var end = LocationHelper.FindEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                        LogHelper.Info($"当前巷道不可用,需要改道,新终点信息" + JsonConvert.SerializeObject(end), "改道安全交互");
                        var end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                        LogHelper.Info($"当前任务{task.S_CODE},当前巷道不可用,需要改道,新终点信息" + JsonConvert.SerializeObject(end), "改道安全交互");
                        if (end == null)
                        {
                            LogHelper.Info($"当前巷道不可用,终点库区{workFlow.ENDAREA},没找到终点", "改道安全交互");
@@ -289,12 +306,13 @@
                        foreach (var item in usableConnectionList.available)
                        {
                            var con = LocationHelper.GetLoc(item);
                            if (con.S_CODE.Contains(task.S_END_LOC) && con.C_ENABLE=="Y")
                            if (con.S_CODE.Contains(task.S_END_LOC))
                            {
                                flag = false;
                                LogHelper.Info($"当前任务{task.S_CODE}接驳位{con.S_CODE}可用,不需要改道,直接修改参数6为1", "改道安全交互");
                                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;
                            }
                        }
@@ -346,11 +364,11 @@
                            db.CommitTran();
                            
                            var site = LocationHelper.GetAgvSiteZc(loc.S_CODE);
                            LogHelper.Info($"任务{task.S_CODE}改道成功,改参数2为{site},参数6为1", "改道安全交互");
                            LogHelper.Info($"任务{task.S_CODE}改道成功,改参数2为{site},参数6为1,4为1024", "改道安全交互");
                            NDCApi.ChangeOrderParam(task.S_CODE, 2, site);
                            NDCApi.ChangeOrderParam(task.S_CODE, 6, "1");
                            NDCApi.ChangeOrderParam(task.S_CODE, 4, "1024");
                        //} else if (workFlow.FLOWNAME.Contains("出库")) {
                        //    var endLoc = LocationHelper.GetLocOne(task.S_START_LOC);
                        //    endLoc.N_LOCK_STATE = 3;
@@ -432,6 +450,23 @@
                LogHelper.Info($"推送任务{mst.S_CODE}", "NDC");
                if (mst.S_TYPE.Contains("出库"))
                {
                    var wcsTask = TaskHelper.GetTaskByWork("wcs", mst.S_OP_CODE);
                    if (wcsTask == null) {
                        LogHelper.Info($"推送任务{mst.S_CODE},没找到作业:{mst.S_OP_CODE}对应的出库任务", "NDC");
                        return false;
                    }
                    if (wcsTask.S_B_STATE=="未执行")
                    {
                        LogHelper.Info($"推送任务{mst.S_CODE},对应的Wcs出库任务未执行,暂不推送", "NDC");
                        return false;
                    }
                }
                start = LocationHelper.GetAgvSiteZc(mst.S_START_LOC);
                end = LocationHelper.GetAgvSiteZc(mst.S_END_LOC);
@@ -440,6 +475,29 @@
                var ndcParme = new List<param>();
                ndcParme.Add(new param() { name = "From", value = start.ToString() });
                ndcParme.Add(new param() { name = "To", value = end.ToString() });
                ndcParme.Add(new param() { name = "FUNC", value = "0" });
                var work = TaskHelper.GetWmsWork(mst.S_OP_CODE);
                if (work==null)
                {
                    LogHelper.Info($"推送任务{mst.S_CODE},没找到作业:{mst.S_OP_CODE}", "NDC");
                    return false;
                }
                if (string.IsNullOrEmpty(work.CONNECTION))
                {
                    ndcParme.Add(new param() { name = "DATA", value = "0" });
                }
                else {
                    ndcParme.Add(new param() { name = "DATA", value = "768" });
                }
                ndcParme.Add(new param() { name = "Ctype", value = "0" });
                var res =  NDCApi.AddOrderNew(1, mst.N_PRIORITY, mst.S_CODE, ndcParme);
@@ -761,6 +819,10 @@
                    }
                    db.CommitTran();
                    LogHelper.Info("绑定解绑", "结束");
                    result.errMsg = "解绑完成";
                    result.errCode = 0;
                    result.success = true;
                    return result;
                    }
                }
            catch (Exception e)
@@ -769,6 +831,7 @@
                LogHelper.Info("物料绑定解绑异常:" + e.Message, "物料绑定解绑");
                result.errMsg = "物料绑定解绑异常";
                result.errCode = 1;
                result.success = false;
                return result;
            }
            return result;
@@ -1085,7 +1148,7 @@
                    result.success = false;
                    return result;
                }
                var endTask = TaskHelper.GetTaskByStartLoc(zd);
                var endTask = TaskHelper.GetTaskByEndLoc(zd);
                if (endTask != null)
                {
                    result.errMsg = "终点有执行中任务";
@@ -1179,7 +1242,36 @@
            /// </summary>
            internal static Result addMesTask(ZcInWorkAreaParme model) { 
            var result = new Result();
            //保存到mes任务记录
            MesTask mesRes = new MesTask()
            {
                task_no = model.task_no,
                Task_type = model.Task_type,
                TurnCardNum = model.TurnCardNum,
                PROD_NO = model.PROD_NO,
                PROD_TECH = model.PROD_TECH,
                PROD_SPEC = model.PROD_SPEC,
                PROD_BOM = model.PROD_BOM,
                PROD_Feature = model.PROD_Feature,
                TOOLS_NO = model.TOOLS_NO,
                ST_AMOUNT = model.ST_AMOUNT,
                CURRENT_AMOUNT = model.CURRENT_AMOUNT,
                Location_From = model.Location_From,
                Location_To = model.Location_To,
                PRODUCE_TIME = model.PRODUCE_TIME,
                SHELF_LIFE_TIME = model.SHELF_LIFE_TIME,
                EXPIRED_TIME = model.EXPIRED_TIME,
                SHELF_REP = model.SHELF_REP,
                EXPIRED_REP = model.EXPIRED_REP,
                CHECK_CODE = model.CHECK_CODE,
                CHECK_INFO = model.CHECK_INFO,
                Priority = model.Priority,
                Data_status = model.Data_status,
                CreateDate = DateTime.Now,
                standardWeight = model.standardWeight,
                BUSI_TYPE = model.BUSI_TYPE,
                TOOLS_TPYE = model.TOOLS_TPYE,
            };
            try
            {
@@ -1286,36 +1378,21 @@
                    //如果需要下发wcs立库,则需要寻找可用接驳位
                    if (workFlow.SENDWCS == "Y") {
                        //测试默认取一个接驳位
                        //var connectionList = LocationHelper.GetAllLocList1(workFlow.CONNECTION);
                        //foreach (var item in connectionList)
                        //{
                        //    if (item.S_LOCK_STATE == "无" && item.N_CURRENT_NUM < 2)
                        //    {
                        //        connection = item.S_CODE;
                        //        LogHelper.Info($"ZCSendTask入库任务下发寻找到可用接驳位{connection}", "Mes任务下发");
                        //    }
                        //}
                        //if (connection=="")
                        //{
                        //    LogHelper.Info($"ZCSendTask任务下发寻找接驳位失败", "Mes任务下发");
                        //    throw new Exception($"ZCSendTask任务下发寻找接驳位失败");
                        //}
                        //正式代码,调用接口寻找可用接驳位
                        var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION);
                        var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList);
                        if (usableConnectionList != null && usableConnectionList.code == "0")
                        {
                            foreach (var item in usableConnectionList.available)
                            //根据接驳位任务数量获取均衡接驳位集合优先任务数少的接驳位
                            var balanceConnectionList =  LocationHelper.GetBalanceConnectionList(usableConnectionList.available);
                            foreach (var item in balanceConnectionList)
                            {
                                var con = LocationHelper.GetLoc(item);
                                if (con.N_CURRENT_NUM < 2 && con.C_ENABLE == "Y")
                                if (item.loc.N_CURRENT_NUM<2)
                                {
                                    connection = con.S_CODE;
                                    connectionArea = con.S_AREA_Name;
                                    connection = item.loc.S_CODE;
                                    connectionArea = item.loc.S_AREA_Name;
                                    LogHelper.Info($"ZCSendTask入库任务下发寻找到可用接驳位{connection}", "Mes任务下发");
                                    break;
                                }
                            }
                        }
@@ -1333,15 +1410,22 @@
                    }
                    //查找终点
                    var endList = LocationHelper.GetAllLocList1(workFlow.ENDAREA);
                    List<Location> endList ;
                    Location end = null;
                    if (!string.IsNullOrEmpty(workFlow.ZONECODE))
                    {
                        endList = LocationHelper.GetZoneLoc(workFlow.ZONECODE);
                    }
                    else {
                        endList = LocationHelper.GetAllLocList1(workFlow.ENDAREA);
                    }
                    if (workFlow.FLOWCODE == "1")
                    {
                        //满托入
                        end = LocationHelper.FindEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                        end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                    }
                    else if (workFlow.FLOWCODE == "3")
                    {
@@ -1354,7 +1438,7 @@
                        //if (end == null)
                        //{
                            LogHelper.Info($"ZCSendTask入库任务没找到空托缓存区终点,寻找立库区空货位", "Mes任务下发");
                            end = LocationHelper.FindEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                            end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                        //}
                        //else
                        //{
@@ -1372,7 +1456,7 @@
                        }
                        else
                        {
                            end = LocationHelper.FindEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                            end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                        }
                    }
                    else if (workFlow.FLOWCODE == "12")
@@ -1385,10 +1469,10 @@
                    }
                    LogHelper.Info($"ZCSendTask任务下发终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发");
                    LogHelper.Info($"ZCSendTask入库任务下发终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发");
                    if (end == null) {
                        LogHelper.Info($"ZCSendTask任务下发失败,终点库区{workFlow.ENDAREA},没找到终点", "Mes任务下发");
                        LogHelper.Info($"ZCSendTask入库任务下发失败,终点库区{workFlow.ENDAREA},没找到终点", "Mes任务下发");
                        throw new Exception($"终点库区{workFlow.ENDAREA},没找到终点");
                    }
@@ -1502,6 +1586,10 @@
                        result.errMsg = "入库作业创建成功";
                        result.errCode = 0;
                        result.success = true;
                        mesRes.errCode = result.errCode;
                        mesRes.errMsg = result.errMsg;
                        //保存mes记录
                        CreatMesRes(mesRes);
                        return result;
                    }
                    else {
@@ -1527,16 +1615,57 @@
                    LogHelper.Info($"ZCSendTask出库任务下发终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发");
                    if (end == null || end.S_LOCK_STATE != "无")
                    if (end == null)
                    {
                        LogHelper.Info($"ZCSendTask出库任务下发失败,终点:{model.Location_To},没找到或有锁", "Mes任务下发");
                        throw new Exception($"终点:{model.Location_To},没找到或有锁");
                        LogHelper.Info($"ZCSendTask出库任务下发失败,终点:{model.Location_To},没找到", "Mes任务下发");
                        throw new Exception($"终点:{model.Location_To},没找到");
                    }
                    var unlimitedLocation = TaskHelper.GetMesKtLoc();
                    //标记终点货位是否可以无限制下任务
                    var endLocFlag = true;
                    foreach (var item in unlimitedLocation)
                    {
                        //出库终点货位在配置里 可以无限制下任务
                        if (item.Loc.Contains(model.Location_To))
                        {
                            endLocFlag = false;
                            break;
                        }
                    }
                    if (endLocFlag)
                    {
                        var endTask = TaskHelper.GetTaskByEndLoc(model.Location_To);
                        if (endTask != null)
                        {
                            LogHelper.Info($"ZCSendTask出库任务下发失败,终点:{model.Location_To}有任务执行中,任务号:{endTask.S_CODE}", "Mes任务下发");
                            throw new Exception($"终点:{model.Location_To}有任务执行中,任务号:{endTask.S_CODE}");
                        }
                    }
                    //查找起点
                    var strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA);
                    List<Location> strrtList;
                    Location start = null;
                    if (!string.IsNullOrEmpty(workFlow.ZONECODE))
                    {
                        strrtList = LocationHelper.GetZoneLoc(workFlow.ZONECODE);
                    }
                    else
                    {
                        strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA);
                    }
                    if (workFlow.FLOWCODE == "9")
                    {
                        if (TOOLSTYPE == "85" || TOOLSTYPE == "95")
@@ -1547,21 +1676,59 @@
                        else {
                            //根据制品编号寻找立库区对应物料托盘
                            start = LocationHelper.FindStartcolByLoclistAndItem(strrtList, model.PROD_NO, workFlow.STARTAREA, workFlow.ROADWAY);
                            if (start==null)
                            {
                                strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA);
                                var itemFlag = LocationHelper.FindStartcolByLoclistAndItemFlag(strrtList, model.PROD_NO, workFlow.STARTAREA);
                                LogHelper.Info($"ZCSendTask满托出库任务没找到起点,校验是否有库存但是设备报警{itemFlag}", "Mes任务下发");
                                if (itemFlag)
                                {
                                    result.errMsg = "满托出库作业有库存但设备报警";
                                    result.errCode = 2001;
                                    result.success = true;
                                    mesRes.errCode = result.errCode;
                                    mesRes.errMsg = result.errMsg;
                                    //保存mes记录
                                    CreatMesRes(mesRes);
                                    return result;
                                }
                            }
                        }
                    }
                    else if (workFlow.FLOWCODE == "7") {
                        //寻找立库区空托
                        start = LocationHelper.FindStartcolByLoclistAndcntr(strrtList, workFlow.STARTAREA);
                    }
                        //start = LocationHelper.FindStartcolByLoclistAndcntr(strrtList, workFlow.STARTAREA);
                        //if (start == null)
                        //{
                        //    strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA);
                        //    var itemFlag = LocationHelper.FindStartcolByLoclistAndcntrFlag(strrtList, workFlow.STARTAREA);
                        //    LogHelper.Info($"ZCSendTask空托出库任务没找到起点,校验是否有库存但是设备报警{itemFlag}", "Mes任务下发");
                        //    if (itemFlag)
                        //    {
                        //        result.errMsg = "空托出库作业有库存但设备报警";
                        //        result.errCode = 2001;
                        //        result.success = true;
                        //        return result;
                        //    }
                        //}
                    LogHelper.Info($"ZCSendTask出库任务下发起点信息" + JsonConvert.SerializeObject(start), "Mes任务下发");
                        //空托出先缓存到空托表
                    if (workFlow.FLOWCODE == "7" && start == null)
                    {
                        //空托出没找到起点,先缓存到空托表
                        //先查询有没有同终点缓存的记录
                        if (endLocFlag) {
                            var ktTask = TaskHelper.GetMesKtTask(end.S_CODE);
                            if (ktTask != null)
                            {
                                LogHelper.Info($"ZCSendTask空托出缓存失败,终点{end.S_CODE}已有缓存", "Mes任务下发");
                                throw new Exception($"ZCSendTask空托出缓存失败,终点{end.S_CODE}已有缓存");
                            }
                        }
                        MesKtTask req = new MesKtTask()
                        {
@@ -1570,7 +1737,8 @@
                            Priority = model.Priority,
                            CreateDate = DateTime.Now,
                            BUSI_TYPE = model.BUSI_TYPE,
                            TOOLS_TPYE = model.TOOLS_TPYE,
                            TOOLS_TPYE = TOOLSTYPE,
                            task_no=model.task_no,
                            Status = "N"
                        };
@@ -1580,6 +1748,10 @@
                            result.errMsg = "空托出库缓存成功";
                            result.errCode = 0;
                            result.success = true;
                            mesRes.errCode = result.errCode;
                            mesRes.errMsg = result.errMsg;
                            //保存mes记录
                            CreatMesRes(mesRes);
                            return result;
                        }
                        else
@@ -1587,17 +1759,17 @@
                            LogHelper.Info($"ZCSendTask空托出缓存失败", "Mes任务下发");
                            throw new Exception($"ZCSendTask空托出缓存失败");
                        }
                    }
                    else {
                        LogHelper.Info($"ZCSendTask出库任务下发起点信息" + JsonConvert.SerializeObject(start), "Mes任务下发");
                        if (start == null)
                        {
                            LogHelper.Info($"ZCSendTask出库任务下发失败,起点库区{workFlow.STARTAREA},没找到起点", "Mes任务下发");
                            throw new Exception($"起点库区{workFlow.STARTAREA},没找到起点");
                        }
                    }
                    
@@ -1606,44 +1778,40 @@
                    if (workFlow.SENDWCS == "Y")
                    {
                        //测试默认取一个接驳位
                        //var connectionList = LocationHelper.GetAllLocList1(workFlow.CONNECTION);
                        //foreach (var item in connectionList)
                        //{
                        //    if (item.S_LOCK_STATE == "无" && item.N_CURRENT_NUM < 2)
                        //    {
                        //        connection = item.S_CODE;
                        //        LogHelper.Info($"ZCSendTask入库任务下发寻找到可用接驳位{connection}", "Mes任务下发");
                        //    }
                        //}
                        //if (connection == "")
                        //{
                        //    LogHelper.Info($"ZCSendTask任务下发寻找接驳位失败", "Mes任务下发");
                        //    throw new Exception($"ZCSendTask任务下发寻找接驳位失败");
                        //}
                        //正式代码,调用接口寻找可用接驳位
                        var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION);
                        var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList);
                        if (usableConnectionList != null && usableConnectionList.code == "0")
                        //var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList);
                        //if (usableConnectionList != null && usableConnectionList.code == "0")
                        //{
                        //    foreach (var item in usableConnectionList.available)
                        //    {
                        //        var con = LocationHelper.GetLoc(item);
                        //        if (con.C_ENABLE == "Y" && con.N_CURRENT_NUM < 2)
                        //        {
                        //            connection = con.S_CODE;
                        //            connectionArea = con.S_AREA_Name;
                        //            LogHelper.Info($"ZCSendTask出库任务下发寻找到可用接驳位{connection}", "Mes任务下发");
                        //        }
                        //    }
                        //}
                        //else
                        //{
                        //    LogHelper.Info($"ZCSendTask出库任务下发寻找接驳位失败", "Mes任务下发");
                        //    throw new Exception($"ZCSendTask出库任务下发寻找接驳位失败");
                        //}
                        //根据接驳位任务数量获取均衡接驳位集合优先任务数少的接驳位
                        var balanceConnectionList = LocationHelper.GetBalanceConnectionList(connectionList);
                        foreach (var item in balanceConnectionList)
                        {
                            foreach (var item in usableConnectionList.available)
                            if (item.loc.N_CURRENT_NUM < 2)
                            {
                                var con = LocationHelper.GetLoc(item);
                                if (con.C_ENABLE == "Y" && con.N_CURRENT_NUM < 2)
                                {
                                    connection = con.S_CODE;
                                    connectionArea = con.S_AREA_Name;
                                    LogHelper.Info($"ZCSendTask出库任务下发寻找到可用接驳位{connection}", "Mes任务下发");
                                }
                                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 == "")
@@ -1699,6 +1867,10 @@
                        result.errMsg = "出库作业创建成功";
                        result.errCode = 0;
                        result.success = true;
                        mesRes.errCode = result.errCode;
                        mesRes.errMsg = result.errMsg;
                        //保存mes记录
                        CreatMesRes(mesRes);
                        return result;
                    }
                    else {
@@ -1713,37 +1885,6 @@
                }
                //参数校验完成保存到mes任务记录
                //MesTask req = new MesTask()
                //{
                //    task_no = model.task_no,
                //    Task_type = model.Task_type,
                //    TurnCardNum = model.TurnCardNum,
                //    PROD_NO = model.PROD_NO,
                //    PROD_TECH = model.PROD_TECH,
                //    PROD_SPEC = model.PROD_SPEC,
                //    PROD_BOM = model.PROD_BOM,
                //    PROD_Feature = model.PROD_Feature,
                //    TOOLS_NO = model.TOOLS_NO,
                //    ST_AMOUNT = model.ST_AMOUNT,
                //    CURRENT_AMOUNT = model.CURRENT_AMOUNT,
                //    Location_From = model.Location_From,
                //    Location_To = model.Location_To,
                //    PRODUCE_TIME = model.PRODUCE_TIME,
                //    SHELF_LIFE_TIME = model.SHELF_LIFE_TIME,
                //    EXPIRED_TIME = model.EXPIRED_TIME,
                //    SHELF_REP = model.SHELF_REP,
                //    EXPIRED_REP = model.EXPIRED_REP,
                //    CHECK_CODE = model.CHECK_CODE,
                //    CHECK_INFO = model.CHECK_INFO,
                //    Priority = model.Priority,
                //    Data_status = model.Data_status,
                //    CreateDate = DateTime.Now,
                //    standardWeight = model.standardWeight,
                //    BUSI_TYPE = model.BUSI_TYPE,
                //    TOOLS_TPYE = model.TOOLS_TPYE,
                //};
            }
            catch (Exception ex)
@@ -1752,6 +1893,10 @@
                result.errMsg = "ZCSendTask任务下发异常"+ex.Message;
                result.errCode = 1;
                result.success = false;
                mesRes.errCode = result.errCode;
                mesRes.errMsg = result.errMsg;
                //保存mes记录
                CreatMesRes(mesRes);
                return result;
            }
        }
@@ -1778,7 +1923,12 @@
        internal static bool CreatMesRes(MesTask model)
        {
            var newDb = new SqlHelper<object>().GetInstance();
            return newDb.Insertable(model).ExecuteCommand()>0;
        }
@@ -2025,13 +2175,56 @@
        }
        internal static void inPri(WMSTask mst)
        {
            LogHelper.Info($"任务{mst.S_CODE}进入inpri", "入库优先级");
            var inprilist = TaskHelper.GetInPri();
            var db = new SqlHelper<object>().GetInstance();
            foreach (var item in inprilist)
            {
                LogHelper.Info("入库优先级记录信息"+JsonConvert.SerializeObject(item), "入库优先级");
                if (item.Type=="0" && mst.S_TYPE.Contains("空托出"))
                {
                    if (mst.S_END_LOC.Contains(item.OutEndLoc))
                    {
                        var task = db.Queryable<WMSTask>().Where(a => a.S_B_STATE.Trim() == "已推送" && a.S_SCHEDULE_TYPE.Contains("agv") && !a.S_TYPE.Contains("空托") && (a.S_TYPE.Contains("入库")|| a.S_TYPE.Contains("回库")) && a.S_START_LOC.Contains(item.InStartLoc)).First();
                        LogHelper.Info($"查找起点{item.InStartLoc}满托入库任务信息:" + JsonConvert.SerializeObject(task), "入库优先级");
                        if (task != null)
                        {
                            NDCApi.ChangeOrderPri(task.S_CODE, item.Pri);
                        }
                    }
                }
                if (item.Type == "1"  && !mst.S_TYPE.Contains("空托") && mst.S_TYPE.Contains("出库"))
                {
                    if (mst.S_END_LOC.Contains(item.OutEndLoc))
                    {
                        var task = db.Queryable<WMSTask>().Where(a => a.S_B_STATE.Trim() == "已推送" && a.S_SCHEDULE_TYPE.Contains("agv") && a.S_TYPE.Contains("空托入库") && a.S_START_LOC.Contains(item.InStartLoc)).First();
                        LogHelper.Info($"查找起点{item.InStartLoc}空托入库任务信息:" + JsonConvert.SerializeObject(task), "入库优先级");
                        if (task != null)
                        {
                            NDCApi.ChangeOrderPri(task.S_CODE, item.Pri);
                        }
                    }
                }
            }
            LogHelper.Info($"任务{mst.S_CODE},结束inpri", "入库优先级");
        }
        public class signalInfo