1
wankeda
2025-04-10 5deacf1a887035e0b276e7199f725703c49f0055
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -24,8 +24,10 @@
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -39,74 +41,106 @@
    public class CommonConveyorLineJob : JobBase, IJob, IDisposable
    {
        private readonly ITaskService _taskService;
        private readonly ITaskRepository _taskRepository;
        private readonly ITaskCZRepository _taskCZRepository;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly IRouterService _routerService;
        private readonly IMapper _mapper;
        public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper)
        public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, ITaskCZRepository taskCZRepository)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _routerService = routerService;
            _mapper = mapper;
            _taskRepository = taskRepository;
            _taskCZRepository = taskCZRepository;
        }
        public Task Execute(IJobExecutionContext context)
        {
            //Console.Out.WriteLine(DateTime.Now);
            try
            {
                // ä»Žä¸Šä¸‹æ–‡ä¸­èŽ·å– JobParams å¹¶è½¬æ¢ä¸º CommonConveyorLine ç±»åž‹
                CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
                if (conveyorLine != null)
                if (conveyorLine == null)
                {
                    short[] values = conveyorLine.Communicator.Read<short>("DB2.0", 20);
                    //bool result = conveyorLine.Communicator.Write("DB1.0", "AAABBB");
                    //string testVal = conveyorLine.Communicator.Read<string>("DB1.0");
                    List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
                    List<Task> tasks = new List<Task>();
                    foreach (string childDeviceCode in childDeviceCodes)
                    {
                        //Task task = Task.Run(() =>
                        //{
                        ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode);
                        if (command != null)
                        {
                            DeviceProtocolDetailDTO? deviceProtocolDetail = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.ProtocalDetailValue == command.InteractiveSignal.ToString() && x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal));
                            if (deviceProtocolDetail != null)
                            {
                                MethodInfo? method = GetType().GetMethod(deviceProtocolDetail.ProtocolDetailType);
                                if (method != null)
                                {
                                    method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode });
                                }
                                else
                                {
                                    //todo æœªæ‰¾åˆ°æ–¹æ³•æ—¶
                                }
                            }
                        }
                        //});
                        //tasks.Add(task);
                    }
                    Task.WaitAll(tasks.ToArray());
                    throw new Exception("JobParams ä¸åŒ…含 CommonConveyorLine ç±»åž‹å‚æ•°");
                }
                // å®šä¹‰çº¿ä½“实盘入库请求的地址和任务类型
                var requests = new Dictionary<string, string>
                {
                    { "DB1002.293.0", "ZJXL-WLX002" },
                    { "DB1002.1493.0", "FJXL-WLX002" }
                };
                foreach (var request in requests)
                {
                    var isDownRequest = conveyorLine.Communicator.Read<bool>(request.Key);
                    if (!isDownRequest)
                    {
                        continue;
                    }
                    string fromAdd = request.Value;
                    string taskType = request.Value.Contains("ZJXL") ? "正极" : "负极";
                    // æŸ¥è¯¢æ˜¯å¦å­˜åœ¨å·²ç”Ÿæˆçš„æ–°ä»»åŠ¡
                    var task = _taskRepository.QueryFirst(x => x.SourceAddress == fromAdd && x.TaskState == (int)TaskInStatusEnum.InNew);
                    if (task != null)
                    {
                        ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}下线请求入库,任务已生成存在,稍后重试......");
                        continue;
                    }
                    // æŸ¥è¯¢ä»»åŠ¡ç±»åž‹å¯¹åº”çš„czTask
                    DtCZTask czTask = _taskCZRepository.QueryFirst(x => x.TaskType == taskType);
                    if (czTask == null)
                    {
                        ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}下线请求入库,{taskType}任务不存在,稍后重试......");
                        continue;
                    }
                    // åˆ›å»ºæ–°çš„任务并添加到任务仓库
                    task = new Dt_Task()
                    {
                        TaskNum = _taskService.GetTaskNum(),
                        CreateDate = DateTime.Now,
                        Creater = "system",
                        CurrentAddress = fromAdd,
                        SourceAddress = fromAdd,
                        TaskState = (int)TaskInStatusEnum.InNew,
                        TaskType = (int)TaskOutboundTypeEnum.Outbound,
                        Grade = 1,
                        PalletCode = czTask.TaskProductCode,
                        TargetAddress = czTask.TaskEndAddress,
                        NextAddress = czTask.TaskEndAddress,
                        Roadway = $"{taskType}AGV",
                        WMSId = czTask.Id,
                        Remark = czTask.TaskOrderNo
                    };
                    _taskRepository.AddData(task);
                    ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}下线请求入库,任务已生成,等待执行......");
                }
            }
            catch (Exception ex)
            {
                //Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
                // è®°å½•异常信息
                // Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
                ConsoleHelper.WriteErrorLine($"{nameof(CommonConveyorLineJob)}: å‘生异常 - {ex.Message}");
            }
            finally
            {
                // å†™è°ƒè¯•信息
                WriteDebug("CommonConveyorLineJob", "test");
                //Console.Out.WriteLine(DateTime.Now);
                // Console.Out.WriteLine(DateTime.Now);
            }
            return Task.CompletedTask;
        }
        /// <summary>
        /// è¾“送线请求入库
        /// </summary>