ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -2,15 +2,20 @@
using Mapster;
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using Quartz;
using System.Diagnostics.CodeAnalysis;
using System.Text;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_DTO.WMS;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoRepository;
@@ -59,7 +64,6 @@
        {
            try
            {
                CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                if (commonStackerCrane != null)
                {
@@ -83,9 +87,10 @@
                                    bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
                                    if (sendFlag)
                                    {
                                        var isWorkType = commonStackerCrane.Communicator.WriteNoRead("DB100.18.0", Convert.ToInt16(1));
                                        commonStackerCrane.LastTaskType = task.TaskType;
                                        _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                        Thread.Sleep(1000);
                                        Thread.Sleep(2000);
                                    }
                                }
                            }
@@ -233,42 +238,40 @@
                    ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
                    var task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum);
                    if (task == null) commonStackerCrane.SetValue(StackerCraneDBName.FinishConfirm, 1);
                    string WorkStatus = $"【{commonStackerCrane.StackerCraneWorkStatusValue}】";
                    bool IsWrite = false;
                    if (task == null)
                    {
                        commonStackerCrane.SetValue(StackerCraneDBName.FinishConfirm, 1);
                        return;
                    }
                    var content = _taskService.StackCraneTaskCompleted(e.TaskNum);
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    {
                        CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1001") as CommonConveyorLine;
                        if (conveyorLine != null)
                        {
                            short InteractiveSignal = conveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.InteractiveSignal, "LK001");
                            var structs = BitConverter.GetBytes(InteractiveSignal).Reverse().ToArray().ToBoolArray();
                            if (structs[0])
                            {
                                IsWrite = conveyorLine.Communicator.WriteNoRead("DB100.0", 0);
                                Thread.Sleep(1000);
                                IsWrite = conveyorLine.Communicator.WriteNoRead("DB100.0", 9999);
                                if (!IsWrite)
                                {
                                    return;
                                }
                            }
                        }
                        var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.TargetAddress);
                        if (station != null)
                        {
                            _taskService.SendAgvTask(station.stationRemark, task.TaskNum);
                            _taskService.UpdateTaskStatusToNext(task.TaskNum);
                        }
                    }
                    #region
                    //if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    //{
                    //    CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1001") as CommonConveyorLine;
                    //    if (conveyorLine != null)
                    //    {
                    //        short InteractiveSignal = conveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.InteractiveSignal, "LK001");
                    //        var structs = BitConverter.GetBytes(InteractiveSignal).Reverse().ToArray().ToBoolArray();
                    //        if (structs[0])
                    //        {
                    //            IsWrite = conveyorLine.Communicator.WriteNoRead("DB100.0", Convert.ToInt32(9999));
                    //            conveyorLine.Communicator.WriteNoRead("DB100.4", Convert.ToInt16(task.TaskNum));
                    //            if (!IsWrite)
                    //            {
                    //                return;
                    //            }
                    //        }
                    //    }
                    var isWorkType = commonStackerCrane.SetValue(StackerCraneDBName.FinishConfirm, 1);
                    //    _taskService.UpdateTaskStatusToNext(task.TaskNum);
                    //}
                    #endregion
                    var isWorkType = commonStackerCrane.Communicator.WriteNoRead("DB100.0", Convert.ToInt16(1));
                    str = $"{commonStackerCrane.DeviceName}】WMS|WCS任务完成:【{content.Status}{content.Message}】,堆垛机完成信号写入:【{isWorkType}】,任务号:【{e.TaskNum}】时间【{DateTime.Now}】输送线写入{IsWrite}";
                    WriteInfo(commonStackerCrane.DeviceName, str + WorkStatus);
                    str = $"{commonStackerCrane.DeviceName}】WMS|WCS任务完成:【{content.Status}{content.Message}】,堆垛机完成信号写入:【{isWorkType}】,任务号:【{e.TaskNum}】时间【{DateTime.Now}】";
                    WriteInfo(commonStackerCrane.DeviceName, str);
                    ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
                }
            }
