海波 张
1 天以前 61ece19b5b178d1b23bed16c733b01af1185f838
process/TaskProcess.cs
@@ -560,7 +560,7 @@
                        }
                        //接驳位两个agv任务,a任务取货完成 推送b任务
                        var agvTask = LocationHelper.GetConnectionTask(wmsWork.CONNECTION,"agv");
                        var agvTask = LocationHelper.GetConnectionTask(wmsWork.CONNECTION,"agv", mst.T_CREATE);
                        LogHelper.Info($"推送任务{mst.S_CODE},当前接驳位{wmsWork.CONNECTION},第一个agv任务信息"+JsonConvert.SerializeObject(agvTask), "NDC");
                        //if (agvTask==null)
@@ -990,105 +990,182 @@
                return result;
            }
            if (string.IsNullOrEmpty(model.task_no))
            {
                result.errMsg = "task_no为null";
                result.errCode = 1;
                result.success = false;
                return result;
            }
            try
            {
                var task = TaskHelper.GetTaskByWorkNo(model.task_no, "agv");
                var wcsTask = TaskHelper.GetTaskByWorkNo(model.task_no, "wcs");
                if (task != null)
                var work = TaskHelper.GetWmsWork(model.task_no);
                if (work==null)
                {
                    LogHelper.Info($"cancelTask1取消agv任务{task.S_CODE}:", "取消");
                    if (task.S_B_STATE.Trim() == "未执行")
                    result.errCode = 1;
                    result.errMsg = $"{model.task_no}作业不存在,不允许取消";
                    result.success = false;
                    return result;
                }
                //作业没有接驳位,一段任务取消
                if (string.IsNullOrEmpty(work.CONNECTION)) {
                    if (task != null)
                    {
                        //未执行直接修改状态为取消
                        TaskHelper.opMesTask(task, 3);
                        TaskHelper.Fail(task);
                        TaskProcess.CacheBitCancelUpdate(task);
                        if (task.S_TYPE.Contains("入库") || task.S_TYPE.Contains("回库"))
                        if (task.S_TYPE.Contains("出库"))
                        {
                            ContainerHelper.delCntr(task.S_CNTR_CODE);
                            ContainerHelper.delCntrItem(task.S_CNTR_CODE);
                        }
                        result.errCode = 0;
                        result.errMsg = "取消成功";
                        result.success = true;
                    }
                    else if (task.S_B_STATE.Trim() != "取消" && task.S_B_STATE.Trim() != "失败" && task.S_B_STATE.Trim() != "完成")
                    {
                        var db = new SqlHelper<object>().GetInstance();
                        var qhflag = db.Queryable<WmsTaskAction>().Where(a => a.S_TASK_CODE == task.S_CODE && a.S_ACTION == "4").First();
                        else {
                            if (task.S_B_STATE.Trim() == "未执行")
                            {
                                //未执行直接修改状态为取消
                                TaskHelper.opMesTask(task, 3);
                                TaskHelper.Fail(task);
                                TaskProcess.CacheBitCancelUpdate(task);
                                ContainerHelper.delCntr(task.S_CNTR_CODE);
                                ContainerHelper.delCntrItem(task.S_CNTR_CODE);
                                result.errCode = 0;
                                result.errMsg = "取消成功";
                                result.success = true;
                            }
                            else if (task.S_B_STATE.Trim() != "取消" && task.S_B_STATE.Trim() != "失败" && task.S_B_STATE.Trim() != "完成")
                            {
                                var db = new SqlHelper<object>().GetInstance();
                                var qhflag = db.Queryable<WmsTaskAction>().Where(a => a.S_TASK_CODE == task.S_CODE && a.S_ACTION == "4").First();
                        if (qhflag != null)
                        {
                            LogHelper.Info($"该任务{task.S_CODE}已经取货完成", "取消");
                            result.errCode = 1;
                            result.errMsg = "任务已经取货完成,不允许取消";
                            result.success = false;
                            return result;
                                if (qhflag != null)
                                {
                                    LogHelper.Info($"该任务{task.S_CODE}已经取货完成", "取消");
                                    result.errCode = 1;
                                    result.errMsg = "任务已经取货完成,不允许取消";
                                    result.success = false;
                                    return result;
                                }
                                  ContainerHelper.delCntr(task.S_CNTR_CODE);
                                  ContainerHelper.delCntrItem(task.S_CNTR_CODE);
                                  ContainerHelper.delCntrLoc(task.S_CNTR_CODE);
                                TaskHelper.opMesTask(task, 3);
                                //已推送但是没有完成或者取消,通知hosttoagv
                                TaskHelper.Fail(task);
                                NDCApi.CancelOrder(task.S_CODE.Trim());
                                TaskProcess.CacheBitCancelUpdate(task);
                                result.errCode = 0;
                                result.errMsg = "取消成功";
                                result.success = true;
                            }
                            else
                            {
                                result.errCode = 1;
                                result.errMsg = "任务已经结束";
                                result.success = false;
                            }
                        }
                        if (task.S_TYPE.Contains("入库") || task.S_TYPE.Contains("回库"))
                        {
                            ContainerHelper.delCntr(task.S_CNTR_CODE);
                            ContainerHelper.delCntrItem(task.S_CNTR_CODE);
                            ContainerHelper.delCntrLoc(task.S_CNTR_CODE);
                        }
                        TaskHelper.opMesTask(task, 3);
                        //已推送但是没有完成或者取消,通知hosttoagv
                        TaskHelper.Fail(task);
                        NDCApi.CancelOrder(task.S_CODE.Trim());
                        TaskProcess.CacheBitCancelUpdate(task);
                        result.errCode = 0;
                        result.errMsg = "取消成功";
                        result.success = true;
                        LogHelper.Info($"cancelTask1取消agv任务{task.S_CODE}:", "取消");
                    }
                    else
                    {
                        result.errCode = 1;
                        result.errMsg = "任务已经结束";
                        result.errMsg = $"{model.task_no},Agv任务不存在";
                        result.success = false;
                    }
                }
                else
                }else
                {
                    result.errCode = 1;
                    result.errMsg = $"{model.task_no}任务不存在";
                    result.success = false;
                }
                    //二段任务取消
                if (wcsTask != null)
                {
                    LogHelper.Info($"cancelTask1取消Wcs任务{wcsTask.S_CODE}", "取消");
                    if (wcsTask.S_B_STATE.Trim() == "未执行")
                    if (task.S_TYPE.Contains("出库"))
                    {
                        //未执行直接修改状态为取消
                        if (wcsTask.S_TYPE.Contains("入库") || wcsTask.S_TYPE.Contains("回库"))
                        if (wcsTask != null)
                        {
                            ContainerHelper.delCntr(wcsTask.S_CNTR_CODE);
                            ContainerHelper.delCntrItem(wcsTask.S_CNTR_CODE);
                            LogHelper.Info($"cancelTask1取消Wcs任务{wcsTask.S_CODE}", "取消");
                            if (wcsTask.S_B_STATE.Trim() == "未执行" && task.S_B_STATE.Trim() == "未执行")
                            {
                                //未执行直接修改状态为取消
                                TaskHelper.opMesTask(task, 3);
                                TaskHelper.Fail(task);
                                TaskProcess.OperateStatus(task,7);
                                TaskHelper.Fail(wcsTask);
                                TaskProcess.OperateStatus(wcsTask, 7);
                                result.errCode = 0;
                                result.errMsg = "取消成功";
                                result.success = true;
                                return result;
                            }
                            else
                            {
                                LogHelper.Info($"该任务{wcsTask.S_CODE}已经推送", "取消");
                                result.errCode = 1;
                                result.errMsg = "任务已经推送,不允许取消";
                                result.success = false;
                                return result;
                            }
                        }
                        TaskHelper.Fail(wcsTask);
                        TaskProcess.OperateStatus(wcsTask, 7);
                        result.errCode = 0;
                        result.errMsg = "取消成功";
                        result.success = true;
                        return result;
                    }
                    else
                    else
                    {
                            LogHelper.Info($"该任务{wcsTask.S_CODE}已经推送", "取消");
                        if (task.S_B_STATE.Trim() == "未执行")
                        {
                            //未执行直接修改状态为取消
                            TaskHelper.opMesTask(task, 3);
                            TaskHelper.Fail(task);
                            TaskProcess.CacheBitCancelUpdate(task);
                            ContainerHelper.delCntr(task.S_CNTR_CODE);
                            ContainerHelper.delCntrItem(task.S_CNTR_CODE);
                            result.errCode = 0;
                            result.errMsg = "取消成功";
                            result.success = true;
                        }
                        else if (task.S_B_STATE.Trim() != "取消" && task.S_B_STATE.Trim() != "失败" && task.S_B_STATE.Trim() != "完成")
                        {
                            var db = new SqlHelper<object>().GetInstance();
                            var qhflag = db.Queryable<WmsTaskAction>().Where(a => a.S_TASK_CODE == task.S_CODE && a.S_ACTION == "4").First();
                            if (qhflag != null)
                            {
                                LogHelper.Info($"该任务{task.S_CODE}已经取货完成", "取消");
                                result.errCode = 1;
                                result.errMsg = "任务已经取货完成,不允许取消";
                                result.success = false;
                                return result;
                            }
                            ContainerHelper.delCntr(task.S_CNTR_CODE);
                            ContainerHelper.delCntrItem(task.S_CNTR_CODE);
                            ContainerHelper.delCntrLoc(task.S_CNTR_CODE);
                            TaskHelper.opMesTask(task, 3);
                            //已推送但是没有完成或者取消,通知hosttoagv
                            TaskHelper.Fail(task);
                            NDCApi.CancelOrder(task.S_CODE.Trim());
                            TaskProcess.CacheBitCancelUpdate(task);
                            result.errCode = 0;
                            result.errMsg = "取消成功";
                            result.success = true;
                        }
                        else
                        {
                            result.errCode = 1;
                            result.errMsg = "任务已经推送,不允许取消";
                            result.errMsg = "任务已经结束";
                            result.success = false;
                            return result;
                    }
                        }
                    }
                }
            }
            catch (Exception ex)
