jianhui vor 5 Jahren
Ursprung
Commit
fe52b510c7
29 geänderte Dateien mit 714 neuen und 29 gelöschten Zeilen
  1. 12 0
      blade-biz-common/src/main/java/org/springblade/common/constant/AepConstant.java
  2. 3 1
      blade-ops/blade-websocket/src/main/java/org/springblade/websocket/config/WebSocketConfig.java
  3. 2 0
      blade-ops/blade-websocket/src/main/java/org/springblade/websocket/controller/ChatController.java
  4. 6 0
      blade-service-api/third-api/pom.xml
  5. 4 4
      blade-service-api/third-api/src/main/java/org/springblade/third/feign/IThirdVideoCloudDeviceClient.java
  6. 20 0
      blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/dto/AepIotDeviceQueryDto.java
  7. 33 0
      blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/entity/AepIotDeviceEntity.java
  8. 5 0
      blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/entity/IotAepProduct.java
  9. 40 0
      blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/AepDeviceClientFallback.java
  10. 15 0
      blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/AepProductButtFallback.java
  11. 48 0
      blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/IAepDeviceManageClient.java
  12. 18 0
      blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/IAepProductButtClient.java
  13. 34 0
      blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/IDeviceManageClient.java
  14. 35 0
      blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/IPerceptionDeviceClientFallback.java
  15. 8 4
      blade-service/device/src/main/java/org/springblade/device/controller/VideoCloudDeviceController.java
  16. 10 3
      blade-service/third/pom.xml
  17. 8 1
      blade-service/third/src/main/java/org/springblade/third/ThirdApplication.java
  18. 4 4
      blade-service/third/src/main/java/org/springblade/third/feign/ThirdVideoCloudDeviceClient.java
  19. 74 2
      blade-service/third/src/main/java/org/springblade/third/iotdevice/controller/IotAepProductButtController.java
  20. 1 1
      blade-service/third/src/main/java/org/springblade/third/iotdevice/controller/IotAepProductController.java
  21. 103 0
      blade-service/third/src/main/java/org/springblade/third/iotdevice/feign/AepDeviceManageClient.java
  22. 44 0
      blade-service/third/src/main/java/org/springblade/third/iotdevice/feign/AepProductButtClient.java
  23. 2 0
      blade-service/third/src/main/java/org/springblade/third/iotdevice/mapper/IotAepProductMapper.xml
  24. 24 8
      blade-service/third/src/main/java/org/springblade/third/open/videocloud/MediaServerWebHookController.java
  25. 1 1
      blade-service/third/src/main/java/org/springblade/third/service/impl/ThirdVideoCloudDeviceServiceImpl.java
  26. 38 0
      blade-service/third/src/main/java/org/springblade/websocket/config/WebSocketConfig.java
  27. 42 0
      blade-service/third/src/main/java/org/springblade/websocket/controller/ChatController.java
  28. 45 0
      blade-service/third/src/main/java/org/springblade/websocket/event/WebSocketEventListener.java
  29. 35 0
      blade-service/third/src/main/java/org/springblade/websocket/model/ChatMessage.java

+ 12 - 0
blade-biz-common/src/main/java/org/springblade/common/constant/AepConstant.java

@@ -0,0 +1,12 @@
+package org.springblade.common.constant;
+
+/**
+ * @author lidexi
+ * @date 2021/5/29 16:53
+ */
+
+public class AepConstant {
+
+	public static final String APPKEY = "lAcNAWcVwxb";
+	public static final String APPSECRET = "apjeandFrK";
+}

+ 3 - 1
blade-ops/blade-websocket/src/main/java/org/springblade/websocket/config/WebSocketConfig.java

@@ -17,7 +17,8 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
 
 	@Override
 	public void registerStompEndpoints(StompEndpointRegistry registry) {
-		registry.addEndpoint("/ws").withSockJS();
+		registry.addEndpoint("/ws")
+			.setAllowedOrigins("*").withSockJS();
 	}
 
 	@Override
@@ -26,6 +27,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
 		// Enables a simple in-memory broker
 		registry.enableSimpleBroker("/topic");
 
