From 0864509e1eb593c3dedb66196ec19fe51437922b Mon Sep 17 00:00:00 2001 From: wankeda <Administrator@DESKTOP-HAU3ST3> Date: 星期一, 26 五月 2025 10:25:42 +0800 Subject: [PATCH] 新增货位管理,PDA扫码生成任务烘烤出料,烘烤回炉,空托回流 --- 代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs | 235 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 186 insertions(+), 49 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" index f82ab1f..227329f 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" @@ -1,4 +1,5 @@ 锘�#region << 鐗� 鏈� 娉� 閲� >> + /*---------------------------------------------------------------- * 鍛藉悕绌洪棿锛歐IDESEAWCS_Tasks.ConveyorLineJob * 鍒涘缓鑰咃細鑳$搴� @@ -11,25 +12,21 @@ * 淇敼鏃堕棿锛� * 鐗堟湰锛歏1.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; +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; @@ -39,72 +36,212 @@ 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; + private readonly ITaskCZDetailsRepository _detailsRepository; - public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper) + public CommonConveyorLineJob(ITaskService taskService, ITaskCZDetailsRepository detailsRepository, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, ITaskCZRepository taskCZRepository) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; _routerService = routerService; _mapper = mapper; + _taskRepository = taskRepository; + _taskCZRepository = taskCZRepository; + _detailsRepository = detailsRepository; } 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.1493.0", "ZJXL-WLX002" }, + { "DB1002.1093.0", "FJXL-WLX002" } + }; + + // 瀹氫箟绾夸綋绌虹洏鍥炴祦璇锋眰鐨勫湴鍧�鍜屼换鍔$被鍨� + var requestsKP = new Dictionary<string, string> + { + { "DB1002.1893.0", "ZJXL-KPHLX001" }, + { "DB1002.2293.0", "FJXL-KPHLX001" } + }; + + // 澶勭悊瀹炵洏鍏ュ簱璇锋眰 + //ProcessRequests(conveyorLine, requests, "涓嬬嚎璇锋眰鍏ュ簱"); + + // 澶勭悊绌虹洏鍥炴祦璇锋眰 + ProcessKpRequests(conveyorLine, requestsKP); } 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; + } + + 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") ? "姝f瀬" : "璐熸瀬"; + + // 鏌ヨ鏄惁瀛樺湪宸茬敓鎴愮殑鏂颁换鍔� + var task = _taskRepository.QueryFirst(x => x.SourceAddress == fromAdd);//&& x.TaskState == (int)TaskInStatusEnum.InNew + if (task != null) + { + ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}{requestType},浠诲姟宸茬敓鎴愬瓨鍦紝绋嶅悗閲嶈瘯......"); + continue; + } + + // 鏌ヨ浠诲姟绫诲瀷瀵瑰簲鐨刢zTask + 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") ? "姝f瀬" : + + // 鏍规嵁浠诲姟绫诲瀷纭畾璇锋眰鍦板潃 + (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", "姝f瀬鐗╂祦绾�002鐨勪笂鏂欒姹�", "闅旇啘绌烘墭鐩�", taskType); + //} + + //// 娣诲姞浠诲姟鍒颁换鍔¤〃 + //if (task != null) + //{ + // _taskRepository.AddData(task); + //} + } + } + + private (string upRequest, string gmRequest, string gmState) GetRequestAddresses(string taskType) + { + if (taskType == "姝f瀬") + { + // 鐗╂祦绾�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("姝f瀬")) + { + 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> @@ -229,4 +366,4 @@ GC.SuppressFinalize(this); } } -} +} \ No newline at end of file -- Gitblit v1.9.3