指令增加扩展不在需要分词器功能,优化websocket发送日志 时每次消息单独一个id
This commit is contained in:
parent
44dc5dfbea
commit
42d63fbfc2
@ -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;
|
||||
|
||||
@ -30,7 +30,12 @@ public class BaseSession {
|
||||
protected FluxSink<WebSocketMessage> sink;
|
||||
|
||||
/**
|
||||
* 当前请求日志ID
|
||||
* 当前链接请求日志ID
|
||||
*/
|
||||
protected String baseLogId;
|
||||
|
||||
/**
|
||||
* 当前请求日志ID(一个消息)
|
||||
*/
|
||||
protected String logId;
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@Data
|
||||
public class SystemTalkAnswerConfig {
|
||||
ConcurrentHashMap<String, SystemTalkAnswerConfigEntity> exCommand;
|
||||
ConcurrentHashMap<String, SystemTalkAnswerConfig> exCommand;
|
||||
/**
|
||||
* 名字有长到段的排序
|
||||
*/
|
||||
|
||||
@ -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();
|
||||
|
||||
}else{
|
||||
if(item.getAnswerType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())) {
|
||||
SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName();
|
||||
systemTalkKeyAndDeviceName.setKey(item.getAskKey());
|
||||
if(item.getAnswerType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())) {
|
||||
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 {
|
||||
SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName();
|
||||
systemTalkKeyAndDeviceName.setKey(item.getAskKey());
|
||||
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();
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
//找不到继续用原来的
|
||||
|
||||
@ -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()));
|
||||
});
|
||||
|
||||
@ -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){
|
||||
//断链后及时移除
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user