+
 		// Use this for enabling a Full featured broker like RabbitMQ
 		/*registry.enableStompBrokerRelay("/topic")
 			.setRelayHost("localhost")

+ 2 - 0
blade-ops/blade-websocket/src/main/java/org/springblade/websocket/controller/ChatController.java

@@ -24,6 +24,7 @@ public class ChatController {
 //	@SendTo("/topic/public")
 	public void sendMessage(@Payload ChatMessage chatMessage) {
 		String routerKey = "/topic/" + chatMessage.getSender();
+		System.out.println(routerKey+":rou");
 		messagingTemplate.convertAndSend(routerKey, chatMessage);
 		return;
 	}
@@ -34,6 +35,7 @@ public class ChatController {
 							   SimpMessageHeaderAccessor headerAccessor) {
 		// Add username in web socket session
 		headerAccessor.getSessionAttributes().put("username", chatMessage.getSender());
+		System.out.println("添加用户"+chatMessage.getSender());
 		return chatMessage;
 	}
 

+ 6 - 0
blade-service-api/third-api/pom.xml

@@ -56,6 +56,12 @@
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.ctg.ag</groupId>
+            <artifactId>ag-sdk-biz-48734.tar.gz</artifactId>
+            <version>20210528.182447-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 
 

+ 4 - 4
blade-service-api/third-api/src/main/java/org/springblade/third/feign/IThirdVideoCloudDeviceClient.java

@@ -29,14 +29,14 @@ public interface IThirdVideoCloudDeviceClient {
 	/**
 	 * 查询设备视频推流状态
 	 */
-	@GetMapping("/queryStream/{deviceNum}")
-	R<Integer> queryStream(@PathVariable(value = "deviceNum") String deviceNum);
+	@GetMapping("/queryStream")
+	R<Integer> queryStream(@RequestParam String deviceNum);
 
 	/**
 	 * 关闭设备视频推流
 	 */
-	@GetMapping("/closeStream/{deviceNum}")
-	R<Integer> closeStream(@PathVariable(value = "deviceNum") String deviceNum);
+	@GetMapping("/closeStream")
+	R<Integer> closeStream(@RequestParam String deviceNum);
 
 	/**
 	 * 设备视频推流

+ 20 - 0
blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/dto/AepIotDeviceQueryDto.java

@@ -0,0 +1,20 @@
+package org.springblade.third.iotdevice.dto;
+
+import lombok.Data;
+
+/**
+ * @author lidexi
+ * @date 2021/6/1 14:09
+ * aep设备查询对象
+ */
+@Data
+public class AepIotDeviceQueryDto {
+
+	private String masterKey;
+
+	private Integer productId;
+
+	private Integer pageNow = 1;
+
+	private Integer pageSize = 500;
+}

+ 33 - 0
blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/entity/AepIotDeviceEntity.java

@@ -0,0 +1,33 @@
+package org.springblade.third.iotdevice.entity;
+
+import lombok.Data;
+
+/**
+ * @author lidexi
+ * @date 2021/6/1 14:03
+ */
+@Data
+public class AepIotDeviceEntity {
+
+	private String productId;
+
+	private String imsi;
+
+	private String netStatus;
+
+	private String deviceId;
+
+	private String deviceName;
+
+	private String deviceStatus;
+
+	private String autoObserver;
+
+	private String onlineAt;
+
+	private String offflineAt;
+
+	private String createBy;
+
+	private String imei;
+}

+ 5 - 0
blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/entity/IotAepProduct.java

