关系数据库存储实现

V0.5.x
xiwa 2022-07-19 21:29:43 +08:00
parent 61fa50b612
commit 3910bd23ca
439 changed files with 3017 additions and 767 deletions

0
.workflow/BranchPipeline.yml Normal file → Executable file
View File

0
.workflow/MasterPipeline.yml Normal file → Executable file
View File

0
.workflow/PRPipeline.yml Normal file → Executable file
View File

View File

0
data/converters/6260396d67aced2696184053/converter.js Normal file → Executable file
View File

0
data/init/category.json Normal file → Executable file
View File

0
data/init/deviceGroup.json Normal file → Executable file
View File

0
data/init/deviceInfo.json Normal file → Executable file
View File

0
data/init/home.json Normal file → Executable file
View File

4
data/init/oauthClient.json Normal file → Executable file
View File

@ -1,13 +1,13 @@
[
{
"id": "iotkit",
"clientId": "iotkit",
"name": "奇特物联",
"clientSecret": "b86cb53d-c005-48a3-bb02-3c262151b68c",
"allowUrl": "*",
"createAt": 1652840868485
},
{
"id": "dueros",
"clientId": "dueros",
"name": "小度音箱",
"clientSecret": "750c67c2-29cb-40c3-bf4d-c0b9bf3eed88",
"allowUrl": "*",

0
data/init/product.json Normal file → Executable file
View File

0
data/init/productModel.json Normal file → Executable file
View File

6
data/init/protocolComponent.json Normal file → Executable file
View File

@ -8,7 +8,7 @@
"jarFile": "http-biz-component-0.1.0-SNAPSHOT.jar",
"config": "{\"port\":\"8086\"}",
"converter": "6260396d67aced2696184053",
"state": "running",
"state": "stopped",
"createAt": 1652238780184
},
{
@ -44,7 +44,7 @@
"jarFile": "emqx-component-0.2.1-SNAPSHOT.jar",
"config": "{\"port\":\"1884\",\"ssl\":false,\"type\":\"client\",\"subscribeTopics\":[\"/sys/+/+/s/#\",\"/sys/client/connected\",\"/sys/client/disconnected\",\"/sys/session/subscribed\",\"/sys/session/unsubscribed\"],\"authPort\":\"8088\",\"broker\":\"127.0.0.1\",\"clientId\":\"test\",\"username\":\"test\",\"password\":\"123\"}",
"converter": "6260396d67aced2696184053",
"state": "running",
"state": "stopped",
"createAt": 1653180468724
},
{
@ -56,7 +56,7 @@
"jarFile": "http-biz-component-0.1.0-SNAPSHOT.jar",
"config": "{\"port\":\"8084\"}",
"converter": "",
"state": "running",
"state": "stopped",
"createAt": 1650685502665
}
]

0
data/init/protocolConverter.json Normal file → Executable file
View File

0
data/init/ruleInfo.json Normal file → Executable file
View File

0
data/init/space.json Normal file → Executable file
View File

0
data/init/spaceDevice.json Normal file → Executable file
View File

0
data/init/taskInfo.json Normal file → Executable file
View File

0
data/init/thingModel.json Normal file → Executable file
View File

0
data/init/userInfo.json Normal file → Executable file
View File

0
data/init/virtualDevice.json Normal file → Executable file
View File

0
doc/WechatIMG539.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 317 KiB

After

Width:  |  Height:  |  Size: 317 KiB

0
doc/mongodb安装配置.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 497 KiB

After

Width:  |  Height:  |  Size: 497 KiB

0
doc/screenshot.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 130 KiB

0
doc/安装Pulsar.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 108 KiB

2
iot-auth-server/pom.xml Normal file → Executable file
View File

@ -5,7 +5,7 @@
<parent>
<artifactId>iotkit-parent</artifactId>
<groupId>cc.iotkit</groupId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

0
iot-auth-server/readme.txt Normal file → Executable file
View File

View File

