diff --git a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/AskTypeEnum.java b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/AskTypeEnum.java index f6ab501..7a005f5 100644 --- a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/AskTypeEnum.java +++ b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/AskTypeEnum.java @@ -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; diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/domain/BaseSession.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/domain/BaseSession.java index 52c525f..06cc46d 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/domain/BaseSession.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/domain/BaseSession.java @@ -30,7 +30,12 @@ public class BaseSession { protected FluxSink sink; /** - * 当前请求日志ID + * 当前链接请求日志ID + */ + protected String baseLogId; + + /** + * 当前请求日志ID(一个消息) */ protected String logId; diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/model/system/SystemTalkAnswerConfig.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/model/system/SystemTalkAnswerConfig.java index 7d706b5..111e237 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/model/system/SystemTalkAnswerConfig.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/model/system/SystemTalkAnswerConfig.java @@ -9,7 +9,7 @@ import java.util.concurrent.ConcurrentHashMap; @Data public class SystemTalkAnswerConfig { - ConcurrentHashMap exCommand; + ConcurrentHashMap exCommand; /** * 名字有长到段的排序 */ diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/system/SystemTalkAnswerConfigService.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/system/SystemTalkAnswerConfigService.java index 7f0f00b..d80fdde 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/system/SystemTalkAnswerConfigService.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/system/SystemTalkAnswerConfigService.java @@ -70,45 +70,29 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService{ 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 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()); + systemTalkAnswerConfig.setSystemTalkAnswerConfig(item); + + ReactiveQuery 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 selectSystemTalkAnswerConfigByRequest(SystemTalkAnswerConfigRequest request){ ReactiveQuery reactiveQuery = createQuery(); diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/enums/ActionPartSpeechEnum.java b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/enums/ActionPartSpeechEnum.java index c29fa01..07e0fdb 100644 --- a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/enums/ActionPartSpeechEnum.java +++ b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/enums/ActionPartSpeechEnum.java @@ -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); } } //找不到继续用原来的 diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/NlpService.java b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/NlpService.java index c6d147b..b5d6386 100644 --- a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/NlpService.java +++ b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/NlpService.java @@ -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())); }); diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java index a2c6391..30a9904 100644 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java @@ -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 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 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 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){ //断链后及时移除 diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/CustomerWebSocketHandler.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/CustomerWebSocketHandler.java index a3c8161..1ae763b 100644 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/CustomerWebSocketHandler.java +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/CustomerWebSocketHandler.java @@ -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 input = session.receive().map(webSocketMessage ->{ newMessage(webSocketMessage, userSession).contextWrite(context -> { @@ -113,7 +114,8 @@ public class CustomerWebSocketHandler implements WebSocketHandler { } private Mono 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); diff --git a/iot-modules/iot-customer-http-api/src/test/tmp/DeviceAlarmClockMusicController.java b/iot-modules/iot-customer-http-api/src/test/tmp/DeviceAlarmClockMusicController.java deleted file mode 100644 index 9e52393..0000000 --- a/iot-modules/iot-customer-http-api/src/test/tmp/DeviceAlarmClockMusicController.java +++ /dev/null @@ -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; -/** -*

-* 闹钟音乐Controller类 -*

-* -* @author wulin -* @since 2023-11-14 -*/ - -@RestController -@Slf4j -@RequestMapping("/DeviceAlarmClockMusic") -public class DeviceAlarmClockMusicController{ - - - @Autowired - private DeviceAlarmClockMusicService deviceAlarmClockMusicService; - @PostMapping("/info") - public Mono selectDeviceAlarmClockMusicByRequest(@RequestBody DeviceAlarmClockMusicRequest request){ - return deviceAlarmClockMusicService.selectDeviceAlarmClockMusicByRequest(request).map(d -> {return new DeviceAlarmClockMusicResp(d);}); - } - - - - @PostMapping("/list") - public Mono> selectDeviceAlarmClockMusicsByRequest(@RequestBody DeviceAlarmClockMusicRequest request){ - return deviceAlarmClockMusicService.selectDeviceAlarmClockMusicsByRequest(request).map(d -> { - PagerResult result = new PagerResult<>(); - result.setPageIndex(d.getPageIndex()); - result.setPageSize(d.getPageSize()); - result.setTotal(d.getTotal()); - List ds = d.getData().stream().map(new Function() { - @Override - public DeviceAlarmClockMusicResp apply(DeviceAlarmClockMusicEntity entity) { - return new DeviceAlarmClockMusicResp(entity); - } - } - - ).collect(Collectors.toList()); - result.setData(ds); - return result; - }); - } - - - - @GetMapping("/id") - public Mono selectDeviceAlarmClockMusicById(@RequestParam Long id){ - return deviceAlarmClockMusicService.selectDeviceAlarmClockMusicById(id).map(d -> {return new DeviceAlarmClockMusicResp(d);}); - } - - - - @PostMapping("/save") - public Mono insertDeviceAlarmClockMusic(@RequestBody DeviceAlarmClockMusicEntity entity){ - return deviceAlarmClockMusicService.insertDeviceAlarmClockMusic(entity); - } - - - - @PostMapping("/update") - public Mono updateDeviceAlarmClockMusicById(@RequestBody DeviceAlarmClockMusicEntity entity){ - return deviceAlarmClockMusicService.updateDeviceAlarmClockMusicById(entity); - } - - - - @PostMapping("/updateCover") - public Mono updateCoverDeviceAlarmClockMusicById(@RequestBody DeviceAlarmClockMusicEntity entity){ - return deviceAlarmClockMusicService.updateCoverDeviceAlarmClockMusicById(entity); - } - - - - @PostMapping("/delete") - public Mono deleteDeviceAlarmClockMusicById(@RequestParam Long id){ - return deviceAlarmClockMusicService.deleteDeviceAlarmClockMusicById(id); - } - - - -}