diff --git a/backend/src/main/java/com/imeeting/controller/android/AndroidDeviceController.java b/backend/src/main/java/com/imeeting/controller/android/AndroidDeviceController.java index 480b1b8..6bd52e2 100644 --- a/backend/src/main/java/com/imeeting/controller/android/AndroidDeviceController.java +++ b/backend/src/main/java/com/imeeting/controller/android/AndroidDeviceController.java @@ -5,7 +5,7 @@ import com.imeeting.dto.android.AndroidDeviceHomeStatsVO; import com.imeeting.dto.android.AndroidDeviceRegisterRequest; import com.imeeting.dto.android.AndroidDeviceRegisterResponse; import com.imeeting.service.android.AndroidAuthService; -import com.imeeting.service.android.AndroidDeviceHomeService; +import com.imeeting.service.android.AndroidDeviceService; import com.imeeting.service.android.AndroidDeviceRegistrationService; import com.imeeting.support.AndroidRequestLogHelper; import com.unisbase.annotation.Anonymous; @@ -35,7 +35,7 @@ public class AndroidDeviceController { private final AndroidAuthService androidAuthService; private final AndroidDeviceRegistrationService androidDeviceRegistrationService; - private final AndroidDeviceHomeService androidDeviceHomeService; + private final AndroidDeviceService androidDeviceService; @Operation(summary = "设备自注册") @ApiResponses({ @@ -65,6 +65,34 @@ public class AndroidDeviceController { return ApiResponse.ok(response); } + @Operation(summary = "更新设备") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse( + responseCode = "200", + description = "更新设备信息", + content = @Content(schema = @Schema(implementation = AndroidDeviceRegisterResponse.class)) + ) + }) + @PostMapping("/update") + @Anonymous + public ApiResponse update(HttpServletRequest request, + @RequestBody(required = false) AndroidDeviceRegisterRequest command) { + if (command == null) { + throw new IllegalArgumentException("更新设备请求参数不能为空"); + } + String tenantCode = request == null ? null : request.getHeader(TENANT_CODE_HEADER); + AndroidRequestLogHelper.logRequest(log, "Android设备", "更新设备", "request", command, "tenantCode", tenantCode); + AndroidAuthContext authContext = androidAuthService.authenticateHttp(request, false); + androidDeviceService.updateDevice( + tenantCode, + authContext.getDeviceId(), + command.getDeviceName(), + command.getTerminalType() == null ? authContext.getPlatform() : command.getTerminalType(), + command.getTerminalVersion() == null ? authContext.getAppVersion() : command.getTerminalVersion() + ); + return ApiResponse.ok(null); + } + @Operation(summary = "查询设备首页统计") @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse( @@ -78,7 +106,7 @@ public class AndroidDeviceController { public ApiResponse home(HttpServletRequest request) { AndroidRequestLogHelper.logRequest(log, "Android设备", "查询设备首页统计"); AndroidAuthContext authContext = androidAuthService.authenticateHttp(request, true, true); - return ApiResponse.ok(androidDeviceHomeService.getHomeStats(authContext)); + return ApiResponse.ok(androidDeviceService.getHomeStats(authContext)); } private String resolveTenantCode(HttpServletRequest request, AndroidDeviceRegisterRequest command) { diff --git a/backend/src/main/java/com/imeeting/mapper/DeviceInfoMapper.java b/backend/src/main/java/com/imeeting/mapper/DeviceInfoMapper.java index 559a268..6fc16ad 100644 --- a/backend/src/main/java/com/imeeting/mapper/DeviceInfoMapper.java +++ b/backend/src/main/java/com/imeeting/mapper/DeviceInfoMapper.java @@ -31,7 +31,6 @@ public interface DeviceInfoMapper extends BaseMapper { UPDATE biz_device_info SET tenant_id = #{tenantId}, user_id = #{userId}, - terminal_type = #{terminalType}, terminal_version = #{terminalVersion}, last_online_at = #{lastOnlineAt}, updated_at = CURRENT_TIMESTAMP diff --git a/backend/src/main/java/com/imeeting/service/android/AndroidDeviceHomeService.java b/backend/src/main/java/com/imeeting/service/android/AndroidDeviceService.java similarity index 58% rename from backend/src/main/java/com/imeeting/service/android/AndroidDeviceHomeService.java rename to backend/src/main/java/com/imeeting/service/android/AndroidDeviceService.java index 369c43b..fa235ff 100644 --- a/backend/src/main/java/com/imeeting/service/android/AndroidDeviceHomeService.java +++ b/backend/src/main/java/com/imeeting/service/android/AndroidDeviceService.java @@ -3,7 +3,9 @@ package com.imeeting.service.android; import com.imeeting.dto.android.AndroidAuthContext; import com.imeeting.dto.android.AndroidDeviceHomeStatsVO; -public interface AndroidDeviceHomeService { +public interface AndroidDeviceService { AndroidDeviceHomeStatsVO getHomeStats(AndroidAuthContext authContext); + + void updateDevice(String tenantCode, String deviceId, String deviceName, String terminalType, String terminalVersion); } diff --git a/backend/src/main/java/com/imeeting/service/android/impl/AndroidDeviceRegistrationServiceImpl.java b/backend/src/main/java/com/imeeting/service/android/impl/AndroidDeviceRegistrationServiceImpl.java index 0012499..1c391dd 100644 --- a/backend/src/main/java/com/imeeting/service/android/impl/AndroidDeviceRegistrationServiceImpl.java +++ b/backend/src/main/java/com/imeeting/service/android/impl/AndroidDeviceRegistrationServiceImpl.java @@ -1,5 +1,6 @@ package com.imeeting.service.android.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.imeeting.dto.android.AndroidDeviceRegisterResponse; import com.imeeting.entity.biz.DeviceInfoEntity; @@ -44,7 +45,7 @@ public class AndroidDeviceRegistrationServiceImpl implements AndroidDeviceRegist existing.setStatus(1); } existing.setTenantId(tenant.getId()); - existing.setDeviceName(normalize(deviceName)); + existing.setDeviceName(StrUtil.isNotEmpty(existing.getDeviceName()) ? existing.getDeviceName() : normalize(deviceName)); existing.setTerminalType(normalizeTerminalType(terminalType)); existing.setTerminalVersion(normalize(terminalVersion)); existing.setLastOnlineAt(LocalDateTime.now()); @@ -87,7 +88,7 @@ public class AndroidDeviceRegistrationServiceImpl implements AndroidDeviceRegist private String normalize(String value) { if (!StringUtils.hasText(value)) { - return null; + return "会议设备"; } return value.trim(); } diff --git a/backend/src/main/java/com/imeeting/service/android/impl/AndroidDeviceHomeServiceImpl.java b/backend/src/main/java/com/imeeting/service/android/impl/AndroidDeviceServiceImpl.java similarity index 91% rename from backend/src/main/java/com/imeeting/service/android/impl/AndroidDeviceHomeServiceImpl.java rename to backend/src/main/java/com/imeeting/service/android/impl/AndroidDeviceServiceImpl.java index 9a85e1b..a1cfc19 100644 --- a/backend/src/main/java/com/imeeting/service/android/impl/AndroidDeviceHomeServiceImpl.java +++ b/backend/src/main/java/com/imeeting/service/android/impl/AndroidDeviceServiceImpl.java @@ -1,5 +1,7 @@ package com.imeeting.service.android.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.imeeting.common.RedisKeys; @@ -16,7 +18,7 @@ import com.imeeting.mapper.DeviceInfoMapper; import com.imeeting.mapper.DeviceLoginLogMapper; import com.imeeting.mapper.LicenseMapper; import com.imeeting.mapper.biz.MeetingMapper; -import com.imeeting.service.android.AndroidDeviceHomeService; +import com.imeeting.service.android.AndroidDeviceService; import com.imeeting.service.biz.MeetingPointsService; import com.imeeting.service.biz.TenantMeetingPointsSettingService; import com.imeeting.support.RedisSupport; @@ -42,7 +44,7 @@ import java.util.zip.GZIPInputStream; @Service @RequiredArgsConstructor @Slf4j -public class AndroidDeviceHomeServiceImpl implements AndroidDeviceHomeService { +public class AndroidDeviceServiceImpl implements AndroidDeviceService { private static final Duration WEATHER_CACHE_TTL = Duration.ofHours(1); private static final Duration WEATHER_CONNECT_TIMEOUT = Duration.ofSeconds(5); @@ -105,7 +107,29 @@ public class AndroidDeviceHomeServiceImpl implements AndroidDeviceHomeService { return vo; } - private Long calculateRemainingMinutes(Long tenantId, Long userId, boolean anonymous) { + @Override + public void updateDevice(String tenantCode, String deviceId, String deviceName, String terminalType, String terminalVersion) { + DeviceInfoEntity existingDevice = deviceInfoMapper.selectByDeviceCodeIgnoreTenant(deviceId); + boolean update = false; + if (StrUtil.isNotEmpty(deviceName)) { + existingDevice.setDeviceName(deviceName); + update = true; + } + if (StrUtil.isNotEmpty(terminalType)) { + existingDevice.setTerminalType(terminalType); + update = true; + } + if (StrUtil.isNotEmpty(terminalVersion)) { + existingDevice.setTerminalVersion(terminalVersion); + update = true; + } + if (!update) { + return; + } + deviceInfoMapper.updateBaseInfoByIdIgnoreTenant(existingDevice); + } + + private Long calculateRemainingMinutes(Long tenantId, Long userId, boolean anonymous) { if (tenantId == null) { return 0L; } diff --git a/backend/src/main/java/com/imeeting/service/biz/impl/DeviceOnlineManagementServiceImpl.java b/backend/src/main/java/com/imeeting/service/biz/impl/DeviceOnlineManagementServiceImpl.java index 613da76..41a131f 100644 --- a/backend/src/main/java/com/imeeting/service/biz/impl/DeviceOnlineManagementServiceImpl.java +++ b/backend/src/main/java/com/imeeting/service/biz/impl/DeviceOnlineManagementServiceImpl.java @@ -58,7 +58,7 @@ public class DeviceOnlineManagementServiceImpl implements DeviceOnlineManagement return; } LocalDateTime now = LocalDateTime.now(); - existing.setTerminalType(normalizeTerminalType(authContext.getPlatform())); +// existing.setTerminalType(normalizeTerminalType(authContext.getPlatform())); existing.setTerminalVersion(normalize(authContext.getAppVersion())); existing.setLastOnlineAt(now); existing.setUserId(authContext.getUserId());