Commit e7999749fb72e1bd8c8568ab2d4265a2531efe36
Merge branch 'feature/iot' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into origin/feature/iot
# Conflicts: # yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/plugin/ExampleService.java
Showing
45 changed files
with
344 additions
and
587 deletions
plugins/yudao-module-iot-http-plugin-2.2.0-snapshot.jar
No preview for this file type
plugins/yudao-module-iot-plugin-http-1.0.0.jar
0 → 100644
No preview for this file type
yudao-dependencies/pom.xml
| ... | ... | @@ -67,7 +67,7 @@ |
| 67 | 67 | <bizlog-sdk.version>3.0.6</bizlog-sdk.version> |
| 68 | 68 | <mqtt.version>1.2.5</mqtt.version> |
| 69 | 69 | <pf4j-spring.version>0.9.0</pf4j-spring.version> |
| 70 | - <vertx.version>4.4.0</vertx.version> | |
| 70 | + <vertx.version>4.5.11</vertx.version> | |
| 71 | 71 | <!-- 三方云服务相关 --> |
| 72 | 72 | <okio.version>3.5.0</okio.version> |
| 73 | 73 | <okhttp3.version>4.11.0</okhttp3.version> | ... | ... |
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/RpcConstants.java
0 → 100644
| 1 | +package cn.iocoder.yudao.framework.common.enums; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * RPC 相关的枚举 | |
| 5 | + * | |
| 6 | + * 虽然放在 yudao-spring-boot-starter-rpc 会相对合适,但是每个 API 模块需要使用到,所以暂时只好放在此处 | |
| 7 | + * | |
| 8 | + * @author 芋道源码 | |
| 9 | + */ | |
| 10 | +public class RpcConstants { | |
| 11 | + | |
| 12 | + /** | |
| 13 | + * RPC API 的前缀 | |
| 14 | + */ | |
| 15 | + public static final String RPC_API_PREFIX = "/rpc-api"; | |
| 16 | + | |
| 17 | +} | ... | ... |
yudao-module-iot/yudao-module-iot-api/pom.xml
| ... | ... | @@ -21,6 +21,14 @@ |
| 21 | 21 | <groupId>cn.iocoder.boot</groupId> |
| 22 | 22 | <artifactId>yudao-common</artifactId> |
| 23 | 23 | </dependency> |
| 24 | + | |
| 25 | + <!-- Web 相关 --> | |
| 26 | + <dependency> | |
| 27 | + <groupId>org.springframework</groupId> | |
| 28 | + <artifactId>spring-web</artifactId> | |
| 29 | + <scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 --> | |
| 30 | + </dependency> | |
| 31 | + | |
| 24 | 32 | <!-- PF4J --> |
| 25 | 33 | <!-- TODO 芋艿:这个依赖,要不要放在 api 包 --> |
| 26 | 34 | <dependency> | ... | ... |
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/ServiceRegistry.java deleted
| 1 | -package cn.iocoder.yudao.module.iot.api; | |
| 2 | - | |
| 3 | -import java.util.HashMap; | |
| 4 | -import java.util.Map; | |
| 5 | - | |
| 6 | -// TODO 芋艿:纠结下 | |
| 7 | -/** | |
| 8 | - * 服务注册表 - 插架模块使用,无法使用 Spring 注入 | |
| 9 | - */ | |
| 10 | -public class ServiceRegistry { | |
| 11 | - | |
| 12 | - private static final Map<Class<?>, Object> services = new HashMap<>(); | |
| 13 | - | |
| 14 | - /** | |
| 15 | - * 注册服务 | |
| 16 | - * | |
| 17 | - * @param serviceClass 服务类 | |
| 18 | - * @param serviceImpl 服务实现 | |
| 19 | - * @param <T> 服务类 | |
| 20 | - */ | |
| 21 | - public static <T> void registerService(Class<T> serviceClass, T serviceImpl) { | |
| 22 | - services.put(serviceClass, serviceImpl); | |
| 23 | - } | |
| 24 | - | |
| 25 | - /** | |
| 26 | - * 获得服务 | |
| 27 | - * | |
| 28 | - * @param serviceClass 服务类 | |
| 29 | - * @param <T> 服务类 | |
| 30 | - * @return 服务实现 | |
| 31 | - */ | |
| 32 | - @SuppressWarnings("unchecked") | |
| 33 | - public static <T> T getService(Class<T> serviceClass) { | |
| 34 | - return (T) services.get(serviceClass); | |
| 35 | - } | |
| 36 | - | |
| 37 | -} | |
| 38 | 0 | \ No newline at end of file |
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/DeviceDataApi.java
| 1 | 1 | package cn.iocoder.yudao.module.iot.api.device; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.module.iot.api.device.dto.DeviceDataCreateReqDTO; | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 4 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceEventReportReqDTO; | |
| 5 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO; | |
| 6 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceStatusUpdateReqDTO; | |
| 7 | +import cn.iocoder.yudao.module.iot.enums.ApiConstants; | |
| 8 | +import jakarta.annotation.security.PermitAll; | |
| 4 | 9 | import jakarta.validation.Valid; |
| 10 | +import org.springframework.web.bind.annotation.PostMapping; | |
| 11 | +import org.springframework.web.bind.annotation.PutMapping; | |
| 12 | +import org.springframework.web.bind.annotation.RequestBody; | |
| 5 | 13 | |
| 14 | +// TODO 芋艿:名字可能看情况改下 | |
| 6 | 15 | /** |
| 7 | 16 | * 设备数据 API |
| 8 | 17 | * |
| ... | ... | @@ -10,11 +19,35 @@ import jakarta.validation.Valid; |
| 10 | 19 | */ |
| 11 | 20 | public interface DeviceDataApi { |
| 12 | 21 | |
| 22 | + // TODO @芋艿:可能会调整 | |
| 23 | + String PREFIX = ApiConstants.PREFIX + "/device-data"; | |
| 24 | + | |
| 25 | + /** | |
| 26 | + * 更新设备状态 | |
| 27 | + * | |
| 28 | + * @param updateReqDTO 更新请求 | |
| 29 | + */ | |
| 30 | + @PutMapping(PREFIX + "/update-status") | |
| 31 | + @PermitAll // TODO 芋艿:后续看看怎么优化下 | |
| 32 | + CommonResult<Boolean> updateDeviceStatus(@Valid @RequestBody IotDeviceStatusUpdateReqDTO updateReqDTO); | |
| 33 | + | |
| 13 | 34 | /** |
| 14 | - * 保存设备数据 | |
| 35 | + * 上报设备事件数据 | |
| 15 | 36 | * |
| 16 | - * @param createDTO 设备数据 | |
| 37 | + * @param reportReqDTO 设备事件 | |
| 17 | 38 | */ |
| 18 | - void saveDeviceData(@Valid DeviceDataCreateReqDTO createDTO); | |
| 39 | + @PostMapping(PREFIX + "/report-event") | |
| 40 | + @PermitAll // TODO 芋艿:后续看看怎么优化下 | |
| 41 | + CommonResult<Boolean> reportDeviceEventData(@Valid @RequestBody IotDeviceEventReportReqDTO reportReqDTO); | |
| 42 | + | |
| 43 | + /** | |
| 44 | + * 上报设备属性数据 | |
| 45 | + * | |
| 46 | + * @param reportReqDTO 设备数据 | |
| 47 | + */ | |
| 48 | + @PostMapping(PREFIX + "/report-property") | |
| 49 | + @PermitAll // TODO 芋艿:后续看看怎么优化下 | |
| 50 | + CommonResult<Boolean> reportDevicePropertyData(@Valid @RequestBody IotDevicePropertyReportReqDTO reportReqDTO); | |
| 51 | + | |
| 19 | 52 | |
| 20 | 53 | } |
| 21 | 54 | \ No newline at end of file | ... | ... |
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/mqttrpc/common/RpcRequest.java renamed to yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceEventReportReqDTO.java
| 1 | -package cn.iocoder.yudao.module.iot.mqttrpc.common; | |
| 1 | +package cn.iocoder.yudao.module.iot.api.device.dto; | |
| 2 | 2 | |
| 3 | +import jakarta.validation.constraints.NotEmpty; | |
| 3 | 4 | import lombok.AllArgsConstructor; |
| 4 | 5 | import lombok.Builder; |
| 5 | 6 | import lombok.Data; |
| 6 | 7 | import lombok.NoArgsConstructor; |
| 7 | 8 | |
| 8 | -// TODO @芋艿:要不要加个 mqtt 值了的前缀 | |
| 9 | +import java.util.Map; | |
| 10 | + | |
| 9 | 11 | /** |
| 10 | - * MQTT RPC 请求 | |
| 12 | + * IoT 设备【事件】数据上报 Request DTO | |
| 11 | 13 | */ |
| 12 | 14 | @Data |
| 13 | -@Builder | |
| 14 | 15 | @NoArgsConstructor |
| 15 | 16 | @AllArgsConstructor |
| 16 | -public class RpcRequest { | |
| 17 | +@Builder | |
| 18 | +public class IotDeviceEventReportReqDTO { | |
| 19 | + | |
| 20 | + // TODO 芋艿:要不要 id | |
| 21 | + // TODO 芋艿:要不要 time | |
| 17 | 22 | |
| 18 | 23 | /** |
| 19 | - * 方法名 | |
| 24 | + * 产品标识 | |
| 20 | 25 | */ |
| 21 | - private String method; | |
| 22 | - | |
| 26 | + @NotEmpty(message = "产品标识不能为空") | |
| 27 | + private String productKey; | |
| 23 | 28 | /** |
| 24 | - * 参数 | |
| 29 | + * 设备名称 | |
| 25 | 30 | */ |
| 26 | - // TODO @haohao:object 对象会不会不好序列化? | |
| 27 | - private Object[] params; | |
| 31 | + @NotEmpty(message = "设备名称不能为空") | |
| 32 | + private String deviceName; | |
| 28 | 33 | |
| 29 | 34 | /** |
| 30 | - * 关联 ID | |
| 35 | + * 事件标识 | |
| 31 | 36 | */ |
| 32 | - private String correlationId; | |
| 33 | - | |
| 37 | + @NotEmpty(message = "事件标识不能为空") | |
| 38 | + private String identifier; | |
| 34 | 39 | /** |
| 35 | - * 回复地址 | |
| 40 | + * 事件参数 | |
| 36 | 41 | */ |
| 37 | - private String replyTo; | |
| 42 | + @NotEmpty(message = "事件参数不能为空") | |
| 43 | + private Map<String, Object> params; | |
| 38 | 44 | |
| 39 | 45 | } | ... | ... |
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/DeviceDataCreateReqDTO.java renamed to yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDevicePropertyReportReqDTO.java
| 1 | 1 | package cn.iocoder.yudao.module.iot.api.device.dto; |
| 2 | 2 | |
| 3 | +import jakarta.validation.constraints.NotEmpty; | |
| 3 | 4 | import lombok.AllArgsConstructor; |
| 4 | 5 | import lombok.Builder; |
| 5 | 6 | import lombok.Data; |
| 6 | 7 | import lombok.NoArgsConstructor; |
| 7 | -import jakarta.validation.constraints.NotNull; | |
| 8 | 8 | |
| 9 | +import java.util.Map; | |
| 10 | + | |
| 11 | +/** | |
| 12 | + * IoT 设备【属性】数据上报 Request DTO | |
| 13 | + */ | |
| 9 | 14 | @Data |
| 10 | 15 | @NoArgsConstructor |
| 11 | 16 | @AllArgsConstructor |
| 12 | 17 | @Builder |
| 13 | -public class DeviceDataCreateReqDTO { | |
| 18 | +public class IotDevicePropertyReportReqDTO { | |
| 19 | + | |
| 20 | + // TODO 芋艿:要不要 id | |
| 21 | + // TODO 芋艿:要不要 time | |
| 14 | 22 | |
| 15 | 23 | /** |
| 16 | 24 | * 产品标识 |
| 17 | 25 | */ |
| 18 | - @NotNull(message = "产品标识不能为空") | |
| 26 | + @NotEmpty(message = "产品标识不能为空") | |
| 19 | 27 | private String productKey; |
| 20 | 28 | /** |
| 21 | 29 | * 设备名称 |
| 22 | 30 | */ |
| 23 | - @NotNull(message = "设备名称不能为空") | |
| 31 | + @NotEmpty(message = "设备名称不能为空") | |
| 24 | 32 | private String deviceName; |
| 25 | 33 | /** |
| 26 | - * 消息 | |
| 34 | + * 属性参数 | |
| 27 | 35 | */ |
| 28 | - @NotNull(message = "消息不能为空") | |
| 29 | - private String message; | |
| 36 | + @NotEmpty(message = "属性参数不能为空") | |
| 37 | + private Map<String, Object> params; | |
| 30 | 38 | |
| 31 | 39 | } |
| 32 | 40 | \ No newline at end of file | ... | ... |
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/mqttrpc/common/RpcResponse.java renamed to yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/IotDeviceStatusUpdateReqDTO.java
| 1 | -package cn.iocoder.yudao.module.iot.mqttrpc.common; | |
| 1 | +package cn.iocoder.yudao.module.iot.api.device.dto; | |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.common.validation.InEnum; | |
| 4 | +import cn.iocoder.yudao.module.iot.enums.device.IotDeviceStatusEnum; | |
| 5 | +import jakarta.validation.constraints.NotEmpty; | |
| 3 | 6 | import lombok.AllArgsConstructor; |
| 4 | 7 | import lombok.Builder; |
| 5 | 8 | import lombok.Data; |
| 6 | 9 | import lombok.NoArgsConstructor; |
| 7 | 10 | |
| 8 | 11 | /** |
| 9 | - * MQTT RPC 响应 | |
| 12 | + * IoT 设备状态更新 Request DTO | |
| 10 | 13 | */ |
| 11 | 14 | @Data |
| 12 | -@Builder | |
| 13 | 15 | @NoArgsConstructor |
| 14 | 16 | @AllArgsConstructor |
| 15 | -public class RpcResponse { | |
| 17 | +@Builder | |
| 18 | +public class IotDeviceStatusUpdateReqDTO { | |
| 19 | + | |
| 20 | + // TODO 芋艿:要不要 id | |
| 21 | + // TODO 芋艿:要不要 time | |
| 16 | 22 | |
| 17 | 23 | /** |
| 18 | - * 关联 ID | |
| 24 | + * 产品标识 | |
| 19 | 25 | */ |
| 20 | - private String correlationId; | |
| 21 | - | |
| 26 | + @NotEmpty(message = "产品标识不能为空") | |
| 27 | + private String productKey; | |
| 22 | 28 | /** |
| 23 | - * 结果 | |
| 29 | + * 设备名称 | |
| 24 | 30 | */ |
| 25 | - // TODO @haohao:object 对象会不会不好反序列化? | |
| 26 | - private Object result; | |
| 27 | - | |
| 31 | + @NotEmpty(message = "设备名称不能为空") | |
| 32 | + private String deviceName; | |
| 28 | 33 | /** |
| 29 | - * 错误 | |
| 34 | + * 设备状态 | |
| 30 | 35 | */ |
| 31 | - private String error; | |
| 36 | + @NotEmpty(message = "设备状态不能为空") | |
| 37 | + @InEnum(IotDeviceStatusEnum.class) // 只使用:在线、离线 | |
| 38 | + private Integer status; | |
| 32 | 39 | |
| 33 | 40 | } | ... | ... |
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ApiConstants.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.iot.enums; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.RpcConstants; | |
| 4 | + | |
| 5 | +/** | |
| 6 | + * API 相关的枚举 | |
| 7 | + * | |
| 8 | + * @author 芋道源码 | |
| 9 | + */ | |
| 10 | +public class ApiConstants { | |
| 11 | + | |
| 12 | + public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/iot"; | |
| 13 | + | |
| 14 | + public static final String VERSION = "1.0.0"; | |
| 15 | + | |
| 16 | +} | ... | ... |
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/mqttrpc/common/SerializationUtils.java deleted
| 1 | -package cn.iocoder.yudao.module.iot.mqttrpc.common; | |
| 2 | - | |
| 3 | -import cn.hutool.json.JSONUtil; | |
| 4 | - | |
| 5 | -/** | |
| 6 | - * 序列化工具类 | |
| 7 | - * | |
| 8 | - */ | |
| 9 | -public class SerializationUtils { | |
| 10 | - | |
| 11 | - public static String serialize(Object obj) { | |
| 12 | - return JSONUtil.toJsonStr(obj); | |
| 13 | - } | |
| 14 | - | |
| 15 | - public static <T> T deserialize(String json, Class<T> clazz) { | |
| 16 | - return JSONUtil.toBean(json, clazz); | |
| 17 | - } | |
| 18 | - | |
| 19 | -} | |
| 20 | 0 | \ No newline at end of file |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/api/device/DeviceDataApiImpl.java
| 1 | 1 | package cn.iocoder.yudao.module.iot.api.device; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.module.iot.api.device.dto.DeviceDataCreateReqDTO; | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 4 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceEventReportReqDTO; | |
| 5 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO; | |
| 6 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceStatusUpdateReqDTO; | |
| 4 | 7 | import cn.iocoder.yudao.module.iot.service.device.IotDevicePropertyDataService; |
| 5 | -import org.springframework.stereotype.Service; | |
| 6 | 8 | import org.springframework.validation.annotation.Validated; |
| 9 | +import org.springframework.web.bind.annotation.RestController; | |
| 7 | 10 | |
| 8 | 11 | import javax.annotation.Resource; |
| 9 | 12 | |
| 13 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 14 | + | |
| 10 | 15 | /** |
| 11 | 16 | * 设备数据 API 实现类 |
| 12 | 17 | */ |
| 13 | -@Service | |
| 18 | +@RestController | |
| 14 | 19 | @Validated |
| 15 | 20 | public class DeviceDataApiImpl implements DeviceDataApi { |
| 16 | 21 | |
| ... | ... | @@ -18,8 +23,19 @@ public class DeviceDataApiImpl implements DeviceDataApi { |
| 18 | 23 | private IotDevicePropertyDataService deviceDataService; |
| 19 | 24 | |
| 20 | 25 | @Override |
| 21 | - public void saveDeviceData(DeviceDataCreateReqDTO createDTO) { | |
| 22 | - deviceDataService.saveDeviceData(createDTO); | |
| 26 | + public CommonResult<Boolean> updateDeviceStatus(IotDeviceStatusUpdateReqDTO updateReqDTO) { | |
| 27 | + return success(true); | |
| 28 | + } | |
| 29 | + | |
| 30 | + @Override | |
| 31 | + public CommonResult<Boolean> reportDeviceEventData(IotDeviceEventReportReqDTO reportReqDTO) { | |
| 32 | + return success(true); | |
| 33 | + } | |
| 34 | + | |
| 35 | + @Override | |
| 36 | + public CommonResult<Boolean> reportDevicePropertyData(IotDevicePropertyReportReqDTO reportReqDTO) { | |
| 37 | + deviceDataService.saveDeviceData(reportReqDTO); | |
| 38 | + return success(true); | |
| 23 | 39 | } |
| 24 | 40 | |
| 25 | 41 | } |
| 26 | 42 | \ No newline at end of file | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/emq/service/EmqxServiceImpl.java
| 1 | 1 | package cn.iocoder.yudao.module.iot.emq.service; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.module.iot.api.device.dto.DeviceDataCreateReqDTO; | |
| 3 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO; | |
| 4 | 4 | import cn.iocoder.yudao.module.iot.service.device.IotDevicePropertyDataService; |
| 5 | 5 | import jakarta.annotation.Resource; |
| 6 | 6 | import lombok.extern.slf4j.Slf4j; |
| ... | ... | @@ -34,10 +34,10 @@ public class EmqxServiceImpl implements EmqxService { |
| 34 | 34 | String productKey = topic.split("/")[2]; |
| 35 | 35 | String deviceName = topic.split("/")[3]; |
| 36 | 36 | String message = new String(mqttMessage.getPayload()); |
| 37 | - DeviceDataCreateReqDTO createDTO = DeviceDataCreateReqDTO.builder() | |
| 37 | + IotDevicePropertyReportReqDTO createDTO = IotDevicePropertyReportReqDTO.builder() | |
| 38 | 38 | .productKey(productKey) |
| 39 | 39 | .deviceName(deviceName) |
| 40 | - .message(message) | |
| 40 | +// .properties(message) // TODO 芋艿:临时去掉,看看 | |
| 41 | 41 | .build(); |
| 42 | 42 | iotDeviceDataService.saveDeviceData(createDTO); |
| 43 | 43 | } | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/plugin/PluginStart.java
| 1 | 1 | package cn.iocoder.yudao.module.iot.framework.plugin; |
| 2 | 2 | |
| 3 | -import java.util.List; | |
| 4 | - | |
| 5 | -import javax.annotation.Resource; | |
| 6 | - | |
| 3 | +import cn.hutool.core.collection.CollUtil; | |
| 4 | +import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; | |
| 5 | +import cn.iocoder.yudao.module.iot.dal.dataobject.plugininfo.PluginInfoDO; | |
| 6 | +import cn.iocoder.yudao.module.iot.enums.plugin.IotPluginStatusEnum; | |
| 7 | +import cn.iocoder.yudao.module.iot.service.plugin.PluginInfoService; | |
| 8 | +import lombok.extern.slf4j.Slf4j; | |
| 7 | 9 | import org.pf4j.spring.SpringPluginManager; |
| 8 | 10 | import org.springframework.boot.ApplicationArguments; |
| 9 | 11 | import org.springframework.boot.ApplicationRunner; |
| 10 | 12 | import org.springframework.stereotype.Component; |
| 11 | 13 | |
| 12 | -import lombok.extern.slf4j.Slf4j; | |
| 13 | - | |
| 14 | -import cn.iocoder.yudao.module.iot.service.plugin.PluginInfoService; | |
| 15 | -import cn.hutool.core.collection.CollUtil; | |
| 16 | -import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; | |
| 17 | -import cn.iocoder.yudao.module.iot.dal.dataobject.plugininfo.PluginInfoDO; | |
| 18 | -import cn.iocoder.yudao.module.iot.enums.plugin.IotPluginStatusEnum; | |
| 14 | +import javax.annotation.Resource; | |
| 15 | +import java.util.List; | |
| 19 | 16 | |
| 17 | +// TODO @芋艿:需要 review 下 | |
| 20 | 18 | @Component |
| 21 | 19 | @Slf4j |
| 22 | 20 | public class PluginStart implements ApplicationRunner { | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/plugin/UnifiedConfiguration.java
| 1 | 1 | package cn.iocoder.yudao.module.iot.framework.plugin; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.module.iot.api.ServiceRegistry; | |
| 4 | -import cn.iocoder.yudao.module.iot.api.device.DeviceDataApi; | |
| 5 | 3 | import cn.iocoder.yudao.module.iot.framework.plugin.listener.CustomPluginStateListener; |
| 6 | 4 | import lombok.extern.slf4j.Slf4j; |
| 7 | 5 | import org.pf4j.spring.SpringPluginManager; |
| 6 | +import org.springframework.beans.factory.annotation.Value; | |
| 8 | 7 | import org.springframework.context.annotation.Bean; |
| 9 | 8 | import org.springframework.context.annotation.Configuration; |
| 10 | -import org.springframework.context.annotation.DependsOn; | |
| 11 | - | |
| 12 | -import javax.annotation.Resource; | |
| 13 | 9 | |
| 10 | +// TODO @芋艿:需要 review 下 | |
| 14 | 11 | @Slf4j |
| 15 | 12 | @Configuration |
| 16 | 13 | public class UnifiedConfiguration { |
| 17 | 14 | |
| 18 | - private static final String SERVICE_REGISTRY_INITIALIZED_MARKER = "serviceRegistryInitializedMarker"; | |
| 19 | - | |
| 20 | - @Resource | |
| 21 | - private DeviceDataApi deviceDataApi; | |
| 22 | - | |
| 23 | - @Bean(SERVICE_REGISTRY_INITIALIZED_MARKER) | |
| 24 | - public Object serviceRegistryInitializedMarker() { | |
| 25 | - ServiceRegistry.registerService(DeviceDataApi.class, deviceDataApi); | |
| 26 | - log.info("[init][将 DeviceDataApi 实例注册到 ServiceRegistry 中]"); | |
| 27 | - return new Object(); | |
| 28 | - } | |
| 15 | + @Value("${pf4j.pluginsDir:pluginsDir}") | |
| 16 | + private String pluginsDir; | |
| 29 | 17 | |
| 30 | 18 | @Bean |
| 31 | - @DependsOn(SERVICE_REGISTRY_INITIALIZED_MARKER) | |
| 19 | +// @DependsOn("deviceDataApiImpl") | |
| 32 | 20 | public SpringPluginManager pluginManager() { |
| 33 | 21 | log.info("[init][实例化 SpringPluginManager]"); |
| 22 | +// SpringPluginManager springPluginManager = new SpringPluginManager(Paths.get(pluginsDir)) { | |
| 34 | 23 | SpringPluginManager springPluginManager = new SpringPluginManager() { |
| 24 | + | |
| 35 | 25 | @Override |
| 36 | 26 | public void startPlugins() { |
| 37 | 27 | // 禁用插件启动,避免插件启动时,启动所有插件 |
| 38 | 28 | log.info("[init][禁用默认启动所有插件]"); |
| 39 | 29 | } |
| 30 | + | |
| 40 | 31 | }; |
| 41 | 32 | springPluginManager.addPluginStateListener(new CustomPluginStateListener()); |
| 42 | 33 | return springPluginManager; | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/plugin/listener/CustomPluginStateListener.java
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDevicePropertyDataService.java
| 1 | 1 | package cn.iocoder.yudao.module.iot.service.device; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | -import cn.iocoder.yudao.module.iot.api.device.dto.DeviceDataCreateReqDTO; | |
| 4 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO; | |
| 5 | 5 | import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceDataPageReqVO; |
| 6 | 6 | import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDataDO; |
| 7 | 7 | import jakarta.validation.Valid; |
| ... | ... | @@ -28,7 +28,7 @@ public interface IotDevicePropertyDataService { |
| 28 | 28 | * |
| 29 | 29 | * @param createDTO 设备数据 |
| 30 | 30 | */ |
| 31 | - void saveDeviceData(DeviceDataCreateReqDTO createDTO); | |
| 31 | + void saveDeviceData(IotDevicePropertyReportReqDTO createDTO); | |
| 32 | 32 | |
| 33 | 33 | /** |
| 34 | 34 | * 获得设备属性最新数据 | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDevicePropertyDataServiceImpl.java
| ... | ... | @@ -6,7 +6,7 @@ import cn.hutool.core.map.MapUtil; |
| 6 | 6 | import cn.hutool.core.util.StrUtil; |
| 7 | 7 | import cn.hutool.json.JSONObject; |
| 8 | 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 9 | -import cn.iocoder.yudao.module.iot.api.device.dto.DeviceDataCreateReqDTO; | |
| 9 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO; | |
| 10 | 10 | import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceDataPageReqVO; |
| 11 | 11 | import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType.ThingModelDateOrTextDataSpecs; |
| 12 | 12 | import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; |
| ... | ... | @@ -130,11 +130,12 @@ public class IotDevicePropertyDataServiceImpl implements IotDevicePropertyDataSe |
| 130 | 130 | } |
| 131 | 131 | |
| 132 | 132 | @Override |
| 133 | - public void saveDeviceData(DeviceDataCreateReqDTO createDTO) { | |
| 133 | + public void saveDeviceData(IotDevicePropertyReportReqDTO createDTO) { | |
| 134 | + // TODO 芋艿:这块需要实现 | |
| 134 | 135 | // 1. 根据产品 key 和设备名称,获得设备信息 |
| 135 | 136 | IotDeviceDO device = deviceService.getDeviceByProductKeyAndDeviceName(createDTO.getProductKey(), createDTO.getDeviceName()); |
| 136 | 137 | // 2. 解析消息,保存数据 |
| 137 | - JSONObject jsonObject = new JSONObject(createDTO.getMessage()); | |
| 138 | + JSONObject jsonObject = new JSONObject(createDTO.getParams()); | |
| 138 | 139 | log.info("[saveDeviceData][productKey({}) deviceName({}) data({})]", createDTO.getProductKey(), createDTO.getDeviceName(), jsonObject); |
| 139 | 140 | ThingModelMessage thingModelMessage = ThingModelMessage.builder() |
| 140 | 141 | .id(jsonObject.getStr("id")) | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/plugin/ExampleService.java deleted
| 1 | -//package cn.iocoder.yudao.module.iot.service.plugin; | |
| 2 | -// | |
| 3 | -//import cn.iocoder.yudao.module.iot.mqttrpc.server.RpcServer; | |
| 4 | -//import lombok.RequiredArgsConstructor; | |
| 5 | -//import org.springframework.stereotype.Service; | |
| 6 | -// | |
| 7 | -//import javax.annotation.PostConstruct; | |
| 8 | -// | |
| 9 | -//@Service | |
| 10 | -//@RequiredArgsConstructor | |
| 11 | -//public class ExampleService { | |
| 12 | -// | |
| 13 | -// private final RpcServer rpcServer; | |
| 14 | -// | |
| 15 | -// @PostConstruct | |
| 16 | -// public void registerMethods() { | |
| 17 | -// rpcServer.registerMethod("add", params -> { | |
| 18 | -// if (params.length != 2) { | |
| 19 | -// throw new IllegalArgumentException("add方法需要两个参数"); | |
| 20 | -// } | |
| 21 | -// int a = ((Number) params[0]).intValue(); | |
| 22 | -// int b = ((Number) params[1]).intValue(); | |
| 23 | -// return add(a, b); | |
| 24 | -// }); | |
| 25 | -// | |
| 26 | -// rpcServer.registerMethod("concat", params -> { | |
| 27 | -// if (params.length != 2) { | |
| 28 | -// throw new IllegalArgumentException("concat方法需要两个参数"); | |
| 29 | -// } | |
| 30 | -// String str1 = params[0].toString(); | |
| 31 | -// String str2 = params[1].toString(); | |
| 32 | -// return concat(str1, str2); | |
| 33 | -// }); | |
| 34 | -// } | |
| 35 | -// | |
| 36 | -// private int add(int a, int b) { | |
| 37 | -// return a + b; | |
| 38 | -// } | |
| 39 | -// | |
| 40 | -// private String concat(String a, String b) { | |
| 41 | -// return a + b; | |
| 42 | -// } | |
| 43 | -//} | |
| 44 | 0 | \ No newline at end of file |
yudao-module-iot/yudao-module-iot-plugin/pom.xml
| ... | ... | @@ -8,9 +8,9 @@ |
| 8 | 8 | <version>${revision}</version> |
| 9 | 9 | </parent> |
| 10 | 10 | <modules> |
| 11 | - <module>yudao-module-iot-demo-plugin</module> | |
| 12 | - <module>yudao-module-iot-http-plugin</module> | |
| 13 | - <module>yudao-module-iot-mqtt-plugin</module> | |
| 11 | + <module>yudao-module-iot-plugin-http</module> | |
| 12 | + <module>yudao-module-iot-plugin-mqtt</module> | |
| 13 | + <module>yudao-module-iot-plugin-emqx</module> | |
| 14 | 14 | </modules> |
| 15 | 15 | |
| 16 | 16 | <modelVersion>4.0.0</modelVersion> | ... | ... |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-demo-plugin/plugin.properties deleted
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-demo-plugin/src/main/java/cn/iocoder/yudao/module/iot/plugin/DemoPlugin.java deleted
| 1 | -package cn.iocoder.yudao.module.iot.plugin; | |
| 2 | - | |
| 3 | -import com.sun.net.httpserver.HttpServer; | |
| 4 | -import lombok.extern.slf4j.Slf4j; | |
| 5 | -import org.pf4j.Plugin; | |
| 6 | -import org.pf4j.PluginWrapper; | |
| 7 | -import org.pf4j.RuntimeMode; | |
| 8 | - | |
| 9 | -import java.io.IOException; | |
| 10 | -import java.io.OutputStream; | |
| 11 | -import java.net.InetSocketAddress; | |
| 12 | - | |
| 13 | -/** | |
| 14 | - * 一个启动 HTTP 服务器的简单插件。 | |
| 15 | - */ | |
| 16 | -@Slf4j | |
| 17 | -public class DemoPlugin extends Plugin { | |
| 18 | - | |
| 19 | - private HttpServer server; | |
| 20 | - | |
| 21 | - public DemoPlugin(PluginWrapper wrapper) { | |
| 22 | - super(wrapper); | |
| 23 | - } | |
| 24 | - | |
| 25 | - @Override | |
| 26 | - public void start() { | |
| 27 | - log.info("Demo 插件启动"); | |
| 28 | - // for testing the development mode | |
| 29 | - if (RuntimeMode.DEVELOPMENT.equals(wrapper.getRuntimeMode())) { | |
| 30 | - log.info("DemoPlugin in DEVELOPMENT mode"); | |
| 31 | - } | |
| 32 | - startDemoServer(); | |
| 33 | - } | |
| 34 | - | |
| 35 | - @Override | |
| 36 | - public void stop() { | |
| 37 | - log.info("Demo 插件停止"); | |
| 38 | - stopDemoServer(); | |
| 39 | - } | |
| 40 | - | |
| 41 | - private void startDemoServer() { | |
| 42 | - try { | |
| 43 | - server = HttpServer.create(new InetSocketAddress(9081), 0); | |
| 44 | - server.createContext("/", exchange -> { | |
| 45 | - String response = "Hello from DemoPlugin"; | |
| 46 | - exchange.sendResponseHeaders(200, response.getBytes().length); | |
| 47 | - OutputStream os = exchange.getResponseBody(); | |
| 48 | - os.write(response.getBytes()); | |
| 49 | - os.close(); | |
| 50 | - }); | |
| 51 | - server.setExecutor(null); | |
| 52 | - server.start(); | |
| 53 | - log.info("HTTP 服务器启动成功,端口为 9081"); | |
| 54 | - log.info("访问地址为 http://127.0.0.1:9081/"); | |
| 55 | - } catch (IOException e) { | |
| 56 | - log.error("HTTP 服务器启动失败", e); | |
| 57 | - } | |
| 58 | - } | |
| 59 | - | |
| 60 | - private void stopDemoServer() { | |
| 61 | - if (server != null) { | |
| 62 | - server.stop(0); | |
| 63 | - log.info("HTTP 服务器停止成功"); | |
| 64 | - } | |
| 65 | - } | |
| 66 | - | |
| 67 | -// @Extension | |
| 68 | -// public static class WelcomeGreeting implements Greeting { | |
| 69 | -// | |
| 70 | -// @Override | |
| 71 | -// public String getGreeting() { | |
| 72 | -// return "Welcome to DemoPlugin"; | |
| 73 | -// } | |
| 74 | -// | |
| 75 | -// } | |
| 76 | - | |
| 77 | -} | |
| 78 | 0 | \ No newline at end of file |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-http-plugin/plugin.properties deleted
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-http-plugin/pom.xml deleted
| 1 | -<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | -<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
| 3 | - xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation=" | |
| 4 | - http://maven.apache.org/POM/4.0.0 | |
| 5 | - http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
| 6 | - <parent> | |
| 7 | - <artifactId>yudao-module-iot-plugin</artifactId> | |
| 8 | - <groupId>cn.iocoder.boot</groupId> | |
| 9 | - <version>${revision}</version> | |
| 10 | - </parent> | |
| 11 | - <modelVersion>4.0.0</modelVersion> | |
| 12 | - <packaging>jar</packaging> | |
| 13 | - | |
| 14 | - <artifactId>yudao-module-iot-http-plugin</artifactId> | |
| 15 | - | |
| 16 | - <name>${project.artifactId}</name> | |
| 17 | - <description> | |
| 18 | - 物联网 插件模块 - http 插件 | |
| 19 | - </description> | |
| 20 | - | |
| 21 | - <properties> | |
| 22 | - <!-- 插件相关 --> | |
| 23 | - <plugin.id>http-plugin</plugin.id> | |
| 24 | - <plugin.class>cn.iocoder.yudao.module.iot.plugin.HttpVertxPlugin</plugin.class> | |
| 25 | - <plugin.version>0.0.1</plugin.version> | |
| 26 | - <plugin.provider>ahh</plugin.provider> | |
| 27 | - <plugin.description>http-plugin-0.0.1</plugin.description> | |
| 28 | - <plugin.dependencies/> | |
| 29 | - </properties> | |
| 30 | - | |
| 31 | - <build> | |
| 32 | - <plugins> | |
| 33 | - <plugin> | |
| 34 | - <groupId>org.apache.maven.plugins</groupId> | |
| 35 | - <artifactId>maven-antrun-plugin</artifactId> | |
| 36 | - <version>1.6</version> | |
| 37 | - <executions> | |
| 38 | - <execution> | |
| 39 | - <id>unzip jar file</id> | |
| 40 | - <phase>package</phase> | |
| 41 | - <configuration> | |
| 42 | - <target> | |
| 43 | - <unzip src="target/${project.artifactId}-${project.version}.${project.packaging}" | |
| 44 | - dest="target/plugin-classes"/> | |
| 45 | - </target> | |
| 46 | - </configuration> | |
| 47 | - <goals> | |
| 48 | - <goal>run</goal> | |
| 49 | - </goals> | |
| 50 | - </execution> | |
| 51 | - </executions> | |
| 52 | - </plugin> | |
| 53 | - | |
| 54 | - <plugin> | |
| 55 | - <artifactId>maven-assembly-plugin</artifactId> | |
| 56 | - <version>2.3</version> | |
| 57 | - <configuration> | |
| 58 | - <descriptors> | |
| 59 | - <descriptor> | |
| 60 | - src/main/assembly/assembly.xml | |
| 61 | - </descriptor> | |
| 62 | - </descriptors> | |
| 63 | - <appendAssemblyId>false</appendAssemblyId> | |
| 64 | - </configuration> | |
| 65 | - <executions> | |
| 66 | - <execution> | |
| 67 | - <id>make-assembly</id> | |
| 68 | - <phase>package</phase> | |
| 69 | - <goals> | |
| 70 | - <goal>attached</goal> | |
| 71 | - </goals> | |
| 72 | - </execution> | |
| 73 | - </executions> | |
| 74 | - </plugin> | |
| 75 | - | |
| 76 | - <plugin> | |
| 77 | - <groupId>org.apache.maven.plugins</groupId> | |
| 78 | - <artifactId>maven-jar-plugin</artifactId> | |
| 79 | - <version>2.4</version> | |
| 80 | - <configuration> | |
| 81 | - <archive> | |
| 82 | - <manifestEntries> | |
| 83 | - <Plugin-Id>${plugin.id}</Plugin-Id> | |
| 84 | - <Plugin-Class>${plugin.class}</Plugin-Class> | |
| 85 | - <Plugin-Version>${plugin.version}</Plugin-Version> | |
| 86 | - <Plugin-Provider>${plugin.provider}</Plugin-Provider> | |
| 87 | - <Plugin-Description>${plugin.description}</Plugin-Description> | |
| 88 | - <Plugin-Dependencies>${plugin.dependencies}</Plugin-Dependencies> | |
| 89 | - </manifestEntries> | |
| 90 | - </archive> | |
| 91 | - </configuration> | |
| 92 | - </plugin> | |
| 93 | - | |
| 94 | - <plugin> | |
| 95 | - <artifactId>maven-deploy-plugin</artifactId> | |
| 96 | - <configuration> | |
| 97 | - <skip>true</skip> | |
| 98 | - </configuration> | |
| 99 | - </plugin> | |
| 100 | - | |
| 101 | - <!-- <plugin>--> | |
| 102 | - <!-- <groupId>org.apache.maven.plugins</groupId>--> | |
| 103 | - <!-- <artifactId>maven-shade-plugin</artifactId>--> | |
| 104 | - <!-- <version>3.4.1</version>--> | |
| 105 | - <!-- <executions>--> | |
| 106 | - <!-- <execution>--> | |
| 107 | - <!-- <phase>package</phase>--> | |
| 108 | - <!-- <goals>--> | |
| 109 | - <!-- <goal>shade</goal>--> | |
| 110 | - <!-- </goals>--> | |
| 111 | - <!-- <configuration>--> | |
| 112 | - <!-- <shadedArtifactAttached>true</shadedArtifactAttached>--> | |
| 113 | - <!-- <shadedClassifierName>shaded</shadedClassifierName>--> | |
| 114 | - <!-- <transformers>--> | |
| 115 | - <!-- <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">--> | |
| 116 | - <!-- <mainClass>cn.iocoder.yudao.module.iot.HttpPluginSpringbootApplication</mainClass>--> | |
| 117 | - <!-- </transformer>--> | |
| 118 | - <!-- </transformers>--> | |
| 119 | - <!-- </configuration>--> | |
| 120 | - <!-- </execution>--> | |
| 121 | - <!-- </executions>--> | |
| 122 | - <!-- </plugin>--> | |
| 123 | - </plugins> | |
| 124 | - </build> | |
| 125 | - | |
| 126 | - <dependencies> | |
| 127 | - <!-- 其他依赖项 --> | |
| 128 | - <dependency> | |
| 129 | - <groupId>org.springframework.boot</groupId> | |
| 130 | - <artifactId>spring-boot-starter-web</artifactId> | |
| 131 | - </dependency> | |
| 132 | - <!-- PF4J Spring 集成 --> | |
| 133 | - <dependency> | |
| 134 | - <groupId>org.pf4j</groupId> | |
| 135 | - <artifactId>pf4j-spring</artifactId> | |
| 136 | - <scope>provided</scope> | |
| 137 | - </dependency> | |
| 138 | - <!-- 项目依赖 --> | |
| 139 | - <dependency> | |
| 140 | - <groupId>cn.iocoder.boot</groupId> | |
| 141 | - <artifactId>yudao-module-iot-api</artifactId> | |
| 142 | - <version>${revision}</version> | |
| 143 | - </dependency> | |
| 144 | - <dependency> | |
| 145 | - <groupId>org.projectlombok</groupId> | |
| 146 | - <artifactId>lombok</artifactId> | |
| 147 | - <version>${lombok.version}</version> | |
| 148 | - <scope>provided</scope> | |
| 149 | - </dependency> | |
| 150 | - <!-- Vert.x Web --> | |
| 151 | - <dependency> | |
| 152 | - <groupId>io.vertx</groupId> | |
| 153 | - <artifactId>vertx-web</artifactId> | |
| 154 | - <version>4.5.11</version> | |
| 155 | - </dependency> | |
| 156 | - </dependencies> | |
| 157 | -</project> | |
| 158 | 0 | \ No newline at end of file |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-http-plugin/src/main/resources/application.yml deleted
| 1 | -server: | |
| 2 | - port: 8092 | |
| 3 | - | |
| 4 | -spring: | |
| 5 | - application: | |
| 6 | - name: yudao-module-iot-http-plugin | |
| 7 | - | |
| 8 | -# MQTT-RPC 配置 | |
| 9 | -mqtt: | |
| 10 | - broker: tcp://chaojiniu.top:1883 | |
| 11 | - username: haohao | |
| 12 | - password: ahh@123456 | |
| 13 | - clientId: mqtt-rpc-client-${random.int} | |
| 14 | - requestTopic: rpc/request | |
| 15 | - responseTopicPrefix: rpc/response/ |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-mqtt-plugin/src/main/assembly/assembly.xml deleted
| 1 | -<assembly> | |
| 2 | - <id>plugin</id> | |
| 3 | - <formats> | |
| 4 | - <format>zip</format> | |
| 5 | - </formats> | |
| 6 | - <includeBaseDirectory>false</includeBaseDirectory> | |
| 7 | - <dependencySets> | |
| 8 | - <dependencySet> | |
| 9 | - <useProjectArtifact>false</useProjectArtifact> | |
| 10 | - <scope>runtime</scope> | |
| 11 | - <outputDirectory>lib</outputDirectory> | |
| 12 | - <includes> | |
| 13 | - <include>*:jar:*</include> | |
| 14 | - </includes> | |
| 15 | - </dependencySet> | |
| 16 | - </dependencySets> | |
| 17 | - <!-- | |
| 18 | - <fileSets> | |
| 19 | - <fileSet> | |
| 20 | - <directory>target/classes</directory> | |
| 21 | - <outputDirectory>classes</outputDirectory> | |
| 22 | - </fileSet> | |
| 23 | - </fileSets> | |
| 24 | - --> | |
| 25 | - <fileSets> | |
| 26 | - <fileSet> | |
| 27 | - <directory>target/plugin-classes</directory> | |
| 28 | - <outputDirectory>classes</outputDirectory> | |
| 29 | - </fileSet> | |
| 30 | - </fileSets> | |
| 31 | -</assembly> |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-emqx-plugin/plugin.properties renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-emqx/plugin.properties
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-emqx-plugin/pom.xml renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-emqx/pom.xml
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-demo-plugin/src/main/assembly/assembly.xml renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-emqx/src/main/assembly/assembly.xml
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-emqx-plugin/src/main/java/cn/iocoder/yudao/module/iot/plugin/EmqxPlugin.java renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-emqx/src/main/java/cn/iocoder/yudao/module/iot/plugin/EmqxPlugin.java
| 1 | 1 | package cn.iocoder.yudao.module.iot.plugin; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.module.iot.api.ServiceRegistry; | |
| 3 | +import cn.hutool.extra.spring.SpringUtil; | |
| 4 | 4 | import cn.iocoder.yudao.module.iot.api.device.DeviceDataApi; |
| 5 | 5 | import lombok.extern.slf4j.Slf4j; |
| 6 | 6 | import org.pf4j.Plugin; |
| 7 | 7 | import org.pf4j.PluginWrapper; |
| 8 | 8 | |
| 9 | -import javax.annotation.Resource; | |
| 10 | 9 | import java.util.concurrent.ExecutorService; |
| 11 | 10 | import java.util.concurrent.Executors; |
| 12 | 11 | |
| ... | ... | @@ -14,8 +13,6 @@ import java.util.concurrent.Executors; |
| 14 | 13 | public class EmqxPlugin extends Plugin { |
| 15 | 14 | |
| 16 | 15 | private ExecutorService executorService; |
| 17 | - @Resource | |
| 18 | - private DeviceDataApi deviceDataApi; | |
| 19 | 16 | |
| 20 | 17 | public EmqxPlugin(PluginWrapper wrapper) { |
| 21 | 18 | super(wrapper); |
| ... | ... | @@ -30,7 +27,7 @@ public class EmqxPlugin extends Plugin { |
| 30 | 27 | executorService = Executors.newSingleThreadExecutor(); |
| 31 | 28 | } |
| 32 | 29 | |
| 33 | - deviceDataApi = ServiceRegistry.getService(DeviceDataApi.class); | |
| 30 | + DeviceDataApi deviceDataApi = SpringUtil.getBean(DeviceDataApi.class); | |
| 34 | 31 | if (deviceDataApi == null) { |
| 35 | 32 | log.error("未能从 ServiceRegistry 获取 DeviceDataApi 实例,请确保主程序已正确注册!"); |
| 36 | 33 | return; | ... | ... |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-http-plugin/dependency-reduced-pom.xml renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-http/dependency-reduced-pom.xml
| ... | ... | @@ -6,37 +6,15 @@ |
| 6 | 6 | <version>2.2.0-snapshot</version> |
| 7 | 7 | </parent> |
| 8 | 8 | <modelVersion>4.0.0</modelVersion> |
| 9 | - <artifactId>yudao-module-iot-http-plugin</artifactId> | |
| 9 | + <artifactId>yudao-module-iot-plugin-http</artifactId> | |
| 10 | 10 | <name>${project.artifactId}</name> |
| 11 | - <version>2.2.0-snapshot</version> | |
| 11 | + <version>1.0.0</version> | |
| 12 | 12 | <description>物联网 插件模块 - http 插件</description> |
| 13 | 13 | <build> |
| 14 | 14 | <plugins> |
| 15 | 15 | <plugin> |
| 16 | - <artifactId>maven-jar-plugin</artifactId> | |
| 17 | - <version>2.4</version> | |
| 18 | - <configuration> | |
| 19 | - <archive> | |
| 20 | - <manifestEntries> | |
| 21 | - <Plugin-Id>${plugin.id}</Plugin-Id> | |
| 22 | - <Plugin-Class>${plugin.class}</Plugin-Class> | |
| 23 | - <Plugin-Version>${plugin.version}</Plugin-Version> | |
| 24 | - <Plugin-Provider>${plugin.provider}</Plugin-Provider> | |
| 25 | - <Plugin-Description>${plugin.description}</Plugin-Description> | |
| 26 | - <Plugin-Dependencies>${plugin.dependencies}</Plugin-Dependencies> | |
| 27 | - </manifestEntries> | |
| 28 | - </archive> | |
| 29 | - </configuration> | |
| 30 | - </plugin> | |
| 31 | - <plugin> | |
| 32 | - <artifactId>maven-deploy-plugin</artifactId> | |
| 33 | - <configuration> | |
| 34 | - <skip>true</skip> | |
| 35 | - </configuration> | |
| 36 | - </plugin> | |
| 37 | - <plugin> | |
| 38 | 16 | <artifactId>maven-shade-plugin</artifactId> |
| 39 | - <version>3.4.1</version> | |
| 17 | + <version>3.2.4</version> | |
| 40 | 18 | <executions> |
| 41 | 19 | <execution> |
| 42 | 20 | <phase>package</phase> |
| ... | ... | @@ -44,11 +22,9 @@ |
| 44 | 22 | <goal>shade</goal> |
| 45 | 23 | </goals> |
| 46 | 24 | <configuration> |
| 47 | - <shadedArtifactAttached>true</shadedArtifactAttached> | |
| 48 | - <shadedClassifierName>shaded</shadedClassifierName> | |
| 49 | 25 | <transformers> |
| 50 | 26 | <transformer> |
| 51 | - <mainClass>cn.iocoder.yudao.module.iot.HttpPluginSpringbootApplication</mainClass> | |
| 27 | + <mainClass>com.example.HttpPluginSpringbootApplication</mainClass> | |
| 52 | 28 | </transformer> |
| 53 | 29 | </transformers> |
| 54 | 30 | </configuration> |
| ... | ... | @@ -57,25 +33,11 @@ |
| 57 | 33 | </plugin> |
| 58 | 34 | </plugins> |
| 59 | 35 | </build> |
| 60 | - <dependencies> | |
| 61 | - <dependency> | |
| 62 | - <groupId>org.pf4j</groupId> | |
| 63 | - <artifactId>pf4j-spring</artifactId> | |
| 64 | - <version>0.9.0</version> | |
| 65 | - <scope>provided</scope> | |
| 66 | - </dependency> | |
| 67 | - <dependency> | |
| 68 | - <groupId>org.projectlombok</groupId> | |
| 69 | - <artifactId>lombok</artifactId> | |
| 70 | - <version>1.18.34</version> | |
| 71 | - <scope>provided</scope> | |
| 72 | - </dependency> | |
| 73 | - </dependencies> | |
| 74 | 36 | <properties> |
| 75 | - <plugin.class>cn.iocoder.yudao.module.iot.plugin.HttpVertxPlugin</plugin.class> | |
| 76 | - <plugin.version>0.0.1</plugin.version> | |
| 77 | - <plugin.id>http-plugin</plugin.id> | |
| 78 | - <plugin.description>http-plugin-0.0.1</plugin.description> | |
| 79 | - <plugin.provider>ahh</plugin.provider> | |
| 37 | + <plugin.id>${project.artifactId}</plugin.id> | |
| 38 | + <plugin.description>${project.artifactId}-${project.version}</plugin.description> | |
| 39 | + <plugin.class>cn.iocoder.yudao.module.iot.config.HttpVertxPlugin</plugin.class> | |
| 40 | + <plugin.version>${project.version}</plugin.version> | |
| 41 | + <plugin.provider>yudao</plugin.provider> | |
| 80 | 42 | </properties> |
| 81 | 43 | </project> | ... | ... |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-http/plugin.properties
0 → 100644
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-demo-plugin/pom.xml renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-http/pom.xml
| ... | ... | @@ -11,45 +11,27 @@ |
| 11 | 11 | <modelVersion>4.0.0</modelVersion> |
| 12 | 12 | <packaging>jar</packaging> |
| 13 | 13 | |
| 14 | - <artifactId>yudao-module-iot-demo-plugin</artifactId> | |
| 14 | + <artifactId>yudao-module-iot-plugin-http</artifactId> | |
| 15 | + <version>1.0.0</version> | |
| 15 | 16 | |
| 16 | 17 | <name>${project.artifactId}</name> |
| 17 | 18 | <description> |
| 18 | - 物联网 插件模块 - demo 插件 | |
| 19 | + 物联网 插件模块 - http 插件 | |
| 19 | 20 | </description> |
| 20 | 21 | |
| 21 | 22 | <properties> |
| 22 | 23 | <!-- 插件相关 --> |
| 23 | - <plugin.id>demo-plugin</plugin.id> | |
| 24 | - <plugin.class>cn.iocoder.yudao.module.iot.plugin.DemoPlugin</plugin.class> | |
| 25 | - <plugin.version>0.0.1</plugin.version> | |
| 26 | - <plugin.provider>ahh</plugin.provider> | |
| 24 | + <plugin.id>${project.artifactId}</plugin.id> | |
| 25 | + <plugin.class>cn.iocoder.yudao.module.iot.config.HttpVertxPlugin</plugin.class> | |
| 26 | + <plugin.version>${project.version}</plugin.version> | |
| 27 | + <plugin.provider>yudao</plugin.provider> | |
| 28 | + <plugin.description>${project.artifactId}-${project.version}</plugin.description> | |
| 27 | 29 | <plugin.dependencies/> |
| 28 | 30 | </properties> |
| 29 | 31 | |
| 30 | 32 | <build> |
| 31 | 33 | <plugins> |
| 32 | - <!-- DOESN'T WORK WITH MAVEN 3 (I defined the plugin metadata in properties section) | |
| 33 | - <plugin> | |
| 34 | - <groupId>org.codehaus.mojo</groupId> | |
| 35 | - <artifactId>properties-maven-plugin</artifactId> | |
| 36 | - <version>1.0-alpha-2</version> | |
| 37 | - <executions> | |
| 38 | - <execution> | |
| 39 | - <phase>initialize</phase> | |
| 40 | - <goals> | |
| 41 | - <goal>read-project-properties</goal> | |
| 42 | - </goals> | |
| 43 | - <configuration> | |
| 44 | - <files> | |
| 45 | - <file>plugin.properties</file> | |
| 46 | - </files> | |
| 47 | - </configuration> | |
| 48 | - </execution> | |
| 49 | - </executions> | |
| 50 | - </plugin> | |
| 51 | - --> | |
| 52 | - | |
| 34 | + <!-- 插件模式 zip --> | |
| 53 | 35 | <plugin> |
| 54 | 36 | <groupId>org.apache.maven.plugins</groupId> |
| 55 | 37 | <artifactId>maven-antrun-plugin</artifactId> |
| ... | ... | @@ -60,7 +42,8 @@ |
| 60 | 42 | <phase>package</phase> |
| 61 | 43 | <configuration> |
| 62 | 44 | <target> |
| 63 | - <unzip src="target/${project.artifactId}-${project.version}.${project.packaging}" dest="target/plugin-classes" /> | |
| 45 | + <unzip src="target/${project.artifactId}-${project.version}.${project.packaging}" | |
| 46 | + dest="target/plugin-classes"/> | |
| 64 | 47 | </target> |
| 65 | 48 | </configuration> |
| 66 | 49 | <goals> |
| ... | ... | @@ -92,6 +75,7 @@ |
| 92 | 75 | </executions> |
| 93 | 76 | </plugin> |
| 94 | 77 | |
| 78 | + <!-- 插件模式 jar --> | |
| 95 | 79 | <plugin> |
| 96 | 80 | <groupId>org.apache.maven.plugins</groupId> |
| 97 | 81 | <artifactId>maven-jar-plugin</artifactId> |
| ... | ... | @@ -103,12 +87,30 @@ |
| 103 | 87 | <Plugin-Class>${plugin.class}</Plugin-Class> |
| 104 | 88 | <Plugin-Version>${plugin.version}</Plugin-Version> |
| 105 | 89 | <Plugin-Provider>${plugin.provider}</Plugin-Provider> |
| 90 | + <Plugin-Description>${plugin.description}</Plugin-Description> | |
| 106 | 91 | <Plugin-Dependencies>${plugin.dependencies}</Plugin-Dependencies> |
| 107 | 92 | </manifestEntries> |
| 108 | 93 | </archive> |
| 109 | 94 | </configuration> |
| 110 | 95 | </plugin> |
| 111 | 96 | |
| 97 | + <!-- 独立模式 --> | |
| 98 | + <plugin> | |
| 99 | + <groupId>org.springframework.boot</groupId> | |
| 100 | + <artifactId>spring-boot-maven-plugin</artifactId> | |
| 101 | + <version>${spring.boot.version}</version> | |
| 102 | + <executions> | |
| 103 | + <execution> | |
| 104 | + <goals> | |
| 105 | + <goal>repackage</goal> | |
| 106 | + </goals> | |
| 107 | + <configuration> | |
| 108 | + <classifier>-standalone</classifier> | |
| 109 | + </configuration> | |
| 110 | + </execution> | |
| 111 | + </executions> | |
| 112 | + </plugin> | |
| 113 | + | |
| 112 | 114 | <plugin> |
| 113 | 115 | <artifactId>maven-deploy-plugin</artifactId> |
| 114 | 116 | <configuration> |
| ... | ... | @@ -123,14 +125,11 @@ |
| 123 | 125 | <dependency> |
| 124 | 126 | <groupId>org.springframework.boot</groupId> |
| 125 | 127 | <artifactId>spring-boot-starter-web</artifactId> |
| 126 | - <version>${spring.boot.version}</version> | |
| 127 | - <scope>provided</scope> | |
| 128 | 128 | </dependency> |
| 129 | 129 | <!-- PF4J Spring 集成 --> |
| 130 | 130 | <dependency> |
| 131 | 131 | <groupId>org.pf4j</groupId> |
| 132 | 132 | <artifactId>pf4j-spring</artifactId> |
| 133 | - <scope>provided</scope> | |
| 134 | 133 | </dependency> |
| 135 | 134 | <!-- 项目依赖 --> |
| 136 | 135 | <dependency> |
| ... | ... | @@ -141,8 +140,11 @@ |
| 141 | 140 | <dependency> |
| 142 | 141 | <groupId>org.projectlombok</groupId> |
| 143 | 142 | <artifactId>lombok</artifactId> |
| 144 | - <version>${lombok.version}</version> | |
| 145 | - <scope>provided</scope> | |
| 143 | + </dependency> | |
| 144 | + <!-- Vert.x Web --> | |
| 145 | + <dependency> | |
| 146 | + <groupId>io.vertx</groupId> | |
| 147 | + <artifactId>vertx-web</artifactId> | |
| 146 | 148 | </dependency> |
| 147 | 149 | </dependencies> |
| 148 | 150 | </project> |
| 149 | 151 | \ No newline at end of file | ... | ... |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-http-plugin/src/main/assembly/assembly.xml renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-http/src/main/assembly/assembly.xml
| ... | ... | @@ -14,14 +14,7 @@ |
| 14 | 14 | </includes> |
| 15 | 15 | </dependencySet> |
| 16 | 16 | </dependencySets> |
| 17 | - <!-- | |
| 18 | - <fileSets> | |
| 19 | - <fileSet> | |
| 20 | - <directory>target/classes</directory> | |
| 21 | - <outputDirectory>classes</outputDirectory> | |
| 22 | - </fileSet> | |
| 23 | - </fileSets> | |
| 24 | - --> | |
| 17 | + | |
| 25 | 18 | <fileSets> |
| 26 | 19 | <fileSet> |
| 27 | 20 | <directory>target/plugin-classes</directory> | ... | ... |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-http-plugin/src/main/java/cn/iocoder/yudao/module/iot/HttpPluginSpringbootApplication.java renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/HttpPluginSpringbootApplication.java
| 1 | 1 | package cn.iocoder.yudao.module.iot; |
| 2 | 2 | |
| 3 | 3 | import org.springframework.boot.SpringApplication; |
| 4 | +import org.springframework.boot.WebApplicationType; | |
| 4 | 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; |
| 5 | 6 | |
| 7 | +// TODO @haohao:建议包名:cn.iocoder.yudao.module.iot.plugin.${pluginName},例如说 http。然后子包如下: | |
| 8 | +// config:方配置类,以及 HttpVertxPlugin 初始化 | |
| 9 | +// service:放 HttpVertxHandler 逻辑; | |
| 6 | 10 | @SpringBootApplication |
| 7 | 11 | public class HttpPluginSpringbootApplication { |
| 12 | + | |
| 8 | 13 | public static void main(String[] args) { |
| 9 | - SpringApplication.run(HttpPluginSpringbootApplication.class, args); | |
| 14 | +// SpringApplication.run(HttpPluginSpringbootApplication.class, args); | |
| 15 | + SpringApplication application = new SpringApplication(HttpPluginSpringbootApplication.class); | |
| 16 | + application.setWebApplicationType(WebApplicationType.NONE); | |
| 17 | + application.run(args); | |
| 10 | 18 | } |
| 11 | -} | |
| 12 | 19 | \ No newline at end of file |
| 20 | + | |
| 21 | +} | |
| 22 | + | |
| 23 | +// TODO @haohao:如下是 sdk 的包:cn.iocoder.yudao.module.iot.plugin.sdk | |
| 24 | +// 1. api 包:实现 DeviceDataApi 接口,通过 resttemplate 调用 | |
| 25 | +// 2. config 包:初始化 DeviceDataApi 等等 | |
| 26 | + | |
| 27 | +// 3. 其中 resttemplate 调用的后端地址,通过每个服务的 application.yaml 进行注入。 | |
| 13 | 28 | \ No newline at end of file | ... | ... |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-http-plugin/src/main/java/cn/iocoder/yudao/module/iot/plugin/HttpVertxPlugin.java renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/config/HttpVertxPlugin.java
| 1 | -package cn.iocoder.yudao.module.iot.plugin; | |
| 1 | +package cn.iocoder.yudao.module.iot.config; | |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.module.iot.api.ServiceRegistry; | |
| 3 | +import cn.hutool.extra.spring.SpringUtil; | |
| 4 | 4 | import cn.iocoder.yudao.module.iot.api.device.DeviceDataApi; |
| 5 | +import cn.iocoder.yudao.module.iot.service.HttpVertxHandler; | |
| 5 | 6 | import io.vertx.core.Vertx; |
| 6 | 7 | import io.vertx.ext.web.Router; |
| 7 | 8 | import io.vertx.ext.web.handler.BodyHandler; |
| 9 | +import lombok.extern.slf4j.Slf4j; | |
| 8 | 10 | import org.pf4j.PluginWrapper; |
| 9 | 11 | import org.pf4j.spring.SpringPlugin; |
| 10 | 12 | import org.springframework.context.ApplicationContext; |
| 11 | 13 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; |
| 12 | 14 | |
| 13 | -import lombok.extern.slf4j.Slf4j; | |
| 14 | - | |
| 15 | 15 | @Slf4j |
| 16 | 16 | public class HttpVertxPlugin extends SpringPlugin { |
| 17 | 17 | |
| 18 | 18 | private static final int PORT = 8092; |
| 19 | 19 | private Vertx vertx; |
| 20 | - private DeviceDataApi deviceDataApi; | |
| 21 | 20 | |
| 22 | 21 | public HttpVertxPlugin(PluginWrapper wrapper) { |
| 23 | 22 | super(wrapper); |
| ... | ... | @@ -28,7 +27,7 @@ public class HttpVertxPlugin extends SpringPlugin { |
| 28 | 27 | log.info("HttpVertxPlugin.start()"); |
| 29 | 28 | |
| 30 | 29 | // 获取 DeviceDataApi 实例 |
| 31 | - deviceDataApi = ServiceRegistry.getService(DeviceDataApi.class); | |
| 30 | + DeviceDataApi deviceDataApi = SpringUtil.getBean(DeviceDataApi.class); | |
| 32 | 31 | if (deviceDataApi == null) { |
| 33 | 32 | log.error("未能从 ServiceRegistry 获取 DeviceDataApi 实例,请确保主程序已正确注册!"); |
| 34 | 33 | return; | ... | ... |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/config/TestConfiguration.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.iot.config; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 4 | +import cn.iocoder.yudao.module.iot.api.device.DeviceDataApi; | |
| 5 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceEventReportReqDTO; | |
| 6 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO; | |
| 7 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDeviceStatusUpdateReqDTO; | |
| 8 | +import org.pf4j.DefaultPluginManager; | |
| 9 | +import org.pf4j.PluginWrapper; | |
| 10 | +import org.springframework.boot.web.client.RestTemplateBuilder; | |
| 11 | +import org.springframework.context.annotation.Bean; | |
| 12 | +import org.springframework.context.annotation.Configuration; | |
| 13 | +import org.springframework.web.client.RestTemplate; | |
| 14 | + | |
| 15 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 16 | + | |
| 17 | +// TODO 芋艿:临时实现; | |
| 18 | +@Configuration | |
| 19 | +public class TestConfiguration { | |
| 20 | + | |
| 21 | +// @Resource | |
| 22 | +// private RestTemplate restTemplate; | |
| 23 | + | |
| 24 | + // TODO 芋艿:这里,后续看看怎么创建好点 | |
| 25 | + @Bean | |
| 26 | + public RestTemplate restTemplate() { | |
| 27 | + return new RestTemplateBuilder().build(); | |
| 28 | + } | |
| 29 | + | |
| 30 | + @Bean | |
| 31 | + public DeviceDataApi deviceDataApi(RestTemplate restTemplate) { | |
| 32 | + return new DeviceDataApi() { | |
| 33 | + | |
| 34 | + @Override | |
| 35 | + public CommonResult<Boolean> updateDeviceStatus(IotDeviceStatusUpdateReqDTO updateReqDTO) { | |
| 36 | + // TODO haohao:待实现 | |
| 37 | + return null; | |
| 38 | + } | |
| 39 | + | |
| 40 | + @Override | |
| 41 | + public CommonResult<Boolean> reportDeviceEventData(IotDeviceEventReportReqDTO reportReqDTO) { | |
| 42 | + // TODO haohao:待实现 | |
| 43 | + return null; | |
| 44 | + } | |
| 45 | + | |
| 46 | + @Override | |
| 47 | + public CommonResult<Boolean> reportDevicePropertyData(IotDevicePropertyReportReqDTO reportReqDTO) { | |
| 48 | + // TODO haohao:待完整实现 | |
| 49 | + String url = "http://127.0.0.1:48080/rpc-api/iot/device-data/report-property"; | |
| 50 | + try { | |
| 51 | + restTemplate.postForObject(url, reportReqDTO, CommonResult.class); | |
| 52 | + return success(true); | |
| 53 | + } catch (Exception e) { | |
| 54 | + e.printStackTrace(); | |
| 55 | + return CommonResult.error(400, "error"); | |
| 56 | + } | |
| 57 | + } | |
| 58 | + | |
| 59 | + }; | |
| 60 | + } | |
| 61 | + | |
| 62 | + // TODO @haohao:可能要看下,有没更好的方式 | |
| 63 | + @Bean(initMethod = "start") | |
| 64 | + public HttpVertxPlugin HttpVertxPlugin() { | |
| 65 | + PluginWrapper pluginWrapper = new PluginWrapper(new DefaultPluginManager(), null, null, null); | |
| 66 | + return new HttpVertxPlugin(pluginWrapper); | |
| 67 | + } | |
| 68 | + | |
| 69 | +} | ... | ... |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-http-plugin/src/main/java/cn/iocoder/yudao/module/iot/plugin/HttpVertxHandler.java renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-http/src/main/java/cn/iocoder/yudao/module/iot/service/HttpVertxHandler.java
| 1 | -package cn.iocoder.yudao.module.iot.plugin; | |
| 1 | +package cn.iocoder.yudao.module.iot.service; | |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.json.JSONObject; |
| 4 | 4 | import cn.hutool.json.JSONUtil; |
| 5 | 5 | import cn.iocoder.yudao.module.iot.api.device.DeviceDataApi; |
| 6 | -import cn.iocoder.yudao.module.iot.api.device.dto.DeviceDataCreateReqDTO; | |
| 6 | +import cn.iocoder.yudao.module.iot.api.device.dto.IotDevicePropertyReportReqDTO; | |
| 7 | 7 | import io.vertx.core.Handler; |
| 8 | 8 | import io.vertx.ext.web.RequestBody; |
| 9 | 9 | import io.vertx.ext.web.RoutingContext; |
| ... | ... | @@ -46,12 +46,12 @@ public class HttpVertxHandler implements Handler<RoutingContext> { |
| 46 | 46 | |
| 47 | 47 | try { |
| 48 | 48 | // 调用主程序的接口保存数据 |
| 49 | - DeviceDataCreateReqDTO createDTO = DeviceDataCreateReqDTO.builder() | |
| 49 | + IotDevicePropertyReportReqDTO createDTO = IotDevicePropertyReportReqDTO.builder() | |
| 50 | 50 | .productKey(productKey) |
| 51 | 51 | .deviceName(deviceName) |
| 52 | - .message(jsonData.toString()) | |
| 52 | + .params(jsonData) // TODO 芋艿:这块要优化 | |
| 53 | 53 | .build(); |
| 54 | - deviceDataApi.saveDeviceData(createDTO); | |
| 54 | + deviceDataApi.reportDevicePropertyData(createDTO); | |
| 55 | 55 | |
| 56 | 56 | // 构造成功响应内容 |
| 57 | 57 | JSONObject successRes = createResponseJson( | ... | ... |
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-http/src/main/resources/application.yml
0 → 100644
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-mqtt-plugin/plugin.properties renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-mqtt/plugin.properties
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-mqtt-plugin/pom.xml renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-mqtt/pom.xml
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-emqx-plugin/src/main/assembly/assembly.xml renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-mqtt/src/main/assembly/assembly.xml
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-mqtt-plugin/src/main/java/cn/iocoder/yudao/module/iot/plugin/MqttPlugin.java renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-mqtt/src/main/java/cn/iocoder/yudao/module/iot/plugin/MqttPlugin.java
yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-mqtt-plugin/src/main/java/cn/iocoder/yudao/module/iot/plugin/MqttServerExtension.java renamed to yudao-module-iot/yudao-module-iot-plugin/yudao-module-iot-plugin-mqtt/src/main/java/cn/iocoder/yudao/module/iot/plugin/MqttServerExtension.java