1
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user