parent
916024b891
commit
698cec92bd
@ -1,43 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> |
||||
<parent> |
||||
<artifactId>yudao-module-iot-plugin</artifactId> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<version>2.2.0-snapshot</version> |
||||
</parent> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<artifactId>yudao-module-iot-plugin-http</artifactId> |
||||
<name>${project.artifactId}</name> |
||||
<version>1.0.0</version> |
||||
<description>物联网 插件模块 - http 插件</description> |
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<artifactId>maven-shade-plugin</artifactId> |
||||
<version>3.2.4</version> |
||||
<executions> |
||||
<execution> |
||||
<phase>package</phase> |
||||
<goals> |
||||
<goal>shade</goal> |
||||
</goals> |
||||
<configuration> |
||||
<transformers> |
||||
<transformer> |
||||
<mainClass>com.example.HttpPluginSpringbootApplication</mainClass> |
||||
</transformer> |
||||
</transformers> |
||||
</configuration> |
||||
</execution> |
||||
</executions> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
<properties> |
||||
<plugin.id>${project.artifactId}</plugin.id> |
||||
<plugin.description>${project.artifactId}-${project.version}</plugin.description> |
||||
<plugin.class>cn.iocoder.yudao.module.iot.config.HttpVertxPlugin</plugin.class> |
||||
<plugin.version>${project.version}</plugin.version> |
||||
<plugin.provider>yudao</plugin.provider> |
||||
</properties> |
||||
</project> |
@ -1,6 +0,0 @@ |
||||
plugin.id=yudao-module-iot-plugin-http |
||||
plugin.class=cn.iocoder.yudao.module.iot.config.HttpVertxPlugin |
||||
plugin.version=1.0.0 |
||||
plugin.provider=yudao |
||||
plugin.dependencies= |
||||
plugin.description=yudao-module-iot-plugin-http-1.0.0 |
@ -1,26 +0,0 @@ |
||||
package cn.iocoder.yudao.module.iot; |
||||
|
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.WebApplicationType; |
||||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
||||
// TODO @haohao:建议包名:cn.iocoder.yudao.module.iot.plugin.${pluginName},例如说 http。然后子包如下:
|
||||
// config:方配置类,以及 HttpVertxPlugin 初始化
|
||||
// service:放 HttpVertxHandler 逻辑;
|
||||
@SpringBootApplication |
||||
public class HttpPluginSpringbootApplication { |
||||
|
||||
public static void main(String[] args) { |
||||
// SpringApplication.run(HttpPluginSpringbootApplication.class, args);
|
||||
SpringApplication application = new SpringApplication(HttpPluginSpringbootApplication.class); |
||||
application.setWebApplicationType(WebApplicationType.NONE); |
||||
application.run(args); |
||||
} |
||||
|
||||
} |
||||
|
||||
// TODO @haohao:如下是 sdk 的包:cn.iocoder.yudao.module.iot.plugin.sdk
|
||||
// 1. api 包:实现 DeviceDataApi 接口,通过 resttemplate 调用
|
||||
// 2. config 包:初始化 DeviceDataApi 等等
|
||||
|
||||
// 3. 其中 resttemplate 调用的后端地址,通过每个服务的 application.yaml 进行注入。
|
@ -1,69 +0,0 @@ |
||||
package cn.iocoder.yudao.module.iot.config; |
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
||||
import cn.iocoder.yudao.module.iot.api.device.DeviceDataApi; |
||||
import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceEventReportReqDTO; |
||||
import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO; |
||||
import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceStatusUpdateReqDTO; |
||||
import org.pf4j.DefaultPluginManager; |
||||
import org.pf4j.PluginWrapper; |
||||
import org.springframework.boot.web.client.RestTemplateBuilder; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.web.client.RestTemplate; |
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
||||
|
||||
// TODO 芋艿:临时实现;
|
||||
@Configuration |
||||
public class TestConfiguration { |
||||
|
||||
// @Resource
|
||||
// private RestTemplate restTemplate;
|
||||
|
||||
// TODO 芋艿:这里,后续看看怎么创建好点
|
||||
@Bean |
||||
public RestTemplate restTemplate() { |
||||
return new RestTemplateBuilder().build(); |
||||
} |
||||
|
||||
@Bean |
||||
public DeviceDataApi deviceDataApi(RestTemplate restTemplate) { |
||||
return new DeviceDataApi() { |
||||
|
||||
@Override |
||||
public CommonResult<Boolean> updateDeviceStatus(IotDeviceStatusUpdateReqDTO updateReqDTO) { |
||||
// TODO haohao:待实现
|
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public CommonResult<Boolean> reportDeviceEventData(IotDeviceEventReportReqDTO reportReqDTO) { |
||||
// TODO haohao:待实现
|
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public CommonResult<Boolean> reportDevicePropertyData(IotDevicePropertyReportReqDTO reportReqDTO) { |
||||
// TODO haohao:待完整实现
|
||||
String url = "http://127.0.0.1:48080/rpc-api/iot/device-data/report-property"; |
||||
try { |
||||
restTemplate.postForObject(url, reportReqDTO, CommonResult.class); |
||||
return success(true); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
return CommonResult.error(400, "error"); |
||||
} |
||||
} |
||||
|
||||
}; |
||||
} |
||||
|
||||
// TODO @haohao:可能要看下,有没更好的方式
|
||||
@Bean(initMethod = "start") |
||||
public HttpVertxPlugin HttpVertxPlugin() { |
||||
PluginWrapper pluginWrapper = new PluginWrapper(new DefaultPluginManager(), null, null, null); |
||||
return new HttpVertxPlugin(pluginWrapper); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,55 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<parent> |
||||
<artifactId>yudao-module-iot-plugins</artifactId> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<version>${revision}</version> |
||||
</parent> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<artifactId>yudao-module-iot-plugin-common</artifactId> |
||||
<packaging>jar</packaging> |
||||
|
||||
<name>${project.artifactId}</name> |
||||
<description> |
||||
物联网 插件 模块 - 通用功能 |
||||
</description> |
||||
|
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-common</artifactId> |
||||
</dependency> |
||||
<!-- 项目依赖 --> |
||||
<dependency> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-module-iot-api</artifactId> |
||||
<version>${revision}</version> |
||||
</dependency> |
||||
|
||||
<!-- 其他依赖项 --> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-web</artifactId> |
||||
</dependency> |
||||
|
||||
<!-- PF4J --> |
||||
<dependency> |
||||
<groupId>org.pf4j</groupId> |
||||
<artifactId>pf4j-spring</artifactId> |
||||
<exclusions> |
||||
<exclusion> |
||||
<groupId>org.slf4j</groupId> |
||||
<artifactId>slf4j-log4j12</artifactId> |
||||
</exclusion> |
||||
</exclusions> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
</dependency> |
||||
</dependencies> |
||||
|
||||
</project> |
@ -0,0 +1,60 @@ |
||||
package cn.iocoder.yudao.module.iot.plugin.common.api; |
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
||||
import cn.iocoder.yudao.module.iot.api.device.DeviceDataApi; |
||||
import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceEventReportReqDTO; |
||||
import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO; |
||||
import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceStatusUpdateReqDTO; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.web.client.RestTemplate; |
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
||||
|
||||
@Slf4j |
||||
public class DeviceDataApiClient implements DeviceDataApi { |
||||
|
||||
private final RestTemplate restTemplate; |
||||
private final String deviceDataUrl; |
||||
|
||||
// 可以通过构造器把 RestTemplate 和 baseUrl 注入进来
|
||||
public DeviceDataApiClient(RestTemplate restTemplate, String deviceDataUrl) { |
||||
this.restTemplate = restTemplate; |
||||
this.deviceDataUrl = deviceDataUrl; |
||||
} |
||||
|
||||
@Override |
||||
public CommonResult<Boolean> updateDeviceStatus(IotDeviceStatusUpdateReqDTO updateReqDTO) { |
||||
// 示例:如果对应的远程地址是 /rpc-api/iot/device-data/update-status
|
||||
String url = deviceDataUrl + "/rpc-api/iot/device-data/update-status"; |
||||
return doPost(url, updateReqDTO, "updateDeviceStatus"); |
||||
} |
||||
|
||||
@Override |
||||
public CommonResult<Boolean> reportDeviceEventData(IotDeviceEventReportReqDTO reportReqDTO) { |
||||
// 示例:如果对应的远程地址是 /rpc-api/iot/device-data/report-event
|
||||
String url = deviceDataUrl + "/rpc-api/iot/device-data/report-event"; |
||||
return doPost(url, reportReqDTO, "reportDeviceEventData"); |
||||
} |
||||
|
||||
@Override |
||||
public CommonResult<Boolean> reportDevicePropertyData(IotDevicePropertyReportReqDTO reportReqDTO) { |
||||
// 示例:如果对应的远程地址是 /rpc-api/iot/device-data/report-property
|
||||
String url = deviceDataUrl + "/rpc-api/iot/device-data/report-property"; |
||||
return doPost(url, reportReqDTO, "reportDevicePropertyData"); |
||||
} |
||||
|
||||
/** |
||||
* 将与远程服务交互的通用逻辑抽取成一个私有方法 |
||||
*/ |
||||
private <T> CommonResult<Boolean> doPost(String url, T requestBody, String actionName) { |
||||
log.info("[{}] Sending request to URL: {}", actionName, url); |
||||
try { |
||||
// 这里指定返回类型为 CommonResult<?>,根据后台服务返回的实际结构做调整
|
||||
restTemplate.postForObject(url, requestBody, CommonResult.class); |
||||
return success(true); |
||||
} catch (Exception e) { |
||||
log.error("[{}] Error sending request to URL: {}", actionName, url, e); |
||||
return CommonResult.error(400, "Request error: " + e.getMessage()); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,29 @@ |
||||
package cn.iocoder.yudao.module.iot.plugin.common.config; |
||||
|
||||
import cn.iocoder.yudao.module.iot.api.device.DeviceDataApi; |
||||
import cn.iocoder.yudao.module.iot.plugin.common.api.DeviceDataApiClient; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.boot.web.client.RestTemplateBuilder; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.web.client.RestTemplate; |
||||
|
||||
@Configuration |
||||
public class DeviceDataApiInitializer { |
||||
|
||||
@Value("${iot.device-data.url}") |
||||
private String deviceDataUrl; |
||||
|
||||
@Bean |
||||
public RestTemplate restTemplate() { |
||||
// 如果你有更多的自定义需求,比如连接池、超时时间等,可以在这里设置
|
||||
return new RestTemplateBuilder().build(); |
||||
} |
||||
|
||||
@Bean |
||||
public DeviceDataApi deviceDataApi(RestTemplate restTemplate) { |
||||
// 返回我们自定义的 Client 实例
|
||||
return new DeviceDataApiClient(restTemplate, deviceDataUrl); |
||||
} |
||||
|
||||
} |
@ -0,0 +1 @@ |
||||
package cn.iocoder.yudao.module.iot.plugin.common; |
@ -0,0 +1,6 @@ |
||||
plugin.id=yudao-module-iot-plugin-http |
||||
plugin.class=cn.iocoder.yudao.module.iot.plugin.http.config.HttpVertxPlugin |
||||
plugin.version=1.0.0 |
||||
plugin.provider=yudao |
||||
plugin.dependencies= |
||||
plugin.description=yudao-module-iot-plugin-http-1.0.0 |
@ -0,0 +1,16 @@ |
||||
package cn.iocoder.yudao.module.iot.plugin.http; |
||||
|
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.WebApplicationType; |
||||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
||||
@SpringBootApplication(scanBasePackages = "cn.iocoder.yudao.module.iot.plugin") |
||||
public class HttpPluginSpringbootApplication { |
||||
|
||||
public static void main(String[] args) { |
||||
SpringApplication application = new SpringApplication(HttpPluginSpringbootApplication.class); |
||||
application.setWebApplicationType(WebApplicationType.NONE); |
||||
application.run(args); |
||||
} |
||||
|
||||
} |
@ -1,8 +1,8 @@ |
||||
package cn.iocoder.yudao.module.iot.config; |
||||
package cn.iocoder.yudao.module.iot.plugin.http.config; |
||||
|
||||
import cn.hutool.extra.spring.SpringUtil; |
||||
import cn.iocoder.yudao.module.iot.api.device.DeviceDataApi; |
||||
import cn.iocoder.yudao.module.iot.service.HttpVertxHandler; |
||||
import cn.iocoder.yudao.module.iot.plugin.http.service.HttpVertxHandler; |
||||
import io.vertx.core.Vertx; |
||||
import io.vertx.ext.web.Router; |
||||
import io.vertx.ext.web.handler.BodyHandler; |
@ -0,0 +1,16 @@ |
||||
package cn.iocoder.yudao.module.iot.plugin.http.config; |
||||
|
||||
import org.pf4j.DefaultPluginManager; |
||||
import org.pf4j.PluginWrapper; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
|
||||
@Configuration |
||||
public class HttpVertxPluginConfiguration { |
||||
|
||||
@Bean(initMethod = "start") |
||||
public HttpVertxPlugin httpVertxPlugin() { |
||||
PluginWrapper pluginWrapper = new PluginWrapper(new DefaultPluginManager(), null, null, null); |
||||
return new HttpVertxPlugin(pluginWrapper); |
||||
} |
||||
} |
2
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/service/HttpVertxHandler.java → yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/service/HttpVertxHandler.java
2
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/service/HttpVertxHandler.java → yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/service/HttpVertxHandler.java
@ -1,4 +1,4 @@ |
||||
package cn.iocoder.yudao.module.iot.service; |
||||
package cn.iocoder.yudao.module.iot.plugin.http.service; |
||||
|
||||
import cn.hutool.json.JSONObject; |
||||
import cn.hutool.json.JSONUtil; |
@ -1,3 +1,7 @@ |
||||
spring: |
||||
application: |
||||
name: yudao-module-iot-plugin-http |
||||
|
||||
iot: |
||||
device-data: |
||||
url: http://127.0.0.1:48080 |
Loading…
Reference in new issue