This commit is contained in:
Leo
2025-11-11 18:18:19 +08:00
parent 9d8f2ded0c
commit d73c7b6560

View File

@@ -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<String> 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<String> usedPhonesToday = stringRedisTemplate.opsForSet().members(usedPhonesKey);
// // 找出今天还没使用过的号码
// List<String> 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<String> 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();