| | |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.DeviceBase; |
| | | using WIDESEAWCS_QuartzJob.DTO; |
| | | using WIDESEAWCS_QuartzJob.Repository; |
| | | using WIDESEAWCS_QuartzJob.Service; |
| | | using WIDESEAWCS_SignalR; |
| | | using WIDESEAWCS_Tasks.ConveyorLineJob; |
| | |
| | | public partial class CommonConveyorLineJob : JobBase, IJob |
| | | { |
| | | private readonly ITaskService _taskService; |
| | | private readonly IRGVTaskService _rgvtaskService; |
| | | private readonly IRGVTask_HtyService _rgvtask_HtyService; |
| | | private readonly ITaskRepository _taskRepository; |
| | | private readonly ITaskExecuteDetailService _taskExecuteDetailService; |
| | | private readonly IRouterService _routerService; |
| | |
| | | private readonly IDt_StationManagerRepository _stationManagerRepository; |
| | | private readonly IMapper _mapper; |
| | | private readonly ICacheService _cacheService; |
| | | private readonly IDeviceInfoRepository _deviceInfoRepository; |
| | | private readonly INoticeService _noticeService; |
| | | private static List<string>? userTokenIds; |
| | | private static List<int>? userIds; |
| | | |
| | | public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IDt_StationManagerService stationManagerService, IMapper mapper, ICacheService cacheService, INoticeService noticeService, ITaskRepository taskRepository, IRGVTaskService rgvtaskService, IRGVTask_HtyService rgvtask_HtyService, |
| | | IDt_StationManagerRepository stationManagerRepository) |
| | | public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IDt_StationManagerService stationManagerService, IMapper mapper, ICacheService cacheService, INoticeService noticeService, ITaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository, IDeviceInfoRepository deviceInfoRepository) |
| | | { |
| | | _taskService = taskService; |
| | | _taskExecuteDetailService = taskExecuteDetailService; |
| | |
| | | _cacheService = cacheService; |
| | | _noticeService = noticeService; |
| | | _taskRepository = taskRepository; |
| | | _rgvtaskService = rgvtaskService; |
| | | _rgvtask_HtyService = rgvtask_HtyService; |
| | | _stationManagerRepository = stationManagerRepository; |
| | | _deviceInfoRepository = deviceInfoRepository; |
| | | } |
| | | |
| | | public async Task Execute(IJobExecutionContext context) |
| | |
| | | var log = $"ã{conveyorLine._deviceName}ãç«å°ã{station.stationChildCode}ã请æ±åè´§"; |
| | | await LogAndWarn(conveyorLine.DeviceName, log); |
| | | |
| | | var task = _taskService.QueryConveyorLineTask(station.stationChildCode); |
| | | //if (task != null) |
| | | //{ |
| | | // RequestInOrOutbound(command, conveyorLine, station, task); |
| | | //} |
| | | //else |
| | | //{ |
| | | var task = _taskService.QueryConveyorLineTask(station.stationChildCode, command.TaskNum); |
| | | |
| | | await HandleNewTaskAsync(conveyorLine, command, station.stationChildCode, task); |
| | | //} |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> |
| | | /// <param name="command">读åç请æ±ä¿¡æ¯</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | public async Task ConveyorLineFinish(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager station) |
| | | public async Task ConveyorLineFinish(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager stationManager) |
| | | { |
| | | try |
| | | { |
| | | // è¾åºä¿¡æ¯ï¼è¡¨ç¤ºç«å°è¯·æ±åè´§ |
| | | var log = $"ã{conveyorLine._deviceName}ãç«å°ã{station.stationChildCode}ã,ä»»å¡å·:ã{command.TaskNum}ã宿"; |
| | | var log = $"ã{conveyorLine._deviceName}ãç«å°ã{stationManager.stationChildCode}ã,ä»»å¡å·:ã{command.TaskNum}ã宿"; |
| | | await LogAndWarn(conveyorLine.DeviceName, log); |
| | | |
| | | var task = _taskService.QueryConveyorLineFinishTask(station.stationChildCode); |
| | | var task = _taskService.QueryConveyorLineFinishTask(stationManager.stationChildCode, command.TaskNum); |
| | | //æ¹æ¥è¯¢æ¹æ³ |
| | | |
| | | HandleFinishTaskAsync(conveyorLine, command, station.stationChildCode, task); |
| | | if(stationManager.stationType==5||stationManager.stationType==4) |
| | | { |
| | | // 妿任å¡åå¨ |
| | | if (task != null) |
| | | { |
| | | Thread.Sleep(1000); |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | } |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | |
| | | /// <param name="command">读åç请æ±ä¿¡æ¯</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> |
| | | public void RequestInOrOutbound(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager station,Dt_Task task) |
| | | public void RequestNextAddress(ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, Dt_StationManager station, Dt_Task task) |
| | | { |
| | | try |
| | | { |
| | | // è¾åºæåä¿¡æ¯ï¼å
æ¬è¾é线åç§°ãä»»å¡å·ãæçæ¡ç åå设å¤ä»£ç ï¼ä»¥åä»»å¡ä¿¡æ¯ |
| | | var logs = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{task.TaskNum}ã,æçæ¡ç ï¼ã{task.PalletCode}ãå·²å°è¾¾ã{station.stationChildCode}ãè¾é线,task{task.ToJsonString()}"; |
| | | ConsoleHelper.WriteSuccessLine(logs); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, logs); |
| | | |
| | | // 妿任å¡ä¸ä¸ºç©ºï¼åæ§è¡ä»¥ä¸æä½ |
| | | if (task != null) |
| | | { |
| | | ConveyorLineTaskCommandWrite taskCommand = new ConveyorLineTaskCommandWrite() |
| | |
| | | WriteInteractiveSignal = task.TaskType == (int)TaskOutboundTypeEnum.Outbound ? (byte)Convert.ToSByte(2) : (byte)Convert.ToSByte(1) |
| | | }; |
| | | |
| | | // è¾åºæåä¿¡æ¯ï¼å
æ¬è¾é线åç§°ãä»»å¡å·ãæçæ¡ç ãå设å¤ä»£ç åä¸ä¸ç®æ å°å |
| | | var log = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{station.stationChildCode}ãè¾é线请æ±åºåº,ä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ã"; |
| | | var log = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{task.TaskNum}ã,æçæ¡ç ï¼ã{task.PalletCode}ãå·²å°è¾¾ã{station.stationChildCode}ãä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ãè¾é线,task{task.ToJsonString()}"; |
| | | |
| | | ConsoleHelper.WriteSuccessLine(log); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); |
| | |
| | | var result = SendCommand(taskCommand, conveyorLine, station.stationChildCode); |
| | | if (result) |
| | | { |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | } |
| | | |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è¾é线请æ±åºåºä¸ä¸å°å |
| | | /// </summary> |
| | | /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> |
| | | /// <param name="command">读åç请æ±ä¿¡æ¯</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | public void ConveyorLineInOrOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager station, Dt_Task task) |
| | | { |
| | | // æå°æåæ¥å¿ï¼æ¾ç¤ºå½å设å¤åç§°ãä»»å¡å·ãæçæ¡ç 以å请æ±åºåºä¸ä¸å°åçå设å¤ä»£ç |
| | | var log = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{station.stationChildCode}ãè¾é线请æ±åºåºå®æ"; |
| | | ConsoleHelper.WriteSuccessLine(log); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, log); |
| | | |
| | | // 妿任å¡åå¨ |
| | | if (task != null) |
| | | { |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// è¾é线请æ±åºåºä¸ä¸å°å |
| | | /// </summary> |
| | | /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> |
| | | /// <param name="command">读åç请æ±ä¿¡æ¯</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | public void RequestNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager station, Dt_Task task) |
| | | { |
| | | // æå°æåæ¥å¿ï¼æ¾ç¤ºå½å设å¤åç§°ãä»»å¡å·ãæçæ¡ç 以å请æ±åºåºä¸ä¸å°åçå设å¤ä»£ç |
| | | var log = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{station.stationChildCode}ãè¾é线请æ±åºåºä¸ä¸å°å"; |
| | | ConsoleHelper.WriteSuccessLine(log); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, log); |
| | | |
| | | // 妿任å¡åå¨ |
| | | 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 logs = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{station.stationChildCode}ãè¾é线请æ±åºåºä¸ä¸å°å,ä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ã"; |
| | | ConsoleHelper.WriteSuccessLine(logs); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, logs); |
| | | |
| | | |
| | | var result = SendCommand(taskCommand, conveyorLine, station.stationChildCode); |
| | | if (result) |
| | | { |
| | | Thread.Sleep(1000); |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// è¾é线åºåºå®æ |
| | | /// </summary> |
| | | /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> |
| | | /// <param name="command">读åç请æ±ä¿¡æ¯</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager station,Dt_Task task) |
| | | { |
| | | try |
| | | { |
| | | // æå°æåä¿¡æ¯ï¼è¡¨ç¤ºæçå·²å°è¾¾æå®è¾éçº¿å¹¶å®æåºåº |
| | | var logs = $"ã{conveyorLine.DeviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{station.stationChildCode}ãè¾é线åºåºå®æ"; |
| | | ConsoleHelper.WriteSuccessLine(logs); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, logs); |
| | | ConveyorLineTaskCommandWrite taskCommand = new ConveyorLineTaskCommandWrite() |
| | | { |
| | | TaskNum = 100, |
| | | TargetAddress = Convert.ToInt16(station.stationNextChildCode), |
| | | WriteInteractiveSignal = (byte)Convert.ToSByte(3) |
| | | }; |
| | | var result = SendCommand(taskCommand, conveyorLine, station.stationChildCode); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// è¾é线æ¥è¦ |
| | | /// </summary> |
| | |
| | | var task = _taskRepository.QueryFirst(x => x.TaskNum == command.TaskNum); |
| | | |
| | | |
| | | conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal,Convert.ToSByte(3), station.stationChildCode); |
| | | //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal,Convert.ToSByte(3), station.stationChildCode); |
| | | } |
| | | |
| | | public async Task LogAndWarn(string deviceName, string log, string color = "red") |
| | |
| | | |
| | | public bool SendCommand(ConveyorLineTaskCommandWrite taskCommand, CommonConveyorLine conveyorLine, string childDeviceCode) |
| | | { |
| | | conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, Convert.ToInt16(taskCommand.TargetAddress), childDeviceCode); |
| | | conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, Convert.ToInt16(taskCommand.TargetAddress), childDeviceCode); |
| | | Thread.Sleep(100); |
| | | conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTaskNum, Convert.ToInt16(taskCommand.TaskNum), childDeviceCode); |
| | | conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTaskNum, Convert.ToInt16(taskCommand.TaskNum), childDeviceCode); |
| | | Thread.Sleep(100); |
| | | conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(taskCommand.WriteInteractiveSignal), childDeviceCode); |
| | | for (int i = 0; i < 6; i++) |
| | | { |
| | | ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode); |
| | | if (command != null) |
| | | { |
| | | if (command.TaskNum == taskCommand.TaskNum && command.TargetAddress == taskCommand.TargetAddress) |
| | | { |
| | | WriteInfo(conveyorLine.DeviceName, $"åå
¥ä»»å¡æååå
¥æ¬¡æ°{i}åå
¥ä»»å¡ã{JsonConvert.SerializeObject(taskCommand)}ã"); |
| | | return true; |
| | | } |
| | | if (command.TargetAddress != taskCommand.TargetAddress) |
| | | { |
| | | conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, Convert.ToInt16(taskCommand.TargetAddress), childDeviceCode); |
| | | Thread.Sleep(100); |
| | | } |
| | | if (command.TaskNum != taskCommand.TaskNum) |
| | | { |
| | | conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTaskNum, taskCommand.TaskNum, childDeviceCode); Thread.Sleep(100); |
| | | } |
| | | |
| | | } |
| | | } |
| | | WriteInfo(conveyorLine.DeviceName, $"åå
¥ä»»å¡å¤±è´¥ä»»å¡å·ã{taskCommand.TaskNum}ãæçå·ã{taskCommand.Barcode}ãç®æ å°åã{taskCommand.TargetAddress}ãå½åèç¹ã{childDeviceCode}ã"); |
| | | return false; |
| | | return true; |
| | | } |
| | | } |
| | | } |