diff --git a/push-service/src/main/java/com/xuqm/push/controller/PushController.java b/push-service/src/main/java/com/xuqm/push/controller/PushController.java index 5897a35..5975ee4 100644 --- a/push-service/src/main/java/com/xuqm/push/controller/PushController.java +++ b/push-service/src/main/java/com/xuqm/push/controller/PushController.java @@ -32,12 +32,13 @@ public class PushController { @RequestParam(required = false) String brand, @RequestParam(required = false) String model, @RequestParam(required = false) String osVersion, - @RequestParam(required = false) String appVersion) { + @RequestParam(required = false) String appVersion, + @RequestParam(required = false) String romVersion) { requireNonBlank(appKey, "appKey"); requireNonBlank(userId, "userId"); requireNonNull(vendor, "vendor"); requireNonBlank(token, "token"); - pushDispatcher.registerToken(appKey, userId, vendor, token, platform, deviceId, brand, model, osVersion, appVersion); + pushDispatcher.registerToken(appKey, userId, vendor, token, platform, deviceId, brand, model, osVersion, appVersion, romVersion); return ResponseEntity.ok(ApiResponse.ok()); } diff --git a/push-service/src/main/java/com/xuqm/push/controller/PushManagementController.java b/push-service/src/main/java/com/xuqm/push/controller/PushManagementController.java index 0a32187..c1cfa50 100644 --- a/push-service/src/main/java/com/xuqm/push/controller/PushManagementController.java +++ b/push-service/src/main/java/com/xuqm/push/controller/PushManagementController.java @@ -2,7 +2,9 @@ package com.xuqm.push.controller; import com.xuqm.common.model.ApiResponse; import com.xuqm.push.entity.DeviceLoginLogEntity; +import com.xuqm.push.entity.DeviceTokenEntity; import com.xuqm.push.entity.PushUserEntity; +import com.xuqm.push.repository.DeviceTokenRepository; import com.xuqm.push.service.PushAccountService; import com.xuqm.push.service.PushDiagnosticsService; import com.xuqm.push.service.PushOperationLogService; @@ -31,13 +33,16 @@ public class PushManagementController { private final PushDiagnosticsService diagnosticsService; private final PushAccountService accountService; private final PushOperationLogService opLogService; + private final DeviceTokenRepository tokenRepository; public PushManagementController(PushDiagnosticsService diagnosticsService, PushAccountService accountService, - PushOperationLogService opLogService) { + PushOperationLogService opLogService, + DeviceTokenRepository tokenRepository) { this.diagnosticsService = diagnosticsService; this.accountService = accountService; this.opLogService = opLogService; + this.tokenRepository = tokenRepository; } // ---- user account management ---- @@ -159,6 +164,16 @@ public class PushManagementController { return ResponseEntity.ok(ApiResponse.success(result)); } + @GetMapping("/devices/{id}/token") + public ResponseEntity>> getDeviceToken( + @PathVariable String id, + @RequestParam String appKey) { + return tokenRepository.findById(id) + .filter(e -> appKey.equals(e.getAppKey())) + .map(e -> ResponseEntity.ok(ApiResponse.success(Map.of("token", e.getToken())))) + .orElseGet(() -> ResponseEntity.ok(ApiResponse.error(404, "设备不存在"))); + } + public record UpdateUserRequest(String appKey, String nickname, String avatar, String gender) {} public record UserStatusRequest(String appKey, String status) {} public record ImportUserRequest(String appKey, String userId, String nickname, diff --git a/push-service/src/main/java/com/xuqm/push/entity/DeviceTokenEntity.java b/push-service/src/main/java/com/xuqm/push/entity/DeviceTokenEntity.java index 0cf54f6..9b18eaa 100644 --- a/push-service/src/main/java/com/xuqm/push/entity/DeviceTokenEntity.java +++ b/push-service/src/main/java/com/xuqm/push/entity/DeviceTokenEntity.java @@ -49,6 +49,9 @@ public class DeviceTokenEntity { @Column(length = 64) private String osVersion; + @Column(length = 64) + private String romVersion; + @Column(length = 64) private String appVersion; @@ -94,6 +97,9 @@ public class DeviceTokenEntity { public String getOsVersion() { return osVersion; } public void setOsVersion(String osVersion) { this.osVersion = osVersion; } + public String getRomVersion() { return romVersion; } + public void setRomVersion(String romVersion) { this.romVersion = romVersion; } + public String getAppVersion() { return appVersion; } public void setAppVersion(String appVersion) { this.appVersion = appVersion; } diff --git a/push-service/src/main/java/com/xuqm/push/service/PushDiagnosticsService.java b/push-service/src/main/java/com/xuqm/push/service/PushDiagnosticsService.java index 4d17f8e..3a4d61a 100644 --- a/push-service/src/main/java/com/xuqm/push/service/PushDiagnosticsService.java +++ b/push-service/src/main/java/com/xuqm/push/service/PushDiagnosticsService.java @@ -156,6 +156,7 @@ public class PushDiagnosticsService { String brand, String model, String osVersion, + String romVersion, String appVersion, boolean receivePush, LocalDateTime lastLoginAt, @@ -170,6 +171,7 @@ public class PushDiagnosticsService { entity.getBrand(), entity.getModel(), entity.getOsVersion(), + entity.getRomVersion(), entity.getAppVersion(), entity.isReceivePush(), entity.getLastLoginAt(), diff --git a/push-service/src/main/java/com/xuqm/push/service/PushDispatcher.java b/push-service/src/main/java/com/xuqm/push/service/PushDispatcher.java index dcbcc1f..15e6d8a 100644 --- a/push-service/src/main/java/com/xuqm/push/service/PushDispatcher.java +++ b/push-service/src/main/java/com/xuqm/push/service/PushDispatcher.java @@ -243,7 +243,8 @@ public class PushDispatcher { String brand, String model, String osVersion, - String appVersion) { + String appVersion, + String romVersion) { String resolvedDeviceId = normalizeDeviceId(deviceId, vendor, token); Optional existing = tokenRepository.findByAppKeyAndUserIdAndDeviceId(appKey, userId, resolvedDeviceId); if (existing.isEmpty() && (deviceId == null || deviceId.isBlank())) { @@ -266,6 +267,7 @@ public class PushDispatcher { entity.setBrand(blankToNull(brand)); entity.setModel(blankToNull(model)); entity.setOsVersion(blankToNull(osVersion)); + entity.setRomVersion(blankToNull(romVersion)); entity.setAppVersion(blankToNull(appVersion)); entity.setReceivePush(true); entity.setLastLoginAt(now); diff --git a/push-service/src/main/java/com/xuqm/push/service/PushSchemaMigrationService.java b/push-service/src/main/java/com/xuqm/push/service/PushSchemaMigrationService.java index 561c857..6935b30 100644 --- a/push-service/src/main/java/com/xuqm/push/service/PushSchemaMigrationService.java +++ b/push-service/src/main/java/com/xuqm/push/service/PushSchemaMigrationService.java @@ -37,6 +37,7 @@ public class PushSchemaMigrationService { migrate_v20260527_create_push_operation_log(emit); migrate_v20260626_remove_app_id(emit); + migrate_v20260626_add_rom_version(emit); emit.accept("数据库迁移检查完成"); } @@ -161,4 +162,19 @@ public class PushSchemaMigrationService { log.error("migration {} failed", id, e); } } + + private void migrate_v20260626_add_rom_version(Consumer emit) { + final String id = "v20260626_add_rom_version"; + if (migrationApplied(id)) { emit.accept("[已应用] " + id); return; } + try (Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement()) { + if (!columnExists(conn, "push_device_token", "rom_version")) { + stmt.execute("ALTER TABLE push_device_token ADD COLUMN rom_version VARCHAR(64) NULL AFTER os_version"); + } + emit.accept("[已迁移] " + id + ": 添加 rom_version 字段"); + recordMigration(id, "在 push_device_token 添加厂商 ROM 版本字段 rom_version"); + } catch (Exception e) { + emit.accept("[错误] " + id + ": " + e.getMessage()); + log.error("migration {} failed", id, e); + } + } }