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); + } + } + + } }