@@ -282,6 +285,11 @@
        private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
        {
            Dt_Task task;
            if (_taskService.QueryExecutingTask(commonStackerCrane.DeviceCode) != null)
            {
                return null;
            }
            task = _taskService.QueryRelocationTask(commonStackerCrane.DeviceCode);
            if (task != null)
            {
@@ -311,11 +319,12 @@
            if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
            {
                var InTask = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskInStatusEnum.InNew && x.TaskState< (int)TaskInStatusEnum.SC_InExecuting);
                var InTask = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskInStatusEnum.InNew && x.TaskState < (int)TaskInStatusEnum.SC_InExecuting);
                var OutTask = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskOutStatusEnum.OutNew && x.TaskState < (int)TaskOutStatusEnum.AGV_OutExecuting);
                if (InTask != null)
                {
                    return null;
                    task= _taskRepository.QueryFirst(x => x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.Roadway == commonStackerCrane.DeviceCode);
                    return task;
                }
                else if (OutTask != null)
                {
@@ -323,29 +332,87 @@
                }
                else
                {
                    string[] sourceCodes = task.SourceAddress.Split("-");
                    if (sourceCodes[0].Contains("3"))
                    {
                        var taskDto = new RequestTaskDto()
                        {
                            Position = task.SourceAddress,
                            PalletCode = task.PalletCode,
                            TaskNum = task.TaskNum
                        };
                        // èŽ·å–WMSip地址
                        var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                        var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
                        var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.StackerIsNeedRelocation).FirstOrDefault()?.ConfigValue;
                        if (wmsBasez == null || requestLocation == null)
                        {
                            throw new InvalidOperationException("WMS IP æœªé…ç½®");
                        }
                        var wmsIpAddrss = wmsBasez + requestLocation;
                        var result = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
                        WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                        if (!content.Status)
                        {
                            task.ExceptionMessage = content.Message;
                            _taskRepository.UpdateData(task);
                            return null;
                        }
                        // ååºåˆ—化任务数据
                        var taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                        if (taskDTO.TaskNum != task.TaskNum)
                        {
                            var taskNew=_taskRepository.QueryFirst(x=>x.PalletCode==taskDTO.PalletCode);
                            if (taskNew != null)
                            {
                                task = taskNew;
                            }
                            else
                            {
                                _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                                task = _taskRepository.QueryFirst(x => x.TaskNum == taskDTO.TaskNum);
                            }
                        }
                    }
                    CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x=>x.DeviceCode =="1001") as CommonConveyorLine;
                    if (conveyorLine != null)
                    {
                        short InteractiveSignal = conveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.InteractiveSignal, "LK001");
                        var structs = BitConverter.GetBytes(InteractiveSignal).Reverse().ToArray().ToBoolArray();
                        if (structs[1])
                        {
                            task.ExceptionMessage = "输送线有货暂不下发出库任务";
                            _taskRepository.UpdateData(task);
                            return null;
                        }
                        if (structs[0] && !structs[2] && !structs[1])
                        {
                            conveyorLine.Communicator.WriteNoRead("DB100.0", 9990);
                            conveyorLine.Communicator.Write("DB100.0", 9990);
                        }
                        if (structs[0] && structs[2])
                        {
                            conveyorLine.Communicator.WriteNoRead("DB100.0", 9990);
                            conveyorLine.Communicator.Write("DB100.0", 9990);
                            return task;
                        }
                        else
                        {
                            task.ExceptionMessage = "请检查输送线是否是自动模式或已经移动到出库口";
                            _taskRepository.UpdateData(task);
                            return null;
                        }
                    }
                    else
                    {
                        task.ExceptionMessage = "输送线设备断开连接";
                        _taskRepository.UpdateData(task);
                        return null;
                    }
                }   
@@ -436,14 +503,13 @@
            stackerCraneTaskCommand.TaskNum = Convert.ToInt16(task.TaskNum);
            stackerCraneTaskCommand.WorkType = Convert.ToInt16(1);
            stackerCraneTaskCommand.StartCommand = Convert.ToInt16(1);
            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//判断是否是入库任务
            {
                var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.stationChildCode == task.CurrentAddress);
                string[] sourceCodes = station.stationLocation.Split("-");
                if (sourceCodes.Length == 3)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                }
@@ -456,7 +522,7 @@
                string[] targetCodes = task.NextAddress.Split("-");
                if (targetCodes.Length == 3)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                }
@@ -472,7 +538,7 @@
                string[] sourceCodes = task.CurrentAddress.Split("-");
                if (sourceCodes.Length == 3)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                }
@@ -486,7 +552,7 @@
                string[] targetCodes = station.stationLocation.Split("-");
                if (targetCodes.Length == 3)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                }
@@ -503,7 +569,7 @@
                string[] sourceCodes = task.CurrentAddress.Split("-");
                if (sourceCodes.Length == 3)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                }
@@ -517,7 +583,7 @@
                string[] targetCodes = task.NextAddress.Split("-");
                if (targetCodes.Length == 3)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                }