海波 张
昨天 3a56820d028e98ac3c4bd315aa76181d7d6720cd
api/MoboxController.cs
@@ -5,6 +5,7 @@
using HH.WCS.ZhongCeJinTan.util;
using HH.WCS.ZhongCeJinTan.wms;
using Newtonsoft.Json;
using System;
using System.Linq;
using System.Threading.Tasks;
using System.Web.Http;
@@ -22,41 +23,386 @@
        //[Route("CancelTask")]
        public SimpleResult CancelTask(MoboxTaskBase model) {
            var result=new SimpleResult();
             var task=TaskHelper.GetTask(model.TaskNo);
            if (task != null) {
                if (task.S_B_STATE.Trim() == "未执行") {
                    //未执行直接修改状态为取消
                    LogHelper.Info($"mobox取消agv任务{task.S_CODE}:", "取消");
                    TaskHelper.Fail(task);
                    TaskProcess.CacheBitCancelUpdate(task);
                    TaskHelper.opMesTask(task, 3);
                }
                else if(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();
            LogHelper.Info($"CancelTask取消:参数"+JsonConvert.SerializeObject(model), "Mobox取消");
            if (model==null)
            {
                result.resultCode = 1;
                result.resultMsg = "参数为null";
                LogHelper.Info($"CancelTask返回:" + JsonConvert.SerializeObject(result), "Mobox取消");
                return result;
            }
            if (string.IsNullOrEmpty(model.TaskNo))
            {
                result.resultCode = 1;
                result.resultMsg = "任务号为空";
                LogHelper.Info($"CancelTask返回:" + JsonConvert.SerializeObject(result), "Mobox取消");
                return result;
            }
                    if (qhflag != null)
                    {
                        LogHelper.Info($"mobox取消,该任务{task.S_CODE}已经取货完成,,不允许取消", "取消");
                        return result;
                    }
                    TaskHelper.opMesTask(task, 3);
                    //已推送但是没有完成或者取消,通知hosttoagv
                    TaskHelper.Fail(task);
                    NDCApi.CancelOrder(task.S_CODE.Trim());
                    TaskProcess.CacheBitCancelUpdate(task);
                }
                else {
            var wmsTask = TaskHelper.GetTaskByNoType(model.TaskNo, "agv");
            if (wmsTask != null) {
                if (wmsTask.S_TYPE == "取消" || wmsTask.S_TYPE == "完成")
                {
                    result.resultCode = 1;
                    result.resultMsg = "任务已结束";
                    result.resultMsg = $"{model.TaskNo},取消agv任务失败,任务状态{wmsTask.S_TYPE}";
                    LogHelper.Info($"CancelTask返回:" + JsonConvert.SerializeObject(result), "Mobox取消");
                    return result;
                }
                var wcsTask1 = TaskHelper.GetTaskByWorkNo(wmsTask.S_OP_CODE, "wcs");
                WmsTaskAction ac6 = TaskHelper.GetActionRecord(wmsTask.S_CODE, "6");
                TaskProcess.OperateStatus(wmsTask, 7);
                if (wmsTask.S_TYPE != "未执行") {
                    NDCApi.CancelOrder(wmsTask.S_CODE.Trim());
                    LogHelper.Info($"任务{wmsTask.S_CODE},取消通知小车", "Mobox取消");
                }
                if (ac6 == null)
                {
                    TaskHelper.Fail(wmsTask);
                    //入库或者回库任务取消删除托盘物料
                    if (wmsTask.S_TYPE.Contains("入库") || wmsTask.S_TYPE.Contains("回库") || LocationHelper.GetErroArea(wmsTask.S_END_AREA))
                    {
                        ContainerHelper.delCntr(wmsTask.S_CNTR_CODE);
                        ContainerHelper.delCntrItem(wmsTask.S_CNTR_CODE);
                        ContainerHelper.delCntrLoc(wmsTask.S_CNTR_CODE);
                    }
                    if (!LocationHelper.GetErroArea(wmsTask.S_END_AREA))
                    {
                        TaskHelper.opMesTask(wmsTask, 3);
                    }
                    if (wcsTask1 != null)
                    {
                        if (wcsTask1.S_B_STATE != "取消" && wcsTask1.S_B_STATE != "完成")
                        {
                            TaskHelper.Fail(wcsTask1);
                        }
                        TaskProcess.OperateStatus(wcsTask1, 7);
                    }
                }
                else
                {
                    //收到6强制完成
                    TaskHelper.End(wmsTask);
                }
                if (wcsTask1 != null)
                {
                    if (wmsTask.S_TYPE.Contains("出库"))
                    {
                        var ac1101 = TaskHelper.GetWcsSafety(wmsTask.S_CODE, "1101");
                        var ac1102 = TaskHelper.GetWcsSafety(wmsTask.S_CODE, "1102");
                        if ((ac1101 != null))
                        {
                            if (ac1102 == null)
                            {
                                //agv执行通知 wcs取消
                                WcsTask.WcsCallback(wmsTask, 7, wmsTask.S_EQ_NO.ToString());
                            }
                        }
                    }
                    else
                    {
                        var ac1103 = TaskHelper.GetWcsSafety(wmsTask.S_CODE, "1103");
                        var ac1104 = TaskHelper.GetWcsSafety(wmsTask.S_CODE, "1104");
                        if ((ac1103 != null))
                        {
                            if (ac1104 == null)
                            {
                                //agv执行通知 wcs取消
                                WcsTask.WcsCallback(wmsTask, 7, wmsTask.S_EQ_NO.ToString());
                            }
                        }
                    }
                }
                if (wmsTask.S_TYPE.Contains("出库"))
                {
                    //出库取消判断接驳位是否有货,有货需要解绑
                    var wmsWork = TaskHelper.GetWmsWork(wmsTask.S_OP_CODE);
                    if (wmsWork != null)
                    {
                        if (!string.IsNullOrEmpty(wmsWork.CONNECTION))
                        {
                            var agvTask = LocationHelper.GetConnectionTask(wmsWork.CONNECTION, "agv", wmsTask.T_CREATE);
                            LogHelper.Info($"取消任务{wmsTask.S_CODE},当前接驳位{wmsWork.CONNECTION},第一个agv任务信息" + JsonConvert.SerializeObject(agvTask), "Mobox取消");
                            if (agvTask != null)
                            {
                                WmsTaskAction qh = TaskHelper.GetActionRecord(agvTask.S_CODE, "4");
                                //已经取货完成
                                if (qh != null)
                                {
                                    if (WcsTask.WcsCvstate(wmsTask))
                                    {
                                        LogHelper.Info($"Wcs立库接驳位有货,解绑货位:{wmsTask.S_END_LOC}", "Mobox取消");
                                        ContainerHelper.delCntr(wmsTask.S_CNTR_CODE);
                                        ContainerHelper.delCntrItem(wmsTask.S_CNTR_CODE);
                                    }
                                }
                            }
                            else {
                                WmsTaskAction ac4 = TaskHelper.GetActionRecord(wmsTask.S_CODE, "4");
                                LogHelper.Info($"查询任务{wmsTask.S_CODE},是否取货完成:" + JsonConvert.SerializeObject(ac4), "Mobox取消");
                                if (ac4 != null)
                                {
                                    ContainerHelper.delCntr(wmsTask.S_CNTR_CODE);
                                    ContainerHelper.delCntrItem(wmsTask.S_CNTR_CODE);
                                    ContainerHelper.delCntrLoc(wmsTask.S_CNTR_CODE);
                                }
                            }
                        }
                    }
                }
                result.resultCode = 0;
                result.resultMsg = $"{model.TaskNo},agv任务取消成功";
            }
            else {
                result.resultCode = 1;
                result.resultMsg = "任务不存在";
                result.resultMsg = $"{model.TaskNo},agv任务不存在";
            }
            LogHelper.Info($"CancelTask返回:" + JsonConvert.SerializeObject(result), "Mobox取消");
            return result;
        }
        [HttpPost]
        //[Route("CancelWcsTask")]
        public SimpleResult CancelWcsTask(MoboxTaskBase model)
        {
            var result = new SimpleResult();
            LogHelper.Info($"CancelWcsTask取消:参数" + JsonConvert.SerializeObject(model), "Mobox取消");
            if (model == null)
            {
                result.resultCode = 1;
                result.resultMsg = "参数为null";
                LogHelper.Info($"CancelWcsTask返回:" + JsonConvert.SerializeObject(result), "Mobox取消");
                return result;
            }
            if (string.IsNullOrEmpty(model.TaskNo))
            {
                result.resultCode = 1;
                result.resultMsg = "任务号为空";
                LogHelper.Info($"CancelWcsTask返回:" + JsonConvert.SerializeObject(result), "Mobox取消");
                return result;
            }
            var transportTask = TaskHelper.GetTaskByNoType(model.TaskNo,"wcs");
            if (transportTask != null)
            {
                if (transportTask.S_B_STATE == "取消"|| transportTask.S_B_STATE == "完成")
                {
                    result.resultCode = 1;
                    result.resultMsg = $"{model.TaskNo},通知Wcs取消任务失败,任务状态{transportTask.S_B_STATE}";
                    LogHelper.Info($"CancelWcsTask返回:" + JsonConvert.SerializeObject(result), "Mobox取消");
                    return result;
                }
                if (transportTask.S_B_STATE == "未执行")
                {
                    TaskHelper.Fail(transportTask);
                    TaskProcess.OperateStatus(transportTask, 7);
                    result.resultCode = 0;
                    result.resultMsg = $"{model.TaskNo},wcs任务取消成功";
                    LogHelper.Info($"CancelWcsTask返回:" + JsonConvert.SerializeObject(result), "Mobox取消");
                    return result;
                }
                if (WcsTask.WcsCancellTask(transportTask))
                {
                    TaskHelper.Fail(transportTask);
                    TaskProcess.OperateStatus(transportTask, 7);
                    if (transportTask.S_TYPE.Contains("出库"))
                    {
                        var agvTask1 = TaskHelper.GetTaskByWorkNo(transportTask.S_OP_CODE, "agv");
                        if (agvTask1 != null)
                        {
                            TaskHelper.Fail(agvTask1);
                            NDCApi.CancelOrder(agvTask1.S_CODE.Trim());
                            LogHelper.Info($"CancelWcsTask取消{model.TaskNo},解锁", "解锁");
                            TaskProcess.CacheBitCancelUpdate(agvTask1);
                        }
                    }
                    else
                    {
                        ContainerHelper.delCntr(transportTask.S_CNTR_CODE);
                        ContainerHelper.delCntrItem(transportTask.S_CNTR_CODE);
                    }
                    result.resultCode = 0;
                    result.resultMsg = $"{model.TaskNo},wcs任务取消成功";
                    LogHelper.Info($"CancelWcsTask返回:" + JsonConvert.SerializeObject(result), "Mobox取消");
                    return result;
                }
                else {
                    LogHelper.Info($"通知Wcs取消任务失败", "Wcs任务执行通知");
                    result.resultCode = 1;
                    result.resultMsg = $"{model.TaskNo},通知Wcs取消任务失败";
                }
            }
            else
            {
                result.resultCode = 1;
                result.resultMsg = $"{model.TaskNo},wcs任务不存在";
            }
            LogHelper.Info($"CancelWcsTask返回:" + JsonConvert.SerializeObject(result), "Mobox取消");
            return result;
        }
        internal static Result cancelTask1(MoboxTaskBase model)
        {
            var result = new Result();
            LogHelper.Info("cancelTask1取消任务信息:" + JsonConvert.SerializeObject(model), "取消");
            if (model == null)
            {
                result.errMsg = "参数为null";
                result.errCode = 1;
                result.success = false;
                return result;
            }
            try
            {
                var task = TaskHelper.GetTaskByWorkNo(model.TaskNo, "agv");
                var wcsTask = TaskHelper.GetTaskByWorkNo(model.TaskNo, "wcs");
                if (task != null)
                {
                    LogHelper.Info($"cancelTask1取消agv任务{task.S_CODE}:", "取消");
                    if (task.S_B_STATE.Trim() == "未执行")
                    {
                        //未执行直接修改状态为取消
                        TaskHelper.opMesTask(task, 3);
                        TaskHelper.Fail(task);
                        TaskProcess.CacheBitCancelUpdate(task);
                        if (task.S_TYPE.Contains("入库") || 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();
                        if (qhflag != null)
                        {
                            LogHelper.Info($"该任务{task.S_CODE}已经取货完成", "取消");
                            result.errCode = 1;
                            result.errMsg = "任务已经取货完成,不允许取消";
                            result.success = false;
                            return result;
                        }
                        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;
                    }
                    else
                    {
                        result.errCode = 1;
                        result.errMsg = "任务已经结束";
                        result.success = false;
                    }
                }
                else
                {
                    result.errCode = 1;
                    result.errMsg = $"{model.TaskNo}任务不存在";
                    result.success = false;
                    return result;
                }
                if (wcsTask != null)
                {
                    LogHelper.Info($"cancelTask1取消Wcs任务{wcsTask.S_CODE}", "取消");
                    if (wcsTask.S_B_STATE.Trim() == "未执行")
                    {
                        //未执行直接修改状态为取消
                        if (wcsTask.S_TYPE.Contains("入库") || wcsTask.S_TYPE.Contains("回库"))
                        {
                            ContainerHelper.delCntr(wcsTask.S_CNTR_CODE);
                            ContainerHelper.delCntrItem(wcsTask.S_CNTR_CODE);
                        }
                        TaskHelper.Fail(wcsTask);
                        TaskProcess.OperateStatus(wcsTask, 7);
                        result.errCode = 0;
                        result.errMsg = "取消成功";
                        result.success = true;
                        return result;
                    }
                    else if (wcsTask.S_B_STATE.Trim() != "取消" && wcsTask.S_B_STATE.Trim() != "失败" && wcsTask.S_B_STATE.Trim() != "完成")
                    {
                        var db = new SqlHelper<object>().GetInstance();
                        var qhflag = db.Queryable<WmsTaskAction>().Where(a => a.S_TASK_CODE == wcsTask.S_CODE && a.S_ACTION == "5").First();
                        LogHelper.Info($"该任务{wcsTask.S_CODE}动作信息" + JsonConvert.SerializeObject(qhflag), "取消");
                        if (qhflag != null)
                        {
                            LogHelper.Info($"该任务{wcsTask.S_CODE}已经取货完成", "取消");
                            result.errCode = 1;
                            result.errMsg = "任务已经取货完成,不允许取消";
                            result.success = false;
                            return result;
                        }
                        if (wcsTask.S_TYPE.Contains("入库") || wcsTask.S_TYPE.Contains("回库"))
                        {
                            ContainerHelper.delCntr(wcsTask.S_CNTR_CODE);
                            ContainerHelper.delCntrItem(wcsTask.S_CNTR_CODE);
                            ContainerHelper.delCntrLoc(wcsTask.S_CNTR_CODE);
                        }
                        WcsTask.WcsCancellTask(wcsTask);
                        TaskHelper.Fail(wcsTask);
                        TaskProcess.OperateStatus(wcsTask, 7);
                        result.errCode = 0;
                        result.errMsg = "取消成功";
                        result.success = true;
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Info("cancelTask1取消任务异常:" + ex.Message, "取消");
                result.errCode = 1;
                result.errMsg = "取消任务异常";
                return result;
            }
            return result;
        }
@@ -85,12 +431,11 @@
                        WmsTaskAction ac4 = TaskHelper.GetActionRecord(task.S_CODE, "4");
                        if (ac4 != null)
                        {
                            LogHelper.Info("CompleteTask agv任务已经取货完成,任务强制完成处理", "强制完成");
                            TaskHelper.UpdateStatus(task, "卸货完成");
                            LocationHelper.UnLockLoc(task.S_END_LOC);
                            //LocationHelper.UnLockLoc(task.S_END_LOC);
                            TaskProcess.OperateStatus(task, 6);
                            //如果是二段任务则下发立库任务
@@ -104,7 +449,6 @@
                        }
                        else
                        {
                            LogHelper.Info("CompleteTask agv任务没有取货完成,任务取消处理", "强制完成");
                            var cancle = new cancleTaskParme();
                            cancle.task_no = task.S_CODE;
@@ -115,9 +459,9 @@
                    if (task.S_SCHEDULE_TYPE.Contains("wcs")) {
                        LogHelper.Info("CompleteTask wcs任务强制完成处理", "强制完成");
                        LocationHelper.UnLockLoc(task.S_START_LOC);
                        //LocationHelper.UnLockLoc(task.S_START_LOC);
                        TaskProcess.OperateStatus(task, 4);
                        LocationHelper.UnLockLoc(task.S_END_LOC);
                        //LocationHelper.UnLockLoc(task.S_END_LOC);
                        TaskProcess.OperateStatus(task, 6);
                        TaskHelper.End(task);
                        LocationHelper.CreateUpAndDown(task);