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