package com.ruoyi.integration.iotda.utils.api; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; import com.huaweicloud.sdk.iotda.v5.model.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.CodeGenerateUtils; import com.ruoyi.integration.api.vo.AddDeviceResp; import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.integration.iotda.builder.IotBuilder; import com.ruoyi.integration.iotda.config.IotDAConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; /** * iot接口调用工具类 */ @Slf4j @Component public class IotInterfaceUtil { private static final String dataFormat = "json"; private static final String protocolType = "HTTPS"; private static final String deviceType = "充电桩"; private static final String serviceType = "直流充电"; @Autowired private IotBuilder iotBuilder; @Autowired private IotDAConfig iotDAConfig; private String decodeUrl(String url) { return MessageFormat.format(url, iotDAConfig.getProjectId()); } /** * 创建产品 * @param productId 产品ID,使用UUID.randomUUID().toString()生成 需替换特殊字符 "-" 为空 * @param productName 产品名称 * @return CreateProductResponse */ public CreateProductResponse createProductSolution(String productId,String productName) { CreateProductRequest request = new CreateProductRequest(); AddProduct body = new AddProduct(); List listbodyServiceCapabilities = new ArrayList<>(); listbodyServiceCapabilities.add( new ServiceCapability() .withServiceId(CodeGenerateUtils.generateVolumeSn()) .withServiceType(serviceType) ); body.withServiceCapabilities(listbodyServiceCapabilities); body.withDataFormat(dataFormat); body.withProtocolType(protocolType); body.withDeviceType(deviceType); body.withName(productName); body.withProductId(productId); request.withBody(body); request.withInstanceId(iotDAConfig.getInstanceId()); try { CreateProductResponse response = iotBuilder.buildIot().createProduct(request); log.info("创建产品:{}",response.toString()); return response; } catch (ConnectionException | RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); log.info(String.valueOf(e.getHttpStatusCode())); log.info(e.getRequestId()); log.info(e.getErrorCode()); log.info(e.getErrorMsg()); } return null; } /** * 删除产品 * @param productId 产品ID,使用UUID.randomUUID().toString()生成 需替换特殊字符 "-" 为空 * @return DeleteProductResponse */ public DeleteProductResponse deleteProductRequest(String productId) { DeleteProductRequest request = new DeleteProductRequest(); request.withProductId(productId); request.withInstanceId(iotDAConfig.getInstanceId()); try { DeleteProductResponse response = iotBuilder.buildIot().deleteProduct(request); log.info("删除产品:{}",response.toString()); return response; } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return null; } /** * 创建设备 * @param productId 产品ID * @param nodeId 设备标识码 设备编号 * @param deviceName 设备名称 * @param description 设备描述 * @return AddDeviceResponse */ public R addDeviceRequest(String productId,String nodeId,String deviceName,String description) { AddDeviceRequest request = new AddDeviceRequest(); AddDevice body = new AddDevice(); body.withDeviceId(nodeId); body.withNodeId(nodeId); body.withDeviceName(deviceName); body.withProductId(productId); body.withDescription(description); request.withBody(body); try { AddDeviceResponse response = iotBuilder.buildIot().addDevice(request); log.info("创建设备:{}",response.toString()); AddDeviceResp addDeviceResp = new AddDeviceResp(); BeanUtils.copyProperties(response, addDeviceResp); return R.ok(addDeviceResp); } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return R.fail(); } /** * 修改设备 * @param deviceId 设备ID 使用已有设备编号 * @param deviceName 设备名称 * @param description 设备描述 * @return UpdateDeviceResponse */ public UpdateDeviceResponse updateDeviceRequest(String deviceId,String deviceName,String description) { UpdateDeviceRequest request = new UpdateDeviceRequest(); request.withDeviceId(deviceId); UpdateDevice body = new UpdateDevice(); body.withDescription(description); body.withDeviceName(deviceName); request.withBody(body); try { UpdateDeviceResponse response = iotBuilder.buildIot().updateDevice(request); log.info("修改设备:{}",response.toString()); return response; } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return null; } /** * 冻结设备 * @param deviceId 设备ID 使用已有设备编号 * @return FreezeDeviceResponse */ public FreezeDeviceResponse freezeDeviceRequest(String deviceId) { FreezeDeviceRequest request = new FreezeDeviceRequest(); request.withDeviceId(deviceId); try { FreezeDeviceResponse response = iotBuilder.buildIot().freezeDevice(request); log.info("冻结设备:{}",response.toString()); return response; } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return null; } /** * 解冻设备 * @param deviceId 设备ID 使用已有设备编号 * @return UnfreezeDeviceResponse */ public UnfreezeDeviceResponse unfreezeDeviceRequest(String deviceId) { UnfreezeDeviceRequest request = new UnfreezeDeviceRequest(); request.withDeviceId(deviceId); try { UnfreezeDeviceResponse response = iotBuilder.buildIot().unfreezeDevice(request); log.info("解冻设备:{}",response.toString()); return response; } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return null; } /** * 删除设备 * @param deviceId 设备ID 使用已有设备编号 * @return DeleteDeviceResponse */ public R deleteDeviceRequest(String deviceId) { DeleteDeviceRequest request = new DeleteDeviceRequest(); request.withDeviceId(deviceId); try { DeleteDeviceResponse response = iotBuilder.buildIot().deleteDevice(request); log.info("删除设备:{}",response.toString()); DeleteDeviceResp deleteDeviceResp = new DeleteDeviceResp(); BeanUtils.copyProperties(response, deleteDeviceResp); return R.ok(deleteDeviceResp); } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return R.fail(); } }