| | |
| | | using LogLibrary.Log; |
| | | using Mapster; |
| | | using Newtonsoft.Json; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Database; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; |
| | | using SqlSugar; |
| | | using System.Diagnostics.CodeAnalysis; |
| | |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.BaseServices; |
| | | using WIDESEAWCS_Core.Enums; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_DTO.MES; |
| | |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.DeviceBase; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using WIDESEAWCS_QuartzJob.Repository; |
| | | using WIDESEAWCS_QuartzJob.Service; |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 接收MES任务 |
| | | /// 接收WMS任务 |
| | | /// </summary> |
| | | /// <param name="taskDTOs"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent ReceiveMESTask([NotNull] MESTaskDTO taskDTOs) |
| | | public WebResponseContent ReceiveWMSTask([NotNull] WMSTaskDTO taskDTOs) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (BaseDal.QueryFirst(x => x.TaskNum == taskDTOs.taskId || x.PalletCode == taskDTOs.containerCode) != null) |
| | | if (BaseDal.QueryFirst(x => x.TaskNum == taskDTOs.TaskNum || x.PalletCode == taskDTOs.PalletCode) != null) |
| | | { |
| | | return content.Error("该任务已存在!"); |
| | | } |
| | | Dt_Task task = _mapper.Map<Dt_Task>(taskDTOs); |
| | | task.Creater = "MES"; |
| | | task.Creater = "WMS"; |
| | | // 判断任务类型是否为出库任务 |
| | | if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) |
| | | { |
| | | |
| | | |
| | | } |
| | | // 判断任务类型是否为入库任务 |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) |
| | | { |
| | | |
| | | } |
| | | // 判断任务类型是否为移库任务 |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) |
| | | { |
| | | |
| | | } |
| | |
| | | |
| | | _taskExecuteDetailService.AddTaskExecuteDetailS(task.TaskNum, "接收WMS任务"); |
| | | |
| | | content = WebResponseContent.Instance.OK("成功"); |
| | | content.OK("成功"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content = WebResponseContent.Instance.Error($"任务接收错误,错误信息:{ex.Message}返回数据行{ex.StackTrace}"); |
| | | content.Error($"任务接收错误,错误信息:{ex.Message}返回数据行{ex.StackTrace}"); |
| | | } |
| | | return content; |
| | | } |
| | |
| | | try |
| | | { |
| | | int oldState = task.TaskState; |
| | | if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.OutbondGroup) |
| | | var taskGroup = task.TaskState.GetTaskStateGroup(); |
| | | |
| | | // 2. 获取下一步状态 |
| | | int nextStatus = taskGroup switch |
| | | { |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); |
| | | TaskStateGroup.OutbondGroup => task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(), |
| | | TaskStateGroup.InboundGroup => task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(), |
| | | _ => throw new InvalidOperationException($"任务类型错误, 任务号:【{task.TaskNum}】, 任务类型:【{task.TaskType}】") |
| | | }; |
| | | |
| | | task.TaskState = nextStatus; |
| | | |
| | | if (task.TaskState == (int)TaskOutStatusEnum.AGV_OutFinish) |
| | | { |
| | | |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | |
| | | Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task); |
| | | task_Hty.TaskId = 0; |
| | | |
| | | BaseDal.DeleteData(task); |
| | | _taskHtyRepository.AddData(task_Hty); |
| | | } |
| | | } |
| | | else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.InboundGroup) |
| | | if (nextStatus <= 0) |
| | | { |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); |
| | | task.TaskState = nextStatus; |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{task.TaskNum}】,任务类型:【{task.TaskType}】"); |
| | | return WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步, 任务号:【{task.TaskNum}】, 当前状态:【{task.TaskState}】"); |
| | | } |
| | | |
| | | if (task.TaskState <= 0) |
| | | { |
| | | return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】"); |
| | | } |
| | | // 3. 更新任务状态 |
| | | task.TaskState = nextStatus; |
| | | |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | |
| | | |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"人工手动将任务状态从【{oldState}】跳转到【{task.TaskState}】" : $"系统自动流程,任务状态从【{oldState}】转到【{task.TaskState}】"); |
| | | |
| | | #region 任务完成调用接口 |
| | | bool isOutFinish = task.TaskState == (int)TaskOutStatusEnum.AGV_OutFinish; |
| | | bool isInFinish = task.TaskState == (int)TaskInStatusEnum.AGV_InFinish; |
| | | |
| | | if (isOutFinish || isInFinish) |
| | | { |
| | | int finalState = isOutFinish |
| | | ? (int)TaskOutStatusEnum.OutFinish |
| | | : (int)TaskInStatusEnum.InFinish; |
| | | |
| | | task.TaskState = finalState; |
| | | |
| | | BaseDal.DeleteAndMoveIntoHty(task, App.User.UserName != null ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成); |
| | | |
| | | var wmstaskCompleteIp= GetIpAddress(SysConfigKeyConst.CompleteTask); |
| | | var res= HttpHelper.PostAsync(wmstaskCompleteIp, new { TaskNum = task.TaskNum}.ToJsonString()).Result; |
| | | return JsonConvert.DeserializeObject<WebResponseContent>(res); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 更新任务状态 |
| | | |
| | | // 获取WMSip地址 |
| | | var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); |
| | | var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; |
| | | var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.UpdateTaskStatus)?.ConfigValue; |
| | | if (wmsBase == null || updateTask == null) |
| | | { |
| | | throw new InvalidOperationException("WMS IP 未配置"); |
| | | } |
| | | var wmsIpAddress = wmsBase + updateTask; |
| | | var wmsIpAddress = GetIpAddress(SysConfigKeyConst.UpdateTaskStatus); |
| | | |
| | | var result = HttpHelper.PostAsync(wmsIpAddress, new { TaskNum = task.TaskNum, TaskState = task.TaskState }.ToJsonString()).Result; |
| | | content = JsonConvert.DeserializeObject<WebResponseContent>(result); |
| | |
| | | return content; |
| | | } |
| | | |
| | | private string GetIpAddress(string baseIp, string name) |
| | | public string GetIpAddress(string name) |
| | | { |
| | | var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); |
| | | var wcsBasez = configz.Where(x => x.ConfigKey == baseIp).FirstOrDefault()?.ConfigValue; |
| | | var wcsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue; |
| | | var address = configz.Where(x => x.ConfigKey == name).FirstOrDefault()?.ConfigValue; |
| | | if (wcsBasez == null || address == null) |
| | | { |