1
z8018
2025-04-16 1f361850d35ba47225951efbc49d592eea685cf8
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineOutJob.cs
@@ -22,13 +22,20 @@
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using WIDESEA_Common.Log;
using WIDESEAWCS_BasicInfoService;
using WIDESEAWCS_Common;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.BasicInfo;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_IBasicInfoService;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Model.Models.System;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
@@ -38,31 +45,44 @@
    public class CommonConveyorLineOutJob : JobBase, IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly IRouterService _routerService;
        private readonly IOrderDetailsService _OrderDetailsService;
        private readonly IMapper _mapper;
        public CommonConveyorLineOutJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IOrderDetailsService orderDetails, IMapper mapper)
        private readonly IOrderDetailsService _orderDetailsService;
        private readonly ITaskRepository _taskRepository;
        private readonly IContainerRepository _containerRepository;
        private static Dt_Container DischargeContainer;
        private static int dischargeStation = 8;
        public CommonConveyorLineOutJob(ITaskService taskService, IMapper mapper, IOrderDetailsService orderDetailsService, ITaskRepository taskRepository, IContainerRepository containerRepository)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _routerService = routerService;
            _OrderDetailsService = orderDetails;
            _mapper = mapper;
            _orderDetailsService = orderDetailsService;
            _taskRepository = taskRepository;
            _containerRepository = containerRepository;
        }
        static string barcode = string.Empty; //鏉$爜
        public Task Execute(IJobExecutionContext context)
        {
            try
            if (DischargeContainer == null)
            {
                DischargeContainer = _containerRepository.QueryFirst(x => x.ContainerEnable && x.ContainerType == ContainerTypeEnum.DischargeContainer.ObjToInt());
                if (DischargeContainer != null)
                {
                    dischargeStation = DischargeContainer.ContainerNo;
                }
            }
                bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
                if (flag && value != null && value is OtherDevice)
                {
                    OtherDevice otherDevice = (OtherDevice)value;
                try
                {
                    bool request = otherDevice.GetValue<ConveyorLineStationDBName, bool>(ConveyorLineStationDBName.PLCStationRequest);   //鐢宠
                    bool response = otherDevice.GetValue<ConveyorLineStationDBName, bool>(ConveyorLineStationDBName.PLCStationResponse);    //搴旂瓟
@@ -70,18 +90,114 @@
                    if (request && !response && !wcsResponse)
                    {
                        DeviceProDTO? devicePro = otherDevice.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == ConveyorLineStationDBName.PLCStationBarcode.ToString());
                        if (devicePro != null)
                        {
                            string barcode = otherDevice.GetValue<ConveyorLineStationDBName, string>(ConveyorLineStationDBName.PLCStationBarcode);
                            //List<byte> bytes = otherDevice.Communicator.Read(devicePro.DeviceProAddress, devicePro.DeviceProDataLength).ToList();
                            //byte[] temp = bytes.ToArray().SelectMiddle(2, bytes.IndexOf(0) - 2);
                            //barcode = Encoding.Default.GetString(temp);
                            if (!string.IsNullOrEmpty(barcode))
                            {
                                OrderInfo orderInfo = _orderDetailsService.GetOrderInfoByBarcode(barcode);
                                if (orderInfo.Width > AppSettings.Get("MaxWidth").ObjToInt() && orderInfo.Width < AppSettings.Get("MinWidth").ObjToInt())
                                {
                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Length));
                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Width));
                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Thickness));
                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 999);
                                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
                    }
                    else
                    {
                        if (wcsResponse)
                            otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, false);  //娓呴櫎鍝嶅簲
                                    Dt_Task task = _taskRepository.QueryFirst(x => x.PalletCode == barcode);
                                    if (task == null)
                                    {
                                        try
                                        {
                                            task = _taskService.GenerateTask(orderInfo);
                                            if (task != null)
                                            {
                                                if (!string.IsNullOrEmpty(task.ItemInfo))
                                                {
                                                    string[] itemInfos = task.ItemInfo.Split("*");
                                                    if (itemInfos.Length == 3)
                                                    {
                                                        otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[0]));
                                                        otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[1]));
                                                        otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[2]));
                    }
                                                }
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(task.TargetAddress));
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, task.TaskNum);
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
                }
            }
            catch (Exception ex)
            {
                WriteError(nameof(CommonConveyorLineJob), ex.ToString(), ex);
                                            if (ex.Message.Contains("10001"))
                                            {
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Length));
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Width));
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Thickness));
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 999);
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
                                            }
                                            else if (ex.Message.Contains("10002"))
                                            {
                                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", ex.Message, ex);
                                            }
                                            else
                                            {
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Length));
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Width));
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Thickness));
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 998);
                                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
                                                WriteError(nameof(CommonConveyorLineOutJob), ex.Message, ex);
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 997);
                                otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
                                //otherDevice.SetValue(ConveyorLineStationDBName.WCSStationNoBarcode, true);
                            }
                        }
                    }
                    else
                    {
                        if (wcsResponse && !request)
                            otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, false);  //娓呴櫎鍝嶅簲
                    }
                }
                catch (Exception ex)
                {
                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 996);
                    otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
                    WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", ex.Message, ex);
                }
            }
            else
            {
                WriteError(nameof(CommonConveyorLineOutJob), "鍙傛暟閿欒,鏈紶閫掕澶囧弬鏁版垨璁惧绫诲瀷閿欒");
            }
            return Task.CompletedTask;
        }