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
|
{
|
/// <summary>
|
/// mobox调用
|
/// </summary>
|
//[RoutePrefix("mobox")]
|
public class MoboxController : System.Web.Http.ApiController
|
{
|
[HttpPost]
|
//[Route("CancelTask")]
|
public SimpleResult CancelTask(MoboxTaskBase model) {
|
var result=new SimpleResult();
|
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;
|
}
|
|
|
var wmsTask = TaskHelper.GetTaskByNoType(model.TaskNo, "agv");
|
if (wmsTask != null) {
|
if (wmsTask.S_TYPE == "取消" || wmsTask.S_TYPE == "完成")
|
{
|
result.resultCode = 1;
|
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 = $"{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());
|
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;
|
}
|
|
|
//作业任务强制完成
|
[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;
|
}
|
|
|
|
}
|
}
|