wankeda
2025-05-26 0864509e1eb593c3dedb66196ec19fe51437922b
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -1,4 +1,5 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Tasks.ConveyorLineJob
 * åˆ›å»ºè€…:胡童庆
@@ -11,19 +12,14 @@
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *
 *----------------------------------------------------------------*/
#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.Threading.Tasks;
using AutoMapper;
using Quartz;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
@@ -31,7 +27,6 @@
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
@@ -46,8 +41,9 @@
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly IRouterService _routerService;
        private readonly IMapper _mapper;
        private readonly ITaskCZDetailsRepository _detailsRepository;
        public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, ITaskCZRepository taskCZRepository)
        public CommonConveyorLineJob(ITaskService taskService, ITaskCZDetailsRepository detailsRepository, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, ITaskCZRepository taskCZRepository)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
@@ -55,6 +51,7 @@
            _mapper = mapper;
            _taskRepository = taskRepository;
            _taskCZRepository = taskCZRepository;
            _detailsRepository = detailsRepository;
        }
        public Task Execute(IJobExecutionContext context)
@@ -71,57 +68,22 @@
                // å®šä¹‰çº¿ä½“实盘入库请求的地址和任务类型
                var requests = new Dictionary<string, string>
                {
                    { "DB1002.293.0", "ZJXL-WLX002" },
                    { "DB1002.1493.0", "FJXL-WLX002" }
                    { "DB1002.1493.0", "ZJXL-WLX002" },
                    { "DB1002.1093.0", "FJXL-WLX002" }
                };
                foreach (var request in requests)
                // å®šä¹‰çº¿ä½“空盘回流请求的地址和任务类型
                var requestsKP = new Dictionary<string, string>
                {
                    var isDownRequest = conveyorLine.Communicator.Read<bool>(request.Key);
                    if (!isDownRequest)
                    {
                        continue;
                    }
                    { "DB1002.1893.0", "ZJXL-KPHLX001" },
                    { "DB1002.2293.0", "FJXL-KPHLX001" }
                };
                    string fromAdd = request.Value;
                    string taskType = request.Value.Contains("ZJXL") ? "正极" : "负极";
                // å¤„理实盘入库请求
                //ProcessRequests(conveyorLine, requests, "下线请求入库");
                    // æŸ¥è¯¢æ˜¯å¦å­˜åœ¨å·²ç”Ÿæˆçš„æ–°ä»»åŠ¡
                    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)TaskInboundTypeEnum.Inbound,
                        Grade = 1,
                        PalletCode = czTask.TaskProductCode,
                        TargetAddress = czTask.TaskEndAddress,
                        Roadway = $"{taskType}AGV",
                        WMSId = czTask.Id,
                        Remark = czTask.TaskOrderNo
                    };
                    _taskRepository.AddData(task);
                    ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}下线请求入库,任务已生成,等待执行......");
                }
                // å¤„理空盘回流请求
                ProcessKpRequests(conveyorLine, requestsKP);
            }
            catch (Exception ex)
            {
@@ -139,6 +101,148 @@
            return Task.CompletedTask;
        }
        private void ProcessRequests(CommonConveyorLine conveyorLine, Dictionary<string, string> requests, string requestType)
        {
            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}{requestType},任务已生成存在,稍后重试......");
                    continue;
                }
                // æŸ¥è¯¢ä»»åŠ¡ç±»åž‹å¯¹åº”çš„czTask
                DtCZTask czTask = _taskCZRepository.QueryFirst(x => x.TaskType == taskType && (x.TaskStatus == TaskInStatusEnum.InFinish.ToString() || x.TaskStatus == TaskInStatusEnum.Line_InExecuting.ToString()));
                if (czTask == null)
                {
                    ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}{requestType},{taskType}任务不存在,稍后重试......");
                    continue;
                }
                // åˆ›å»ºå¹¶æ·»åŠ æ–°ä»»åŠ¡åˆ°ä»»åŠ¡ä»“åº“
                task = CreateTask(fromAdd, czTask.TaskEndAddress, czTask.TaskOrderNo, czTask.TaskProductCode, taskType, czTask.Id);
                _taskRepository.AddData(task);
                ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}{requestType},任务已生成,等待执行......");
            }
        }
        private void ProcessKpRequests(CommonConveyorLine conveyorLine, Dictionary<string, string> requestsKP)
        {
            foreach (var request in requestsKP)
            {
                var isDownRequest = conveyorLine.Communicator.Read<bool>(request.Key);
                if (!isDownRequest)
                {
                    continue;
                }
                string fromAdd = request.Value;
                string taskType = "负极"; //request.Value.Contains("ZJXL") ? "正极" :
                // æ ¹æ®ä»»åŠ¡ç±»åž‹ç¡®å®šè¯·æ±‚åœ°å€
                (string upRequest, string gmRequest, string gmState) = GetRequestAddresses(taskType);
                var isUpRequest = conveyorLine.Communicator.Read<bool>(upRequest);
                var isGMRequest = conveyorLine.Communicator.Read<bool>(gmRequest);
                var isGMState = conveyorLine.Communicator.Read<int>(gmState);
                // æ ¹æ®æ¡ä»¶åˆ›å»ºä»»åŠ¡å¯¹è±¡
                Dt_Task task = null;
                if (isUpRequest)
                {
                    List<Dt_Task> dt_Task = _taskRepository.QueryData(x => x.SourceAddress == fromAdd && x.TaskState == (int)TaskInStatusEnum.InPending);
                    if (dt_Task.Count < 0) { continue; }
                    var tasks = dt_Task.Where(x => x.SourceAddress == fromAdd).OrderBy(t => t.CreateDate).First();
                    tasks.TaskState = (int)TaskInStatusEnum.InNew;
                    _taskService.UpdateData(tasks);
                }
                //else if (isGMRequest && isGMState == 1)
                //{
                //    task = CreateTask(fromAdd, "WaitBind", "正极物流线002的上料请求", "隔膜空托盘", taskType);
                //}
                //// æ·»åŠ ä»»åŠ¡åˆ°ä»»åŠ¡è¡¨
                //if (task != null)
                //{
                //    _taskRepository.AddData(task);
                //}
            }
        }
        private (string upRequest, string gmRequest, string gmState) GetRequestAddresses(string taskType)
        {
            if (taskType == "正极")
            {
                // ç‰©æµçº¿002的上料请求
                return ("DB1002.93.0", "DB1002.2493.0", "DB1002.2424.0");
            }
            else
            {
                // ç‰©æµçº¿002的上料请求
                return ("DB1002.1293.0", "DB1002.2893.0", "DB1002.2824.0");
            }
        }
        // è¾…助方法:创建任务对象
        private Dt_Task CreateTask(string currentAddress, string targetAddress, string remark, string palletCode, string taskType, int czTaskID = 0)
        {
            if (targetAddress != "WaitBind")
            {
                var details = _detailsRepository.QueryData(x => x.TaskEndAddress == targetAddress).ToList();
                foreach (var item in details)
                {
                    var taskCZ = _taskCZRepository.QueryFirst(x => x.TaskTaskID == item.TaskTaskID);
                    if (taskCZ.TaskType.Contains("正极"))
                    {
                        taskCZ.TaskZJFinishNumber += 1;
                    }
                    else
                    {
                        taskCZ.TaskFJFinishNumber += 1;
                    }
                    if (taskCZ.TaskZJFinishNumber == taskCZ.TaskNumber || taskCZ.TaskFJFinishNumber == taskCZ.TaskNumber)
                    {
                        _taskCZRepository.DeleteData(taskCZ);
                    }
                    var isTrue = _taskCZRepository.UpdateData(taskCZ);
                }
            }
            Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.SourceAddress == currentAddress);
            if (dt_Task != null)
            {
                return null;
            }
            return new Dt_Task
            {
                TaskNum = _taskService.GetTaskNum(),
                CreateDate = DateTime.Now,
                Creater = "system",
                CurrentAddress = currentAddress,
                SourceAddress = currentAddress,
                TaskState = targetAddress != "WaitBind" ? (int)TaskInStatusEnum.InNew : (int)TaskInStatusEnum.InPending,
                TaskType = (int)TaskOutboundTypeEnum.Outbound,
                Grade = 1,
                PalletCode = palletCode,
                TargetAddress = targetAddress,
                NextAddress = targetAddress,
                Barcode = "",
                Roadway = $"{taskType}AGV",
                WMSId = czTaskID > 0 ? czTaskID : 0,
                Remark = remark
            };
        }
        /// <summary>
        /// è¾“送线请求入库
@@ -262,4 +366,4 @@
            GC.SuppressFinalize(this);
        }
    }
}
}