ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java
@@ -3,10 +3,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.integration.api.feignClient.IotInterfaceClient; import com.ruoyi.integration.api.feignClient.SwitchwayGateClient; import com.ruoyi.integration.api.vo.AddDevice; import com.ruoyi.integration.api.vo.AddDeviceResp; import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.integration.api.vo.SwitchwayGateReq; import com.ruoyi.integration.api.vo.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -35,6 +32,11 @@ public R<DeleteDeviceResp> deleteDevice(String deviceId) { return R.fail("删除设备失败:" + throwable.getMessage()); } @Override public R<ShowDeviceResp> showDeviceRequest(String deviceId) { return R.fail("查询设备失败:" + throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java
@@ -6,6 +6,7 @@ import com.ruoyi.integration.api.vo.AddDevice; import com.ruoyi.integration.api.vo.AddDeviceResp; import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.integration.api.vo.ShowDeviceResp; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -35,4 +36,12 @@ */ @PostMapping("/iotInterface/deleteDevice") R<DeleteDeviceResp> deleteDevice(@RequestParam("deviceId") String deviceId); /** * 查询设备 * @param deviceId * @return */ @PostMapping("/iotInterface/showDeviceRequest") R<ShowDeviceResp> showDeviceRequest(@RequestParam("deviceId") String deviceId); } ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/ShowDeviceResp.java
New file @@ -0,0 +1,68 @@ package com.ruoyi.integration.api.vo; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; /** * @author zhibing.pu * @Date 2024/12/31 16:19 */ @Data public class ShowDeviceResp { @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("app_id") private String appId; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("app_name") private String appName; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("device_id") private String deviceId; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("node_id") private String nodeId; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("gateway_id") private String gatewayId; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("device_name") private String deviceName; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("node_type") private String nodeType; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("description") private String description; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("fw_version") private String fwVersion; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("sw_version") private String swVersion; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("device_sdk_version") private String deviceSdkVersion; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("product_id") private String productId; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("product_name") private String productName; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("status") private String status; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("create_time") private String createTime; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("connection_status_update_time") private String connectionStatusUpdateTime; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("active_time") private String activeTime; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("extension_info") private Object extensionInfo; } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -30,6 +30,10 @@ import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.QrCodeDelivery; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.api.vo.AddDevice; import com.ruoyi.integration.api.vo.AddDeviceResp; import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.integration.api.vo.ShowDeviceResp; import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.TChargingOrder; @@ -173,18 +177,23 @@ return AjaxResult.error("设备编号已存在"); } //调用华为Iot创建设备 // AddDevice addDevice = new AddDevice(); // addDevice.setProductId("66da68d21837002b28b34ec0"); // addDevice.setNodeId(chargingPile.getCode()); // addDevice.setDeviceName(chargingPile.getName()); // addDevice.setDescription(chargingPile.getNumber().toString()); // AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData(); // if(null != deviceResp){ // int httpStatusCode = deviceResp.getHttpStatusCode(); // if(httpStatusCode == 201){ // chargingPile.setIotdDeviceId(deviceResp.getDeviceId()); // } // } AddDevice addDevice = new AddDevice(); addDevice.setProductId("66da68d21837002b28b34ec0"); addDevice.setNodeId(chargingPile.getCode()); addDevice.setDeviceName(chargingPile.getName()); addDevice.setDescription(chargingPile.getNumber().toString()); AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData(); if(null != deviceResp){ int httpStatusCode = deviceResp.getHttpStatusCode(); if(httpStatusCode == 201){ chargingPile.setIotdDeviceId(deviceResp.getDeviceId()); }else{ log.error("华为创建设备失败" + JSON.toJSONString(deviceResp)); return AjaxResult.error("华为创建设备失败"); } }else{ return AjaxResult.error("华为创建设备失败"); } this.save(chargingPile); return AjaxResult.success(); } @@ -248,6 +257,34 @@ if(null != one && !one.getId().equals(chargingPile.getId())){ return AjaxResult.error("设备编号已存在"); } TChargingPile tChargingPile = this.getById(chargingPile.getId()); ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(tChargingPile.getCode()).getData(); if(null != showDeviceResp){ DeleteDeviceResp deleteDeviceResp = iotInterfaceClient.deleteDevice(tChargingPile.getCode()).getData(); if(null == deleteDeviceResp || (deleteDeviceResp.getHttpStatusCode() != 200 && deleteDeviceResp.getHttpStatusCode() != 201 && deleteDeviceResp.getHttpStatusCode() != 204)){ return AjaxResult.error("删除设备异常,请查看华为设备管理"); } } //调用华为Iot创建设备 AddDevice addDevice = new AddDevice(); addDevice.setProductId("66da68d21837002b28b34ec0"); addDevice.setNodeId(chargingPile.getCode()); addDevice.setDeviceName(chargingPile.getName()); addDevice.setDescription(chargingPile.getNumber().toString()); AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData(); if(null != deviceResp){ int httpStatusCode = deviceResp.getHttpStatusCode(); if(httpStatusCode == 201){ chargingPile.setIotdDeviceId(deviceResp.getDeviceId()); }else{ log.error("华为创建设备失败" + JSON.toJSONString(deviceResp)); return AjaxResult.error("华为创建设备失败"); } }else{ return AjaxResult.error("华为创建设备失败"); } this.updateById(chargingPile); List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()).eq(TChargingGun::getDelFlag, 0)); @@ -288,11 +325,17 @@ for (Integer id : ids) { TChargingPile chargingPile = this.getById(id); //调用华为Iot删除设备 // if(StringUtils.isNotEmpty(chargingPile.getIotdDeviceId())){ // DeleteDeviceResp deviceResp = iotInterfaceClient.deleteDevice(chargingPile.getIotdDeviceId()).getData(); // if(null != deviceResp && deviceResp.getHttpStatusCode() == 0){ // } // } if(StringUtils.isNotEmpty(chargingPile.getIotdDeviceId())){ ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(chargingPile.getCode()).getData(); if(null != showDeviceResp){ DeleteDeviceResp deleteDeviceResp = iotInterfaceClient.deleteDevice(chargingPile.getCode()).getData(); if(null == deleteDeviceResp || (deleteDeviceResp.getHttpStatusCode() != 200 && deleteDeviceResp.getHttpStatusCode() != 201 && deleteDeviceResp.getHttpStatusCode() != 204)){ return AjaxResult.error("删除设备异常,请查看华为设备管理"); } chargingPile.setIotdDeviceId(""); } } this.removeById(chargingPile); } return AjaxResult.success(); ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java
@@ -6,6 +6,7 @@ import com.ruoyi.integration.api.vo.AddDevice; import com.ruoyi.integration.api.vo.AddDeviceResp; import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.integration.api.vo.ShowDeviceResp; import com.ruoyi.integration.iotda.utils.api.IotInterfaceUtil; import org.springframework.web.bind.annotation.*; @@ -45,4 +46,15 @@ public R<DeleteDeviceResp> deleteDevice(@RequestParam("deviceId") String deviceId){ return iotInterfaceUtil.deleteDeviceRequest(deviceId); } /** * 查询设备 * @param deviceId * @return */ @PostMapping("/showDeviceRequest") public R<ShowDeviceResp> showDeviceRequest(@RequestParam("deviceId") String deviceId){ return iotInterfaceUtil.showDeviceRequest(deviceId); } } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java
@@ -1,5 +1,6 @@ package com.ruoyi.integration.iotda.controller; import com.alibaba.fastjson.JSON; import com.ruoyi.integration.api.model.*; import com.ruoyi.integration.iotda.enums.ServiceIdMenu; import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce; @@ -235,6 +236,7 @@ */ @PostMapping("/qrCodeDelivery") public String qrCodeDelivery(@RequestBody QrCodeDelivery qrCodeDelivery){ log.info("二维码下发:{}", JSON.toJSONString(qrCodeDelivery)); return iotMessageProduce.sendMessage(qrCodeDelivery.getCharging_pile_code(), ServiceIdMenu.QR_CODE_DELIVERY.getKey(),messageUtil.qrCodeDelivery(qrCodeDelivery)); } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
@@ -8,6 +8,7 @@ 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.api.vo.ShowDeviceResp; import com.ruoyi.integration.iotda.builder.IotBuilder; import com.ruoyi.integration.iotda.config.IotDAConfig; import lombok.extern.slf4j.Slf4j; @@ -256,4 +257,33 @@ } return R.fail(); } /** * 查询设备 * @param deviceId * @return */ public R<ShowDeviceResp> showDeviceRequest(String deviceId) { ShowDeviceRequest request = new ShowDeviceRequest(); request.withDeviceId(deviceId); try { ShowDeviceResponse response = iotBuilder.buildIot().showDevice(request); log.info("查询设备:{}",response.toString()); ShowDeviceResp showDeviceResp = new ShowDeviceResp(); BeanUtils.copyProperties(response, showDeviceResp); return R.ok(showDeviceResp); } 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(); } } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
@@ -42,11 +42,7 @@ CreateMessageRequest request = new CreateMessageRequest(); System.err.println(code); System.err.println(JSONObject.toJSONString(config)); if(config.getTest() && code.equals(config.getTestDriverCode())){ request.withDeviceId(config.getTestDeviceId()); }else{ request.withDeviceId(config.getDeviceId()); } request.withDeviceId(code); DeviceMessageRequest body = new DeviceMessageRequest(); body.withMessageId(UUID.randomUUID().toString()); body.withName(name);