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;
}
}
}