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();
|
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();
|
|
|
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<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.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<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;
|
}
|
|
|
|
}
|
}
|