sdf
This commit is contained in:
@@ -8,6 +8,7 @@ import com.sunyard.chsm.dto.DeviceDTO;
|
||||
import com.sunyard.chsm.dto.TmkStatus;
|
||||
import com.sunyard.chsm.enums.ManufacturerEnum;
|
||||
import com.sunyard.chsm.enums.ManufacturerModelEnum;
|
||||
import com.sunyard.chsm.enums.TmkStatusEnum;
|
||||
import com.sunyard.chsm.mapper.ParamConfMapper;
|
||||
import com.sunyard.chsm.mapper.SpDeviceMapper;
|
||||
import com.sunyard.chsm.mapper.TmkInfoMapper;
|
||||
@@ -15,12 +16,15 @@ import com.sunyard.chsm.model.entity.Device;
|
||||
import com.sunyard.chsm.model.entity.ParamConf;
|
||||
import com.sunyard.chsm.model.entity.TmkInfo;
|
||||
import com.sunyard.chsm.sdf.adapter.BcSdfApiAdaptor;
|
||||
import com.sunyard.chsm.sdf.adapter.SdfApiAdapter;
|
||||
import com.sunyard.chsm.sdf.adapter.SdfApiAdapterFactory;
|
||||
import com.sunyard.chsm.sdf.model.EccCipher;
|
||||
import com.sunyard.chsm.sdf.model.EccPubKey;
|
||||
import com.sunyard.chsm.service.DeviceService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.bouncycastle.util.encoders.Hex;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.data.util.Pair;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.Assert;
|
||||
@@ -146,6 +150,10 @@ public class DeviceServiceImpl implements DeviceService {
|
||||
device.setWeight(1);
|
||||
device.setCreateTime(LocalDateTime.now());
|
||||
|
||||
Pair<String, String> pair = checkDeviceSdf(save);
|
||||
device.setTmkStatus(TmkStatusEnum.available.name());
|
||||
device.setPubKey(pair.getFirst());
|
||||
|
||||
spDeviceMapper.insert(device);
|
||||
return device.getId();
|
||||
}
|
||||
@@ -158,6 +166,22 @@ public class DeviceServiceImpl implements DeviceService {
|
||||
Assert.isNull(exist, "设备IP和端口已存在");
|
||||
}
|
||||
|
||||
private Pair<String, String> checkDeviceSdf(DeviceDTO.DeviceSave save) {
|
||||
SdfApiAdapter sdfApiAdapter = SdfApiAdapterFactory.newInstance(save.getManufacturerModel(), save.getServiceIp(), save.getServicePort());
|
||||
|
||||
String hd = sdfApiAdapter.openDevice();
|
||||
String hs = null;
|
||||
try {
|
||||
hs = sdfApiAdapter.openSession(hd);
|
||||
EccPubKey eccPubKey = sdfApiAdapter.exportEncPublicKeyECC(hs, save.getEncKeyIdx());
|
||||
sdfApiAdapter.getPrivateKeyAccessRight(hs, save.getEncKeyIdx(), save.getAccessCredentials().getBytes());
|
||||
return Pair.of(eccPubKey.getPubKeyHex(), "");
|
||||
} finally {
|
||||
Optional.ofNullable(hs).ifPresent(sdfApiAdapter::closeSession);
|
||||
sdfApiAdapter.closeDevice(hd);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(DeviceDTO.DeviceSave update) {
|
||||
Assert.notNull(update.getId(), "id不能为空");
|
||||
@@ -167,8 +191,9 @@ public class DeviceServiceImpl implements DeviceService {
|
||||
if (!Objects.equals(exist.getName(), update.getName())) {
|
||||
checkName(update.getName());
|
||||
}
|
||||
if (!Objects.equals(exist.getServiceIp(), update.getServiceIp())
|
||||
|| !Objects.equals(exist.getServicePort(), update.getServicePort())) {
|
||||
boolean ipChanged = !Objects.equals(exist.getServiceIp(), update.getServiceIp())
|
||||
|| !Objects.equals(exist.getServicePort(), update.getServicePort());
|
||||
if (ipChanged) {
|
||||
checkIpPort(update.getServiceIp(), update.getServicePort());
|
||||
}
|
||||
|
||||
@@ -176,6 +201,13 @@ public class DeviceServiceImpl implements DeviceService {
|
||||
BeanUtils.copyProperties(update, up);
|
||||
up.setUpdateTime(LocalDateTime.now());
|
||||
|
||||
if (ipChanged
|
||||
|| !Objects.equals(exist.getEncKeyIdx(), update.getEncKeyIdx())
|
||||
|| !Objects.equals(exist.getAccessCredentials(), update.getAccessCredentials())) {
|
||||
Pair<String, String> pair = checkDeviceSdf(update);
|
||||
up.setPubKey(pair.getFirst());
|
||||
}
|
||||
|
||||
spDeviceMapper.updateById(up);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user