duyongjia
2025-01-09 daf541c51a7687b338e17b1543266bacee4ff2d3
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -16,34 +16,21 @@
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using Quartz;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_BasicInfoService;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_TaskInfoRepository;
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;
@@ -81,76 +68,75 @@
                    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), $"生成空托入库任务时,重量超重,生成空托入库任务失败!");
                                    }
                                }
                            }
                        }
                        else//如果根据托盘条码查不到任务,则认为是空托盘,空托盘入库不需要组盘,直接新建任务
                        if (!string.IsNullOrEmpty(command.Barcode.Trim()))
                        {
                            if (command.ISInFinish == 1)
                            Dt_Task Outtask = _taskService.QueryConveyorLineOutTask(command.Barcode);
                            if (Outtask != null)
                            {
                                //入库确认信号
                                conveyorLine.Communicator.Write<short>("DB800.6.0", 1);
                                Dt_Task task = new Dt_Task();
                                task.TaskNum= GetTaskNo();
                                task.PalletCode = command.CL1002Barcode;
                                task.TaskType =(int)TaskInboundTypeEnum.Inbound;
                                task.TaskState = (int)TaskInStatusEnum.Line_InFinish;
                                task.Roadway = "SC01";
                                task.SourceAddress = "R01-001-023-001";
                                //向WMS申请空货位
                                task.TargetAddress= WMSApiInvoke.GetAllLocationGroups(task.PalletCode);
                                _taskService.AddData(task);
                                Dt_Router dt_Router = new Dt_Router();
                                //临时记录下托盘和库位的绑定关系
                                dt_Router.StartPosi = task.TargetAddress;
                                dt_Router.NextPosi = task.PalletCode;
                                dt_Router.InOutType = RouterInOutType.Out;
                                dt_Router.ChildPosi = "1";
                                dt_Router.ChildPosiDeviceCode = "1";
                                dt_Router.IsEnd = true;
                                _routerService.AddData(dt_Router);
                                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"输送线入库执行中");
                                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"输送线入库完成");
                            }
                                //出库处理
                                //如果出库到位,出库任务完成
                                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());
                }