@@ -39,6 +39,11 @@ public class IotAepProduct extends BaseEntity {
 	private static final long serialVersionUID = 1L;
 
 	private String thirdId;
+
+	@ApiModelProperty(value = "apiKey")
+	private String apiKey;
+	@ApiModelProperty(value = "productId")
+	private String productId;
 	/**
 	* 接入类型(必填): 1.设备直连,2.网关接入,3.南向云接入(只支持1)
 	*/

+ 40 - 0
blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/AepDeviceClientFallback.java

@@ -0,0 +1,40 @@
+package org.springblade.third.iotdevice.feign;
+
+import org.springblade.core.tool.api.R;
+import org.springblade.device.entity.IotDevice;
+import org.springblade.third.iotdevice.dto.AepIotDeviceQueryDto;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author lidexi
+ * @date 2021/5/29 16:44
+ */
+@Component
+public class AepDeviceClientFallback implements IAepDeviceManageClient {
+
+	@Override
+	public R createDevice(IotDevice iotDevice) {
+		return null;
+	}
+
+	@Override
+	public R deleteDevice() {
+		return null;
+	}
+
+	@Override
+	public R queryDevice(AepIotDeviceQueryDto aepIotDeviceQueryDto) {
+		return null;
+	}
+
+	@Override
+	public R queryDeviceList(AepIotDeviceQueryDto aepIotDeviceQueryDto) {
+		return null;
+	}
+
+
+	@Override
+	public R updateDevice() {
+		return null;
+	}
+}

+ 15 - 0
blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/AepProductButtFallback.java

@@ -0,0 +1,15 @@
+package org.springblade.third.iotdevice.feign;
+
+import org.springframework.stereotype.Component;
+
+/**
+ * @author lidexi
+ * @date 2021/5/29 17:00
+ */
+@Component
+public class AepProductButtFallback implements IAepProductButtClient {
+	@Override
+	public Object productList() {
+		return null;
+	}
+}

+ 48 - 0
blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/IAepDeviceManageClient.java

@@ -0,0 +1,48 @@
+package org.springblade.third.iotdevice.feign;
+
+import org.springblade.common.constant.ServicesName;
+import org.springblade.core.tool.api.R;
+import org.springblade.device.entity.IotDevice;
+import org.springblade.third.iotdevice.dto.AepIotDeviceQueryDto;
+import org.springblade.third.iotdevice.entity.AepIotDeviceEntity;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @author lidexi
+ * @date 2021/5/27 9:47
+ */
+@FeignClient(value = ServicesName.THIRD_SERVICE,path = "/feign/third/aep")
+public interface IAepDeviceManageClient {
+	/**
+	 * 创建设备
+	 * @return
+	 */
+	@PostMapping("/addDevice")
+	R createDevice(@RequestBody IotDevice iotDevice);
+	/**
+	 * 删除设备
+	 * @return
+	 */
+	@PostMapping("/deleteDevice")
+	R deleteDevice();
+	/**
+	 * 查询设备
+	 * @return
+	 */
+	@PostMapping("/queryDevice")
+	R queryDevice(@RequestBody AepIotDeviceQueryDto aepIotDeviceQueryDto);
+	/**
+	 * 批量查询设备
+	 * @return
+	 */
+	@PostMapping("/queryDeviceList")
+	R queryDeviceList(@RequestBody AepIotDeviceQueryDto aepIotDeviceQueryDto);
+	/**
+	 * 批量查询设备
+	 * @return
+	 */
+	@PostMapping("/updateDevice")
+	R updateDevice();
+}

+ 18 - 0
blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/IAepProductButtClient.java

@@ -0,0 +1,18 @@
+package org.springblade.third.iotdevice.feign;
+
+import org.springblade.common.constant.ServicesName;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+/**
+ * @author lidexi
+ * @date 2021/5/29 16:57
+ */
+@FeignClient(value = ServicesName.THIRD_SERVICE,path = "/feign/third/aep/productbutt")
+public interface IAepProductButtClient {
+
+	@PostMapping("/productList")
+	public Object productList();
+
+
+}

+ 34 - 0
blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/IDeviceManageClient.java

@@ -0,0 +1,34 @@
+package org.springblade.third.iotdevice.feign;
+
+/**
+ * @author lidexi
+ * @date 2021/5/29 16:38
+ */
+
+public interface IDeviceManageClient {
+	/**
+	 * 创建设备
+	 * @return
+	 */
+	Object createDevice();
+	/**
+	 * 删除设备
+	 * @return
+	 */
+	Object deleteDevice();
+	/**
+	 * 查询设备
+	 * @return
+	 */
+	Object queryDevice();
+	/**
+	 * 批量查询设备
+	 * @return
+	 */
+	Object queryDeviceList();
+	/**
+	 * 批量查询设备
+	 * @return
+	 */
+	Object updateDevice();
+}

+ 35 - 0
blade-service-api/third-api/src/main/java/org/springblade/third/iotdevice/feign/IPerceptionDeviceClientFallback.java

@@ -0,0 +1,35 @@
+package org.springblade.third.iotdevice.feign;
+
+import org.springframework.stereotype.Component;
+
+/**
+ * @author lidexi
+ * @date 2021/5/29 16:42
+ */
+@Component
+public class IPerceptionDeviceClientFallback implements IPerceptionIotDeviceClient {
+	@Override
+	public Object createDevice() {
+		return null;
+	}
+
+	@Override
+	public Object deleteDevice() {
+		return null;
+	}
+
+	@Override
+	public Object queryDevice() {
+		return null;
+	}
+
+	@Override
+	public Object queryDeviceList() {
+		return null;
+	}
+
+	@Override
+	public Object updateDevice() {
+		return null;
+	}
+}

+ 8 - 4
blade-service/device/src/main/java/org/springblade/device/controller/VideoCloudDeviceController.java

@@ -186,9 +186,10 @@ public class VideoCloudDeviceController extends BladeController {
 	@ApiOperationSupport(order = 10)
 	@ApiOperation(value = "关闭设备视频推流", notes = "传入deviceNum")
 	public R closeStream(@ApiParam(value = "主键集合", required = true) @RequestParam String deviceNum) {
-		R<Integer> closeStream = thirdVideoCloudDeviceClient.closeStream(deviceNum);
-		Integer data = closeStream.getData();
 		VideoCloudDevice videoCloudDevice = videoCloudDeviceService.getByDeviceNum(deviceNum);
+		R<Integer> closeStream = thirdVideoCloudDeviceClient.closeStream(videoCloudDevice.getStreamKey());
+		Integer data = closeStream.getData();
+
 		videoCloudDevice.setIsOnline(data);
 		videoCloudDeviceService.updateById(videoCloudDevice);
 		if(closeStream.getData() == 1){
@@ -257,13 +258,16 @@ public class VideoCloudDeviceController extends BladeController {
 			videoCloudDeviceVO.setVideoExists(true);
 			return R.data(videoCloudDeviceVO, "开始播放");
 		}
+//		R<String> rtspUrl = thirdVideoCloudDeviceClient.getRtspUrl(videoCloudDevice);
+//		videoCloudDevice.setRtspUrl(rtspUrl.getData());
+//		videoCloudDeviceService.updateById(videoCloudDevice);
 		R<VideoCloudDevice> pushStream = thirdVideoCloudDeviceClient.pushStream(videoCloudDevice);
 		if(pushStream.getData() != null){
 			VideoCloudDevice data = pushStream.getData();
 			//更新推流后的设备信息
 			videoCloudDeviceService.updateById(data);
-			videoCloudDeviceVO.setVideoExists(false);
-			return R.data(null, "视频加载中");
+			videoCloudDeviceVO.setVideoExists(true);
+			return R.data(videoCloudDeviceVO, "视频加载中");
 		}else{
 			videoCloudDeviceVO.setVideoExists(false);
 			return R.data(videoCloudDeviceVO, "视频加载失败");

+ 10 - 3
blade-service/third/pom.xml

@@ -38,13 +38,20 @@
             <artifactId>spring-boot-starter-amqp</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-websocket</artifactId>
-            <version>2.7.2.RELEASE</version>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>spring-boot-starter-tomcat</artifactId>
+                    <groupId>org.springframework.boot</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
 
 
+
+
     </dependencies>
 
 

+ 8 - 1
blade-service/third/src/main/java/org/springblade/third/ThirdApplication.java

@@ -11,7 +11,14 @@ import org.springframework.context.annotation.ComponentScan;
  **/
 @SpringCloudApplication
 @EnableBladeFeign
-@ComponentScan(basePackages = {"org.springblade.sms.service.impl"})
+@ComponentScan(basePackages = {"org.springblade.sms.service.impl",
+								"org.springblade.third.iotdevice",
+								"org.springblade.third.feign",
+								"org.springblade.third.service",
+								"org.springblade.third.open",
+								"org.springblade.websocket",
+								"org.springblade.third.beans"
+								})
 public class ThirdApplication {
 	public static void main(String[] args) {
 		BladeApplication.run(ServicesName.THIRD_SERVICE,ThirdApplication.class,args);

+ 4 - 4
blade-service/third/src/main/java/org/springblade/third/feign/ThirdVideoCloudDeviceClient.java

@@ -42,8 +42,8 @@ public class ThirdVideoCloudDeviceClient implements IThirdVideoCloudDeviceClient
 	 * 查询设备视频推流状态
 	 */
 	@Override
-	@GetMapping("/queryStream/{deviceNum}")
-	public R<Integer> queryStream(@PathVariable(value = "deviceNum") String deviceNum) {
+	@GetMapping("/queryStream")
+	public R<Integer> queryStream(@RequestParam String deviceNum) {
 		return thirdVideoCloudDeviceService.queryStream(deviceNum);
 	}
 
@@ -51,8 +51,8 @@ public class ThirdVideoCloudDeviceClient implements IThirdVideoCloudDeviceClient
 	 * 关闭设备视频推流
 	 */
 	@Override
-	@GetMapping("/closeStream/{deviceNum}")
-	public R<Integer> closeStream(@PathVariable(value = "deviceNum") String deviceNum) {
+	@GetMapping("/closeStream")
+	public R<Integer> closeStream(@RequestParam String deviceNum) {
 		return thirdVideoCloudDeviceService.closeStream(deviceNum);
 	}
 

+ 74 - 2
blade-service/third/src/main/java/org/springblade/third/iotdevice/controller/IotAepProductButtController.java

@@ -1,7 +1,23 @@
 package org.springblade.third.iotdevice.controller;
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ctg.ag.sdk.biz.AepProductManagementClient;
+import com.ctg.ag.sdk.biz.aep_product_management.QueryProductListRequest;
+import com.ctg.ag.sdk.biz.aep_product_management.QueryProductListResponse;
+import com.ctg.ag.sdk.biz.aep_product_management.QueryProductRequest;
+import com.ctg.ag.sdk.biz.aep_product_management.QueryProductResponse;
+import lombok.AllArgsConstructor;
+import lombok.SneakyThrows;
+import org.springblade.common.constant.AepConstant;
+import org.springblade.core.tool.api.R;
+import org.springblade.third.iotdevice.entity.IotAepProduct;
+import org.springblade.third.iotdevice.service.IIotAepProductService;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * @author lidexi
@@ -10,8 +26,64 @@ import org.springframework.web.bind.annotation.RestController;
  */
 
 @RestController
+@AllArgsConstructor
 @RequestMapping("/third/aepproduct/butt")
 public class IotAepProductButtController {
 
+	private final IIotAepProductService iotAepProductService;
+
+	@SneakyThrows
+	@PostMapping("/productList")
+	public R productList() {
+		AepProductManagementClient client = AepProductManagementClient.newClient()
+			.appKey(AepConstant.APPKEY).appSecret(AepConstant.APPSECRET)
+			.build();
+		QueryProductListRequest request = new QueryProductListRequest();
+		request.setParamPageNow(1);
+		request.setParamPageSize(20000);
+
+		QueryProductListResponse queryProductListResponse = client.QueryProductList(request);
+
+		client.shutdown();
+		JSONObject body = JSONUtil.parseObj(new String(queryProductListResponse.getBody()));
+		JSONObject result = JSONUtil.parseObj(body.get("result"));
+		JSONArray list1 = JSONUtil.parseArray(result.get("list"));
+		List<IotAepProduct> list = com.alibaba.fastjson.JSONObject.parseArray(list1.toString(), IotAepProduct.class);
+		list.stream().forEach(iotAepProduct -> {
+			IotAepProduct product = this.iotAepProductService.getBaseMapper().selectOne(new QueryWrapper<>(new IotAepProduct()).lambda()
+				.eq(IotAepProduct::getProductId, iotAepProduct.getProductId()));
+			if(product == null){
+				iotAepProduct.setPlatform("aep");
+				this.iotAepProductService.save(iotAepProduct);
+			}else {
+				iotAepProduct.setId(product.getId());
+				iotAepProduct.setPlatform("aep");
+				this.iotAepProductService.updateById(iotAepProduct);
+			}
+		});
+		return R.data(list);
+	}
+
+	@GetMapping("/product/{id}")
+	public R queryOne(@PathVariable("id") Long id) {
+		AepProductManagementClient client = AepProductManagementClient.newClient()
+			.appKey(AepConstant.APPKEY).appSecret(AepConstant.APPSECRET)
+			.build();
+
+		QueryProductRequest request = new QueryProductRequest();
+		request.setParamProductId(id);
+		try {
+			QueryProductResponse queryProductResponse = client.QueryProduct(request);
+			JSONObject body = JSONUtil.parseObj(new String(queryProductResponse.getBody()));
+			System.out.println();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+// more requests
+
+		client.shutdown();
+		return null;
+	}
 
 }

+ 1 - 1
blade-service/third/src/main/java/org/springblade/third/iotdevice/controller/IotAepProductController.java

@@ -14,7 +14,7 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package org.springblade.third.controller;
+package org.springblade.third.iotdevice.controller;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;

+ 103 - 0
blade-service/third/src/main/java/org/springblade/third/iotdevice/feign/AepDeviceManageClient.java

@@ -0,0 +1,103 @@
+package org.springblade.third.iotdevice.feign;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.ctg.ag.sdk.biz.AepDeviceManagementClient;
+import com.ctg.ag.sdk.biz.aep_device_management.CreateDeviceRequest;
+import com.ctg.ag.sdk.biz.aep_device_management.QueryDeviceListRequest;
+import com.ctg.ag.sdk.biz.aep_device_management.QueryDeviceListResponse;
+import org.springblade.common.constant.AepConstant;
+import org.springblade.core.tool.api.R;
+import org.springblade.device.entity.IotDevice;
+import org.springblade.third.iotdevice.dto.AepIotDeviceQueryDto;
+import org.springblade.third.iotdevice.entity.AepIotDeviceEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author lidexi
+ * @date 2021/5/29 16:35
+ */
+
+@RestController
+@RequestMapping("/feign/third/aep")
+public class AepDeviceManageClient implements IAepDeviceManageClient {
+	@Override
+	@PostMapping("/addDevice")
+	public R createDevice(@RequestBody IotDevice iotDevice) {
+		AepDeviceManagementClient client = AepDeviceManagementClient.newClient()
+			.appKey(AepConstant.APPKEY).appSecret(AepConstant.APPSECRET)
+			.build();
+
+		CreateDeviceRequest request = new CreateDeviceRequest();
+//		request.addParamMasterKey()
+// request.setParamMasterKey(MasterKey);	// single value
+// request.addParamMasterKey(MasterKey);	// or multi values
+// request.setBody([BINARY DATA]);	//具体格式见前面请求body说明
+		try {
+			System.out.println(client.CreateDevice(request));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+// more requests
+
+		client.shutdown();
+		return null;
+	}
+
+	@Override
+	@PostMapping("/deleteDevice")
+	public R deleteDevice() {
+		return null;
+	}
+
+	@Override
+	@PostMapping("/queryDevice")
+	public R queryDevice(@RequestBody AepIotDeviceQueryDto aepIotDeviceQueryDto) {
+		return null;
+	}
+
+	@Override
+	@PostMapping("/queryDeviceList")
+	public R queryDeviceList(@RequestBody AepIotDeviceQueryDto aepIotDeviceQueryDto) {
+		AepDeviceManagementClient client = AepDeviceManagementClient.newClient()
+			.appKey(AepConstant.APPKEY).appSecret(AepConstant.APPSECRET)
+			.build();
+
+		QueryDeviceListRequest request = new QueryDeviceListRequest();
+		request.setParamMasterKey(aepIotDeviceQueryDto.getMasterKey());
+		request.setParamProductId(aepIotDeviceQueryDto.getProductId());
+		request.setParamPageNow(aepIotDeviceQueryDto.getPageNow());
+		request.setParamPageSize(aepIotDeviceQueryDto.getPageSize());
+
+		List<AepIotDeviceEntity> aepIotDeviceEntities = null;
+		try {
+			QueryDeviceListResponse queryDeviceListResponse = client.QueryDeviceList(request);
+			JSONObject body = JSONUtil.parseObj(new String(queryDeviceListResponse.getBody()));
+			JSONObject result = JSONUtil.parseObj(body.get("result"));
+			JSONArray list = JSONUtil.parseArray(result.get("list"));
+			aepIotDeviceEntities = com.alibaba.fastjson.JSONObject.parseArray(list.toString(), AepIotDeviceEntity.class);
+
+			System.out.println();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+// more requests
+
+		client.shutdown();
+		return R.data(aepIotDeviceEntities);
+	}
+
+	@Override
+	@PostMapping("/updateDevice")
+	public R updateDevice() {
+		return null;
+	}
+}

+ 44 - 0
blade-service/third/src/main/java/org/springblade/third/iotdevice/feign/AepProductButtClient.java

@@ -0,0 +1,44 @@
+package org.springblade.third.iotdevice.feign;
+
+import com.ctg.ag.sdk.biz.AepProductManagementClient;
+import com.ctg.ag.sdk.biz.aep_product_management.QueryProductListRequest;
+import com.ctg.ag.sdk.biz.aep_product_management.QueryProductListResponse;
+import lombok.SneakyThrows;
+import org.springblade.common.constant.AepConstant;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author lidexi
+ * @date 2021/5/29 17:02
+ */
+@RequestMapping("/feign/third/aep/productbutt")
+@RestController
+public class AepProductButtClient implements IAepProductButtClient {
+	@SneakyThrows
+	@Override
+	@PostMapping("/productList")
+	public Object productList() {
+//		AepProductManagementClient client = AepProductManagementClient.newClient()
+//			.appKey(AepConstant.APPKEY).appSecret(AepConstant.APPSECRET)
+//			.build();
+//
+//		QueryProductListRequest request = new QueryProductListRequest();
+//		request.setParamPageNow(1);
+//		request.setParamPageSize(20000);
+//// set your request params here
+//// request.setParamSearchValue(searchValue);	// single value
+//// request.addParamSearchValue(searchValue);	// or multi values
+//// request.setParamPageNow(pageNow);	// single value
+//// request.addParamPageNow(pageNow);	// or multi values
+//// request.setParamPageSize(pageSize);	// single value
+//// request.addParamPageSize(pageSize);	// or multi values
+//		QueryProductListResponse queryProductListResponse = client.QueryProductList(request);
+//
+//// more requests
+//
+//		client.shutdown();
+		return null;
+	}
+}

+ 2 - 0
blade-service/third/src/main/java/org/springblade/third/iotdevice/mapper/IotAepProductMapper.xml

@@ -5,6 +5,8 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="iotAepProductResultMap" type="org.springblade.third.iotdevice.entity.IotAepProduct">
         <result column="id" property="id"/>
+        <result column="product_id" property="productId"/>
+        <result column="api_key" property="apiKey"/>
         <result column="create_user" property="createUser"/>
         <result column="create_dept" property="createDept"/>
         <result column="update_user" property="updateUser"/>

+ 24 - 8
blade-service/third/src/main/java/org/springblade/third/open/videocloud/MediaServerWebHookController.java

@@ -3,15 +3,20 @@ package org.springblade.third.open.videocloud;
 import cn.hutool.json.JSONUtil;
 import io.swagger.annotations.Api;
 import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.log.logger.BladeLogger;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.device.entity.VideoCloudDevice;
 import org.springblade.device.feign.IVideoCloudDeviceClient;
 import org.springblade.third.service.IThirdVideoCloudDeviceService;
-//import org.springblade.websocket.model.ChatMessage;
+
+import org.springblade.websocket.controller.ChatController;
 import org.springblade.websocket.model.ChatMessage;
+import org.springframework.messaging.Message;
+import org.springframework.messaging.MessageChannel;
 import org.springframework.messaging.simp.SimpMessageSendingOperations;
+import org.springframework.messaging.simp.SimpMessagingTemplate;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -21,17 +26,26 @@ import java.util.HashMap;
 import java.util.Map;
 
 @Slf4j
-@AllArgsConstructor
+
 @RestController
-@RequestMapping("open/videocloud/hook")
+@RequestMapping("/open/videocloud/hook")
 @Api(value = "视频云推流回调开放接口", tags = "视频云推流回调开放接口")
+@RequiredArgsConstructor
 public class MediaServerWebHookController {
 
-	private BladeLogger logger;
-	private IVideoCloudDeviceClient videoCloudDeviceClient;
-	private IThirdVideoCloudDeviceService thirdVideoCloudDeviceService;
+	private final BladeLogger logger;
+	private final IVideoCloudDeviceClient videoCloudDeviceClient;
+	private final IThirdVideoCloudDeviceService thirdVideoCloudDeviceService;
+	private final SimpMessageSendingOperations messagingTemplate;
+
+	private final ChatController chatController;
 	//websocket消息发送工具
-	private SimpMessageSendingOperations messagingTemplate;
+//	private  SimpMessagingTemplate simpMessagingTemplate = new SimpMessagingTemplate(new MessageChannel() {
+//		@Override
+//		public boolean send(Message<?> message, long l) {
+//			return false;
+//		}
+//	});
 
 	/**
 	 * 监听流注册和注释事件
@@ -57,7 +71,9 @@ public class MediaServerWebHookController {
 			chatMessage.setSender(stream);
 			chatMessage.setContent(JSONUtil.toJsonStr(videoCloudDevice));
 			String routerKey = "/topic/" + chatMessage.getSender();
-			messagingTemplate.convertAndSend(routerKey, chatMessage);
+			System.out.println(chatMessage+":dddddddddddddd");
+			messagingTemplate.convertAndSendToUser(chatMessage.getSender(),routerKey, chatMessage);
+			chatController.sendMessage(chatMessage);
 		}
 		Map<String, Object> returnMap = new HashMap<>();
 		returnMap.put("code", 0);

+ 1 - 1
blade-service/third/src/main/java/org/springblade/third/service/impl/ThirdVideoCloudDeviceServiceImpl.java

@@ -157,7 +157,7 @@ public class ThirdVideoCloudDeviceServiceImpl implements IThirdVideoCloudDeviceS
 		String secret = mediaServerConfig.getSecret();
 		String addFFmpegUrl = serverHost + "/index/api/addFFmpegSource?secret=" + secret + "&src_url=";
 		addFFmpegUrl = addFFmpegUrl + rtspUrl + "&dst_url=" + dstUrl + deviceNum + "&timeout_ms=300000&enable_hls=0&enable_mp4=0";
-		String response = HttpRequest.get(addFFmpegUrl).execute().body();
+		String response = HttpRequest.get(addFFmpegUrl).header("Content-Type","application/json; charset=utf-8").execute().body();
 		logger.info("videocloud【pushStream】", response);
 		Map body = JsonUtil.parse(response, Map.class);
 		int success = (int)body.get("code");

+ 38 - 0
blade-service/third/src/main/java/org/springblade/websocket/config/WebSocketConfig.java

@@ -0,0 +1,38 @@
+package org.springblade.websocket.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.messaging.simp.config.MessageBrokerRegistry;
+import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
+import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
+import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
+
+/**
+ * WebSocketConfig
+ *
+ * @author rajeevkumarsingh
+ */
+@Configuration
+@EnableWebSocketMessageBroker
+public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
+
+	@Override
+	public void registerStompEndpoints(StompEndpointRegistry registry) {
+		registry.addEndpoint("/ws")
+			.setAllowedOrigins("*").withSockJS();
+	}
+
+	@Override
+	public void configureMessageBroker(MessageBrokerRegistry registry) {
+		registry.setApplicationDestinationPrefixes("/wsapp");
+		// Enables a simple in-memory broker
+		registry.enableSimpleBroker("/topic");
+
+
+		// Use this for enabling a Full featured broker like RabbitMQ
+		/*registry.enableStompBrokerRelay("/topic")
+			.setRelayHost("localhost")
+			.setRelayPort(61613)
+			.setClientLogin("guest")
+			.setClientPasscode("guest");*/
+	}
+}

+ 42 - 0
blade-service/third/src/main/java/org/springblade/websocket/controller/ChatController.java

@@ -0,0 +1,42 @@
+package org.springblade.websocket.controller;
+
+import lombok.AllArgsConstructor;
+import org.springblade.websocket.model.ChatMessage;
+import org.springframework.messaging.handler.annotation.MessageMapping;
+import org.springframework.messaging.handler.annotation.Payload;
+import org.springframework.messaging.handler.annotation.SendTo;
+import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
+import org.springframework.messaging.simp.SimpMessageSendingOperations;
+import org.springframework.stereotype.Controller;
+
+/**
+ * ChatController
+ *
+ * @author rajeevkumarsingh
+ */
+@Controller
+@AllArgsConstructor
+public class ChatController {
+
+	private final SimpMessageSendingOperations messagingTemplate;
+
+	@MessageMapping("/videocloud.sendMessage")
+//	@SendTo("/topic/public")
+	public void sendMessage(@Payload ChatMessage chatMessage) {
+		String routerKey = "/topic/" + chatMessage.getSender();
+		System.out.println(routerKey+":rou");
+		messagingTemplate.convertAndSend(routerKey, chatMessage);
+		return;
+	}
+
+	@MessageMapping("/videocloud.addUser")
+	@SendTo("/topic/public")
+	public ChatMessage addUser(@Payload ChatMessage chatMessage,
+							   SimpMessageHeaderAccessor headerAccessor) {
+		// Add username in web socket session
+		headerAccessor.getSessionAttributes().put("username", chatMessage.getSender());
+		System.out.println("添加用户"+chatMessage.getSender());
+		return chatMessage;
+	}
+
+}

+ 45 - 0
blade-service/third/src/main/java/org/springblade/websocket/event/WebSocketEventListener.java

@@ -0,0 +1,45 @@
+package org.springblade.websocket.event;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.websocket.model.ChatMessage;
+import org.springframework.context.event.EventListener;
+import org.springframework.messaging.simp.SimpMessageSendingOperations;
+import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
+import org.springframework.stereotype.Component;
+import org.springframework.web.socket.messaging.SessionConnectedEvent;
+import org.springframework.web.socket.messaging.SessionDisconnectEvent;
+
+/**
+ * WebSocketEventListener
+ *
+ * @author rajeevkumarsingh
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class WebSocketEventListener {
+
+	private final SimpMessageSendingOperations messagingTemplate;
+
+	@EventListener
+	public void handleWebSocketConnectListener(SessionConnectedEvent event) {
+		log.info("Received a new web socket connection");
+	}
+
+	@EventListener
+	public void handleWebSocketDisconnectListener(SessionDisconnectEvent event) {
+		StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(event.getMessage());
+
+		String username = (String) headerAccessor.getSessionAttributes().get("username");
+		if (username != null) {
+			log.info("User Disconnected : " + username);
+
+			ChatMessage chatMessage = new ChatMessage();
+			chatMessage.setType(ChatMessage.MessageType.LEAVE);
+			chatMessage.setSender(username);
+
+			messagingTemplate.convertAndSend("/topic/public", chatMessage);
+		}
+	}
+}

+ 35 - 0
blade-service/third/src/main/java/org/springblade/websocket/model/ChatMessage.java

@@ -0,0 +1,35 @@
+package org.springblade.websocket.model;
+
+import lombok.Data;
+
+/**
+ * ChatMessage
+ *
+ * @author rajeevkumarsingh
+ */
+@Data
+public class ChatMessage {
+
+	public enum MessageType {
+		/**
+		 * 聊天
+		 */
+		CHAT,
+		/**
+		 * 加入
+		 */
+		JOIN,
+		/**
+		 * 离开
+		 */
+		LEAVE
+	}
+
+	private MessageType type;
+	private String content;
+	/**
+	 * 设备编号
+	 */
+	private String sender;
+
+}