feat(client): 实现账号设备试用期管理功能

- 新增设备试用期过期时间字段及管理接口
- 实现试用期状态检查与过期提醒逻辑
- 支持账号类型区分试用与付费用户
- 添加设备注册时自动设置3天试用期- 实现VIP状态刷新与过期类型判断
-优化账号列表查询支持按客户端用户名过滤
- 更新客户端设备管理支持试用期控制- 完善登录流程支持试用期状态提示
-修复设备离线通知缺少用户名参数问题
- 调整账号默认设置清除逻辑关联客户端用户名
This commit is contained in:
2025-10-17 14:17:02 +08:00
parent 132299c4b7
commit 6e1b4d00de
18 changed files with 348 additions and 129 deletions

View File

@@ -54,36 +54,18 @@ public class BanmaOrderServiceImpl implements IBanmaOrderService {
builder.readTimeout(Duration.ofSeconds(10));
restTemplate = builder.build();
}
@SuppressWarnings("unchecked")
private void fetchTokenFromServer(Long accountId) {
ResponseEntity<Map> resp = restTemplate.getForEntity(RUOYI_ADMIN_BASE + "/tool/banma/accounts", Map.class);
Object body = resp.getBody();
if (body == null) return;
Object data = ((Map<String, Object>) body).get("data");
List<Map<String, Object>> list;
if (data instanceof List) {
list = (List<Map<String, Object>>) data;
} else if (body instanceof Map && ((Map) body).get("list") instanceof List) {
list = (List<Map<String, Object>>) ((Map) body).get("list");
} else {
return;
}
if (list.isEmpty()) return;
Map<String, Object> picked;
if (accountId != null) {
picked = list.stream().filter(m -> Objects.equals(((Number) m.get("id")).longValue(), accountId)).findFirst().orElse(null);
if (picked == null) return;
} else {
picked = list.stream()
.filter(m -> Objects.equals(((Number) m.getOrDefault("status", 1)).intValue(), 1))
.sorted((a,b) -> Integer.compare(((Number) b.getOrDefault("isDefault", 0)).intValue(), ((Number) a.getOrDefault("isDefault", 0)).intValue()))
.findFirst().orElse(list.get(0));
}
Object token = picked.get("token");
if (token instanceof String && !((String) token).isEmpty()) {
String t = (String) token;
currentAuthToken = t.startsWith("Bearer ") ? t : ("Bearer " + t);
Map<String, Object> resp = restTemplate.getForObject(RUOYI_ADMIN_BASE + "/tool/banma/accounts", Map.class);
List<Map<String, Object>> list = (List<Map<String, Object>>) resp.get("data");
if (list == null || list.isEmpty()) return;
Map<String, Object> account = accountId != null
? list.stream().filter(m -> accountId.equals(((Number) m.get("id")).longValue())).findFirst().orElse(null)
: list.stream().filter(m -> ((Number) m.getOrDefault("isDefault", 0)).intValue() == 1).findFirst().orElse(list.get(0));
if (account != null) {
String token = (String) account.get("token");
currentAuthToken = token != null && token.startsWith("Bearer ") ? token : "Bearer " + token;
currentAccountId = accountId;
}
}