duyongjia
2025-02-26 bc7bd9be4efa79645cb8f5c959b5e398fae9986f
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -16,45 +16,40 @@
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Data;
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;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class CommonConveyorLineJob : IJob
    public class CommonConveyorLineJob :JobBase, IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskRepository _taskRepository;
        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)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _routerService = routerService;
            _mapper = mapper;
            _taskRepository = taskRepository;
        }
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
@@ -73,42 +68,74 @@
                    command.CL1002Status = conveyorLine.Communicator.Read<short>("DB801.46.0");
                    command.Weight = conveyorLine.Communicator.Read<short>("DB801.48.0");
                    command.CL1002Barcode = conveyorLine.Communicator.Read<string>("DB801.52.0");
                    command.ISIn = conveyorLine.Communicator.Read<short>("DB801.84.0");
                    command.ISIn = conveyorLine.Communicator.Read<short>("DB801.84.0");//等于1的时候不让出库
                    if (command != null)
                    {
                        Dt_Task Intask = _taskService.QueryConveyorLineTask(command.CL1002Barcode);
                        if (Intask != null)
                        if (!string.IsNullOrEmpty(command.CL1002Barcode.Trim()))
                        {
                            //入库处理
                            //如果入库到位,则根据托盘码(条码)去获取WCS任务号
                            if (command.ISInFinish == 1)
                            Dt_Task Intask = _taskService.QueryConveyorLineTask(command.CL1002Barcode);
                            if (Intask != null)
                            {
                                _taskService.UpdateTaskStatus(Intask.TaskId, (int)TaskInStatusEnum.Line_InExecuting);
                                _taskExecuteDetailService.AddTaskExecuteDetail(Intask.TaskId, $"输送线入库执行中");
                                //入库确认信号
                                conveyorLine.Communicator.Write<short>("DB800.6.0", 1);
                                _taskService.UpdateTaskStatus(Intask.TaskId, (int)TaskInStatusEnum.Line_InFinish);
                                _taskExecuteDetailService.AddTaskExecuteDetail(Intask.TaskId, $"输送线入库完成");
                                //入库处理
                                //如果入库到位,则根据托盘码(条码)去获取WCS任务号
                                if (command.ISInFinish == 1)
                                {
                                    _taskService.UpdateTaskStatus(Intask.TaskId, (int)TaskInStatusEnum.Line_InExecuting);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(Intask.TaskId, $"输送线入库执行中");
                                    //入库确认信号
                                    conveyorLine.Communicator.Write<short>("DB800.6.0", 1);
                                    _taskService.UpdateTaskStatus(Intask.TaskId, (int)TaskInStatusEnum.Line_InFinish);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(Intask.TaskId, $"输送线入库完成");
                                }
                            }
                            else//如果根据托盘条码查不到任务,则认为是空托盘,空托盘入库可以不需要组盘,直接新建任务,也可以直接下空托出库任务
                            {
                                if (command.ISInFinish == 1)//增加根据重量判断是否是空托盘判断逻辑
                                {
                                    if (command.Weight <= 600)
                                    {
                                        //先不给PLC入库确认信号,调WMS空托入库任务接口
                                        _taskService.GenerateEmptyInBoundTask(command.CL1002Barcode);
                                    }
                                    else
                                    {
                                        WriteDebug(nameof(CommonConveyorLineJob), $"生成空托入库任务时,重量超重,生成空托入库任务失败!");
                                    }
                                }
                            }
                        }
                        if (!string.IsNullOrEmpty(command.Barcode.Trim()))
                        {
                            Dt_Task Outtask = _taskService.QueryConveyorLineOutTask(command.Barcode);
                            if (Outtask != null)
                            {
                                //出库处理
                                //如果出库到位,出库任务完成
                                if (command.ISOutFinish == 1)
                                {
                                    _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.Line_OutExecuting);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"输送线出库执行中");
                                    _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.Line_OutFinish);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"输送线出库完成");
                                    //出库确认信号
                                    conveyorLine.Communicator.Write<short>("DB800.0.0", 1);
                                    _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.OutFinish);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"出库任务完成");
                                    _taskService.OutBoundTaskByWMS(Outtask.TaskNum);
                                }
                            }
                        }
                        Dt_Task Outtask = _taskService.QueryConveyorLineOutTask(command.Barcode);
                        if (Outtask != null)
                        {
                            //出库处理
                            //如果出库到位,出库任务完成
                            if (command.ISOutFinish == 1)
                            {
                                _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.Line_OutExecuting);
                                _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"输送线出库执行中");
                                _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.Line_OutFinish);
                                _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"输送线出库完成");
                                //出库确认信号
                                conveyorLine.Communicator.Write<short>("DB800.0.0", 1);
                                _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.OutFinish);
                                _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"出库任务完成");
                            }
                        }
                        //Intask = _taskService.QueryConveyorLineTask(command.CL1002Barcode);
                        //Outtask = _taskService.QueryConveyorLineOutTask(command.Barcode);
                        //if (Intask==null&&Outtask==null && command.CL1001Free==1 && command.CL1002Free==1&& command.ISIn==0)
                        //{
                        //    //生成空车出库任务
                        //    _taskService.GenerateEmptyOutBoundTask();
                        //}
                    }
                    Task.WaitAll(tasks.ToArray());
@@ -126,6 +153,17 @@
            return Task.CompletedTask;
        }
        /// <summary>
        /// èŽ·å–ä»»åŠ¡ç¼–å·
        /// </summary>
        /// <returns></returns>
        public int GetTaskNo()
        {
            DataTable dt = _taskRepository.QueryTable("select next value for dbo.seqTaskNum");
            return int.Parse(dt.Rows[0][0].ToString());
        }
        /// <summary>
        /// è¾“送线请求入库
        /// </summary>