@@ -1726,6 +1803,12 @@
                    throw new Exception("缺少参数task_no");
                }
                var work = TaskHelper.GetWmsWork(model.task_no);
                if (work != null)
                {
                    throw new Exception($"任务{model.task_no}已经创建作业,请勿重复申请");
                }
                //var wmsWork = TaskHelper.GetTaskByCntrCode(model.TOOLS_NO);
@@ -1843,112 +1926,112 @@
                    {
                        //正式代码,调用接口寻找可用接驳位
                        //var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION);
                        //var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList);
                        //if (usableConnectionList != null && usableConnectionList.code == "0")
                        //{
                        //    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)
                        //                {
                        //                    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
                        //{
                        //    LogHelper.Info($"ZCSendTask入库任务下发寻找接驳位接口失败", "Mes任务下发");
                        //    throw new Exception($"ZCSendTask入库任务下发寻找接驳位接口失败");
                        //}
                        if (workFlow.FLOWCODE == "1" || workFlow.FLOWCODE == "2" || workFlow.FLOWCODE == "5" || workFlow.FLOWCODE == "8" || workFlow.FLOWCODE == "11")
                        var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION);
                        var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList);
                        if (usableConnectionList != null && usableConnectionList.code == "0")
                        {
                            //满托入
                            var balanceConnectionList = LocationHelper.GetConnectionListByst(usableConnectionList.available);
                            LogHelper.Info($"ZCSendTask入库任务下发寻找可用接驳位" + JsonConvert.SerializeObject(balanceConnectionList), "Mes任务下发");
                            if (TOOLSTYPE == "25" || TOOLSTYPE == "35")
                            if (workFlow.FLOWCODE == "1" || workFlow.FLOWCODE == "2" || workFlow.FLOWCODE == "5" || workFlow.FLOWCODE == "8" || workFlow.FLOWCODE == "11")
                            {
                                LogHelper.Info($"ZCSendTask入库任务工装是二合一库,需要物料均衡", "Mes任务下发");
                                end = LocationHelper.FindBalanceEndcolByLocListItem(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no, model.PROD_NO);
                                //满托入
                                if (TOOLSTYPE == "25" || TOOLSTYPE == "35")
                                {
                                    LogHelper.Info($"ZCSendTask入库任务工装是二合一库,需要物料均衡", "Mes任务下发");
                                    balanceLocList = LocationHelper.RoadWayBalance1ByItem(balanceLocList, model.PROD_NO);
                                }
                                else {
                                    balanceLocList = LocationHelper.FindBalanceEndLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY);
                                }
                            }
                            else {
                                end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no);
                            else if (workFlow.FLOWCODE == "3" || workFlow.FLOWCODE == "10")
                            {
                                //空托入立库区
                                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)
                                        {
                                            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入库任务{model.task_no}下发失败,终点库区{workFlow.ENDAREA},没找到终点巷道或接驳位不可用", "Mes任务下发");
                                   throw new Exception($"{model.task_no}下发失败终点库区{workFlow.ENDAREA},没找到终点,巷道或接驳位不可用");
                            }
                        }
                        else if (workFlow.FLOWCODE == "3" || workFlow.FLOWCODE == "10")
                        else
                        {
                            //空托入立库区
                            cntrCount = 0;
                            LogHelper.Info($"ZCSendTask入库任务,寻找立库区空货位", "Mes任务下发");
                            end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no);
                        }
                        if (end == null)
                        {
                            LogHelper.Info($"ZCSendTask入库任务{model.task_no}下发失败,终点库区{workFlow.ENDAREA},没找到终点巷道或接驳位不可用", "Mes任务下发");
                            throw new Exception($"{model.task_no}下发失败终点库区{workFlow.ENDAREA},没找到终点,巷道或接驳位不可用");
                        }
                        var jb = LocationHelper.GetConnectionByEnd(workFlow.CONNECTION, end.N_ROADWAY);
                        if (jb==null)
                        {
                            LogHelper.Info($"ZCSendTask入库任务下发库区{workFlow.CONNECTION},巷道{end.N_ROADWAY},没找到接驳位", "Mes任务下发");
                            throw new Exception($"ZCSendTask入库任务下发库区{workFlow.CONNECTION},巷道{end.N_ROADWAY},没找到接驳位");
                            LogHelper.Info($"ZCSendTask入库任务下发寻找接驳位接口失败", "Mes任务下发");
                            throw new Exception($"ZCSendTask入库任务下发寻找接驳位接口失败");
                        }
                        connection = jb.S_CODE;
                        connectionArea = jb.S_AREA_Name;
                        //if (workFlow.FLOWCODE == "1" || workFlow.FLOWCODE == "2" || workFlow.FLOWCODE == "5" || workFlow.FLOWCODE == "8" || workFlow.FLOWCODE == "11")
                        //{
                        //    //满托入
                        //    if (TOOLSTYPE == "25" || TOOLSTYPE == "35")
                        //    {
                        //        LogHelper.Info($"ZCSendTask入库任务工装是二合一库,需要物料均衡", "Mes任务下发");
                        //        end = LocationHelper.FindBalanceEndcolByLocListItem(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no, model.PROD_NO);
                        //    }
                        //    else {
                        //        end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no);
                        //    }
                        //}
                        //else if (workFlow.FLOWCODE == "3" || workFlow.FLOWCODE == "10")
                        //{
                        //    //空托入立库区
                        //    cntrCount = 0;
                        //    LogHelper.Info($"ZCSendTask入库任务,寻找立库区空货位", "Mes任务下发");
                        //    end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no);
                        //}
                        //if (end == null)
                        //{
                        //    LogHelper.Info($"ZCSendTask入库任务{model.task_no}下发失败,终点库区{workFlow.ENDAREA},没找到终点巷道或接驳位不可用", "Mes任务下发");
                        //    throw new Exception($"{model.task_no}下发失败终点库区{workFlow.ENDAREA},没找到终点,巷道或接驳位不可用");
                        //}
                        //var jb = LocationHelper.GetConnectionByEnd(workFlow.CONNECTION, end.N_ROADWAY);
                        //if (jb==null)
                        //{
                        //    LogHelper.Info($"ZCSendTask入库任务下发库区{workFlow.CONNECTION},巷道{end.N_ROADWAY},没找到接驳位", "Mes任务下发");
                        //    throw new Exception($"ZCSendTask入库任务下发库区{workFlow.CONNECTION},巷道{end.N_ROADWAY},没找到接驳位");
                        //}
                        //connection = jb.S_CODE;
                        //connectionArea = jb.S_AREA_Name;
                    }