diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/InstructionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/InstructionServiceImpl.java index ea3da81..873b26d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/InstructionServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/InstructionServiceImpl.java @@ -23,6 +23,7 @@ import java.util.stream.Collectors; import org.springframework.data.redis.core.StringRedisTemplate; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; /** * 将 jd 项目中 JDUtil 的指令能力,抽取为无微信依赖的本地执行版。 @@ -609,27 +610,33 @@ public class InstructionServiceImpl implements IInstructionService { // 产品京东配置已迁移到Redis,通过productJdConfigService获取 private static final List phoneWithTF = new ArrayList<>(); + private static final AtomicInteger tfPhoneIndex = new AtomicInteger(0); static { /* -13103996539 -15514755615 -17746927935 -13140433517 -17746921532 -15514786055 +13723151190 +18839187854 +15639125541 +13243039070 */ - phoneWithTF.add("13103996539"); - phoneWithTF.add("15514755615"); - phoneWithTF.add("17746927935"); - phoneWithTF.add("13140433517"); - phoneWithTF.add("17746921532"); - phoneWithTF.add("15514786055"); + phoneWithTF.add("13723151190"); + phoneWithTF.add("18839187854"); + phoneWithTF.add("15639125541"); + phoneWithTF.add("13243039070"); } -private String handleTF(String input) { + private String nextTfPhone(String defaultPhone) { + if (phoneWithTF.isEmpty()) { + return defaultPhone; + } + final int size = phoneWithTF.size(); + int currentIndex = tfPhoneIndex.getAndUpdate(value -> (value + 1) % size); + return phoneWithTF.get(currentIndex); + } + + private String handleTF(String input) { String body = input.replaceFirst("^TF\\s*", ""); body = body.replaceAll("[啊阿]", ""); String[] lines = body.split("\\r?\\n+"); @@ -663,65 +670,29 @@ private String handleTF(String input) { // 提取电话(第7个字段) String phone = parts[6]; - //每天可以使用 phoneWithTF 中的多个不同号码,每个号码只用一次 - // if ("13243039070".equals(phone) || "17530176250".equals(phone)) { - // String today = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new Date()); - // String usedPhonesKey = "phone_used_today:" + today; - - // if (stringRedisTemplate != null) { - // try { - // // 获取今天已经使用过的号码集合 - // Set usedPhonesToday = stringRedisTemplate.opsForSet().members(usedPhonesKey); - - // // 找出今天还没使用过的号码 - // List availablePhones = new ArrayList<>(); - // for (String p : phoneWithTF) { - // if (usedPhonesToday == null || !usedPhonesToday.contains(p)) { - // availablePhones.add(p); - // } - // } - - // if (!availablePhones.isEmpty()) { - // // 随机选择一个今天还没用过的号码 - // phone = availablePhones.get(new Random().nextInt(availablePhones.size())); - // // 记录今天使用的号码(24小时后自动过期) - // stringRedisTemplate.opsForSet().add(usedPhonesKey, phone); - // stringRedisTemplate.expire(usedPhonesKey, 1, TimeUnit.DAYS); - // } else { - // // phoneWithTF 中的号码今天都用完了,使用备用号码(轮换使用) - // String backupUsedKey = "backup_phone_used_today:" + today; - // Set backupUsedToday = stringRedisTemplate.opsForSet().members(backupUsedKey); - - // // 检查两个备用号码哪个还没用过 - // if (backupUsedToday == null || !backupUsedToday.contains("15639125541")) { - // phone = "15639125541"; - // } else if (!backupUsedToday.contains("13243039070")) { - // phone = "13243039070"; - // } else { - // // 两个备用号码今天都用过了,继续轮换使用 - // String lastBackupKey = "last_backup_phone:" + today; - // String lastBackup = stringRedisTemplate.opsForValue().get(lastBackupKey); - // if ("15639125541".equals(lastBackup)) { - // phone = "13243039070"; - // } else { - // phone = "15639125541"; - // } - // } - - // // 记录今天使用的备用号码 - // stringRedisTemplate.opsForSet().add(backupUsedKey, phone); - // stringRedisTemplate.expire(backupUsedKey, 1, TimeUnit.DAYS); - // stringRedisTemplate.opsForValue().set("last_backup_phone:" + today, phone, 1, TimeUnit.DAYS); - // } - // } catch (Exception e) { - // // Redis操作失败,使用随机号码作为降级方案 - // phone = phoneWithTF.get(new Random().nextInt(phoneWithTF.size())); - // } - // } else { - // // Redis不可用,使用随机号码 - // phone = phoneWithTF.get(new Random().nextInt(phoneWithTF.size())); - // } - // } + // 将触发号码替换为 phoneWithTF 列表中的号码,按顺序循环 + if (("13243039070".equals(phone) || "17530176250".equals(phone)) && !phoneWithTF.isEmpty()) { + String originalPhone = phone; + if (stringRedisTemplate != null) { + try { + String sequenceKey = "phone_tf_cycle_index"; + Long index = stringRedisTemplate.opsForValue().increment(sequenceKey); + if (index == null) { + phone = nextTfPhone(originalPhone); + } else { + int phoneIndex = (int) ((index - 1) % phoneWithTF.size()); + phone = phoneWithTF.get(phoneIndex); + if (index % phoneWithTF.size() == 0) { + stringRedisTemplate.opsForValue().set(sequenceKey, "0"); + } + } + } catch (Exception e) { + phone = nextTfPhone(originalPhone); + } + } else { + phone = nextTfPhone(originalPhone); + } + } // 构建地址:姓名+电话+地址信息 StringBuilder address = new StringBuilder();