package com.weiwojc.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.weiwojc.mapper.SecretKeyMapper;
|
import com.weiwojc.model.entity.SecretKey;
|
import com.weiwojc.service.SecretKeyService;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.List;
|
import java.util.UUID;
|
|
@Service
|
@RequiredArgsConstructor
|
public class SecretKeyServiceImpl implements SecretKeyService {
|
|
private final SecretKeyMapper secretKeyMapper;
|
|
@Override
|
public SecretKey getCurrentSecretKey() {
|
LambdaQueryWrapper<SecretKey> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(SecretKey::getIsDeleted, false)
|
.last("LIMIT 1");
|
|
SecretKey secretKey = secretKeyMapper.selectOne(queryWrapper);
|
|
// 如果没有找到密钥,自动初始化一个
|
if (secretKey == null) {
|
return initializeSecretKey();
|
}
|
|
return secretKey;
|
}
|
|
@Override
|
@Transactional
|
public SecretKey updateSecretKey(String newKey) {
|
if (newKey == null || newKey.trim().isEmpty()) {
|
throw new RuntimeException("新密钥不能为空");
|
}
|
|
SecretKey currentKey = getCurrentSecretKey();
|
|
// 如果新密钥与当前密钥相同,直接返回
|
if (currentKey.getKey().equals(newKey.trim())) {
|
return currentKey;
|
}
|
|
// 先删除当前密钥(逻辑删除)
|
currentKey.setIsDeleted(true);
|
secretKeyMapper.updateById(currentKey);
|
|
// 创建新密钥
|
SecretKey newSecretKey = new SecretKey();
|
newSecretKey.setKey(newKey.trim());
|
newSecretKey.setIsDeleted(false);
|
|
secretKeyMapper.insert(newSecretKey);
|
return newSecretKey;
|
}
|
|
@Override
|
@Transactional
|
public SecretKey initializeSecretKey() {
|
// 检查是否已存在密钥
|
LambdaQueryWrapper<SecretKey> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(SecretKey::getIsDeleted, false);
|
|
List<SecretKey> existingKeys = secretKeyMapper.selectList(queryWrapper);
|
if (!existingKeys.isEmpty()) {
|
return existingKeys.get(0);
|
}
|
|
// 生成默认密钥
|
String defaultKey = "default-secret-key-" + UUID.randomUUID().toString().substring(0, 8);
|
|
SecretKey secretKey = new SecretKey();
|
secretKey.setKey(defaultKey);
|
secretKey.setIsDeleted(false);
|
|
secretKeyMapper.insert(secretKey);
|
return secretKey;
|
}
|
}
|