xxyy
2025-02-15 abff6261e5e74ff16a844f4739f84d49b6133000
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -1,11 +1,9 @@
using AutoMapper;
using HslCommunication;
using Mapster;
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_BasicInfoService;
using WIDESEAWCS_Common;
@@ -20,12 +18,9 @@
using WIDESEAWCS_ITaskInfoRepository;
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;
using WIDESEAWCS_TaskInfoRepository;
namespace WIDESEAWCS_TaskInfoService
{
@@ -98,7 +93,7 @@
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    {
                        // 判断任务目标地址和路径是否满足特定条件
                        if (task.TargetAddress == "002-021-001" && task.Roadway.Contains("JZ") && task.TaskType == (int)TaskOutboundTypeEnum.OutTray)
                        if ((task.TargetAddress == "002-021-001" || task.TargetAddress == "001-021-001") && task.Roadway.Contains("JZ"))
                        {
                            // 设置任务状态为出库新建
                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
@@ -139,8 +134,11 @@
                    // 判断任务类型是否为入库任务
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                    {
                        var value = _sys_ConfigService.GetByConfigKey(CateGoryConst.CONFIG_SYS_InStation, SysConfigKeyConst.JZNGInBoundStation).ConfigValue;
                        var valueList = value.Split(',').ToList();
                        // 判断源地址是否不等于"1359-4"
                        if (task.SourceAddress != "1359-4")
                        //if (task.SourceAddress != "1359-4" && task.SourceAddress != "1357-4")
                        if (!valueList.Contains(task.SourceAddress))
                        {
                            // 查询从源地址到目标地址的路由
                            List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress);
@@ -156,8 +154,13 @@
                        }
                        else
                        {
                            // 设置当前地址为"002-021-001"
                            task.CurrentAddress = "002-021-001";
                            task.CurrentAddress = string.Empty;
                            if (task.SourceAddress == "1325-6")
                                // 设置当前地址为"001-021-001"
                                task.CurrentAddress = "001-021-001";
                            else
                                // 设置当前地址为"002-021-001"
                                task.CurrentAddress = "002-021-001";
                            // 设置下一个地址为目标地址
                            task.NextAddress = item.TargetAddress;
                        }
@@ -211,7 +214,7 @@
                    wmsIpAddrss = GetIpAddress(SysConfigKeyConst.WMSIP_BASE, SysConfigKeyConst.RequestTask);
                }
                var result = await HttpHelper.PostAsync(wmsIpAddrss, new { Position = sourceAddress, PalletCode = palletCode }.ToJsonString());
                var result = await HttpHelper.PostAsync(wmsIpAddrss, new { Position = sourceAddress, PalletCode = palletCode, stationManager.productLine }.ToJsonString());
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                if (!content.Status)
@@ -505,81 +508,11 @@
                        _taskHtyRepository.AddData(task_Hty);
                    }
                    if (task.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)
                    {
                        #region WMS同步任务完成
                        var keys = new Dictionary<string, object>()
                        {
                            {"taskNum", task.TaskNum}
                        };
                        // 获取WMSip地址
                        var configs = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                        var wmsBasex = configs.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                        var completeTask = configs.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
                        if (wmsBasex == null || completeTask == null)
                        {
                            throw new InvalidOperationException("WMS IP 未配置");
                        }
                        var wmsIpAddressx = wmsBasex + completeTask;
                        var results = HttpHelper.GetAsync(wmsIpAddressx, keys).Result;
                        content = JsonConvert.DeserializeObject<WebResponseContent>(results);
                        if (!content.Data.IsNullOrEmpty())
                        {
                            if (content.Data.ToString() == "NG")
                            {
                                task.Remark = "NG";
                            }
                        }
                        task.ExceptionMessage += "   " + content.Message;
                        #endregion WMS同步任务完成
                        if (!task.Roadway.Contains("GW"))
                        {
                            var routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
                            if (!routers.Any()) return WebResponseContent.Instance.Error($"未找到设备路由信息");
                            task.CurrentAddress = task.NextAddress;
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                            task.ModifyDate = DateTime.Now;
                            task.Modifier = "System";
                            BaseDal.UpdateData(task);
                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                        }
                        else
                        {
                            task.TaskState = (int)TaskOutStatusEnum.OutFinish;
                            //如高温出库后 NG 则将任务标记为NG 并在出库申请后将任务出至NG口
                            if (task.Remark == "NG")
                            {
                                BaseDal.UpdateData(task);
                            }
                            else
                            {
                                BaseDal.DeleteData(task);
                                ConsoleHelper.WriteWarningLine($"高温出库目的地址{task.TargetAddress}");
                            }
                            var taskHty = task.Adapt<Dt_Task_Hty>();
                            _taskHtyRepository.AddData(taskHty);
                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                        }
                        //暂不考虑多个出库口
                        if (task.Roadway.Contains("CH") && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                        {
                            Dt_Task? newTask = UpdatePosition(task.TaskNum, task.CurrentAddress);
                            if (newTask != null)
                            {
                                task = newTask;
                            }
                        }
                        content = StackCraneTaskCompleted(task.TaskNum);
                        return content;
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
@@ -630,6 +563,12 @@
                    }
                    else if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish)
                    {
                        if (App.User.UserId > 0)
                        {
                            content = StackCraneTaskCompleted(task.TaskNum);
                            return content;
                        }
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
@@ -944,5 +883,21 @@
            }
            return wcsBasez + address;
        }
        #region 重写方法
        public override WebResponseContent DeleteData(object[] key)
        {
            foreach (var item in key)
            {
                var task = BaseDal.QueryFirst(x => x.TaskId == Convert.ToInt32(item));
                var taskHty = task.Adapt<Dt_Task_Hty>();
                taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System";
                _taskHtyRepository.AddData(taskHty);
            }
            return base.DeleteData(key);
        }
        #endregion 重写方法
    }
}