using HH.WCS.Mobox3.ZhongCeJinTan.dispatch; using HH.WCS.ZhongCeJinTan.device; using HH.WCS.ZhongCeJinTan.dispatch; using HH.WCS.ZhongCeJinTan.process; 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; using static HH.WCS.ZhongCeJinTan.api.ApiModel; namespace HH.WCS.ZhongCeJinTan.api { /// /// mobox调用 /// //[RoutePrefix("mobox")] public class MoboxController : System.Web.Http.ApiController { [HttpPost] //[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().GetInstance(); var qhflag = db.Queryable().Where(a => a.S_TASK_CODE == task.S_CODE && a.S_ACTION == "4").First(); 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 { result.resultCode = 1; result.resultMsg = "任务已结束"; } } else { result.resultCode = 1; result.resultMsg = "任务不存在"; } return result; } internal static Result cancelTask1(cancleTaskParme 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.task_no, "agv"); var wcsTask = TaskHelper.GetTaskByWorkNo(model.task_no, "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().GetInstance(); var qhflag = db.Queryable().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.task_no}任务不存在"; result.success = false; } 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().GetInstance(); var qhflag = db.Queryable().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; } //作业任务强制完成 [HttpPost] public SimpleResult CompleteTask(MoboxTaskBase model) { LogHelper.Info("CompleteTask 参数:" + JsonConvert.SerializeObject(model), "强制完成"); var result = new SimpleResult(); var task = TaskHelper.GetTask(model.TaskNo); if (task != null) { if (task.S_B_STATE.Trim() == "未执行") { result.resultMsg = "任务未执行,不允许强制完成!"; } else if (task.S_B_STATE.Trim() != "完成"&& task.S_B_STATE.Trim() != "取消") { if (task.S_SCHEDULE_TYPE.Contains("agv")) { //看小车有没有4取货完成 WmsTaskAction ac4 = TaskHelper.GetActionRecord(task.S_CODE, "4"); if (ac4 != null) { LogHelper.Info("CompleteTask agv任务已经取货完成,任务强制完成处理", "强制完成"); TaskHelper.UpdateStatus(task, "卸货完成"); LocationHelper.UnLockLoc(task.S_END_LOC); TaskProcess.OperateStatus(task, 6); //如果是二段任务则下发立库任务 var wcsTask = TaskHelper.GetTaskByState("未执行", "wcs", task.S_OP_CODE, "入库"); if (wcsTask != null) { LocationHelper.LockLoc(wcsTask.S_START_LOC, "出库锁", 2); WcsTask.WcsTaskEntity(wcsTask); } TaskHelper.End(task); } else { LogHelper.Info("CompleteTask agv任务没有取货完成,任务取消处理", "强制完成"); var cancle = new cancleTaskParme(); cancle.task_no = task.S_CODE; TaskProcess.cancelTask1(cancle); } } if (task.S_SCHEDULE_TYPE.Contains("wcs")) { LogHelper.Info("CompleteTask wcs任务强制完成处理", "强制完成"); LocationHelper.UnLockLoc(task.S_START_LOC); TaskProcess.OperateStatus(task, 4); LocationHelper.UnLockLoc(task.S_END_LOC); TaskProcess.OperateStatus(task, 6); TaskHelper.End(task); LocationHelper.CreateUpAndDown(task); } } else { result.resultCode = 1; result.resultMsg = "任务已结束"; } } else { result.resultCode = 1; result.resultMsg = "任务不存在"; } LogHelper.Info("CompleteTask 返回:" + JsonConvert.SerializeObject(model), "强制完成"); return result; } } }