海波 张
2025-06-25 83a7b2db0150d30576461055707367e8189ebc6e
process/TaskProcess.cs
@@ -141,7 +141,17 @@
            else if (state == 1004) {
                LogHelper.Info($"等待交互,任务号={mst.S_CODE}", "安全交互");
                var wcsCode = mst.S_CODE.Replace(@"_1", "_2");
                var wcsCode = "";
                if (mst.S_TYPE.Contains("入库")|| mst.S_TYPE.Contains("回库"))
                {
                    wcsCode = mst.S_CODE.Replace(@"_1", "_2");
                }
                if (mst.S_TYPE.Contains("出库"))
                {
                    wcsCode = mst.S_CODE.Replace(@"_2", "_1");
                }
                LogHelper.Info($"等待交互,查询校验任务号={wcsCode}", "安全交互");
                //等待rfid校验
@@ -152,7 +162,16 @@
                {
                    if (rfidFlag.S_RESULT.Contains("成功"))
                    {
                        LogHelper.Info($"任务号={mst.S_CODE},等待交管成功,修改参数", "安全交互");
                        LogHelper.Info($"任务号={mst.S_CODE},等待交管成功,修改参数6为1", "安全交互");
                        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", "改道安全交互");
                        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");
                    }
                }
@@ -246,9 +265,9 @@
                            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", "改道安全交互");
                            LogHelper.Info($"任务{task.S_CODE}改道成功,改参数2为{site},参数6为2,4为0", "改道安全交互");
                            NDCApi.ChangeOrderParam(task.S_CODE, 2, site);
                            NDCApi.ChangeOrderParam(task.S_CODE, 6, "1");
                            NDCApi.ChangeOrderParam(task.S_CODE, 6, "2");
                            NDCApi.ChangeOrderParam(task.S_CODE, 4, "0");
                            return;
                        }
@@ -263,16 +282,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.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                        LogHelper.Info($"当前巷道不可用,需要改道,新终点信息" + JsonConvert.SerializeObject(end), "改道安全交互");
                        LogHelper.Info($"当前任务{task.S_CODE},当前巷道不可用,需要改道,新终点信息" + JsonConvert.SerializeObject(end), "改道安全交互");
                        if (end == null)
                        {
                            LogHelper.Info($"当前巷道不可用,终点库区{workFlow.ENDAREA},没找到终点", "改道安全交互");
@@ -355,9 +383,9 @@
                            db.CommitTran();
                            
                            var site = LocationHelper.GetAgvSiteZc(loc.S_CODE);
                            LogHelper.Info($"任务{task.S_CODE}改道成功,改参数2为{site},参数6为1,4为1024", "改道安全交互");
                            LogHelper.Info($"任务{task.S_CODE}改道成功,改参数2为{site},参数6为2,4为1024", "改道安全交互");
                            NDCApi.ChangeOrderParam(task.S_CODE, 2, site);
                            NDCApi.ChangeOrderParam(task.S_CODE, 6, "1");
                            NDCApi.ChangeOrderParam(task.S_CODE, 6, "2");
                            NDCApi.ChangeOrderParam(task.S_CODE, 4, "1024");
                        //} else if (workFlow.FLOWNAME.Contains("出库")) {
@@ -441,6 +469,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);
@@ -456,6 +501,7 @@
                if (work==null)
                {
                    LogHelper.Info($"推送任务{mst.S_CODE},没找到作业:{mst.S_OP_CODE}", "NDC");
                    return false;
                }
                if (string.IsNullOrEmpty(work.CONNECTION))
@@ -463,7 +509,13 @@
                    ndcParme.Add(new param() { name = "DATA", value = "0" });
                }
                else {
                    ndcParme.Add(new param() { name = "DATA", value = "768" });
                    if (work.S_TYPE.Contains("入库") || work.S_TYPE.Contains("回库"))
                    {
                        ndcParme.Add(new param() { name = "DATA", value = "768" });
                    }
                    else {
                        ndcParme.Add(new param() { name = "DATA", value = "0" });
                    }
                }
              
@@ -792,6 +844,10 @@
                    }
                    db.CommitTran();
                    LogHelper.Info("绑定解绑", "结束");
                    result.errMsg = "解绑完成";
                    result.errCode = 0;
                    result.success = true;
                    return result;
                    }
                }
            catch (Exception e)
@@ -800,6 +856,7 @@
                LogHelper.Info("物料绑定解绑异常:" + e.Message, "物料绑定解绑");
                result.errMsg = "物料绑定解绑异常";
                result.errCode = 1;
                result.success = false;
                return result;
            }
            return result;
@@ -1353,6 +1410,8 @@
                        {
                            //根据接驳位任务数量获取均衡接驳位集合优先任务数少的接驳位
                            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)
@@ -1550,6 +1609,14 @@
                    //创建作业
                    if (WMSHelper.CreateWmsWork(operation))
                    {
                        if (connection != "")
                        {
                            LocationHelper.LockLoc(operation.S_START_LOC, "出库锁", 2);
                            LocationHelper.LockLoc(operation.S_END_LOC, "入库锁", 1);
                            LocationHelper.LockLoc(operation.CONNECTION, "其他锁", 3);
                        }
                        LogHelper.Info($"ZCSendTask入库作业创建成功{operation.S_CODE}", "Mes任务下发");
                        result.errMsg = "入库作业创建成功";
                        result.errCode = 0;
@@ -1831,6 +1898,14 @@
                    //创建作业
                    if (WMSHelper.CreateWmsWork(operation))
                    {
                        if (connection!="")
                        {
                            LocationHelper.LockLoc(operation.S_START_LOC, "出库锁", 2);
                            LocationHelper.LockLoc(operation.S_END_LOC, "入库锁", 1);
                            LocationHelper.LockLoc(operation.CONNECTION, "入库锁", 1);
                        }
                        LogHelper.Info($"ZCSendTask出库作业创建成功{operation.S_CODE}", "Mes任务下发");
                        result.errMsg = "出库作业创建成功";
                        result.errCode = 0;
@@ -2143,13 +2218,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