From 74fe8129355747a980fe6afaf01fec5b847deee7 Mon Sep 17 00:00:00 2001 From: wulin Date: Wed, 22 Nov 2023 09:59:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E9=97=B9=E9=92=9F=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E5=AD=97=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E6=97=B6=E9=97=B4=E8=B0=83=E7=94=A8=E5=8D=83=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/AlarmClockActionCommand.java | 7 +++- .../qiuguo/iot/third/nlp/AliYunXingChen.java | 5 +++ .../third/service/TongYiXinChenService.java | 41 ++++++++++++++++--- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/command/AlarmClockActionCommand.java b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/command/AlarmClockActionCommand.java index 30bb3d1..d043cd8 100644 --- a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/command/AlarmClockActionCommand.java +++ b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/command/AlarmClockActionCommand.java @@ -60,7 +60,12 @@ public class AlarmClockActionCommand extends ActionCommand implements IActionCom return Mono.just(false); } ActionTime actionTime = action.getTime(); - + if(actionTime == null){ + log.info("闹钟关键字没有时间,调用千问"); + return toTongYi(action, baseSession, AskTypeEnum.TTS.getCode(), actionSendMessage).flatMap(b -> { + return Mono.empty(); + }); + } DeviceAlarmClockRecordRequest request; Integer day = null; diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/AliYunXingChen.java b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/AliYunXingChen.java index 9733589..ab8f217 100644 --- a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/AliYunXingChen.java +++ b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/AliYunXingChen.java @@ -35,6 +35,10 @@ public class AliYunXingChen { */ ChatApiSub api; + /** + * 时间戳,超过一定时间且未更新的。那么将被清理 + */ + Long timestamp = System.currentTimeMillis(); List messages = new ArrayList<>(50); @@ -89,6 +93,7 @@ public class AliYunXingChen { private Mono sendMsg(IQianWen onNext, QWenReplyResponse qwenReplyResponse){ + timestamp = System.currentTimeMillis();//更新最后使用时间 chatReqParams.setMessages(messages); qwenReplyResponse.setCode(200); try { diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/TongYiXinChenService.java b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/TongYiXinChenService.java index b34253a..7897876 100644 --- a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/TongYiXinChenService.java +++ b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/TongYiXinChenService.java @@ -18,13 +18,11 @@ import org.springframework.data.redis.core.ReactiveValueOperations; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import javax.annotation.Resource; import java.time.Duration; -import java.util.Date; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -37,6 +35,15 @@ public class TongYiXinChenService implements ITongYi{ protected static ConcurrentHashMap qianwenGroup = new ConcurrentHashMap<>(); + /** + * 超过该时间还未发送消息的将被剔除 + */ + static Long TIME_OUT = 60000L; + + public TongYiXinChenService(){ + //checkOutTime().subscribeOn(Schedulers.newSingle("tongyi-xinchen-clean")).subscribe(); + } + @Override public Mono communication(TongYiCommunicationRest rest, IQianWen onNext){ AliYunXingChen aliXingChen = null; @@ -53,7 +60,31 @@ public class TongYiXinChenService implements ITongYi{ return aliXingChen.sendMessage(rest.getText(), onNext, qWenReplyResponse/*, reactiveStringRedisTemplate*/).flatMap(b -> { return Mono.just(qWenReplyResponse); }); - } + private Mono checkOutTime(){ + log.info("开启清理内存数据任务"); + List keys = new ArrayList<>(); + while(true){ + for (String key: qianwenGroup.keySet() + ) { + AliYunXingChen aliYunXingChen = qianwenGroup.get(key); + Long now = System.currentTimeMillis(); + if(now - aliYunXingChen.getTimestamp() > TIME_OUT){ + keys.add(key); + } + } + log.info("需要清除内存中:{}数据", keys.size()); + for(String key: keys){ + qianwenGroup.remove(key); + } + keys.clear(); + try { + Thread.sleep(5000); + }catch (Exception e){ + log.info("定时清理内存中数据异常{}", e); + } + } + + } }