huangxiaoqiang
12 小时以前 960b33fa24c47a330e51a2c24859d681ae62caeb
Code Management/WCS/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -3,6 +3,7 @@
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;
@@ -13,6 +14,7 @@
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;
@@ -25,6 +27,7 @@
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;
@@ -83,33 +86,28 @@
        }
        /// <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)
                {
                }
@@ -117,11 +115,11 @@
                _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;
        }
@@ -194,41 +192,23 @@
            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";
@@ -236,17 +216,31 @@
                _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);
@@ -351,10 +345,10 @@
            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)
            {