fix: 1.用户组同步保留expiry_time,PHP→Java同步时不丢掉到期时间 2.Java/PHP到期解析:数字=分钟,中文单位秒数计算修正为秒级

This commit is contained in:
2026-07-03 23:36:50 +08:00
parent 99d83f1b07
commit 8da0ac68c8
2 changed files with 33 additions and 5 deletions
+23 -4
View File
@@ -285,19 +285,38 @@ public class UserGroupManager {
* 仅写入本地DB(不触发PHP推送,用于PHP→Java同步避免循环)
*/
public boolean addPlayerLocal(String player, String groupName, String addedBy) {
return addPlayerLocalWithExpiry(player, groupName, addedBy, 0);
}
/**
* 仅写入本地DB(带到期时间,不触发PHP推送,用于PHP→Java同步)
* @param expiryTimeMillis 到期时间戳(ms), 0=永久
*/
public boolean addPlayerLocalWithExpiry(String player, String groupName, String addedBy, long expiryTimeMillis) {
UserGroupConfig cfg = getGroupConfig(groupName);
if (cfg == null) return false;
groupName = cfg.name;
long now = System.currentTimeMillis();
try {
PreparedStatement ps = db.prepareStatement(
"INSERT OR REPLACE INTO user_group_member "
+ "(player_name, group_name, added_by, added_time, expiry_time)"
+ " VALUES (?,?,?,?,0)");
PreparedStatement ps;
if (expiryTimeMillis == 0) {
ps = db.prepareStatement(
"INSERT OR REPLACE INTO user_group_member "
+ "(player_name, group_name, added_by, added_time, expiry_time)"
+ " VALUES (?,?,?,?,0)");
} else {
ps = db.prepareStatement(
"INSERT OR REPLACE INTO user_group_member "
+ "(player_name, group_name, added_by, added_time, expiry_time)"
+ " VALUES (?,?,?,?,?)");
}
ps.setString(1, player);
ps.setString(2, groupName);
ps.setString(3, addedBy);
ps.setLong(4, now);
if (expiryTimeMillis != 0) {
ps.setLong(5, expiryTimeMillis);
}
ps.executeUpdate();
ps.close();
} catch (SQLException e) {
+10 -1
View File
@@ -3483,9 +3483,18 @@ public class WebManager {
String obj = arrStr.substring(objStart + 1, i);
String player = extractJsonStringSafe(obj, "player_name");
String addedBy = extractJsonStringSafe(obj, "added_by");
String expiryStr = extractJsonField(obj, "expiry_time");
long expiryTime = 0;
if (!expiryStr.isEmpty()) {
try {
expiryTime = Long.parseLong(expiryStr) * 1000; // PHP存的是秒级时间戳
} catch (Exception e) {
// ignore
}
}
if (player != null && !player.isEmpty()) {
// 直接写入本地DB(不触发PHP推送,避免循环)
ugm.addPlayerLocal(player, groupName, addedBy);
ugm.addPlayerLocalWithExpiry(player, groupName, addedBy, expiryTime);
imported++;
}
objStart = -1;