From 8f22c7b297417ac7df12cb07eb9edd3a77dd01a1 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 31 十二月 2024 17:44:22 +0800
Subject: [PATCH] 修改华为云设备相关功能

---
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java |   10 +-
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java        |   30 +++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java  |    2 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java |   12 +++
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java      |    9 ++
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/ShowDeviceResp.java                   |   68 +++++++++++++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java   |    6 -
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java |   77 +++++++++++++++----
 8 files changed, 188 insertions(+), 26 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java
index c7050fa..741048a 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java
+++ b/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());
+			}
 		};
 	}
 }
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java
index 13f7b58..207907f 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java
+++ b/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);
 }
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/ShowDeviceResp.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/ShowDeviceResp.java
new file mode 100644
index 0000000..fc2a57c
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/ShowDeviceResp.java
@@ -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;
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
index 470d14c..5c6bf3b 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
+++ b/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();
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java
index e68a21f..19db25a 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java
+++ b/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);
+	}
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java
index bd76411..3ae6927 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java
+++ b/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));
     }
 
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
index 0f2fb02..657165a 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
+++ b/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();
+    }
 }
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
index 009e8f1..69cf6c7 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
+++ b/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);

--
Gitblit v1.7.1