using HH.WCS.JingyuNongfu.core; using HH.WCS.JingyuNongfu.device; using HH.WCS.JingyuNongfu.dispatch; using HH.WCS.JingyuNongfu.process; using HH.WCS.JingyuNongfu.util; using HH.WCS.JingyuNongfu.wms; using Newtonsoft.Json; using System.Collections.Generic; using System.Linq; using System.Web.Http; using static HH.WCS.JingyuNongfu.api.ApiModel; namespace HH.WCS.JingyuNongfu.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() == "未执行") { //未执行直接修改状态为取消 TaskHelper.UpdateStatus(model.TaskNo, "取消"); //var wmsTask = TaskHelper.GetTask(model.TaskNo); TaskProcess.CacheBitCancelUpdate(task); } else if (task.S_B_STATE.Trim() == "已推送") { NDCHelper.Cancel(task.S_TASK_NO.Trim()); result.resultMsg = "任务取消已经发送给小车"; #region 翻斗机复位信号 现在统一接收7来处理 //瓶坯翻斗机强制取消发送复位信号 //if (task.S_TYPE.Contains("翻斗机即产满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机即产空筐下线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存空筐下线(瓶胚)")) //{ // var info = Settings.deviceInfos.Where(a => a.location.Contains(task.S_END_LOC)).FirstOrDefault(); // if (info != null) // { // LogHelper.Info($"取消接口 翻斗机发送复位信号", "发送信号"); // PlcHelper.SendHex(info.address, "3F00100D0A"); // } //} #endregion } else { result.resultCode = 1; result.resultMsg = "执行中任务不允许取消"; } } else { result.resultCode = 1; result.resultMsg = "任务不存在"; } return result; } /// /// 强制完成 /// /// /// [HttpPost] //[Route("CompleteTask")] public SimpleResult CompleteTask(MoboxTaskBase model) { var result = new SimpleResult(); var task = TaskHelper.GetTask(model.TaskNo); if (task != null) { if (task.S_B_STATE.Trim() == "未执行" || task.S_B_STATE.Trim() == "已推送" || task.S_B_STATE.Trim() == "完成" || task.S_B_STATE.Trim() == "强制完成" || task.S_B_STATE.Trim() == "失败") { result.resultMsg = "任务未执行或者已完成,不允许强制完成!"; } #region 强制完成流程,现在统一接收7来处理(未取货完成取消订单,取货完成订单强制完成) //else if (task.S_B_STATE.Trim() != "未执行" && task.S_B_STATE.Trim() != "待推送" && task.S_B_STATE.Trim() != "取消") //else if (task.S_B_STATE.Trim() != "未执行" && task.S_B_STATE.Trim() != "待推送" && task.S_B_STATE.Trim() != "取货失败" && task.S_B_STATE.Trim() != "完成") //{ // if (task.S_B_STATE.Trim() == "开始取货" || task.S_B_STATE.Trim() == "执行中") // { // //已推送但是没有完成或者取消,通知hosttoagv // TaskHelper.UpdateStatus(model.TaskNo.Trim(), "失败"); // NDCHelper.Cancel(task.S_TASK_NO.Trim()); // result.resultMsg = "任务取消已经发送给小车"; // //起点解绑 删除托盘 // TaskProcess.CacheBitUpdate(task, true); // TaskProcess.CacheBitCancelUpdate(task); // var tpid = task.S_CNTRS.Split(','); // foreach (var item in tpid) // { // ContainerHelper.delCntr(item); // } // //瓶坯翻斗机强制取消发送复位信号 // if (task.S_TYPE.Contains("翻斗机即产满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机即产空筐下线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存空筐下线(瓶胚)")) // { // var info = Settings.deviceInfos.Where(a => a.location.Contains(task.S_END_LOC)).FirstOrDefault(); // if (info != null) // { // LogHelper.Info($"强制完成 接口翻斗机发送复位信号", "发送信号"); // PlcHelper.SendHex(info.address, "3F00100D0A"); // } // } // } // //取货完成货位直接加到终点,任务状态改为强制完成 // else if (task.S_B_STATE.Trim() == "取货完成" || task.S_B_STATE.Trim() == "开始卸货") // { // TaskHelper.UpdateStatus(model.TaskNo.Trim(), "强制完成"); // TaskProcess.CacheBitUpdate(task, false); // //告诉小车取消任务 // NDCHelper.Cancel(task.S_TASK_NO.Trim()); // result.resultMsg = "任务强制完成已经发送给小车"; // //瓶坯翻斗机强制取消发送复位信号 // if (task.S_TYPE.Contains("翻斗机即产满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机即产空筐下线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存空筐下线(瓶胚)")) // { // var info = Settings.deviceInfos.Where(a => a.location.Contains(task.S_END_LOC)).FirstOrDefault(); // if (info != null) // { // LogHelper.Info($"强制完成接口 翻斗机发送复位信号", "发送信号"); // PlcHelper.SendHex(info.address, "3F00100D0A"); // } // } // } // else // { // result.resultCode = 1; // result.resultMsg = "任务未执行,不允许强制完成!"; // } //} #endregion else { NDCHelper.Cancel(task.S_TASK_NO.Trim()); result.resultMsg = "任务强制完成已经发送给小车"; //result.resultCode = 1; //result.resultMsg = "任务已结束"; } } else { result.resultCode = 1; result.resultMsg = "任务不存在"; } return result; } [HttpPost] public SimpleResult CreatTask(MoboxCreatTask model) { var db = new SqlHelper().GetInstance(); SimpleResult result = new SimpleResult(); LogHelper.Info($"CreatTask接收数据:{JsonConvert.SerializeObject(model)}"); if (model.Location != null && model.Area != null) { var startloc = LocationHelper.GetLocListAnybycode(model.Location).FirstOrDefault(); if (startloc.S_LOCK_STATE != "无") { result.resultCode = 1; result.resultMsg = $"起点货位有锁,不生成任务"; return result; } string tray = $"{ContainerHelper.GenerateCntrNo()}"; var container = new Container { S_CNTR_CODE = tray, S_CNTR_STATE = "" }; if (db.Insertable(container).ExecuteCommand() > 0) { var list = LocationHelper.GetLocListAny(model.Area).ToList(); Location endloc = ProcessHelperPP.FindEndcolByLocList(list); if (endloc != null) { string type=""; if (endloc.S_AREA_CODE== "LYP") { type = "留样品下线"; } else if(endloc.S_AREA_CODE == "ZX") { type = "纸箱下线"; } if (!string.IsNullOrEmpty(type)) { TaskProcess.CreateTransport(model.Location, endloc.S_LOC_CODE, type, new List { tray }, 1, 1, 1, 80); } else { result.resultCode = 1; result.resultMsg = $"库区编码错误,无法确认任务类型 库区编码:{endloc.S_AREA_CODE}"; } } } else { result.resultCode = 1; result.resultMsg = "托盘创建失败"; } } else { result.resultCode = 1; result.resultMsg = "起点终点位空,不允许生成任务"; } return result; } /// /// 解绑库区 /// /// [HttpPost] public ReturnResult UntieArea(UntieArea model) { LogHelper.Info("UntieArea Request:" + JsonConvert.SerializeObject(model), "BindCntr"); return ApiHelper.UntieArea(model); } /// /// 绑定库区 /// /// /// [HttpPost] public ReturnResult BindArea(BindArea model) { LogHelper.Info("BindArea Request:" + JsonConvert.SerializeObject(model), "BindCntr"); return ApiHelper.BindArea(model); } } }