using HslCommunication; using Mapster; using Newtonsoft.Json; using SqlSugar; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using WIDESEAWCS_Common; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_Model.BasicInfo; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DeviceBase; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_Tasks.ConveyorLineJob; using WIDESEAWCS_Tasks.StackerCraneJob; namespace WIDESEAWCS_Tasks { public partial class CommonConveyorLineJob { public async Task HandleNewTaskAsync(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, Dt_Task task = null) { var stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode && x.stationPLC == conveyorLine.DeviceCode); switch (stationManager.stationType) { case 1: await RequestTask(conveyorLine, command, childDeviceCode, stationManager); break; case 9: RequestWMSTask(conveyorLine, stationManager); break; case 2: case 3: RequestNextAddress(command, conveyorLine, stationManager, task); break; case 4: case 5: task = _taskService.QueryConveyorLineFinishTask(stationManager.stationChildCode, command.TaskNum); if (task != null) { _taskService.UpdateTaskStatusToNext(task); } break; default: break; } } private async Task RequestTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, Dt_StationManager stationManager) { var hasTask = await _taskRepository.QueryFirstAsync(x => x.SourceAddress == childDeviceCode && x.TaskState < (int)TaskInStatusEnum.RGV_InExecutingFinish && x.TaskState >= (int)TaskInStatusEnum.InNew); if (hasTask != null) { var log = $"【{conveyorLine._deviceName}】任务号:【{hasTask.TaskNum}】,托盘条码:【{hasTask.PalletCode}】已到达【{childDeviceCode}】输送线存在任务"; ConsoleHelper.WriteWarningLine(log); await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); WriteInfo(conveyorLine.DeviceName, log); return; } var RGVName = string.Empty; if (stationManager.stationFloor == "1F") { RGVName = stationManager.RGVName; } else { RGVName = "RGV03"; } Dt_Task task = new Dt_Task() { TaskNum = _taskRepository.GetTaskNo().Result, TaskType = (int)TaskInboundTypeEnum.Inbound, TaskState = (int)TaskInStatusEnum.InNew, SourceAddress = childDeviceCode, Dispatchertime = DateTime.Now, Grade = 1, Creater = "System", Floor = stationManager.stationFloor, RGVName = RGVName, SourceStation= stationManager.remark, }; _taskRepository.AddData(task); } private void RequestWMSTask(CommonConveyorLine conveyorLine, Dt_StationManager stationManager) { if (stationManager.stationChildCode == "3002") { DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceChildCode == stationManager.stationChildCode && x.DeviceProParamName == "ConveyorLineBarcode").FirstOrDefault(); var x = conveyorLine.Communicator.Read(devicePro.DeviceProAddress, 5); string Barcode = Encoding.UTF8.GetString(x); if (Barcode == null) { conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(3), stationManager.stationChildCode); } var task = _taskRepository.QueryFirst(x => x.PalletCode == Barcode && x.TaskState == (int)TaskInStatusEnum.HoistNew); if (task != null) { ConveyorLineTaskCommandWrite taskCommand = new ConveyorLineTaskCommandWrite() { TaskNum = Convert.ToInt16(task.TaskNum), TargetAddress = Convert.ToInt16(task.NextAddress), WriteInteractiveSignal = task.TaskType == (int)TaskOutboundTypeEnum.Outbound ? (byte)Convert.ToSByte(2) : (byte)Convert.ToSByte(1) }; var result = SendCommand(taskCommand, conveyorLine, stationManager.stationChildCode); if (result) { task.TaskState = (int)TaskInStatusEnum.HoistInExecuting; _taskRepository.UpdateData(task); } } else { var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTask)?.ConfigValue; WMSTaskDTO taskDTO = new WMSTaskDTO() { TPbarcode = Barcode, WhCode = "1001", BeginPoint = stationManager.stationChildCode }; if (wmsBase == null || requestTask == null) { throw new InvalidOperationException("WMS IP 未配置"); } var wmsIpAddress = wmsBase + requestTask; var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result; } } else { DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceChildCode == stationManager.stationChildCode && x.DeviceProParamName == "ConveyorLineBarcode").FirstOrDefault(); var x = conveyorLine.Communicator.Read(devicePro.DeviceProAddress, 5); string Barcode = Encoding.UTF8.GetString(x); if (Barcode == "") { conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(3), stationManager.stationChildCode); } var task = _taskRepository.QueryFirst(x => x.PalletCode == Barcode); if (task != null) { } else { var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTask)?.ConfigValue; WMSTaskDTO taskDTO = new WMSTaskDTO() { TPbarcode = Barcode, WhCode = "1001", BeginPoint = stationManager.stationChildCode }; if (wmsBase == null || requestTask == null) { throw new InvalidOperationException("WMS IP 未配置"); } var wmsIpAddress = wmsBase + requestTask; var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result; } } } } }