增加关键字支持
This commit is contained in:
parent
af64a3caaa
commit
e062a568ef
@ -19,7 +19,8 @@ public enum AskTypeEnum {
|
|||||||
BOX_OFF_LINE(102, "Box离线"),
|
BOX_OFF_LINE(102, "Box离线"),
|
||||||
DEVICE_UNBIND(103, "设备解绑"),
|
DEVICE_UNBIND(103, "设备解绑"),
|
||||||
DEVICE_BIND(104, "设备绑定成功"),
|
DEVICE_BIND(104, "设备绑定成功"),
|
||||||
COMMAND_N(200, "指令后必须跟的名称词")
|
COMMAND_N(200, "指令后必须跟的名称词"),
|
||||||
|
QIU_GUO(300, "秋果专有名词")
|
||||||
;
|
;
|
||||||
AskTypeEnum(Integer c, String n){
|
AskTypeEnum(Integer c, String n){
|
||||||
code = c;
|
code = c;
|
||||||
|
|||||||
@ -8,6 +8,7 @@ public enum KeyTypeEnum {
|
|||||||
SYSTEM_COMMAND(0, "系统自定义名称关键字"),
|
SYSTEM_COMMAND(0, "系统自定义名称关键字"),
|
||||||
USER_BIND_NAME(1, "用户绑定的设备名称"),
|
USER_BIND_NAME(1, "用户绑定的设备名称"),
|
||||||
SYSTEM_ACTION(2, "系统自定义动作动词"),
|
SYSTEM_ACTION(2, "系统自定义动作动词"),
|
||||||
|
QIUGUO_NAME(3, "秋果专有名称"),
|
||||||
;
|
;
|
||||||
KeyTypeEnum(Integer c, String n){
|
KeyTypeEnum(Integer c, String n){
|
||||||
code = c;
|
code = c;
|
||||||
|
|||||||
@ -8,4 +8,9 @@ public class TongYiCommunicationRest {
|
|||||||
private String text;//消息
|
private String text;//消息
|
||||||
private String onlyId;//唯一编码
|
private String onlyId;//唯一编码
|
||||||
private String status; //状态,0:已完成,1.未发起,2.发起中
|
private String status; //状态,0:已完成,1.未发起,2.发起中
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求序号
|
||||||
|
*/
|
||||||
|
private Long requestId = 0L;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,22 +51,27 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService<Sy
|
|||||||
*/
|
*/
|
||||||
private static List<SystemTalkAnswerConfigEntity> groupCommand = new ArrayList<>();
|
private static List<SystemTalkAnswerConfigEntity> groupCommand = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void initGroup() {
|
public void initGroup() {
|
||||||
log.info("初始化自定义回答缓存数据");
|
log.info("初始化自定义回答缓存数据");
|
||||||
group.clear();
|
group.clear();
|
||||||
|
groupCommand.clear();
|
||||||
ReactiveQuery<SystemTalkAnswerConfigEntity> reactiveQuery = createQuery();
|
ReactiveQuery<SystemTalkAnswerConfigEntity> reactiveQuery = createQuery();
|
||||||
reactiveQuery = reactiveQuery.and("is_delete", 0);
|
reactiveQuery = reactiveQuery.and("is_delete", 0);
|
||||||
|
|
||||||
reactiveQuery.paging(0, MAX_COUT.intValue()).fetch().map(item ->{
|
reactiveQuery.paging(0, MAX_COUT.intValue()).fetch().map(item ->{
|
||||||
if(item.getAnswerType() < AskTypeEnum.UPDATE.getCode()) {
|
if(item.getAnswerType() < AskTypeEnum.UPDATE.getCode()) {
|
||||||
group.put(item.getAskKey(), item);
|
group.put(item.getAskKey(), item);
|
||||||
}else if(item.getAnswerType().equals(AskTypeEnum.COMMAND_N.getCode())){
|
}else{
|
||||||
groupCommand.add(item);
|
groupCommand.add(item);
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}).doFinally(signalType -> {
|
}).doFinally(signalType -> {
|
||||||
log.info("配置最多读取{}条,实际读取了{}条自定义回答指令,指令后参数名称{}条", MAX_COUT, group.size(), groupCommand.size());
|
log.info("配置最多读取{}条,实际读取了{}条自定义回答指令,指令后参数名称{}条",
|
||||||
|
MAX_COUT,
|
||||||
|
group.size(),
|
||||||
|
groupCommand.size());
|
||||||
}).subscribeOn(Schedulers.single()).subscribe();
|
}).subscribeOn(Schedulers.single()).subscribe();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -152,7 +152,7 @@ public enum ChinesePartSpeechEnum implements IChinesePartSpeech{
|
|||||||
return nt.getAction(keyGroup, key, actions, action, systemTalkAnswerConfigEntities, includs, commands);
|
return nt.getAction(keyGroup, key, actions, action, systemTalkAnswerConfigEntities, includs, commands);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/*nz(5, "其他专名"){
|
nz(5, "其他专名"){
|
||||||
@Override
|
@Override
|
||||||
public Action getAction(ConcurrentHashMap<String, SystemTalkAnswerConfigEntity> keyGroup,
|
public Action getAction(ConcurrentHashMap<String, SystemTalkAnswerConfigEntity> keyGroup,
|
||||||
String key,
|
String key,
|
||||||
@ -161,9 +161,9 @@ public enum ChinesePartSpeechEnum implements IChinesePartSpeech{
|
|||||||
List<SystemTalkAnswerConfigEntity> systemTalkAnswerConfigEntities,
|
List<SystemTalkAnswerConfigEntity> systemTalkAnswerConfigEntities,
|
||||||
List<DeviceUserBindEntity> includs,
|
List<DeviceUserBindEntity> includs,
|
||||||
List<SystemTalkAnswerConfigEntity> commands){
|
List<SystemTalkAnswerConfigEntity> commands){
|
||||||
return action;
|
return n.getAction(keyGroup, key, actions, action, systemTalkAnswerConfigEntities, includs, commands);
|
||||||
}
|
}
|
||||||
},*/
|
},
|
||||||
n(6, "名词"){
|
n(6, "名词"){
|
||||||
@Override
|
@Override
|
||||||
public Action getAction(ConcurrentHashMap<String, SystemTalkAnswerConfigEntity> keyGroup,
|
public Action getAction(ConcurrentHashMap<String, SystemTalkAnswerConfigEntity> keyGroup,
|
||||||
@ -708,14 +708,25 @@ public enum ChinesePartSpeechEnum implements IChinesePartSpeech{
|
|||||||
List<SystemTalkAnswerConfigEntity> commands){
|
List<SystemTalkAnswerConfigEntity> commands){
|
||||||
//动词后面的名词只支持已经产生的action,后面的不要
|
//动词后面的名词只支持已经产生的action,后面的不要
|
||||||
int index = Integer.parseInt(key.replace("#", ""));
|
int index = Integer.parseInt(key.replace("#", ""));
|
||||||
action.setActionCommand(commands.get(index).getAskKey());
|
SystemTalkAnswerConfigEntity command = commands.get(index);
|
||||||
for (Action ac: actions.getActions()
|
if(command.getAnswerType().equals(AskTypeEnum.COMMAND_N.getCode())){
|
||||||
) {
|
action.setActionCommand(commands.get(index).getAskKey());
|
||||||
if(!StringUtils.isNotEmpty(ac.getActionCommand())){
|
for (Action ac: actions.getActions()
|
||||||
ac.setActionCommand(action.getActionCommand());
|
) {
|
||||||
|
if(!StringUtils.isNotEmpty(ac.getActionCommand())){
|
||||||
|
ac.setActionCommand(action.getActionCommand());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
//秋果专有名称
|
||||||
|
systemTalkAnswerConfigEntities.add(command);
|
||||||
|
action.setSystemTalkAnswerConfigEntity(command);
|
||||||
|
action.setAction(command.getAskKey());
|
||||||
|
action.setName(action.getAction());
|
||||||
|
actions.setA(1);
|
||||||
|
actions.setB(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -80,9 +80,11 @@ public class AliYunQianWen {
|
|||||||
|
|
||||||
}else{
|
}else{
|
||||||
lastGenerationResult = message;
|
lastGenerationResult = message;
|
||||||
|
msgManager.add(lastGenerationResult);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.info("千问回调异常{}", e);
|
log.info("千问回调异常{}", e);
|
||||||
|
qwenReplyResponse.setCode(500);
|
||||||
msgManager = new MessageManager(10);
|
msgManager = new MessageManager(10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -90,7 +92,7 @@ public class AliYunQianWen {
|
|||||||
@Override
|
@Override
|
||||||
public void onComplete() {
|
public void onComplete() {
|
||||||
if(lastGenerationResult != null){
|
if(lastGenerationResult != null){
|
||||||
msgManager.add(lastGenerationResult);
|
|
||||||
qwenReplyResponse.setResut(lastGenerationResult.getOutput().getChoices().get(0).getMessage().getContent());
|
qwenReplyResponse.setResut(lastGenerationResult.getOutput().getChoices().get(0).getMessage().getContent());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,6 +104,7 @@ public class AliYunQianWen {
|
|||||||
public void onError(Exception e) {
|
public void onError(Exception e) {
|
||||||
log.info("调用千问异常{}", e);
|
log.info("调用千问异常{}", e);
|
||||||
msgManager = new MessageManager(10);
|
msgManager = new MessageManager(10);
|
||||||
|
qwenReplyResponse.setCode(500);
|
||||||
semaphore.release();
|
semaphore.release();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -40,6 +40,7 @@ public class ActionTime {
|
|||||||
//*分钟
|
//*分钟
|
||||||
//*小时
|
//*小时
|
||||||
//*秒
|
//*秒
|
||||||
|
//*号
|
||||||
|
|
||||||
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
DateTimeFormatter df1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
DateTimeFormatter df1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|||||||
@ -40,83 +40,71 @@ public class NlpService {
|
|||||||
private static Integer MAX_COUT = 2000;
|
private static Integer MAX_COUT = 2000;
|
||||||
|
|
||||||
public Mono<Actions> getActionWithLacSingle(Long userId, String text){
|
public Mono<Actions> getActionWithLacSingle(Long userId, String text){
|
||||||
if(userId != null){
|
if(userId != null) {
|
||||||
DeviceUserBindRequest request = new DeviceUserBindRequest();
|
userId = 0L;
|
||||||
request.setUserId(userId);
|
|
||||||
//涂鸦设备
|
|
||||||
request.setDeviceType(DeviceTypeEnum.ELECTRIC_SOCKET.getCode());
|
|
||||||
request.setPageSize(MAX_COUT);
|
|
||||||
return deviceUserBindService.selectDeviceUserBindsByRequest(request).flatMap(deviceUserBindEntityPagerResult -> {
|
|
||||||
if(deviceUserBindEntityPagerResult.getData().size() > 0){
|
|
||||||
/*List<DeviceUserBindEntity> list = deviceUserBindEntityPagerResult.getData();
|
|
||||||
list.sort((a, b) -> {
|
|
||||||
return b.getBindName().length() - a.getBindName().length();
|
|
||||||
});//按照名称由长到短排序*/
|
|
||||||
List<DeviceUserBindEntity> includs = new ArrayList<>();
|
|
||||||
List<SystemTalkAnswerConfigEntity> commands = new ArrayList<>();
|
|
||||||
List<SystemTalkKeyAndDeviceName> systemTalkKeyAndDeviceNameList = new ArrayList<>();
|
|
||||||
int i = 0;
|
|
||||||
for(SystemTalkAnswerConfigEntity entity : systemTalkAnswerConfigService.getCommandList()){
|
|
||||||
SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName();
|
|
||||||
systemTalkKeyAndDeviceName.setKey(entity.getAskKey());
|
|
||||||
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.SYSTEM_COMMAND.getCode());
|
|
||||||
systemTalkKeyAndDeviceName.setIndex(i++);
|
|
||||||
systemTalkKeyAndDeviceNameList.add(systemTalkKeyAndDeviceName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*i = 0;
|
|
||||||
for(SystemTalkAnswerConfigEntity entity : systemTalkAnswerConfigService.getSystemTalkWithKeyGroup().values()){
|
|
||||||
SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName();
|
|
||||||
systemTalkKeyAndDeviceName.setKey(entity.getAskKey());
|
|
||||||
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.SYSTEM_ACTION.getCode());
|
|
||||||
systemTalkKeyAndDeviceName.setIndex(i++);
|
|
||||||
systemTalkKeyAndDeviceNameList.add(systemTalkKeyAndDeviceName);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
for(DeviceUserBindEntity entity : deviceUserBindEntityPagerResult.getData()){
|
|
||||||
SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName();
|
|
||||||
systemTalkKeyAndDeviceName.setKey(entity.getBindName());
|
|
||||||
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.USER_BIND_NAME.getCode());
|
|
||||||
systemTalkKeyAndDeviceName.setIndex(i++);
|
|
||||||
systemTalkKeyAndDeviceNameList.add(systemTalkKeyAndDeviceName);
|
|
||||||
}
|
|
||||||
//字符由长到短排序
|
|
||||||
systemTalkKeyAndDeviceNameList.sort((a, b) ->{
|
|
||||||
return b.getKey().length() - a.getKey().length();
|
|
||||||
});
|
|
||||||
|
|
||||||
String pText = text;
|
|
||||||
i = 0;
|
|
||||||
int j = 0;
|
|
||||||
for(SystemTalkKeyAndDeviceName sysTalkKeyAndDeviceName :systemTalkKeyAndDeviceNameList){
|
|
||||||
if(pText.indexOf(sysTalkKeyAndDeviceName.getKey()) >= 0){
|
|
||||||
//找到对应的名称
|
|
||||||
if(sysTalkKeyAndDeviceName.getType().equals(KeyTypeEnum.USER_BIND_NAME.getCode())){
|
|
||||||
//用户绑定设备名称
|
|
||||||
pText = pText.replace(sysTalkKeyAndDeviceName.getKey(), ">" + (i++) + ">");
|
|
||||||
includs.add(deviceUserBindEntityPagerResult.getData().get(sysTalkKeyAndDeviceName.getIndex()));
|
|
||||||
}else if(sysTalkKeyAndDeviceName.getType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())){
|
|
||||||
//是系统自定义动词后的名称
|
|
||||||
pText = pText.replace(sysTalkKeyAndDeviceName.getKey(), "#" + (j++) + "#");
|
|
||||||
commands.add(systemTalkAnswerConfigService.getCommandList().get(sysTalkKeyAndDeviceName.getIndex()));
|
|
||||||
}else{
|
|
||||||
//系统自定义动作
|
|
||||||
pText = pText.replace(sysTalkKeyAndDeviceName.getKey(), "<" + (j++) + "<");
|
|
||||||
commands.add(systemTalkAnswerConfigService.getCommandList().get(sysTalkKeyAndDeviceName.getIndex()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(includs.size() > 0) {
|
|
||||||
return getActions(pText, text, includs, commands);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return getActions(text, text, null, null);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
//20230928日记,后期改成先匹配用户的设备名称,再找动词
|
DeviceUserBindRequest request = new DeviceUserBindRequest();
|
||||||
return getActions(text, text, null, null);
|
request.setUserId(userId);
|
||||||
|
//涂鸦设备
|
||||||
|
request.setDeviceType(DeviceTypeEnum.ELECTRIC_SOCKET.getCode());
|
||||||
|
request.setPageSize(MAX_COUT);
|
||||||
|
return deviceUserBindService.selectDeviceUserBindsByRequest(request).flatMap(deviceUserBindEntityPagerResult -> {
|
||||||
|
List<DeviceUserBindEntity> includs = new ArrayList<>();
|
||||||
|
List<SystemTalkAnswerConfigEntity> systemIncluds = new ArrayList<>();
|
||||||
|
List<SystemTalkKeyAndDeviceName> systemTalkKeyAndDeviceNameList = new ArrayList<>();
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for(SystemTalkAnswerConfigEntity entity : systemTalkAnswerConfigService.getCommandList()){
|
||||||
|
SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName();
|
||||||
|
systemTalkKeyAndDeviceName.setKey(entity.getAskKey());
|
||||||
|
if(entity.getAnswerType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())) {
|
||||||
|
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.SYSTEM_COMMAND.getCode());
|
||||||
|
}else{
|
||||||
|
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.QIUGUO_NAME.getCode());
|
||||||
|
}
|
||||||
|
systemTalkKeyAndDeviceName.setIndex(i++);
|
||||||
|
systemTalkKeyAndDeviceNameList.add(systemTalkKeyAndDeviceName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
for(DeviceUserBindEntity entity : deviceUserBindEntityPagerResult.getData()){
|
||||||
|
SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName();
|
||||||
|
systemTalkKeyAndDeviceName.setKey(entity.getBindName());
|
||||||
|
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.USER_BIND_NAME.getCode());
|
||||||
|
systemTalkKeyAndDeviceName.setIndex(i++);
|
||||||
|
systemTalkKeyAndDeviceNameList.add(systemTalkKeyAndDeviceName);
|
||||||
|
}
|
||||||
|
//字符由长到短排序
|
||||||
|
systemTalkKeyAndDeviceNameList.sort((a, b) ->{
|
||||||
|
return b.getKey().length() - a.getKey().length();
|
||||||
|
});
|
||||||
|
|
||||||
|
String pText = text;
|
||||||
|
i = 0;
|
||||||
|
int j = 0;
|
||||||
|
for(SystemTalkKeyAndDeviceName sysTalkKeyAndDeviceName :systemTalkKeyAndDeviceNameList){
|
||||||
|
if(pText.indexOf(sysTalkKeyAndDeviceName.getKey()) >= 0){
|
||||||
|
//找到对应的名称
|
||||||
|
if(sysTalkKeyAndDeviceName.getType().equals(KeyTypeEnum.USER_BIND_NAME.getCode())){
|
||||||
|
//用户绑定设备名称
|
||||||
|
pText = pText.replace(sysTalkKeyAndDeviceName.getKey(), ">" + (i++) + ">");
|
||||||
|
includs.add(deviceUserBindEntityPagerResult.getData().get(sysTalkKeyAndDeviceName.getIndex()));
|
||||||
|
}else{// if(sysTalkKeyAndDeviceName.getType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())){
|
||||||
|
//是系统自定义动词后的名称
|
||||||
|
pText = pText.replace(sysTalkKeyAndDeviceName.getKey(), "#" + (j++) + "#");
|
||||||
|
systemIncluds.add(systemTalkAnswerConfigService.getCommandList().get(sysTalkKeyAndDeviceName.getIndex()));
|
||||||
|
}/*else{
|
||||||
|
//秋果专有名称
|
||||||
|
pText = pText.replace(sysTalkKeyAndDeviceName.getKey(), "<" + (j++) + "<");
|
||||||
|
qiuguoNames.add(systemTalkAnswerConfigService.getQiuGuoOnlyList().get(sysTalkKeyAndDeviceName.getIndex()));
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return getActions(pText, text, includs, systemIncluds);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Mono<Actions> getActions(String text, String recordText,
|
public Mono<Actions> getActions(String text, String recordText,
|
||||||
|
|||||||
@ -53,7 +53,7 @@ public class QWenService {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.info("调用千问异常{}", e);
|
log.info("调用千问异常{}", e);
|
||||||
qWenReplyResponse.setCode(500);
|
qWenReplyResponse.setCode(500);
|
||||||
//throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
|
||||||
}
|
}
|
||||||
return qWenReplyResponse;
|
return qWenReplyResponse;
|
||||||
|
|||||||
@ -43,4 +43,9 @@ public class BaseSession {
|
|||||||
* 用户登录时同步
|
* 用户登录时同步
|
||||||
*/
|
*/
|
||||||
protected MusicResp music;
|
protected MusicResp music;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用千问请求序号,每次确定调用前++
|
||||||
|
*/
|
||||||
|
protected Long requestId = 0L;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -75,9 +75,11 @@ public class BaseWebSocketProcess {
|
|||||||
protected static String apiToken = "api-token";
|
protected static String apiToken = "api-token";
|
||||||
|
|
||||||
private void toQianWen(Action action, BaseSession baseSession){
|
private void toQianWen(Action action, BaseSession baseSession){
|
||||||
|
baseSession.setRequestId(baseSession.getRequestId() + 1);
|
||||||
TongYiCommunicationRest tongYiCommunicationRest = new TongYiCommunicationRest();
|
TongYiCommunicationRest tongYiCommunicationRest = new TongYiCommunicationRest();
|
||||||
tongYiCommunicationRest.setText(action.getAsk());
|
tongYiCommunicationRest.setText(action.getAsk());
|
||||||
tongYiCommunicationRest.setStatus("2");
|
tongYiCommunicationRest.setStatus("2");
|
||||||
|
tongYiCommunicationRest.setRequestId(baseSession.getRequestId());
|
||||||
if(this instanceof BoxWebSocketHandler){
|
if(this instanceof BoxWebSocketHandler){
|
||||||
tongYiCommunicationRest.setOnlyId(baseSession.getSn());
|
tongYiCommunicationRest.setOnlyId(baseSession.getSn());
|
||||||
}else{
|
}else{
|
||||||
@ -85,18 +87,28 @@ public class BaseWebSocketProcess {
|
|||||||
}
|
}
|
||||||
qwenService.communication(tongYiCommunicationRest, message ->{
|
qwenService.communication(tongYiCommunicationRest, message ->{
|
||||||
//通知到客户端
|
//通知到客户端
|
||||||
|
if(tongYiCommunicationRest.getRequestId().equals(baseSession.getRequestId())){
|
||||||
|
message = message.replace("AI语言模型", "果宝儿Box");
|
||||||
|
normalSendMsg(baseSession, message, AskTypeEnum.TTS.getCode());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
log.info("已经有新的请求,不在推送到客户端SN:{} userId:{}", baseSession.getSn(), baseSession.getUserId());
|
||||||
|
|
||||||
normalSendMsg(baseSession, message, AskTypeEnum.TTS.getCode());
|
|
||||||
}).map(data ->{
|
}).map(data ->{
|
||||||
if(data.getCode() == 200){
|
if(data.getCode() == 200){
|
||||||
log.info("千问正常结束{}", data.getResut());
|
log.info("千问正常结束");
|
||||||
//保存记录
|
//保存记录
|
||||||
|
DeviceUserTalkRecordEntity talkRecord = new DeviceUserTalkRecordEntity();
|
||||||
|
talkRecord.setAskType(AskTypeEnum.TTS.getCode());
|
||||||
|
talkRecord.setAskValue(action.getAsk());
|
||||||
|
talkRecord.setAskKey(action.getAction());
|
||||||
|
talkRecord.setAnswerValue(data.getResut());
|
||||||
|
talkRecord.setUserId(baseSession.getUserId());
|
||||||
|
talkRecord.setDeviceId(baseSession.getDeviceId());
|
||||||
|
deviceUserTalkRecordService.insertDeviceUserTalkRecord(talkRecord).subscribe();
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
sendMessage(action, baseSession, "我还在努力学习中,暂时无法理解", AskTypeEnum.TTS.getCode());
|
sendMessage(action, baseSession, "我还在努力学习中,暂时无法理解", AskTypeEnum.TTS.getCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}).subscribeOn(Schedulers.boundedElastic()).subscribe();
|
}).subscribeOn(Schedulers.boundedElastic()).subscribe();
|
||||||
}
|
}
|
||||||
@ -109,14 +121,18 @@ public class BaseWebSocketProcess {
|
|||||||
action.setAsk(actions.getRecordText());
|
action.setAsk(actions.getRecordText());
|
||||||
action.setAction(actions.getRecordText());
|
action.setAction(actions.getRecordText());
|
||||||
toQianWen(action, baseSession);
|
toQianWen(action, baseSession);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
boolean isToQianWen = false;
|
||||||
for (Action action : actions.getActions()
|
for (Action action : actions.getActions()
|
||||||
) {
|
) {
|
||||||
log.info("匹配到自定义指令{}", action.getSystemTalkAnswerConfigEntity());
|
log.info("匹配到自定义指令{}", action.getSystemTalkAnswerConfigEntity());
|
||||||
if(action.getSystemTalkAnswerConfigEntity() == null){
|
if(action.getSystemTalkAnswerConfigEntity() == null){
|
||||||
log.info("调用千问");
|
if(!isToQianWen){
|
||||||
toQianWen(action, baseSession);
|
isToQianWen = true;;
|
||||||
|
log.info("调用千问,千问只能调用一边");
|
||||||
|
toQianWen(action, baseSession);
|
||||||
|
}
|
||||||
//
|
//
|
||||||
}else if(action.getSystemTalkAnswerConfigEntity().getAnswerType().equals(AskTypeEnum.IOT.getCode())){
|
}else if(action.getSystemTalkAnswerConfigEntity().getAnswerType().equals(AskTypeEnum.IOT.getCode())){
|
||||||
|
|
||||||
@ -257,6 +273,10 @@ public class BaseWebSocketProcess {
|
|||||||
sendMessage(action, baseSession, resp);
|
sendMessage(action, baseSession, resp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}else if(action.getSystemTalkAnswerConfigEntity().getAnswerType().equals(AskTypeEnum.TTS.getCode())){
|
||||||
|
sendMessage(action, baseSession, action.getSystemTalkAnswerConfigEntity().getAnswerValue(), AskTypeEnum.TTS.getCode());
|
||||||
|
}else if(action.getSystemTalkAnswerConfigEntity().getAnswerType().equals(AskTypeEnum.QIU_GUO.getCode())){
|
||||||
|
sendMessage(action, baseSession, action.getSystemTalkAnswerConfigEntity().getAnswerValue(), AskTypeEnum.TTS.getCode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -330,7 +350,7 @@ public class BaseWebSocketProcess {
|
|||||||
log.info("推送Box播放音乐");
|
log.info("推送Box播放音乐");
|
||||||
BoxSession boxSession = getBoxSessionWithSn(baseSession.getSn());
|
BoxSession boxSession = getBoxSessionWithSn(baseSession.getSn());
|
||||||
if(boxSession != null){
|
if(boxSession != null){
|
||||||
boxSession.getSink().next(baseSession.getSession().textMessage(JSONObject.toJSONString(resp)));
|
sendMsg(baseSession, JSONObject.toJSONString(resp));
|
||||||
//记录音乐状态
|
//记录音乐状态
|
||||||
if(resp.getMusic().getPlay().equals(PlayEnum.STOP.getCode())){
|
if(resp.getMusic().getPlay().equals(PlayEnum.STOP.getCode())){
|
||||||
//去掉内存中音乐同步对象
|
//去掉内存中音乐同步对象
|
||||||
|
|||||||
@ -138,7 +138,11 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void errorLogin(BaseSession boxSession, ReactiveValueOperations<String, String> operations, String sn){
|
||||||
|
//清除异常redis
|
||||||
|
operations.delete(RedisConstans.DEVICE_INFO + sn).subscribe();//不需要时间
|
||||||
|
closeSendMsg(boxSession, "异常,请重新登录", AskTypeEnum.TTS.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
private void checkToken(BoxSession boxSession, String sn, Long linkTime, String signature, Long userId){
|
private void checkToken(BoxSession boxSession, String sn, Long linkTime, String signature, Long userId){
|
||||||
ReactiveValueOperations<String, String> operations = reactiveStringRedisTemplate.opsForValue();
|
ReactiveValueOperations<String, String> operations = reactiveStringRedisTemplate.opsForValue();
|
||||||
@ -146,12 +150,15 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock
|
|||||||
if(com.qiuguo.iot.base.utils.StringUtils.isNotBlank(s)){
|
if(com.qiuguo.iot.base.utils.StringUtils.isNotBlank(s)){
|
||||||
try{
|
try{
|
||||||
DeviceInfoEntity dv = JSONObject.parseObject(s, DeviceInfoEntity.class);
|
DeviceInfoEntity dv = JSONObject.parseObject(s, DeviceInfoEntity.class);
|
||||||
|
if(dv.getId() == null){
|
||||||
|
log.info("redis设备缓存异常,清楚");
|
||||||
|
errorLogin(boxSession, operations, sn);
|
||||||
|
}
|
||||||
return Mono.just(dv);
|
return Mono.just(dv);
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
log.info("转换异常,清除redis。下次连接成功{}", e);
|
log.info("转换异常,清除redis。下次连接成功{}", e);
|
||||||
//清除异常redis
|
|
||||||
operations.set(RedisConstans.DEVICE_INFO + sn, "").subscribe();//不需要时间
|
errorLogin(boxSession, operations, sn);
|
||||||
closeSendMsg(boxSession, "异常,请重新登录", AskTypeEnum.TTS.getCode());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DeviceInfoRequest request = new DeviceInfoRequest();
|
DeviceInfoRequest request = new DeviceInfoRequest();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user