@ -1,10 +1,19 @@
/*
* +----------------------------------------------------------------------
* | Copyright (c) 2021-2022 All rights reserved.
* +----------------------------------------------------------------------
* | Licensed
* +----------------------------------------------------------------------
* | Author: xw2sy@163.com
* +----------------------------------------------------------------------
*/
package cc.iotkit.oauth.controller;
import cc.iotkit.common.Constants;
import cc.iotkit.common.utils.CodecUtil;
import cc.iotkit.common.utils.ReflectUtil;
import cc.iotkit.dao.OauthClientCache;
import cc.iotkit.dao.UserInfoCache;
import cc.iotkit.data.IOauthClientData;
import cc.iotkit.data.IUserInfoData;
import cc.iotkit.model.OauthClient;
import cc.iotkit.model.UserInfo;
import cc.iotkit.oauth.vo.UserInfoVo;
@ -16,6 +25,7 @@ import com.ejlchina.okhttps.OkHttps;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.web.bind.annotation.GetMapping;
@ -36,16 +46,18 @@ public class AuthClientController {
private String serverUrl;
@Autowired
private OauthClientCache oauthClientCache;
@Qualifier("oauthClientDataCache")
private IOauthClientData oauthClientData;
@Autowired
private UserInfoCache userInfoCache;
@Qualifier("userInfoDataCache")
private IUserInfoData userInfoData;
/**
* Code Access-Token
*/
@RequestMapping("/codeLogin")
public SaResult codeLogin(String code, String clientId) {
OauthClient oauthClient = oauthClientCache.getClient(clientId);
OauthClient oauthClient = oauthClientData.findByClientId(clientId);
if (oauthClient == null) {
return SaResult.error("clientId does not exist");
}
@ -117,7 +129,7 @@ public class AuthClientController {
}
private UserInfoVo getUserInfo(String uid) {
UserInfo userInfo = userInfoCache.getUserInfo(uid);
UserInfo userInfo = userInfoData.findById(uid);
UserInfoVo userVo = new UserInfoVo();
ReflectUtil.copyNoNulls(userInfo, userVo);
return userVo;

View File

@ -11,25 +11,27 @@ package cc.iotkit.oauth.service;
import cc.iotkit.common.Constants;
import cc.iotkit.common.utils.CodecUtil;
import cc.iotkit.dao.OauthClientCache;
import cc.iotkit.data.IOauthClientData;
import cc.iotkit.model.OauthClient;
import cn.dev33.satoken.oauth2.logic.SaOAuth2Template;
import cn.dev33.satoken.oauth2.model.SaClientModel;
import cn.dev33.satoken.stp.StpUtil;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class SaOAuth2TemplateImpl extends SaOAuth2Template {
@Autowired
private OauthClientCache oauthClientCache;
@Qualifier("oauthClientDataCache")
private IOauthClientData oauthClientData;
// 根据 id 获取 Client 信息
@Override
public SaClientModel getClientModel(String clientId) {
OauthClient client = oauthClientCache.getClient(clientId);
OauthClient client = oauthClientData.findByClientId(clientId);
if (client == null) {
return null;
}

View File

@ -9,10 +9,11 @@
*/
package cc.iotkit.oauth.service;
import cc.iotkit.dao.UserInfoCache;
import cc.iotkit.data.IUserInfoData;
import cc.iotkit.model.UserInfo;
import cn.dev33.satoken.stp.StpInterface;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import java.util.List;
@ -21,14 +22,15 @@ import java.util.List;
public class StpInterfaceImpl implements StpInterface {
@Autowired
private UserInfoCache userInfoCache;
@Qualifier("userInfoDataCache")
private IUserInfoData userInfoData;
/**
*
*/
@Override
public List<String> getPermissionList(Object loginId, String loginType) {
UserInfo userInfo = userInfoCache.getUserInfo(loginId.toString());
UserInfo userInfo = userInfoData.findById(loginId.toString());
return userInfo.getPermissions();
}
@ -37,7 +39,7 @@ public class StpInterfaceImpl implements StpInterface {
*/
@Override
public List<String> getRoleList(Object loginId, String loginType) {
UserInfo userInfo = userInfoCache.getUserInfo(loginId.toString());
UserInfo userInfo = userInfoData.findById(loginId.toString());
return userInfo.getRoles();
}

View File

@ -1,3 +1,12 @@
/*
* +----------------------------------------------------------------------
* | Copyright (c) 2021-2022 All rights reserved.
* +----------------------------------------------------------------------
* | Licensed
* +----------------------------------------------------------------------
* | Author: xw2sy@163.com
* +----------------------------------------------------------------------
*/
package cc.iotkit.oauth.service;
import cn.dev33.satoken.context.SaHolder;

View File

View File

View File

View File

View File

0
iot-auth-server/src/test/java/GenPwdSecret.java Normal file → Executable file
View File

2
iot-common/pom.xml Normal file → Executable file
View File

@ -5,7 +5,7 @@
<parent>
<artifactId>iotkit-parent</artifactId>
<groupId>cc.iotkit</groupId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

0
iot-common/readme.txt Normal file → Executable file
View File

View File

View File

@ -15,21 +15,21 @@ public interface Constants {
String ACCOUNT_SECRET = "3n1z33kzvpgz1foijpkepyd3e8tw84us";
String PRODUCT_CACHE = "product_cache";
String CACHE_PRODUCT = "product_cache";
String DEVICE_CACHE = "device_cache";
String CACHE_DEVICE_INFO = "device_info_cache";
String DEVICE_STATS_CACHE = "device_stats_cache";
String CACHE_DEVICE_STATS = "device_stats_cache";
String CATEGORY_CACHE = "category_cache";
String CACHE_CATEGORY = "category_cache";
String SPACE_CACHE = "space_cache";
String CACHE_SPACE = "space_cache";
String THING_MODEL_CACHE = "thing_model_cache";
String USER_CACHE = "user_info_cache";
String CACHE_USER_INFO = "user_info_cache";
String OAUTH_CLIENT_CACHE = "oauth_client_cache";
String CACHE_OAUTH_CLIENT = "oauth_client_cache";
String WECHAT_APP_ID = "wx791cb7bf75950e0c";
@ -37,7 +37,7 @@ public interface Constants {
String APP_DESIGN_CACHE = "app_design_cache";
String PRODUCT_SCRIPT_CACHE = "product_script_cache";
String CACHE_PRODUCT_SCRIPT = "product_script_cache";
/**
*

View File

View File

View File

View File

View File

View File

View File

View File

View File

0
iot-components/.DS_Store vendored Normal file → Executable file
View File

0
iot-components/iot-component-base/.DS_Store vendored Normal file → Executable file
View File

2
iot-components/iot-component-base/pom.xml Normal file → Executable file
View File

@ -5,7 +5,7 @@
<parent>
<artifactId>iot-components</artifactId>
<groupId>cc.iotkit</groupId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

0
iot-components/iot-component-converter/.DS_Store vendored Normal file → Executable file
View File

2
iot-components/iot-component-converter/pom.xml Normal file → Executable file
View File

@ -5,7 +5,7 @@
<parent>
<artifactId>iot-components</artifactId>
<groupId>cc.iotkit</groupId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

0
iot-components/iot-component-server/.DS_Store vendored Normal file → Executable file
View File

2
iot-components/iot-component-server/pom.xml Normal file → Executable file
View File

@ -5,7 +5,7 @@
<parent>
<artifactId>iot-components</artifactId>
<groupId>cc.iotkit</groupId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -23,8 +23,8 @@ import cc.iotkit.converter.Device;
import cc.iotkit.converter.DeviceMessage;
import cc.iotkit.converter.ScriptConverter;
import cc.iotkit.common.thing.ThingService;
import cc.iotkit.dao.DeviceCache;
import cc.iotkit.dao.ProductCache;
import cc.iotkit.data.IDeviceInfoData;
import cc.iotkit.data.IProductData;
import cc.iotkit.data.IProtocolComponentData;
import cc.iotkit.model.device.DeviceInfo;
import cc.iotkit.model.device.message.ThingModelMessage;
@ -34,6 +34,7 @@ import cc.iotkit.model.protocol.ProtocolConverter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@ -62,23 +63,25 @@ public class DeviceComponentManager {
@Autowired
private IProtocolComponentData protocolComponentData;
@Autowired
private DeviceCache deviceCache;
@Qualifier("productDataCache")
IProductData productData;
@Autowired
ProductCache productCache;
@Qualifier("deviceInfoDataCache")
private IDeviceInfoData deviceInfoData;
@Autowired
private DeviceRouter deviceRouter;
@PostConstruct
public void init() {
try {
List<ProtocolComponent> componentList = protocolComponentData.findByStateAndType(
ProtocolComponent.STATE_RUNNING, ProtocolComponent.TYPE_DEVICE);
for (ProtocolComponent component : componentList) {
List<ProtocolComponent> componentList = protocolComponentData.findByStateAndType(
ProtocolComponent.STATE_RUNNING, ProtocolComponent.TYPE_DEVICE);
for (ProtocolComponent component : componentList) {
try {
register(component);
start(component.getId());
} catch (Throwable e) {
log.error("init protocol components error", e);
}
} catch (Throwable e) {
log.error("init protocol components error", e);
}
}
@ -170,14 +173,14 @@ public class DeviceComponentManager {
throw new BizException("there is no components");
}
DeviceInfo deviceInfo = deviceCache.getDeviceInfo(service.getProductKey(), service.getDeviceName());
Product product = productCache.findById(service.getProductKey());
DeviceInfo deviceInfo = deviceInfoData.findByProductKeyAndDeviceName(service.getProductKey(), service.getDeviceName());
Product product = productData.findById(service.getProductKey());
String linkPk = service.getProductKey();
String linkDn = service.getDeviceName();
if (product.isTransparent()) {
//如果是透传设备,取父级设备进行链路查找
DeviceInfo parent = deviceCache.get(deviceInfo.getParentId());
DeviceInfo parent = deviceInfoData.findByDeviceId(deviceInfo.getParentId());
linkPk = parent.getProductKey();
linkDn = parent.getDeviceName();
}

View File

@ -16,7 +16,6 @@ import cc.iotkit.common.utils.JsonUtil;
import cc.iotkit.common.utils.UniqueIdUtil;
import cc.iotkit.comp.model.DeviceState;
import cc.iotkit.comp.model.RegisterInfo;
import cc.iotkit.dao.*;
import cc.iotkit.data.IDeviceInfoData;
import cc.iotkit.data.IProductModelData;
import cc.iotkit.data.IProductData;
@ -28,6 +27,7 @@ import cc.iotkit.mq.MqProducer;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import java.util.HashMap;
@ -41,14 +41,12 @@ public class DeviceBehaviourService {
@Autowired
private IProductModelData productModelData;
@Autowired
private ProductCache productCache;
@Autowired
@Qualifier("deviceInfoDataCache")
private IDeviceInfoData deviceInfoData;
@Autowired
private DeviceCache deviceCache;
@Autowired
private MqProducer<ThingModelMessage> producer;
@Autowired
@Qualifier("productDataCache")
private IProductData productData;
public void register(RegisterInfo info) {
@ -187,13 +185,16 @@ public class DeviceBehaviourService {
}
deviceStateChange(device, online);
//父设备ID不为空说明是子设备
if (device.getParentId() != null) {
return;
}
List<DeviceInfo> subDevices = deviceInfoData.findByParentId(device.getDeviceId());
for (DeviceInfo subDevice : subDevices) {
Product product = productCache.findById(subDevice.getProductKey());
//否则为父设备,同步透传子设备状态
List<String> subDeviceIds = deviceInfoData.findSubDeviceIds(device.getDeviceId());
for (String subDeviceId : subDeviceIds) {
DeviceInfo subDevice=deviceInfoData.findByDeviceId(subDeviceId);
Product product = productData.findById(subDevice.getProductKey());
Boolean transparent = product.getTransparent();
//透传设备父设备上线,子设备也上线。非透传设备父设备离线,子设备才离线
if (transparent != null && transparent || !online) {
@ -229,8 +230,8 @@ public class DeviceBehaviourService {
public void reportMessage(ThingModelMessage message) {
try {
DeviceInfo device = deviceCache.getDeviceInfo(message.getProductKey(),
message.getDeviceName());
DeviceInfo device = deviceInfoData.findByProductKeyAndDeviceName(
message.getProductKey(), message.getDeviceName());
if (device == null) {
return;
}

View File

@ -1,10 +1,18 @@
/*
* +----------------------------------------------------------------------
* | Copyright (c) 2021-2022 All rights reserved.
* +----------------------------------------------------------------------
* | Licensed
* +----------------------------------------------------------------------
* | Author: xw2sy@163.com
* +----------------------------------------------------------------------
*/
package cc.iotkit.comps.service;
import cc.iotkit.common.Constants;
import cc.iotkit.common.utils.JsonUtil;
import cc.iotkit.dao.DeviceDao;
import cc.iotkit.data.IDeviceInfoData;
import cc.iotkit.data.cache.DeviceCacheService;
import cc.iotkit.model.device.message.DeviceProperty;
import cc.iotkit.model.device.message.ThingModelMessage;
import cc.iotkit.mq.ConsumerHandler;
@ -12,6 +20,7 @@ import cc.iotkit.mq.MqConsumer;
import cc.iotkit.temporal.IDevicePropertyData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@ -33,9 +42,8 @@ public class DevicePropertyConsumer implements ConsumerHandler<ThingModelMessage
@Autowired
private IDevicePropertyData devicePropertyData;
@Autowired
@Qualifier("deviceInfoDataCache")
private IDeviceInfoData deviceInfoData;
@Autowired
private DeviceCacheService deviceCacheService;
@PostConstruct
public void init() {
@ -81,7 +89,7 @@ public class DevicePropertyConsumer implements ConsumerHandler<ThingModelMessage
private void updateDeviceCurrentProperties(String deviceId, Map<String, Object> properties) {
try {
log.info("save device property,deviceId:{},property:{}", deviceId, JsonUtil.toJsonString(properties));
deviceCacheService.saveProperties(deviceId, properties);
deviceInfoData.saveProperties(deviceId, properties);
} catch (Throwable e) {
log.error("save device current properties error", e);
}

0
iot-components/iot-ctwing-component/.DS_Store vendored Normal file → Executable file
View File

6
iot-components/iot-ctwing-component/pom.xml Normal file → Executable file
View File

@ -5,7 +5,7 @@
<parent>
<artifactId>iot-components</artifactId>
<groupId>cc.iotkit</groupId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -82,8 +82,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>

View File

@ -1,3 +1,12 @@
/*
* +----------------------------------------------------------------------
* | Copyright (c) 2021-2022 All rights reserved.
* +----------------------------------------------------------------------
* | Licensed
* +----------------------------------------------------------------------
* | Author: xw2sy@163.com
* +----------------------------------------------------------------------
*/
package cc.iotkit.comp.http;
import cc.iotkit.common.exception.BizException;

View File

@ -1,3 +1,12 @@
/*
* +----------------------------------------------------------------------
* | Copyright (c) 2021-2022 All rights reserved.
* +----------------------------------------------------------------------
* | Licensed
* +----------------------------------------------------------------------
* | Author: xw2sy@163.com
* +----------------------------------------------------------------------
*/
package cc.iotkit.comp.http;
import cc.iotkit.common.utils.HexUtil;

View File

View File

0
iot-components/iot-emqx-component/.DS_Store vendored Normal file → Executable file
View File

View File

@ -3,7 +3,7 @@
<parent>
<artifactId>iot-components</artifactId>
<groupId>cc.iotkit</groupId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>iot-emqx-component</artifactId>
@ -48,8 +48,8 @@
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
@ -82,25 +82,25 @@
<dependency>
<groupId>cc.iotkit</groupId>
<artifactId>iot-model</artifactId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>cc.iotkit</groupId>
<artifactId>iot-dao</artifactId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>cc.iotkit</groupId>
<artifactId>iot-common</artifactId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>cc.iotkit</groupId>
<artifactId>iot-component-base</artifactId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>

6
iot-components/iot-emqx-component/pom.xml Normal file → Executable file
View File

@ -5,7 +5,7 @@
<parent>
<artifactId>iot-components</artifactId>
<groupId>cc.iotkit</groupId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -105,8 +105,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>

Some files were not shown because too many files have changed in this diff Show More