diff --git a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/pom.xml b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/pom.xml index 568f862004..676b25f9ef 100644 --- a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/pom.xml +++ b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/pom.xml @@ -13,6 +13,7 @@ ${project.artifactId} + 物联网 插件 模块 - 通用功能 diff --git a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/api/DeviceDataApiClient.java b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/api/DeviceDataApiClient.java index 183c76e58d..f63267b27b 100644 --- a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/api/DeviceDataApiClient.java +++ b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/api/DeviceDataApiClient.java @@ -10,6 +10,7 @@ import org.springframework.web.client.RestTemplate; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +// TODO @haohao:类注释,写一下,比较好 @Slf4j public class DeviceDataApiClient implements DeviceDataApi { @@ -17,32 +18,32 @@ public class DeviceDataApiClient implements DeviceDataApi { private final String deviceDataUrl; // 可以通过构造器把 RestTemplate 和 baseUrl 注入进来 + // TODO @haohao:可以用 lombok 简化 public DeviceDataApiClient(RestTemplate restTemplate, String deviceDataUrl) { this.restTemplate = restTemplate; this.deviceDataUrl = deviceDataUrl; } + // TODO @haohao:返回结果,不用 CommonResult 哈。 @Override public CommonResult 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 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 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"); } + // TODO @haohao:未来可能有 get 类型哈 /** * 将与远程服务交互的通用逻辑抽取成一个私有方法 */ @@ -51,10 +52,12 @@ public class DeviceDataApiClient implements DeviceDataApi { try { // 这里指定返回类型为 CommonResult,根据后台服务返回的实际结构做调整 restTemplate.postForObject(url, requestBody, CommonResult.class); + // TODO @haohao:check 结果,是否成功 return success(true); } catch (Exception e) { log.error("[{}] Error sending request to URL: {}", actionName, url, e); return CommonResult.error(400, "Request error: " + e.getMessage()); } } + } diff --git a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/config/DeviceDataApiInitializer.java b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/config/DeviceDataApiInitializer.java index 9473033c20..ed39449306 100644 --- a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/config/DeviceDataApiInitializer.java +++ b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/config/DeviceDataApiInitializer.java @@ -8,21 +8,23 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; +// TODO @haohao:这个最好是 autoconfiguration @Configuration public class DeviceDataApiInitializer { + // TODO @haohao:这个要不搞个配置类哈 @Value("${iot.device-data.url}") private String deviceDataUrl; @Bean public RestTemplate restTemplate() { - // 如果你有更多的自定义需求,比如连接池、超时时间等,可以在这里设置 + // TODO haohao:如果你有更多的自定义需求,比如连接池、超时时间等,可以在这里设置 return new RestTemplateBuilder().build(); } + // TODO @haohao:不存在时,才构建 @Bean public DeviceDataApi deviceDataApi(RestTemplate restTemplate) { - // 返回我们自定义的 Client 实例 return new DeviceDataApiClient(restTemplate, deviceDataUrl); } diff --git a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/package-info.java b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/package-info.java index f9eae496d4..83b5bb58aa 100644 --- a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/package-info.java +++ b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-common/src/main/java/cn/iocoder/yudao/module/iot/plugin/common/package-info.java @@ -1 +1,2 @@ +// TODO @芋艿:注释 package cn.iocoder.yudao.module.iot.plugin.common; \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/HttpPluginSpringbootApplication.java b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/HttpPluginSpringbootApplication.java index 648b7dda65..91be33097d 100644 --- a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/HttpPluginSpringbootApplication.java +++ b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/HttpPluginSpringbootApplication.java @@ -11,20 +11,20 @@ import org.springframework.context.ConfigurableApplicationContext; * 独立运行入口 */ @Slf4j -@SpringBootApplication(scanBasePackages = "cn.iocoder.yudao.module.iot.plugin") +@SpringBootApplication(scanBasePackages = "cn.iocoder.yudao.module.iot.plugin") // TODO @haohao:建议不扫描 cn.iocoder.yudao.module.iot.plugin;而是通过自动配置,初始化 common 的 public class HttpPluginSpringbootApplication { public static void main(String[] args) { - // 这里可选择 NONE / SERVLET / REACTIVE,看你需求 SpringApplication application = new SpringApplication(HttpPluginSpringbootApplication.class); application.setWebApplicationType(WebApplicationType.NONE); - ConfigurableApplicationContext context = application.run(args); // 手动获取 VertxService 并启动 + // TODO @haohao:可以放在 bean 的 init 里么? VertxService vertxService = context.getBean(VertxService.class); vertxService.startServer(); log.info("[HttpPluginSpringbootApplication] 独立模式启动完成"); } + } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/config/HttpVertxPlugin.java b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/config/HttpVertxPlugin.java index 85249cdb85..40694cf40c 100644 --- a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/config/HttpVertxPlugin.java +++ b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/config/HttpVertxPlugin.java @@ -21,7 +21,8 @@ public class HttpVertxPlugin extends SpringPlugin { @Override public void start() { - log.info("[HttpVertxPlugin] start ..."); + // TODO @haohao:这种最好启动中,启动完成,成对打印日志,方便定位问题 + log.info("[HttpVertxPlugin][start ...]"); // 1. 获取插件上下文 ApplicationContext pluginContext = getApplicationContext(); @@ -38,7 +39,7 @@ public class HttpVertxPlugin extends SpringPlugin { @Override public void stop() { - log.info("[HttpVertxPlugin] stop ..."); + log.info("[HttpVertxPlugin][stop ...]"); ApplicationContext pluginContext = getApplicationContext(); if (pluginContext != null) { // 停止服务器 diff --git a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/config/HttpVertxPluginConfiguration.java b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/config/HttpVertxPluginConfiguration.java index 55bce6f24a..5c221e795a 100644 --- a/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/config/HttpVertxPluginConfiguration.java +++ b/yudao-module-iot/yudao-module-iot-plugins/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/plugin/http/config/HttpVertxPluginConfiguration.java @@ -17,6 +17,7 @@ import org.springframework.context.annotation.Configuration; @Configuration public class HttpVertxPluginConfiguration { + // TODO @haohao:这个要不要搞个配置类,更容易维护; /** * 可在 application.yml 中配置,默认端口 8092 */ @@ -42,15 +43,13 @@ public class HttpVertxPluginConfiguration { router.route().handler(BodyHandler.create()); // 设置路由 + // TODO @haohao:这个后续,我们是多个 Handler ,还是一个哈? router.post("/sys/:productKey/:deviceName/thing/event/property/post") .handler(httpVertxHandler); return router; } - /** - * 注入你的 Http 处理器 Handler,依赖 DeviceDataApi - */ @Bean public HttpVertxHandler httpVertxHandler(DeviceDataApi deviceDataApi) { return new HttpVertxHandler(deviceDataApi); @@ -64,4 +63,5 @@ public class HttpVertxPluginConfiguration { public VertxService vertxService(Vertx vertx, Router router) { return new VertxService(port, vertx, router); } + }