diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java index 0c14fff..667d6d9 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java @@ -111,26 +111,52 @@ public class BatteryStationServiceImpl implements BatteryStationService { return new Result>().success(page.setRecords(list)); } + /** + * 获取或生成RSA密钥对并保存到数据库 + * + * @param stationCode 电站编码,用于标识特定的电池电站 + * @return 返回包含密钥对信息的Result对象 + */ @Override public Result> RsaSecretKey(String stationCode) { - KeyPair keyPair = KeyUtil.generateKeyPair(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue()); - String privatekeyBase64String = Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded()); - String publickeyBase64String = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded()); - batteryStationSecretKeyDao.delete(new QueryWrapper().eq("type", 1).eq("station_code", stationCode)); - BatteryStationSecretKey bssk = new BatteryStationSecretKey(); - bssk.setStationCode(stationCode); - bssk.setType(1); - bssk.setPrivateKey(privatekeyBase64String); - bssk.setPublicKey(publickeyBase64String); - bssk.setCtime(new Date()); - batteryStationSecretKeyDao.insert(bssk); - - Map map = new HashMap(); - map.put("publickey", publickeyBase64String); - map.put("privatekey", privatekeyBase64String); - return new Result>().success(map); + // 查询数据库中是否存在对应电站编码的密钥对 + BatteryStationSecretKey existingKey = batteryStationSecretKeyDao.selectOne( + new QueryWrapper() + .eq("type", 1) + .eq("station_code", stationCode) + ); + if (existingKey != null) { + // 如果存在密钥对,则直接返回 + Map map = new HashMap<>(); + map.put("publickey", existingKey.getPublicKey()); + map.put("privatekey", existingKey.getPrivateKey()); + return new Result>().success(map); + } else { + // 如果不存在密钥对,则生成新的密钥对 + KeyPair keyPair = KeyUtil.generateKeyPair(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue()); + // 将私钥转换为Base64编码的字符串 + String privatekeyBase64String = Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded()); + // 将公钥转换为Base64编码的字符串 + String publickeyBase64String = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded()); + // 创建新的电池电站密钥对象 + BatteryStationSecretKey bssk = new BatteryStationSecretKey(); + bssk.setStationCode(stationCode); + bssk.setType(1); + bssk.setPrivateKey(privatekeyBase64String); + bssk.setPublicKey(publickeyBase64String); + bssk.setCtime(new Date()); + // 将新的密钥对象插入数据库 + batteryStationSecretKeyDao.insert(bssk); + // 创建一个映射,用于存储和返回公钥和私钥 + Map map = new HashMap<>(); + map.put("publickey", publickeyBase64String); + map.put("privatekey", privatekeyBase64String); + // 返回包含密钥对信息的成功结果 + return new Result>().success(map); + } } + @Override public Result> listStation(String plateNum) {