指令增加扩展不在需要分词器功能,优化websocket发送日志 时每次消息单独一个id

This commit is contained in:
wulin 2023-12-01 16:09:00 +08:00
parent 44dc5dfbea
commit 42d63fbfc2
9 changed files with 101 additions and 138 deletions

View File

@ -30,7 +30,8 @@ public enum AskTypeEnum {
QIU_GUO(300, "秋果专有名词"),
USER_CONFIG(301, "根据用户编号回答不同"),
IGNORE(400, "^^^"),//全部所有一切等忽略此
EXCOMMAND(2000, "扩展指令"),//全部所有一切等忽略此
EXCOMMAND(2000, "扩展指令"),//扩展指令
EX_EXCOMMAND(4000, "扩展的扩展指令"),//扩展指令
;
AskTypeEnum(Integer c, String n){
code = c;

View File

@ -30,7 +30,12 @@ public class BaseSession {
protected FluxSink<WebSocketMessage> sink;
/**
* 当前请求日志ID
* 当前链接请求日志ID
*/
protected String baseLogId;
/**
* 当前请求日志ID(一个消息)
*/
protected String logId;

View File

@ -9,7 +9,7 @@ import java.util.concurrent.ConcurrentHashMap;
@Data
public class SystemTalkAnswerConfig {
ConcurrentHashMap<String, SystemTalkAnswerConfigEntity> exCommand;
ConcurrentHashMap<String, SystemTalkAnswerConfig> exCommand;
/**
* 名字有长到段的排序
*/

View File

@ -70,45 +70,29 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService<Sy
reactiveQuery = reactiveQuery.lte("answer_type", AskTypeEnum.EXCOMMAND.getCode());
reactiveQuery.paging(0, MAX_COUT.intValue()).fetch().map(item ->{
if(item.getAnswerType() < AskTypeEnum.UPDATE.getCode()) {
SystemTalkAnswerConfig systemTalkAnswerConfig = new SystemTalkAnswerConfig();
systemTalkAnswerConfig.setSystemTalkAnswerConfig(item);
group.put(item.getAskKey(), systemTalkAnswerConfig);
}else if(item.getAnswerType().equals(AskTypeEnum.EXCOMMAND.getCode())) {
//group.put(item.getAskKey(), item);
SystemTalkAnswerConfig systemTalkAnswerConfig = new SystemTalkAnswerConfig();
systemTalkAnswerConfig.setExCommand(new ConcurrentHashMap<>());
systemTalkAnswerConfig.setSystemTalkAnswerConfig(item);
group.put(item.getAskKey(), systemTalkAnswerConfig);
ReactiveQuery<SystemTalkAnswerConfigEntity> reactiveQuery1 = createQuery();
reactiveQuery1 = reactiveQuery1.and("is_delete", 0);
reactiveQuery1 = reactiveQuery1.and("parent_id", item.getId());
reactiveQuery1 = reactiveQuery1.gte("answer_type", AskTypeEnum.EXCOMMAND.getCode());
reactiveQuery1.paging(0, MAX_COUT.intValue()).fetch().map(item1 ->{
item1.setAnswerType(item1.getAnswerType() % systemTalkAnswerConfig.getSystemTalkAnswerConfig().getAnswerType());
systemTalkAnswerConfig.getExCommand().put(item1.getAskKey(), item1);
return item1;
}).doFinally(signalType -> {
//systemTalkAnswerConfig.getExCommand()
systemTalkAnswerConfig.setKeys(
systemTalkAnswerConfig.getExCommand().keySet().stream().collect(Collectors.toList()));
systemTalkAnswerConfig.getKeys().sort((a, b) ->{
return b.length() - a.length();
});
log.info("配置扩展最多读取{}条,实际读取了:{},id:{}的{}条扩展指令",
MAX_COUT,
systemTalkAnswerConfig.getSystemTalkAnswerConfig().getAskKey(),
systemTalkAnswerConfig.getSystemTalkAnswerConfig().getId(),
systemTalkAnswerConfig.getExCommand().size());
}).subscribe();
if(item.getAnswerType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())) {
SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName();
systemTalkKeyAndDeviceName.setKey(item.getAskKey());
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.SYSTEM_COMMAND.getCode());
systemTalkKeyAndDeviceName.setIndex(commandList.size());
commandList.add(systemTalkKeyAndDeviceName);
groupCommand.add(item);
}else{
SystemTalkAnswerConfig systemTalkAnswerConfig = new SystemTalkAnswerConfig();
systemTalkAnswerConfig.setSystemTalkAnswerConfig(item);
group.put(item.getAskKey(), systemTalkAnswerConfig);
}
}else{
}else {
SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName();
systemTalkKeyAndDeviceName.setKey(item.getAskKey());
if(item.getAnswerType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())) {
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.SYSTEM_COMMAND.getCode());
}else{
//只要内容中含有改词的都直接使用系统配置回答而不会调用千问
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.QIUGUO_NAME.getCode());
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.QIUGUO_NAME.getCode());
if(item.getAnswerType().equals(AskTypeEnum.EXCOMMAND.getCode())) {
//扩展
group.put(item.getAskKey(), readExCommand(item));
//;
}
systemTalkKeyAndDeviceName.setIndex(commandList.size());
commandList.add(systemTalkKeyAndDeviceName);
@ -128,6 +112,46 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService<Sy
}
private SystemTalkAnswerConfig readExCommand(SystemTalkAnswerConfigEntity item){
SystemTalkAnswerConfig systemTalkAnswerConfig = new SystemTalkAnswerConfig();
systemTalkAnswerConfig.setExCommand(new ConcurrentHashMap<>());
systemTalkAnswerConfig.setSystemTalkAnswerConfig(item);
ReactiveQuery<SystemTalkAnswerConfigEntity> reactiveQuery1 = createQuery();
reactiveQuery1 = reactiveQuery1.and("is_delete", 0);
reactiveQuery1 = reactiveQuery1.and("parent_id", item.getId());
reactiveQuery1 = reactiveQuery1.gt("answer_type", AskTypeEnum.EXCOMMAND.getCode());
reactiveQuery1.paging(0, MAX_COUT.intValue()).fetch().map(item1 ->{
if(item1.getAnswerType().equals(AskTypeEnum.EX_EXCOMMAND.getCode())) {
//group.put(item.getAskKey(), item);
item1.setAnswerType(AskTypeEnum.EXCOMMAND.getCode());
systemTalkAnswerConfig.getExCommand().put(item1.getAskKey(), readExCommand(item1));
}else{
item1.setAnswerType(item1.getAnswerType() % systemTalkAnswerConfig.getSystemTalkAnswerConfig().getAnswerType());
SystemTalkAnswerConfig systemTalkAnswerConfig1 = new SystemTalkAnswerConfig();
systemTalkAnswerConfig1.setSystemTalkAnswerConfig(item1);
systemTalkAnswerConfig.getExCommand().put(item1.getAskKey(), systemTalkAnswerConfig1);
}
return item1;
}).doFinally(signalType -> {
//systemTalkAnswerConfig.getExCommand()
systemTalkAnswerConfig.setKeys(
systemTalkAnswerConfig.getExCommand().keySet().stream().collect(Collectors.toList()));
systemTalkAnswerConfig.getKeys().sort((a, b) ->{
return b.length() - a.length();
});
log.info("配置扩展最多读取{}条,实际读取了:{},id:{}的{}条扩展指令",
MAX_COUT,
systemTalkAnswerConfig.getSystemTalkAnswerConfig().getAskKey(),
systemTalkAnswerConfig.getSystemTalkAnswerConfig().getId(),
systemTalkAnswerConfig.getExCommand().size());
}).subscribe();
return systemTalkAnswerConfig;
}
public Mono<SystemTalkAnswerConfigEntity> selectSystemTalkAnswerConfigByRequest(SystemTalkAnswerConfigRequest request){
ReactiveQuery<SystemTalkAnswerConfigEntity> reactiveQuery = createQuery();

View File

@ -763,6 +763,14 @@ public enum ActionPartSpeechEnum implements IChinesePartSpeech{
action.setName(action.getAction());
actions.setA(1);
actions.setB(1);
}else if(command.getAnswerType().equals(AskTypeEnum.EXCOMMAND.getCode())){
return n.getAction(keyGroup,
command.getAskKey(),
actions,
action,
systemTalkAnswerConfigEntities,
includs,
commands);
}else{
Integer ignore = 0;
if(command.getAnswerType().equals(AskTypeEnum.IGNORE.getCode())){
@ -857,7 +865,16 @@ public enum ActionPartSpeechEnum implements IChinesePartSpeech{
if(entity.getExCommand() == null){
return entity.getSystemTalkAnswerConfig();
}else{
return getSystemTalkWithKey(entity, ask);
SystemTalkAnswerConfigEntity entity1 = getSystemTalkWithKey(entity, ask);
if(entity1.getAnswerType().equals(AskTypeEnum.EXCOMMAND.getCode())){
//扩展指令
if(entity1.getId().equals(entity.getSystemTalkAnswerConfig().getId())){
//没有找到相关的关键字了
return entity1;
}
return getSystemTalkWithKey(entity1.getAskKey(), keyGroup, ask);
}
return entity1;
}
}
return null;
@ -869,7 +886,7 @@ public enum ActionPartSpeechEnum implements IChinesePartSpeech{
//找到扩展指令
for (String key1 :systemTalkAnswerConfig.getKeys()){
if(ask.toLowerCase().contains(key1)){
return systemTalkAnswerConfig.getExCommand().get(key1);
return getSystemTalkWithKey(systemTalkAnswerConfig.getExCommand().get(key1), ask);
}
}
//找不到继续用原来的

View File

@ -258,8 +258,10 @@ public class NlpService {
}
if(actions.getActions().size() > 1){
actions.getActions().sort((a, b) -> {
if(a.getSystemTalkAnswerConfigEntity() == null || b.getSystemTalkAnswerConfigEntity() == null){
if(a.getSystemTalkAnswerConfigEntity() == null && b.getSystemTalkAnswerConfigEntity() != null){
return 1;
}else if(b.getSystemTalkAnswerConfigEntity() == null){
return -1;
}
return Integer.parseInt(String.valueOf(a.getSystemTalkAnswerConfigEntity().getKeyOrder() - b.getSystemTalkAnswerConfigEntity().getKeyOrder()));
});

View File

@ -105,12 +105,14 @@ public class BoxWebSocketHandler implements WebSocketHandler {
boxSession.setSession(session);
boxSession.setUserId(userId);
boxSession.setRobotId(userId);
boxSession.setLogId(headers.get(LogMdcConfiguration.PRINT_LOG_ID).get(0));
boxSession.setBaseLogId(headers.get(LogMdcConfiguration.PRINT_LOG_ID).get(0));
boxSession.setLogId(boxSession.getBaseLogId());
log.info("登录成功SN:{}", sn);
Mono<Void> input = session.receive().map(webSocketMessage ->{
newMessage(webSocketMessage, boxSession).contextWrite(context -> {
log.info("新的消息");
Context contextTmp = context.put(LogMdcConfiguration.PRINT_LOG_ID, boxSession.getLogId());
return contextTmp;
@ -149,7 +151,8 @@ public class BoxWebSocketHandler implements WebSocketHandler {
}
private Mono<Void> newMessage(WebSocketMessage webSocketMessage, BoxSession boxSession){
MDC.put(LogMdcConfiguration.PRINT_LOG_ID, boxSession.getLogId());
//MDC.put(LogMdcConfiguration.PRINT_LOG_ID, boxSession.getLogId());
boxSession.setLogId(boxSession.getBaseLogId() + "-" + (boxSession.getRequestId() + 1));
String text = webSocketMessage.getPayloadAsText();
log.info("设备端收到消息:{}", text);
BoxTalkMessage boxTalkMessage = JSONObject.parseObject(text, BoxTalkMessage.class);
@ -229,7 +232,7 @@ public class BoxWebSocketHandler implements WebSocketHandler {
private Mono<Void> disconnect(BoxSession boxSession){
MDC.put(LogMdcConfiguration.PRINT_LOG_ID, boxSession.getLogId());
//MDC.put(LogMdcConfiguration.PRINT_LOG_ID, boxSession.getLogId());
BoxSession boxSession1 = baseWebSocketService.getBoxSessionWithSn(boxSession.getSn());
if(boxSession == boxSession1){
//断链后及时移除

View File

@ -80,7 +80,8 @@ public class CustomerWebSocketHandler implements WebSocketHandler {
userSession.setCustomerIP(ip);
userSession.setRobotId(userId);
userSession.setSessionType(YesNo.YES.getCode());
userSession.setLogId(headers.get(LogMdcConfiguration.PRINT_LOG_ID).get(0));
userSession.setBaseLogId(headers.get(LogMdcConfiguration.PRINT_LOG_ID).get(0));
userSession.setLogId(userSession.getBaseLogId());
log.info("用户成功userId:{}", userId);
Mono<Void> input = session.receive().map(webSocketMessage ->{
newMessage(webSocketMessage, userSession).contextWrite(context -> {
@ -113,7 +114,8 @@ public class CustomerWebSocketHandler implements WebSocketHandler {
}
private Mono<Void> newMessage(WebSocketMessage webSocketMessage, UserSession userSession){
MDC.put(LogMdcConfiguration.PRINT_LOG_ID, userSession.getLogId());
//MDC.put(LogMdcConfiguration.PRINT_LOG_ID, userSession.getLogId());
userSession.setLogId(userSession.getBaseLogId() + "-" + (userSession.getRequestId() + 1));
String text = webSocketMessage.getPayloadAsText();
log.info("收到用户消息:{}", text);
UserTalkMessage userTalkMessage = JSONObject.parseObject(text, UserTalkMessage.class);

View File

@ -1,91 +0,0 @@
package com.admin.service.impl;
import java.util.Date;
import reactor.core.publisher.Mono;
import lombok.extern.slf4j.Slf4j;
import org.hswebframework.web.api.crud.entity.PagerResult;
import org.hswebframework.web.exception.BusinessException;
/**
* <p>
* 闹钟音乐Controller类
* </p>
*
* @author wulin
* @since 2023-11-14
*/
@RestController
@Slf4j
@RequestMapping("/DeviceAlarmClockMusic")
public class DeviceAlarmClockMusicController{
@Autowired
private DeviceAlarmClockMusicService deviceAlarmClockMusicService;
@PostMapping("/info")
public Mono<DeviceAlarmClockMusicResp> selectDeviceAlarmClockMusicByRequest(@RequestBody DeviceAlarmClockMusicRequest request){
return deviceAlarmClockMusicService.selectDeviceAlarmClockMusicByRequest(request).map(d -> {return new DeviceAlarmClockMusicResp(d);});
}
@PostMapping("/list")
public Mono<PagerResult<DeviceAlarmClockMusicResp>> selectDeviceAlarmClockMusicsByRequest(@RequestBody DeviceAlarmClockMusicRequest request){
return deviceAlarmClockMusicService.selectDeviceAlarmClockMusicsByRequest(request).map(d -> {
PagerResult<DeviceAlarmClockMusicResp> result = new PagerResult<>();
result.setPageIndex(d.getPageIndex());
result.setPageSize(d.getPageSize());
result.setTotal(d.getTotal());
List<DeviceAlarmClockMusicResp> ds = d.getData().stream().map(new Function<DeviceAlarmClockMusicEntity, DeviceAlarmClockMusicResp>() {
@Override
public DeviceAlarmClockMusicResp apply(DeviceAlarmClockMusicEntity entity) {
return new DeviceAlarmClockMusicResp(entity);
}
}
).collect(Collectors.toList());
result.setData(ds);
return result;
});
}
@GetMapping("/id")
public Mono<DeviceAlarmClockMusicResp> selectDeviceAlarmClockMusicById(@RequestParam Long id){
return deviceAlarmClockMusicService.selectDeviceAlarmClockMusicById(id).map(d -> {return new DeviceAlarmClockMusicResp(d);});
}
@PostMapping("/save")
public Mono<Integer> insertDeviceAlarmClockMusic(@RequestBody DeviceAlarmClockMusicEntity entity){
return deviceAlarmClockMusicService.insertDeviceAlarmClockMusic(entity);
}
@PostMapping("/update")
public Mono<Integer> updateDeviceAlarmClockMusicById(@RequestBody DeviceAlarmClockMusicEntity entity){
return deviceAlarmClockMusicService.updateDeviceAlarmClockMusicById(entity);
}
@PostMapping("/updateCover")
public Mono<Integer> updateCoverDeviceAlarmClockMusicById(@RequestBody DeviceAlarmClockMusicEntity entity){
return deviceAlarmClockMusicService.updateCoverDeviceAlarmClockMusicById(entity);
}
@PostMapping("/delete")
public Mono<Integer> deleteDeviceAlarmClockMusicById(@RequestParam Long id){
return deviceAlarmClockMusicService.deleteDeviceAlarmClockMusicById(id);
}
}