feat: 添加设备更新接口和优化设备注册逻辑
- 在 `AndroidDeviceServiceImpl` 中添加 `updateDevice` 方法,支持更新设备信息 - 优化 `AndroidDeviceRegistrationServiceImpl` 中的设备名称设置逻辑 - 更新 `AndroidDeviceController`,添加新的 `update` 接口以支持设备信息更新 - 调整 `DeviceInfoMapper` 中的 `updateBaseInfoByIdIgnoreTenant` 方法,移除不必要的字段更新dev_na
parent
3c299aaf3b
commit
443e067b30
|
|
@ -5,7 +5,7 @@ import com.imeeting.dto.android.AndroidDeviceHomeStatsVO;
|
||||||
import com.imeeting.dto.android.AndroidDeviceRegisterRequest;
|
import com.imeeting.dto.android.AndroidDeviceRegisterRequest;
|
||||||
import com.imeeting.dto.android.AndroidDeviceRegisterResponse;
|
import com.imeeting.dto.android.AndroidDeviceRegisterResponse;
|
||||||
import com.imeeting.service.android.AndroidAuthService;
|
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.service.android.AndroidDeviceRegistrationService;
|
||||||
import com.imeeting.support.AndroidRequestLogHelper;
|
import com.imeeting.support.AndroidRequestLogHelper;
|
||||||
import com.unisbase.annotation.Anonymous;
|
import com.unisbase.annotation.Anonymous;
|
||||||
|
|
@ -35,7 +35,7 @@ public class AndroidDeviceController {
|
||||||
|
|
||||||
private final AndroidAuthService androidAuthService;
|
private final AndroidAuthService androidAuthService;
|
||||||
private final AndroidDeviceRegistrationService androidDeviceRegistrationService;
|
private final AndroidDeviceRegistrationService androidDeviceRegistrationService;
|
||||||
private final AndroidDeviceHomeService androidDeviceHomeService;
|
private final AndroidDeviceService androidDeviceService;
|
||||||
|
|
||||||
@Operation(summary = "设备自注册")
|
@Operation(summary = "设备自注册")
|
||||||
@ApiResponses({
|
@ApiResponses({
|
||||||
|
|
@ -65,6 +65,34 @@ public class AndroidDeviceController {
|
||||||
return ApiResponse.ok(response);
|
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 = "查询设备首页统计")
|
@Operation(summary = "查询设备首页统计")
|
||||||
@ApiResponses({
|
@ApiResponses({
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
||||||
|
|
@ -78,7 +106,7 @@ public class AndroidDeviceController {
|
||||||
public ApiResponse<AndroidDeviceHomeStatsVO> home(HttpServletRequest request) {
|
public ApiResponse<AndroidDeviceHomeStatsVO> home(HttpServletRequest request) {
|
||||||
AndroidRequestLogHelper.logRequest(log, "Android设备", "查询设备首页统计");
|
AndroidRequestLogHelper.logRequest(log, "Android设备", "查询设备首页统计");
|
||||||
AndroidAuthContext authContext = androidAuthService.authenticateHttp(request, true, true);
|
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) {
|
private String resolveTenantCode(HttpServletRequest request, AndroidDeviceRegisterRequest command) {
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,6 @@ public interface DeviceInfoMapper extends BaseMapper<DeviceInfoEntity> {
|
||||||
UPDATE biz_device_info
|
UPDATE biz_device_info
|
||||||
SET tenant_id = #{tenantId},
|
SET tenant_id = #{tenantId},
|
||||||
user_id = #{userId},
|
user_id = #{userId},
|
||||||
terminal_type = #{terminalType},
|
|
||||||
terminal_version = #{terminalVersion},
|
terminal_version = #{terminalVersion},
|
||||||
last_online_at = #{lastOnlineAt},
|
last_online_at = #{lastOnlineAt},
|
||||||
updated_at = CURRENT_TIMESTAMP
|
updated_at = CURRENT_TIMESTAMP
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,9 @@ package com.imeeting.service.android;
|
||||||
import com.imeeting.dto.android.AndroidAuthContext;
|
import com.imeeting.dto.android.AndroidAuthContext;
|
||||||
import com.imeeting.dto.android.AndroidDeviceHomeStatsVO;
|
import com.imeeting.dto.android.AndroidDeviceHomeStatsVO;
|
||||||
|
|
||||||
public interface AndroidDeviceHomeService {
|
public interface AndroidDeviceService {
|
||||||
|
|
||||||
AndroidDeviceHomeStatsVO getHomeStats(AndroidAuthContext authContext);
|
AndroidDeviceHomeStatsVO getHomeStats(AndroidAuthContext authContext);
|
||||||
|
|
||||||
|
void updateDevice(String tenantCode, String deviceId, String deviceName, String terminalType, String terminalVersion);
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.imeeting.service.android.impl;
|
package com.imeeting.service.android.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.imeeting.dto.android.AndroidDeviceRegisterResponse;
|
import com.imeeting.dto.android.AndroidDeviceRegisterResponse;
|
||||||
import com.imeeting.entity.biz.DeviceInfoEntity;
|
import com.imeeting.entity.biz.DeviceInfoEntity;
|
||||||
|
|
@ -44,7 +45,7 @@ public class AndroidDeviceRegistrationServiceImpl implements AndroidDeviceRegist
|
||||||
existing.setStatus(1);
|
existing.setStatus(1);
|
||||||
}
|
}
|
||||||
existing.setTenantId(tenant.getId());
|
existing.setTenantId(tenant.getId());
|
||||||
existing.setDeviceName(normalize(deviceName));
|
existing.setDeviceName(StrUtil.isNotEmpty(existing.getDeviceName()) ? existing.getDeviceName() : normalize(deviceName));
|
||||||
existing.setTerminalType(normalizeTerminalType(terminalType));
|
existing.setTerminalType(normalizeTerminalType(terminalType));
|
||||||
existing.setTerminalVersion(normalize(terminalVersion));
|
existing.setTerminalVersion(normalize(terminalVersion));
|
||||||
existing.setLastOnlineAt(LocalDateTime.now());
|
existing.setLastOnlineAt(LocalDateTime.now());
|
||||||
|
|
@ -87,7 +88,7 @@ public class AndroidDeviceRegistrationServiceImpl implements AndroidDeviceRegist
|
||||||
|
|
||||||
private String normalize(String value) {
|
private String normalize(String value) {
|
||||||
if (!StringUtils.hasText(value)) {
|
if (!StringUtils.hasText(value)) {
|
||||||
return null;
|
return "会议设备";
|
||||||
}
|
}
|
||||||
return value.trim();
|
return value.trim();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package com.imeeting.service.android.impl;
|
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.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.imeeting.common.RedisKeys;
|
import com.imeeting.common.RedisKeys;
|
||||||
|
|
@ -16,7 +18,7 @@ import com.imeeting.mapper.DeviceInfoMapper;
|
||||||
import com.imeeting.mapper.DeviceLoginLogMapper;
|
import com.imeeting.mapper.DeviceLoginLogMapper;
|
||||||
import com.imeeting.mapper.LicenseMapper;
|
import com.imeeting.mapper.LicenseMapper;
|
||||||
import com.imeeting.mapper.biz.MeetingMapper;
|
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.MeetingPointsService;
|
||||||
import com.imeeting.service.biz.TenantMeetingPointsSettingService;
|
import com.imeeting.service.biz.TenantMeetingPointsSettingService;
|
||||||
import com.imeeting.support.RedisSupport;
|
import com.imeeting.support.RedisSupport;
|
||||||
|
|
@ -42,7 +44,7 @@ import java.util.zip.GZIPInputStream;
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Slf4j
|
@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_CACHE_TTL = Duration.ofHours(1);
|
||||||
private static final Duration WEATHER_CONNECT_TIMEOUT = Duration.ofSeconds(5);
|
private static final Duration WEATHER_CONNECT_TIMEOUT = Duration.ofSeconds(5);
|
||||||
|
|
@ -105,6 +107,28 @@ public class AndroidDeviceHomeServiceImpl implements AndroidDeviceHomeService {
|
||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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) {
|
private Long calculateRemainingMinutes(Long tenantId, Long userId, boolean anonymous) {
|
||||||
if (tenantId == null) {
|
if (tenantId == null) {
|
||||||
return 0L;
|
return 0L;
|
||||||
|
|
@ -58,7 +58,7 @@ public class DeviceOnlineManagementServiceImpl implements DeviceOnlineManagement
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
existing.setTerminalType(normalizeTerminalType(authContext.getPlatform()));
|
// existing.setTerminalType(normalizeTerminalType(authContext.getPlatform()));
|
||||||
existing.setTerminalVersion(normalize(authContext.getAppVersion()));
|
existing.setTerminalVersion(normalize(authContext.getAppVersion()));
|
||||||
existing.setLastOnlineAt(now);
|
existing.setLastOnlineAt(now);
|
||||||
existing.setUserId(authContext.getUserId());
|
existing.setUserId(authContext.getUserId());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue