1
yangpeixing
2025-12-04 63e1ee997a5318e628b992f969bdac2fec6dbf14
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ElevatorJob/CommonElevatorJob.cs
@@ -1,11 +1,15 @@
using Quartz;
using Masuit.Tools;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_BasicInfoService;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
@@ -13,6 +17,7 @@
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_SignalR;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using WIDESEAWCS_Tasks.ElevatorJob;
namespace WIDESEAWCS_Tasks
@@ -20,9 +25,16 @@
    [DisallowConcurrentExecution]
    public partial class CommonElevatorJob : JobBase, IJob
    {
        public CommonElevatorJob()
        private readonly ITaskRepository _taskRepository;
        private readonly ITask_HtyRepository _taskhtyRepository;
        private readonly ITaskService _taskService;
        private readonly IDt_StationManagerRepository _stationManagerRepository;
        public CommonElevatorJob(ITaskRepository taskRepository, ITaskService taskService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository taskhtyRepository)
        {
            _taskRepository = taskRepository;
            _taskService = taskService;
            _stationManagerRepository = stationManagerRepository;
            _taskhtyRepository = taskhtyRepository;
        }
        public Task Execute(IJobExecutionContext context)
@@ -32,10 +44,160 @@
                CommonElevator elevator = (CommonElevator)context.JobDetail.JobDataMap.Get("JobParams");
                if(elevator != null)
                {
                    //获取提升机当前模式0-手动\故障、维护模式,1-自动模式
                    var x = elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.Model);
                    var elevatorNum = 0;
                    //获取提升机状态的显示 =0无状态;=1运行中;=2待机;=3报警
                    if (elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.ElevatorStatus) == 2)
                    {
                        //获取提升机手动/自动切换开关状态
                        if(elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.ManualAutoSwitch) == 1)
                        {
                            //获取提升机是否能允许初始化
                            if(elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.AllowInitialization) == 1)
                            {
                                if(elevatorNum == 0)
                                {
                                    if (elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.InitializationFlag) == 0)
                                    {
                                        elevator.SetValue<ElevatorDBName, short>(ElevatorDBName.InitializationTrigger, 1);
                                        Thread.Sleep(1000);
                                        elevator.SetValue<ElevatorDBName, short>(ElevatorDBName.InitializationTrigger, 0);
                                    }
                                    elevatorNum++;
                                }
                                Thread.Sleep(1000);
                                if (elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.InitializationFlag) == 1)
                                {
                                    elevatorNum++;
                                }
                                if(elevatorNum == 2)
                                {
                                    Thread.Sleep(5000);
                                    var TaskDouble = _taskRepository.QueryData(x => x.TaskState > (int)TaskAcrossFloorStatusEnum.CarryNew && x.TaskState < (int)TaskAcrossFloorStatusEnum.EndAddressExecuting && x.DoubleTray == 1);
                                    var task = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskAcrossFloorStatusEnum.CarryNew && x.TaskState < (int)TaskAcrossFloorStatusEnum.EndAddressExecuting);
                                    if(TaskDouble.Count() > 0)
                                    {
                                        if (TaskDouble.First().Floor == "2F")
                                        {
                                            elevator.SetValue(ElevatorDBName.TaskNum, Convert.ToInt16(TaskDouble.First().TaskNum));
                                            elevator.SetValue(ElevatorDBName.FlagBit, Convert.ToInt16(2));
                                            elevator.SetValue(ElevatorDBName.StartFloor, Convert.ToInt16(1));
                                            elevator.SetValue(ElevatorDBName.EdnFloor, Convert.ToInt16(2));
                                            Thread.Sleep(1000);
                                            elevator.SetValue(ElevatorDBName.StartCommand, Convert.ToInt16(1));
                                            _taskService.SendAgvTask("AAA", TaskDouble.First().TaskNum);
                                            _taskService.UpdateTaskStatusToNext(TaskDouble.First().TaskNum);
                                        }
                                        else
                                        {
                                            elevator.SetValue(ElevatorDBName.TaskNum, Convert.ToInt16(TaskDouble.First().TaskNum));
                                            elevator.SetValue(ElevatorDBName.FlagBit, Convert.ToInt16(2));
                                            elevator.SetValue(ElevatorDBName.StartFloor, Convert.ToInt16(2));
                                            elevator.SetValue(ElevatorDBName.EdnFloor, Convert.ToInt16(1));
                                            Thread.Sleep(1000);
                                            elevator.SetValue(ElevatorDBName.StartCommand, Convert.ToInt16(1));
                                            _taskService.SendAgvTask("DDD", TaskDouble.First().TaskNum);
                                            _taskService.UpdateTaskStatusToNext(TaskDouble.First().TaskNum);
                                        }
                                    }
                                    if (task != null)
                                    {
                                        if (task.Floor == "2F")
                                        {
                                            elevator.SetValue(ElevatorDBName.TaskNum, Convert.ToInt16(task.TaskNum));
                                            elevator.SetValue(ElevatorDBName.FlagBit, Convert.ToInt16(2));
                                            elevator.SetValue(ElevatorDBName.StartFloor, Convert.ToInt16(1));
                                            elevator.SetValue(ElevatorDBName.EdnFloor, Convert.ToInt16(2));
                                            Thread.Sleep(1000);
                                            elevator.SetValue(ElevatorDBName.StartCommand, Convert.ToInt16(1));
                                            _taskService.SendAgvTask("AAA", task.TaskNum);
                                            _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                        }
                                        else
                                        {
                                            elevator.SetValue(ElevatorDBName.TaskNum, Convert.ToInt16(task.TaskNum));
                                            elevator.SetValue(ElevatorDBName.FlagBit, Convert.ToInt16(2));
                                            elevator.SetValue(ElevatorDBName.StartFloor, Convert.ToInt16(2));
                                            elevator.SetValue(ElevatorDBName.EdnFloor, Convert.ToInt16(1));
                                            Thread.Sleep(1000);
                                            elevator.SetValue(ElevatorDBName.StartCommand, Convert.ToInt16(1));
                                            _taskService.SendAgvTask("DDD", task.TaskNum);
                                            _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                        }
                                    }
                                    if (elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.InitializationFlag) == 0)
                                    {
                                        elevator.SetValue<ElevatorDBName, short>(ElevatorDBName.StartElevator, 1);
                                        Thread.Sleep(2000);
                                        elevator.SetValue<ElevatorDBName, short>(ElevatorDBName.StartElevator, 0);
                                        elevatorNum = 0;
                                    }
                                }
                            }
                        }
                    }
                    //获取提升机当前模式0-手动\故障、维护模式,1-自动模式
                    if (elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.Model) == 1)
                    {
                        var task = _taskService.QueryRequestTSJSignalTask();
                        if (task != null && task.AGVSign == "RequestPickUp")
                        {
                            if (task.TaskState == (int)TaskAcrossFloorStatusEnum.SecondCarry)
                            {
                                if (task.Floor == "1F")
                                {
                                    if (elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.OneLayerAllowPickUp) == 1)
                                    {
                                        _taskService.ContinueAgvTask(task.AGVTaskNum);
                                        task.AGVSign = "";
                                        _taskRepository.UpdateData(task);
                                    }
                                }
                                else
                                {
                                    if (elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.TwoLayerAllowPickUp) == 1)
                                    {
                                        _taskService.ContinueAgvTask(task.AGVTaskNum);
                                        task.AGVSign = "";
                                        _taskRepository.UpdateData(task);
                                    }
                                }
                            }
                        }
                        if (task != null && task.AGVSign == "RequestPut")
                        {
                            if (task.TaskState == (int)TaskAcrossFloorStatusEnum.FirstCarry)
                            {
                                if (task.Floor == "1F")
                                {
                                    if (elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.OneLayerAllowPut) == 1)
                                    {
                                        _taskService.ContinueAgvTask(task.AGVTaskNum);
                                        task.AGVSign = "";
                                        _taskRepository.UpdateData(task);
                                    }
                                }
                                else
                                {
                                    if (elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.TwoLayerAllowPut) == 1)
                                    {
                                        _taskService.ContinueAgvTask(task.AGVTaskNum);
                                        task.AGVSign = "";
                                        _taskRepository.UpdateData(task);
                                    }
                                }
                            }
                        }
                    }
                }
                return Task.CompletedTask;
            }