From 6145efc7a446c6896dea3a467409ab87f312f01a Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Thu, 30 Oct 2025 15:16:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E9=82=80=E8=AF=B7=E7=A0=81?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=E8=AE=BE=E5=A4=87=E6=8C=87=E7=BA=B9?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/api/RegisterDeviceClientApi.java | 9 +++++ .../command/activity/BindInviteCodeExe.java | 20 +++++------ .../device/LatestMobileDeviceService.java | 8 +++++ .../impl/LatestMobileDeviceServiceImpl.java | 36 +++++++++++++++++++ .../device/RegisterDeviceClientEndpoint.java | 5 +++ .../device/RegisterDeviceClientService.java | 8 +++++ .../impl/RegisterDeviceClientServiceImpl.java | 5 +++ 7 files changed, 81 insertions(+), 10 deletions(-) diff --git a/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/user/device/api/RegisterDeviceClientApi.java b/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/user/device/api/RegisterDeviceClientApi.java index 68b0093e..e666f1d8 100644 --- a/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/user/device/api/RegisterDeviceClientApi.java +++ b/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/user/device/api/RegisterDeviceClientApi.java @@ -139,4 +139,13 @@ public interface RegisterDeviceClientApi { */ @PostMapping("/pageList") ResultResponse> pageList(@RequestBody ArchiveDeviceQryCmd query); + + /** + * 获取用户设备指纹(唯一标识) + * + * @param userId 用户ID + * @return 设备指纹字符串,由 device_type|request_client|phone_model|ip 拼接而成 + */ + @GetMapping("/user/device/fingerprint") + ResultResponse getDeviceFingerprintByUserId(@RequestParam("userId") Long userId); } diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/BindInviteCodeExe.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/BindInviteCodeExe.java index ae07f51a..ebd0db01 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/BindInviteCodeExe.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/BindInviteCodeExe.java @@ -196,25 +196,25 @@ public class BindInviteCodeExe { } /** - * 获取设备ID,如果没有则使用userId + * 获取设备指纹(唯一标识) * @param userId 用户ID - * @return 设备ID或用户ID + * @return 设备指纹字符串或用户ID */ private String getDeviceId(Long userId) { try { - ResultResponse response = registerDeviceClient.getImeiByUserId(userId); - String imei = response != null ? response.getBody() : null; + ResultResponse response = registerDeviceClient.getDeviceFingerprintByUserId(userId); + String fingerprint = response != null && response.getStatus() ? response.getBody() : null; - if (StringUtils.isNotBlank(imei)) { - log.info("获取到设备ID, userId={}, deviceId={}", userId, imei); - return imei; + if (StringUtils.isNotBlank(fingerprint)) { + log.info("获取到设备指纹, userId={}, fingerprint={}", userId, fingerprint); + return fingerprint; } } catch (Exception e) { - log.warn("获取设备ID失败, userId={}, error={}", userId, e.getMessage()); + log.warn("获取设备指纹失败, userId={}, error={}", userId, e.getMessage()); } - // 如果没有设备ID,使用userId - log.info("未获取到设备ID,使用userId作为设备标识, userId={}", userId); + // 如果没有设备指纹,使用userId + log.info("未获取到设备指纹,使用userId作为设备标识, userId={}", userId); return "USER_" + userId; } diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/LatestMobileDeviceService.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/LatestMobileDeviceService.java index 810c182a..363b4ac4 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/LatestMobileDeviceService.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/LatestMobileDeviceService.java @@ -108,4 +108,12 @@ public interface LatestMobileDeviceService extends BaseService getImeiUserId(Long userId); + /** + * 获取用户设备指纹 + * + * @param userId 用户ID + * @return 设备指纹字符串 + */ + String getDeviceFingerprintByUserId(Long userId); + } diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/impl/LatestMobileDeviceServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/impl/LatestMobileDeviceServiceImpl.java index 055f89ca..affccabd 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/impl/LatestMobileDeviceServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/impl/LatestMobileDeviceServiceImpl.java @@ -275,4 +275,40 @@ public class LatestMobileDeviceServiceImpl extends } + @Override + public String getDeviceFingerprintByUserId(Long userId) { + if (userId == null) { + return ""; + } + + LatestMobileDevice device = query() + .eq(LatestMobileDevice::getUserId, userId) + .last(PageConstant.LIMIT_ONE) + .getOne(); + + if (device == null) { + return ""; + } + + return buildDeviceFingerprint( + device.getRequestClient(), + device.getPhoneModel(), + device.getIp() + ); + } + + /** + * 构建设备指纹 + */ + private String buildDeviceFingerprint(String requestClient, + String phoneModel, String ip) { + if (StringUtils.isBlank(requestClient) + || StringUtils.isBlank(phoneModel) + || StringUtils.isBlank(ip)) { + return ""; + } + + return requestClient + "|" + phoneModel + "|" + ip; + } + } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/user/device/RegisterDeviceClientEndpoint.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/user/device/RegisterDeviceClientEndpoint.java index 77878b84..3797121a 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/user/device/RegisterDeviceClientEndpoint.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/user/device/RegisterDeviceClientEndpoint.java @@ -118,4 +118,9 @@ public class RegisterDeviceClientEndpoint implements RegisterDeviceClientApi { public ResultResponse> pageList(ArchiveDeviceQryCmd query) { return ResultResponse.success(registerDeviceClientService.pageList(query)); } + + @Override + public ResultResponse getDeviceFingerprintByUserId(Long userId) { + return ResultResponse.success(registerDeviceClientService.getDeviceFingerprintByUserId(userId)); + } } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/device/RegisterDeviceClientService.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/device/RegisterDeviceClientService.java index 9a634aa5..ab2c7463 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/device/RegisterDeviceClientService.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/device/RegisterDeviceClientService.java @@ -108,4 +108,12 @@ public interface RegisterDeviceClientService { * @return 设备信息 */ Map mapImeiByIds(Set userIds); + + /** + * 获取用户设备指纹 + * + * @param userId 用户ID + * @return 设备指纹字符串 + */ + String getDeviceFingerprintByUserId(Long userId); } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/device/impl/RegisterDeviceClientServiceImpl.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/device/impl/RegisterDeviceClientServiceImpl.java index cb23f22b..c8ff7082 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/device/impl/RegisterDeviceClientServiceImpl.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/device/impl/RegisterDeviceClientServiceImpl.java @@ -229,4 +229,9 @@ public class RegisterDeviceClientServiceImpl implements RegisterDeviceClientServ public Map mapImeiByIds(Set userIds) { return latestMobileDeviceService.mapImeiByIds(userIds); } + + @Override + public String getDeviceFingerprintByUserId(Long userId) { + return latestMobileDeviceService.getDeviceFingerprintByUserId(userId); + } }