#region << 版 本 注 释 >> /*---------------------------------------------------------------- * 命名空间:WIDESEAWCS_TaskInfoService * 创建者:胡童庆 * 创建时间:2024/8/2 16:13:36 * 版本:V1.0.0 * 描述: * * ---------------------------------------------------------------- * 修改人: * 修改时间: * 版本:V1.0.1 * 修改说明: * *----------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using Autofac.Core; using AutoMapper; using Magicodes.ExporterAndImporter.Core; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using NetTaste; using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using SqlSugar; using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Linq.Expressions; using System.Net.NetworkInformation; using System.Reflection; using System.Reflection.Metadata; using System.Security.Policy; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; using WIDESEA_Comm.Http; using WIDESEA_Common.Log; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Enums; using WIDESEAWCS_Core.Utilities; using WIDESEAWCS_DTO.Enum; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_QuartzJob.Repository; using WIDESEAWCS_QuartzJob.Service; using static Microsoft.IO.RecyclableMemoryStreamManager; namespace WIDESEAWCS_TaskInfoService { public class TaskService : ServiceBase, ITaskService { private readonly IRouterService _routerService; private readonly IRouterRepository _routerRepository; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository; private readonly ITask_HtyService _task_HtyService; private readonly IMapper _mapper; private Dictionary _taskOrderBy = new() { {nameof(Dt_Task.Grade),OrderByType.Asc }, {nameof(Dt_Task.CreateDate),OrderByType.Asc}, }; public Dictionary TaskOrderBy { get { return _taskOrderBy; } set { _taskOrderBy = value; } } public List TaskInboundTypes => typeof(TaskInboundTypeEnum).GetEnumIndexList(); public List TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList(); public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ITask_HtyService task_HtyService, IRouterRepository routerRepository) : base(BaseDal) { _routerService = routerService; _taskExecuteDetailService = taskExecuteDetailService; _taskExecuteDetailRepository = taskExecuteDetailRepository; _task_HtyService = task_HtyService; _mapper = mapper; _routerRepository = routerRepository; } /// /// 接收任务信息 /// /// WMS任务对象集合 /// 返回处理结果 public ExpoReverse TaskInstruction(ExpoTaskDTO expoTask) { ExpoReverse content = new ExpoReverse(); try { foreach (var item in expoTask.data) { if (item.type == 1) //入库 { Dt_Task dt_Task = new Dt_Task(); dt_Task.TaskNum = item.taskNo; dt_Task.PalletCode = item.containerNo; //暂无 dt_Task.Roadway = "RGV101"; dt_Task.TaskType = (int)TaskInboundTypeEnum.Inbound; dt_Task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp; //取货 dt_Task.RGVCurrentexecution = "0"; //目前暂无 dt_Task.TaskState = (int)TaskInStatusEnum.RGV_InNew; //目前暂无 dt_Task.SourceAddress = item.startAddress; dt_Task.TargetAddress = item.endAddress; dt_Task.CurrentAddress = item.startAddress; dt_Task.NextAddress = "0"; //目前暂无 dt_Task.Grade = item.priority; dt_Task.WMSId = 0; //目前暂无 BaseDal.AddData(dt_Task); content.code = 0; } else if (item.type == 2) //出库 { string roadway = ""; string CurrentAddress = ""; switch (item.startAddress) { case "1": roadway = "RGV110"; CurrentAddress = "1101"; break; case "2": roadway = "RGV112"; CurrentAddress = "1121"; break; case "3": roadway = "RGV114"; CurrentAddress = "1141"; break; case "4": roadway = "RGV115"; CurrentAddress = "1151"; break; } Dt_Task dt_Task = new Dt_Task(); dt_Task.TaskNum = item.taskNo; dt_Task.PalletCode = item.containerNo; //暂无 dt_Task.Roadway = roadway; dt_Task.TaskType = (int)TaskOutboundTypeEnum.Outbound; dt_Task.RGVTaskType = (int)RGVTaskTypeEnum.TravelingOnly; //取货 dt_Task.RGVCurrentexecution = "0"; //目前暂无 dt_Task.TaskState = (int)TaskOutStatusEnum.OutNew; //目前暂无 dt_Task.SourceAddress = item.startAddress; dt_Task.TargetAddress = ""; dt_Task.CurrentAddress = CurrentAddress; dt_Task.NextAddress = "0"; //目前暂无 dt_Task.Grade = item.priority; dt_Task.WMSId = 0; //目前暂无 BaseDal.AddData(dt_Task); content.code = 0; } else { content.code = 1; content.msg = $"任务类型错误,wcs接收到的类型为:{item.type}"; } } } catch (Exception ex) { content.code = 1; content.msg = $"数据错误,原因:{ex.Message}"; } return content; } /// /// 根据设备编号、当前地址按照优先级以及创建时间排序查询任务池新增的任务 /// /// 设备编号 /// 返回任务实体对象,可能为null public Dt_Task QueryStackerCraneTask(string DeviceCode) { return BaseDal.QueryFirst(x => x.Roadway == DeviceCode, TaskOrderBy); } public WebResponseContent UpdateRGVTasktype(int taskNum, int RGVTasktype) { WebResponseContent content = new WebResponseContent(); try { Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】"); int RGvtype = 0; string rwlx = "无"; switch (RGVTasktype) { case (int)RGVTaskTypeEnum.PickingUp: RGvtype = 1; rwlx = "取货"; break; case (int)RGVTaskTypeEnum.Placing: RGvtype = 2; rwlx = "放货"; break; case (int)RGVTaskTypeEnum.TravelingOnly: RGvtype = 3; rwlx = "仅行走中"; break; } task.RGVTaskType = RGvtype; bool updatesta = BaseDal.UpdateData(task); string Meesgt = $"目标地址:{task.CurrentAddress},任务类型:{rwlx},修改状态:{updatesta}"; _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, Meesgt); content = WebResponseContent.Instance.OK(); } catch (Exception ex) { content = WebResponseContent.Instance.Error(ex.Message); throw; } return content; } /// /// 更新任务异常信息显示 /// /// 任务号 /// 异常信息 public WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message) { WebResponseContent content = new WebResponseContent(); try { Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】"); if (task.TaskType == (int)TaskInboundTypeEnum.Inbound) { task.TaskState = (int)TaskInStatusEnum.InPending; } else if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound) { task.TaskState = (int)TaskOutStatusEnum.OutPending; } task.ExceptionMessage = message; task.ModifyDate = DateTime.Now; BaseDal.UpdateData(task); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, task.ExceptionMessage); content = WebResponseContent.Instance.OK(); } catch (Exception ex) { content = WebResponseContent.Instance.Error(ex.Message); } return content; } /// /// 将任务状态修改为下一个状态 /// /// 任务实体对象 /// public WebResponseContent UpdateTaskStatusToNext([NotNull] Dt_Task task) { WebResponseContent content = new WebResponseContent(); try { int oldState = task.TaskState; if (task.TaskType == (int)TaskInboundTypeEnum.Inbound) { if (task.TaskState >= (int)TaskInStatusEnum.RGV_InMothercarFinish) { return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】"); } int nextStatus = task.TaskState.GetNextNotCompletedStatus(); task.TaskState = nextStatus; } else if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound) { if (task.TaskState >= (int)TaskOutStatusEnum.OutFinish) { return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】"); } int nextStatus = task.TaskState.GetNextNotCompletedStatus(); task.TaskState = nextStatus; } else { throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{task.TaskNum}】,任务类型:【{task.TaskType}】"); } if (task.TaskState <= 0) { return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】"); } task.ModifyDate = DateTime.Now; task.Modifier = "System"; BaseDal.UpdateData(task); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"人工手动将任务状态从【{oldState}】跳转到【{task.TaskState}】" : $"系统自动流程,任务状态从【{oldState}】转到【{task.TaskState}】"); content = WebResponseContent.Instance.OK(); } catch (Exception ex) { content = WebResponseContent.Instance.Error(ex.Message); } return content; } /// /// 恢复挂起任务 /// /// 任务号 /// 返回处理结果 public WebResponseContent TaskStatusRecovery(int taskNum) { WebResponseContent content = new WebResponseContent(); try { Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】"); if (task.TaskState != (int)TaskInStatusEnum.InPending && task.TaskState != (int)TaskOutStatusEnum.OutPending) { return content = WebResponseContent.Instance.Error($"该任务状态不可恢复,任务号:【{taskNum}】,任务状态:【{task.TaskState}】"); } Dt_TaskExecuteDetail taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.IsNormal, new Dictionary { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } }); if (taskExecuteDetail != null) { task.TaskState = taskExecuteDetail.TaskState; } else { if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { task.TaskState = (int)TaskOutStatusEnum.OutNew; } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) { task.TaskState = (int)TaskInStatusEnum.RGV_InNew; } //todo } task.ExceptionMessage = string.Empty; BaseDal.UpdateData(task); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"人工恢复挂起任务,恢复挂起时任务状态【{task.TaskState}】"); content = WebResponseContent.Instance.OK(); } catch (Exception ex) { content = WebResponseContent.Instance.Error(ex.Message); } return content; } /// /// 回滚任务状态 /// /// 任务号 /// 返回处理结果 public WebResponseContent RollbackTaskStatusToLast(int taskNum) { WebResponseContent content = new(); try { Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】"); int oldState = task.TaskState; Dt_TaskExecuteDetail taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState < task.TaskState && x.TaskState > 0, new Dictionary { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } }); if (taskExecuteDetail != null) { task.TaskState = taskExecuteDetail.TaskState; task.CurrentAddress = taskExecuteDetail.CurrentAddress; task.NextAddress = taskExecuteDetail.NextAddress; } else { return content = WebResponseContent.Instance.Error($"未找到任务明细信息,该任务状态不可回滚到上一步,任务号:【{taskNum}】,任务状态:【{task.TaskState}】"); } task.ExceptionMessage = string.Empty; BaseDal.UpdateData(task); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"人工将任务状态从【{oldState}】回滚到【{task.TaskState}】"); content = WebResponseContent.Instance.OK(); } catch (Exception ex) { content = WebResponseContent.Instance.Error(ex.Message); } return content; } /// /// 删除数据 /// /// 主键数组 /// public virtual WebResponseContent DeleteData(object[] keys) { try { List tasks = BaseDal.QureyDataByIds(keys); foreach (Dt_Task task in tasks) { _task_HtyService.AddTaskHty(task); } if (typeof(Dt_Task).GetNavigatePro() == null) return BaseDal.DeleteDataByIds(keys) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error(); else { if (keys != null) { Type detailType = typeof(Dt_Task).GetDetailType(); string name = typeof(Dt_Task).GetMainIdByDetail(); List dynamicDelKeys = new List(); for (int i = 0; i < keys.Length; i++) { dynamicDelKeys.Add(keys[i]); } ((SqlSugarClient)BaseDal.Db).BeginTran(); if (dynamicDelKeys.Count > 0) BaseDal.Db.Deleteable().AS(detailType.Name).Where($"{name} in (@id)", new { id = dynamicDelKeys.ToArray() }).ExecuteCommandHasChange(); BaseDal.DeleteDataByIds(keys); ((SqlSugarClient)BaseDal.Db).CommitTran(); return WebResponseContent.Instance.OK(); } else { return WebResponseContent.Instance.Error("参数错误"); } } } catch (Exception ex) { ((SqlSugarClient)BaseDal.Db).RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } /// /// 任务完成将状态修改至下一步(后续调整) /// /// 任务编号 /// 返回处理结果 public WebResponseContent UpdateTaskStatus(int taskNum) { WebResponseContent content = new WebResponseContent(); Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】"); int oldState = task.TaskState; if (task.TaskType == (int)TaskInboundTypeEnum.Inbound) { if (task.TaskState == (int)TaskInStatusEnum.RGV_InPickupExecuting) //由取货中==》取货完成 { task.TaskState = (int)TaskInStatusEnum.RGV_InPickupFinish; task.CurrentAddress = "1021"; //放货的地址 task.RGVTaskType = (int)RGVTaskTypeEnum.Placing; //放货 } else if (task.TaskState == (int)TaskInStatusEnum.RGV_InReleaseExecuting) { task.TaskState = (int)TaskInStatusEnum.RGV_InReleaseFinish; task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp; //取货 task.Roadway = "RGV104"; } else if (task.TaskState == (int)TaskInStatusEnum.RGV_InZicheExecuting) { Dt_Router dt_Router = _routerRepository.QueryFirst(x => x.StartPosi == task.CurrentAddress && x.ChildPosi == task.TargetAddress && x.IsEnd == false); if (dt_Router != null) { if (task.CurrentAddress == "1061") //HCJ站台 { task.Roadway = "RGV107"; } task.TaskState = (int)TaskInStatusEnum.RGV_InZicheFinish; task.RGVTaskType = (int)RGVTaskTypeEnum.Placing; //取货 task.CurrentAddress = dt_Router.NextPosi; } else { if (task.TargetAddress == "3" && task.TargetAddress == "4") { task.TaskState = (int)TaskInStatusEnum.RGV_InZicheFinish; task.RGVTaskType = (int)RGVTaskTypeEnum.Placing; //取货 task.CurrentAddress = "1061"; } } } else if (task.TaskState == (int)TaskInStatusEnum.RGV_InZicheReleaseExecuting) { task.TaskState = (int)TaskInStatusEnum.RGV_InZicheReleaseFinish; task.RGVTaskType = (int)RGVTaskTypeEnum.TravelingOnly; task.CurrentAddress = "1021"; //此次待修改,需要考虑2号子车移动 } else if (task.TaskState == (int)TaskInStatusEnum.RGV_InZichemoveExecuting) { Dt_Router dt_Router = _routerRepository.QueryFirst(x => x.IsEnd == true && x.ChildPosi == task.TargetAddress && x.InOutType == 1); task.TaskState = (int)TaskInStatusEnum.RGV_InZichemoveFinish; task.RGVTaskType = (int)RGVTaskTypeEnum.TravelingOnly; task.CurrentAddress = dt_Router.NextPosi; //此次待修改,需要考虑2号子车移动 task.Roadway = dt_Router.ChildPosiDeviceCode; } else if (task.TaskState == (int)TaskInStatusEnum.RGV_InMothercarExecuting) { //最总任务完成 task.TaskState = (int)TaskInStatusEnum.RGV_InMothercarFinish; } } else if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound) { if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutMothercarExecuting) { Dt_Router dt_Router = _routerRepository.QueryFirst(x => x.StartPosi == task.CurrentAddress && x.IsEnd == true && x.InOutType == 2); if (dt_Router != null) { task.TaskState = (int)TaskOutStatusEnum.RGV_OutMothercarFinish; task.CurrentAddress = dt_Router.NextPosi; task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp; task.Roadway = dt_Router.ChildPosiDeviceCode; //放货的地址 } else { Dt_Router dt_Rout = _routerRepository.QueryFirst(x => x.StartPosi == task.CurrentAddress && x.IsEnd == false && x.InOutType == 2); task.TaskState = (int)TaskOutStatusEnum.RGV_OutMothercarFinish; task.CurrentAddress = dt_Rout.StartPosi; task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp; task.Roadway = dt_Rout.ChildPosiDeviceCode; } } else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheExecuting) { if ((task.CurrentAddress == "1101" || task.CurrentAddress == "1121") && task.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheExecuting) { Dt_Router dt_Router = _routerRepository.QueryFirst(x => x.StartPosi == task.CurrentAddress && x.InOutType == 2); task.TaskState = (int)TaskOutStatusEnum.RGV_OutZicheFinish; task.RGVTaskType = (int)RGVTaskTypeEnum.Placing; task.Roadway = dt_Router.ChildPosiDeviceCode; task.CurrentAddress = dt_Router.NextPosi; } else { task.TaskState = (int)TaskOutStatusEnum.RGV_OutZicheFinish; task.RGVTaskType = (int)RGVTaskTypeEnum.Placing; task.CurrentAddress = "1171"; task.Roadway = "RGV116"; } /*Dt_Router dt_Router = _routerRepository.QueryFirst(x => x.StartPosi == task.CurrentAddress && x.InOutType == 2); task.TaskState = (int)TaskOutStatusEnum.RGV_OutZicheFinish; task.CurrentAddress = dt_Router.NextPosi; task.RGVTaskType = (int)RGVTaskTypeEnum.Placing;*/ } else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutZicheReleaseExecuting) { if (task.CurrentAddress == "1131") { Dt_Router dt_Router = _routerRepository.QueryFirst(x => x.StartPosi == task.CurrentAddress && x.InOutType == 2); task.TaskState = (int)TaskOutStatusEnum.RGV_OutMothercarFinish; task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp; task.Roadway = dt_Router.ChildPosiDeviceCode; } else { task.TaskState = (int)TaskOutStatusEnum.RGV_OutZicheReleaseFinish; task.RGVTaskType = (int)RGVTaskTypeEnum.PickingUp; task.Roadway = "RGV118"; } } else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutPickupExecuting) { task.TaskState = (int)TaskOutStatusEnum.RGV_OutPickupFinish; task.RGVTaskType = (int)RGVTaskTypeEnum.Placing; task.CurrentAddress = ""; } else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutReleaseExecuting) { task.TaskState = (int)TaskOutStatusEnum.OutFinish; //任务完成 } else { return WebResponseContent.Instance.Error(); } } task.ExceptionMessage = string.Empty; BaseDal.UpdateData(task); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"自动任务状态从【{oldState}】进入到【{task.TaskState}】,"); content = WebResponseContent.Instance.OK(); return content; } /// /// 查询RGV状态 /// /// /// public RGVStoResponse RgvStatus(StatusqueryReception statusquery) { RGVStoResponse rGVstatus = new RGVStoResponse(); try { foreach (var item in statusquery.data) { if (statusquery == null) { rGVstatus.code = 1; rGVstatus.msg = "明和WCS接收到的参数为空,请检查"; return rGVstatus; } if (item.rgvTag == null) { rGVstatus.code = 1; rGVstatus.msg = "明和WCS接收到RGV编号为空,请检查"; return rGVstatus; } IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == item.rgvTag); CommonConveyorLine conveyorLine = (CommonConveyorLine)device; DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == item.rgvTag && x.DeviceProParamName == "RGVCurrentlocation" && x.DeviceProParamType == "ReadDeviceCommand"); if (item.type == "pick") //取货 { //获取设备 //获取取货站台货位站台 Dt_Router dt_Router = _routerRepository.QueryFirst(x => x.InOutType == 1 && x.ChildPosiDeviceCode == item.rgvTag && x.IsEnd == true); int Currentlocation = conveyorLine.Communicator.Read(deviceProDTO.DeviceProAddress); if (Currentlocation == int.Parse(dt_Router.NextPosi)) //为无货 { rGVstatus.code = 0; rGVstatus.data = new List { new RgvOperation { rgvTag = item.rgvTag, type = "pick", status = 1 }, }; } else { rGVstatus.code = 0; rGVstatus.data = new List { new RgvOperation { rgvTag = item.rgvTag, type = "pick", status = 0 }, }; } } else if (item.type == "put") //放货 { int Currentlocation = conveyorLine.Communicator.Read(deviceProDTO.DeviceProAddress); switch (Currentlocation) { case 1101: case 1121: case 1141: case 1151: rGVstatus.code = 0; rGVstatus.data = new List { new RgvOperation { rgvTag = item.rgvTag, type = "put", status = 2 }, }; break; default: rGVstatus.code = 0; rGVstatus.data = new List { new RgvOperation { rgvTag = item.rgvTag, type = "put", status = 0 }, }; break; } } else { rGVstatus.code = 1; rGVstatus.msg = $"明和WCS接收的参数类型错误,实际接收值为:{item.type}"; } } return rGVstatus; } catch (Exception ex) { rGVstatus.code = 1; rGVstatus.msg = $"明和WCS接口错误:{ex.Message}"; return rGVstatus; } } /// /// 堆垛机完成的接口 /// /// /// public ExpoReverse StkPickPutStatus(SCstatusReception sCstatus) { ExpoReverse expoReverse = new ExpoReverse(); try { foreach (var item in sCstatus.data) { if (sCstatus == null) { expoReverse.code = 1; expoReverse.msg = "明和WCS接收到的参数为空,请检查"; return expoReverse; } if (item.rgvTag == null) { expoReverse.code = 1; expoReverse.msg = "明和WCS接收到RGV编号为空,请检查"; return expoReverse; } if (item.type == "pick") //取货 { expoReverse.code = 0; } else if (item.type == "put") //放货 { expoReverse.code = 0; } else { expoReverse.code = 1; expoReverse.msg = $"明和WCS接收的参数类型错误,实际接收值为:{item.type}"; } } return expoReverse; } catch (Exception ex) { expoReverse.code = 1; expoReverse.msg = $"明和WCS接口错误:{ex.Message}"; return expoReverse; } } /// /// 堆垛机故障信息 /// /// /// public ExpoReverse StkErrorStatus(SCErrorStatusReception sCErrorStatus) { ExpoReverse expoReverse = new ExpoReverse(); try { foreach (var item in sCErrorStatus.data) { if (sCErrorStatus == null) { expoReverse.code = 1; expoReverse.msg = "明和WCS接收到的参数为空,请检查"; return expoReverse; } expoReverse.code = 0; } return expoReverse; } catch (Exception ex) { expoReverse.code = 1; expoReverse.msg = $"明和WCS接口错误:{ex.Message}"; return expoReverse; } } /// /// 任务取消接口 /// /// /// public ExpoReverse TaskCancel(TaskcanceledReception taskcanceled) { ExpoReverse expoReverse = new ExpoReverse(); try { List _TaskList = BaseDal.QueryData(x => x.TaskType == (int)TaskInboundTypeEnum.Inbound).ToList(); foreach (var item in taskcanceled.data) { if (taskcanceled == null) { expoReverse.code = 1; expoReverse.msg = "明和WCS接收到的参数为空,请检查"; return expoReverse; } Dt_Task dt_Task = _TaskList.FirstOrDefault(x => x.TaskNum == item.taskNo); if (dt_Task != null) { if (dt_Task.TaskState == (int)TaskInStatusEnum.RGV_InNew) { dt_Task.TaskState = (int)TaskInStatusEnum.InCancel; //任务取消后,则移入历史 _task_HtyService.AddTaskHty(dt_Task); BaseDal.DeleteData(dt_Task); expoReverse.code = 0; } else { expoReverse.code = 0; expoReverse.msg = $"当前任务已在执行中,不可取消!任务号:{item.taskNo}"; return expoReverse; } } else { expoReverse.code = 0; expoReverse.msg = $"未找到入库任务,任务号:{item.taskNo}"; return expoReverse; } } return expoReverse; } catch (Exception ex) { expoReverse.code = 1; expoReverse.msg = $"明和WCS接口错误:{ex.Message}"; return expoReverse; } } /// /// 堆垛机运行状态接口 /// /// /// public WebResponseContent StkRunStatus() { WebResponseContent responseContent=new WebResponseContent(); return responseContent; } } }