RuoYi/ruoyi-tts/src/main/java/com.ruoyi.tts/task/VoicePlaybackTask.java

76 lines
2.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.ruoyi.tts.task;
import com.ruoyi.tts.exception.*;
import com.ruoyi.tts.jacob.VoicePlayback;
import com.ruoyi.tts.serial.SerialTool;
import com.ruoyi.tts.utils.ByteUtils;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
import java.util.TooManyListenersException;
/**
* @author GideonYeung
* @date 2020/6/24 11:42
*/
@Slf4j
@Component
@Configuration
@EnableScheduling
public class VoicePlaybackTask {
@Autowired
private RestTemplate restTemplate;
// 串口对象
private SerialPort mSerialport;
/**
* 2秒播放一次语音
*/
@Scheduled(fixedDelay = 3000)
private void configureTasks() throws SerialPortParameterFailureException, SerialPortOutputStreamCloseFailureException, NotSerialPortException, PortInUseException, NoSuchPortException, TooManyListenersException {
Map<String, Boolean> nodeValueMap = new HashMap<>();
try {
nodeValueMap = restTemplate.getForObject("http://127.0.0.1/icloud/nodeValue/getWmKey", Map.class);
} catch (HttpClientErrorException e) {
log.error("icloud暂无开启无法获取数据。");
}
boolean contains = nodeValueMap.values().contains(true);
byte[] bs;
SerialPort port = null;
if (contains) {
port = SerialTool.openPort("COM1", 9600);
//设定发送字符串
bs = ByteUtils.hex2Bytes("5501110000000168");
//打开串口
SerialTool.sendToPort(port, bs);
}
nodeValueMap.forEach((key, value) -> {
if (value) {
String message = key + "号机按下广播通知,请及时处理。";
log.info(message);
VoicePlayback.textToSpeech(message);
}
});
if (contains) {
//设定发送字符串
bs = ByteUtils.hex2Bytes("5501120000000169");
//关闭串口
SerialTool.sendToPort(port, bs);
SerialTool.closePort(port);
}
}
}