This commit is contained in:
雷欧(林平凡)
2025-02-26 15:37:15 +08:00
parent d8c3450426
commit 333551f4a0

View File

@@ -1152,27 +1152,30 @@ public class JDUtil {
*
* */
@Scheduled(fixedRate = 60000) // 每分钟执行一次
public void cleanUpTimeoutStates() {
public void cleanUpTimeoutStates() {
LocalDateTime now = LocalDateTime.now();
Objects.requireNonNull(redisTemplate.keys(INTERACTION_STATE_PREFIX + "*")).forEach(key -> {
redisTemplate.keys(INTERACTION_STATE_PREFIX + "*").forEach(key -> {
String stateJson = redisTemplate.opsForValue().get(key);
try {
UserInteractionState state = objectMapper.readValue(stateJson, UserInteractionState.class);
LocalDateTime lastInteractionTime = LocalDateTime.parse(state.getLastInteractionTime(), DATE_TIME_FORMATTER);
if (ChronoUnit.MINUTES.between(lastInteractionTime, now) > TIMEOUT_MINUTES) {
redisTemplate.delete(key);
logger.debug("Deleted timeout state for key: {}", key);
}
} catch (Exception e) {
logger.error("Error parsing interaction state: " + e.getMessage());
}
});
}
public void handleUserInteraction(String fromWxid, String message) {
}
public void handleUserInteraction(String fromWxid, String message) {
String key = INTERACTION_STATE_PREFIX + fromWxid;
String stateJson = redisTemplate.opsForValue().get(key);
UserInteractionState state;
if (stateJson == null) {
state = new UserInteractionState();
logger.debug("New interaction state created for user: {}", fromWxid);
} else {
try {
state = objectMapper.readValue(stateJson, UserInteractionState.class);
@@ -1181,6 +1184,7 @@ public void handleUserInteraction(String fromWxid, String message) {
LocalDateTime lastInteractionTime = LocalDateTime.parse(state.getLastInteractionTime(), DATE_TIME_FORMATTER);
if (ChronoUnit.MINUTES.between(lastInteractionTime, now) > TIMEOUT_MINUTES) {
redisTemplate.delete(key);
logger.debug("Deleted timeout state for user: {}", fromWxid);
state = new UserInteractionState();
}
} catch (Exception e) {
@@ -1195,6 +1199,7 @@ public void handleUserInteraction(String fromWxid, String message) {
if ("消毒柜".equals(message)) {
wxUtil.sendTextMessage(fromWxid, "1查询消毒柜订单2输入新的订单3修改订单", 1, fromWxid);
state.setCurrentState("DISINFECTANT_CABINET");
logger.debug("User {} entered DISINFECTANT_CABINET state", fromWxid);
}
break;
case "DISINFECTANT_CABINET":
@@ -1203,34 +1208,41 @@ public void handleUserInteraction(String fromWxid, String message) {
// 查询消毒柜订单的逻辑
wxUtil.sendTextMessage(fromWxid, "查询消毒柜订单的逻辑", 1, fromWxid);
state.setCurrentState("INIT");
logger.debug("User {} queried disinfectant cabinet orders", fromWxid);
break;
case "2":
// 输入新的订单的逻辑
wxUtil.sendTextMessage(fromWxid, "输入新的订单的逻辑", 1, fromWxid);
state.setCurrentState("INIT");
logger.debug("User {} input new disinfectant cabinet order", fromWxid);
break;
case "3":
// 修改订单的逻辑
wxUtil.sendTextMessage(fromWxid, "修改订单的逻辑", 1, fromWxid);
state.setCurrentState("INIT");
logger.debug("User {} modified disinfectant cabinet order", fromWxid);
break;
default:
wxUtil.sendTextMessage(fromWxid, "无效的选择,请重新选择", 1, fromWxid);
logger.debug("User {} made invalid choice: {}", fromWxid, message);
break;
}
break;
default:
wxUtil.sendTextMessage(fromWxid, "无效的状态,请重新开始对话", 1, fromWxid);
state.setCurrentState("INIT");
logger.debug("User {} reset to INIT state due to invalid state", fromWxid);
break;
}
try {
redisTemplate.opsForValue().set(key, objectMapper.writeValueAsString(state), TIMEOUT_MINUTES, TimeUnit.MINUTES);
logger.debug("Saved interaction state for user {}: {}", fromWxid, state);
} catch (Exception e) {
logger.error("Error saving interaction state: " + e.getMessage());
}
}
}
}