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