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 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 queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SecretKey::getIsDeleted, false); List 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; } }