Commit 4cf2eb18 authored by caotao's avatar caotao

1.数据采集服务架构搭建。

parent 799b3501
...@@ -2,7 +2,7 @@ spring.application.name=AMOS-JXIOP-ANALYSE ...@@ -2,7 +2,7 @@ spring.application.name=AMOS-JXIOP-ANALYSE
server.servlet.context-path=/jxiop-analyse server.servlet.context-path=/jxiop-analyse
server.port=33400 server.port=33400
server.uri-encoding=UTF-8 server.uri-encoding=UTF-8
spring.profiles.active=dev spring.profiles.active=dev1
spring.jackson.time-zone=GMT+8 spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
logging.config=classpath:logback-${spring.profiles.active}.xml logging.config=classpath:logback-${spring.profiles.active}.xml
......
...@@ -31,7 +31,41 @@ ...@@ -31,7 +31,41 @@
<!-- <artifactId>amos-boot-biz-common</artifactId>--> <!-- <artifactId>amos-boot-biz-common</artifactId>-->
<!-- <version>1.0.0</version>--> <!-- <version>1.0.0</version>-->
<!-- </dependency>--> <!-- </dependency>-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.typroject</groupId>
<artifactId>tyboot-component-emq</artifactId>
<version>${tyboot-version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>3.2.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.yeejoin.amos.boot.module.das; package com.yeejoin.amos;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
...@@ -9,15 +9,11 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; ...@@ -9,15 +9,11 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.net.InetAddress; import java.net.InetAddress;
...@@ -30,14 +26,13 @@ import java.net.InetAddress; ...@@ -30,14 +26,13 @@ import java.net.InetAddress;
* *
* @author DELL * @author DELL
*/ */
@EnableTransactionManagement
@EnableConfigurationProperties @EnableConfigurationProperties
@ServletComponentScan @ServletComponentScan
@EnableAsync @EnableAsync
@EnableScheduling @EnableScheduling
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class}) @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class})
@MapperScan({"com.yeejoin.amos.boot.module.das.mapper.msyql","com.yeejoin.amos.boot.module.das.mapper.tdengineanalysis","com.yeejoin.amos.boot.module.das.mapper.tdengineiot"}) @MapperScan({"com.yeejoin.amos.boot.module.das.mapper.msyql","com.yeejoin.amos.boot.module.das.mapper.tdengineanalysis","com.yeejoin.amos.boot.module.das.mapper.tdengineiot"})
@ComponentScan({"springfox.documentation.schema", "com.yeejoin.amos.boot.module.das"}) @ComponentScan({"springfox.documentation.schema", "com.yeejoin.amos.boot.module.das","com.yeejoin.amos.boot.module.das.service.impl"})
public class AmosJxiopDasApplication { public class AmosJxiopDasApplication {
......
...@@ -25,11 +25,11 @@ import java.util.Properties; ...@@ -25,11 +25,11 @@ import java.util.Properties;
* 若需要配置更多数据源 , 直接在yml中添加数据源配置再增加相应的新的数据源配置类即可 * 若需要配置更多数据源 , 直接在yml中添加数据源配置再增加相应的新的数据源配置类即可
*/ */
@Configuration @Configuration
@MapperScan(basePackages = "com.yeejoin.amos.boot.module.das.tdengineanalysis", sqlSessionFactoryRef = "clusterSqlSessionFactory") @MapperScan(basePackages = "com.yeejoin.amos.boot.module.das.mapper.analysis", sqlSessionFactoryRef = "clusterSqlSessionFactory")
public class ClusterDbConfig { public class ClusterDbConfig {
private Logger logger = LoggerFactory.getLogger(ClusterDbConfig.class); private Logger logger = LoggerFactory.getLogger(ClusterDbConfig.class);
// 精确到 cluster 目录,以便跟其他数据源隔离 // 精确到 cluster 目录,以便跟其他数据源隔离
private static final String MAPPER_LOCATION = "classpath*:mapper/*.xml"; private static final String MAPPER_LOCATION = "classpath*:mapper/analysis/*.xml";
@Value("${spring.db2.datasource.url}") @Value("${spring.db2.datasource.url}")
...@@ -48,8 +48,7 @@ public class ClusterDbConfig { ...@@ -48,8 +48,7 @@ public class ClusterDbConfig {
@Bean(name = "clusterDataSource2") //声明其为Bean实例 @Bean(name = "clusterDataSource2") //声明其为Bean实例
public DataSource clusterDataSource() { public DataSource clusterDataSource() {
DruidDataSource datasource = new DruidDataSource(); DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(dbUrl);
datasource.setUrl(this.dbUrl);
datasource.setUsername(username); datasource.setUsername(username);
datasource.setPassword(password); datasource.setPassword(password);
datasource.setDriverClassName(driverClassName); datasource.setDriverClassName(driverClassName);
...@@ -68,40 +67,11 @@ public class ClusterDbConfig { ...@@ -68,40 +67,11 @@ public class ClusterDbConfig {
sessionFactory.setDataSource(culsterDataSource); sessionFactory.setDataSource(culsterDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(ClusterDbConfig.MAPPER_LOCATION)); .getResources(ClusterDbConfig.MAPPER_LOCATION));
sessionFactory.setTypeAliasesPackage("com.yeejoin.amos.boot.module.das.entity"); sessionFactory.setTypeAliasesPackage("com.yeejoin.amos.boot.module.das.entity.analysis");
//mybatis 数据库字段与实体类属性驼峰映射配置 //mybatis 数据库字段与实体类属性驼峰映射配置
sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true); sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
//分页插件
Interceptor interceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("helperDialect", "mysql");
properties.setProperty("offsetAsPageNum", "true");
properties.setProperty("rowBoundsWithCount", "true");
properties.setProperty("reasonable", "true");
properties.setProperty("supportMethodsArguments","true");
properties.setProperty("params","pageNum=current;pageSize=size" +
"" +
";");
interceptor.setProperties(properties);
sessionFactory.setPlugins(new Interceptor[] {interceptor,
paginationInterceptor() });
return sessionFactory.getObject(); return sessionFactory.getObject();
} }
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setDialectType("mysql");
return paginationInterceptor;
}
} }
package com.yeejoin.amos.boot.module.das.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* @description:
* @author: tw
* @createDate: 2023/7/3
*/
@Slf4j
@Configuration
@EnableAsync
public class JxiopDasExecutorConfig {
@Bean(name = "jxiopAsyncExecutor")
public Executor asyncServiceExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(30);
//配置最大线程数
executor.setMaxPoolSize(800);
//配置队列大小
executor.setQueueCapacity(5000);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("jxiop");
//线程池维护线程所允许的空闲时间
executor.setKeepAliveSeconds(10);
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行--拒绝策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//执行初始化
executor.initialize();
//等待所有任务结束后再关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
return executor;
}
}
...@@ -26,7 +26,7 @@ public class MasterDbConfig { ...@@ -26,7 +26,7 @@ public class MasterDbConfig {
private Logger logger = LoggerFactory.getLogger(MasterDbConfig.class); private Logger logger = LoggerFactory.getLogger(MasterDbConfig.class);
// 精确到 master 目录,以便跟其他数据源隔离 // 精确到 master 目录,以便跟其他数据源隔离
private static final String MAPPER_LOCATION = "classpath*:mapper/*.xml"; private static final String MAPPER_LOCATION = "classpath*:mapper/mysql/*.xml";
@Value("${spring.db1.datasource.url}") @Value("${spring.db1.datasource.url}")
private String dbUrl; private String dbUrl;
...@@ -66,7 +66,7 @@ public class MasterDbConfig { ...@@ -66,7 +66,7 @@ public class MasterDbConfig {
sessionFactory.setDataSource(masterDataSource); sessionFactory.setDataSource(masterDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(MasterDbConfig.MAPPER_LOCATION)); .getResources(MasterDbConfig.MAPPER_LOCATION));
sessionFactory.setTypeAliasesPackage("com.yeejoin.amos.boot.module.das.entity"); sessionFactory.setTypeAliasesPackage("com.yeejoin.amos.boot.module.das.entity.mysql");
//mybatis 数据库字段与实体类属性驼峰映射配置 //mybatis 数据库字段与实体类属性驼峰映射配置
sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true); sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
......
...@@ -22,11 +22,11 @@ import java.sql.SQLException; ...@@ -22,11 +22,11 @@ import java.sql.SQLException;
* 若需要配置更多数据源 , 直接在yml中添加数据源配置再增加相应的新的数据源配置类即可 * 若需要配置更多数据源 , 直接在yml中添加数据源配置再增加相应的新的数据源配置类即可
*/ */
@Configuration @Configuration
@MapperScan(basePackages = "com.yeejoin.amos.boot.module.das.mapper.tdengineanalysis", sqlSessionFactoryRef = "taosSqlSessionFactory") @MapperScan(basePackages = "com.yeejoin.amos.boot.module.das.mapper.iot", sqlSessionFactoryRef = "taosSqlSessionFactory")
public class TdEngineConfig { public class TdEngineConfig {
private Logger logger = LoggerFactory.getLogger(TdEngineConfig.class); private Logger logger = LoggerFactory.getLogger(TdEngineConfig.class);
// 精确到 cluster 目录,以便跟其他数据源隔离 // 精确到 cluster 目录,以便跟其他数据源隔离
private static final String MAPPER_LOCATION = "classpath*:mapper/*.xml"; private static final String MAPPER_LOCATION = "classpath*:mapper/iot/*.xml";
@Value("${spring.db3.datasource.url}") @Value("${spring.db3.datasource.url}")
...@@ -45,23 +45,10 @@ public class TdEngineConfig { ...@@ -45,23 +45,10 @@ public class TdEngineConfig {
@Bean(name = "taosDataSource") //声明其为Bean实例 @Bean(name = "taosDataSource") //声明其为Bean实例
public DataSource clusterDataSource() { public DataSource clusterDataSource() {
DruidDataSource datasource = new DruidDataSource(); DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(this.dbUrl); datasource.setUrl(this.dbUrl);
datasource.setUsername(username); datasource.setUsername(username);
datasource.setPassword(password); datasource.setPassword(password);
datasource.setDriverClassName(driverClassName); datasource.setDriverClassName(driverClassName);
datasource.setInitialSize(100); // 初始连接数
datasource.setMaxActive(200); // 最大连接数
datasource.setMaxWait(60000); // 最大等待时间
datasource.setMinIdle(5); // 最小空闲连接数
datasource.setValidationQuery("SELECT 1"); // 验证查询
try {
datasource.setFilters("stat");
} catch (SQLException throwables) {
throwables.printStackTrace();
}
datasource.setQueryTimeout(30); // 查询超时时间
datasource.setConnectionProperties("useUnicode=true;characterEncoding=UTF-8"); // 连接属性
return datasource; return datasource;
} }
...@@ -77,7 +64,7 @@ public class TdEngineConfig { ...@@ -77,7 +64,7 @@ public class TdEngineConfig {
sessionFactory.setDataSource(culsterDataSource); sessionFactory.setDataSource(culsterDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(MAPPER_LOCATION)); .getResources(MAPPER_LOCATION));
sessionFactory.setTypeAliasesPackage("com.yeejoin.amos.boot.module.das.entity"); sessionFactory.setTypeAliasesPackage("com.yeejoin.amos.boot.module.das.entity.iot");
//mybatis 数据库字段与实体类属性驼峰映射配置 //mybatis 数据库字段与实体类属性驼峰映射配置
sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true); sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return sessionFactory.getObject(); return sessionFactory.getObject();
......
package com.yeejoin.amos.boot.module.das.entity; package com.yeejoin.amos.boot.module.das.entity.analysis;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -13,17 +13,13 @@ import java.util.Date; ...@@ -13,17 +13,13 @@ import java.util.Date;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class IndicatorData { public class IndicatorData {
private String address; private Date createdTime;
private String gatewayId; private String gatewayId;
private String equipmentsIdx;
private String dataType; private String dataType;
private String isAlarm; private String pointSeq;
private String equipmentSpecificName; private String pointAddress;
private String equipmentIndexName; private String pointLocation;
private String valueLabel; private String pointName;
private String value; private String value="0";
private float valueF; private Double valueF;
private String unit;
private String signalType;
private Date createdTime;
} }
package com.yeejoin.amos.boot.module.das.entity; package com.yeejoin.amos.boot.module.das.entity.iot;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
......
package com.yeejoin.amos.boot.module.das.entity; package com.yeejoin.amos.boot.module.das.entity.mysql;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
......
package com.yeejoin.amos.boot.module.das.mapper.tdengineanalysis; package com.yeejoin.amos.boot.module.das.mapper.analysis;
import com.yeejoin.amos.boot.module.das.entity.IndicatorData; import com.yeejoin.amos.boot.module.das.entity.analysis.IndicatorData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
@Mapper @Component
public interface IndicatorDataMapper { public interface IndicatorDataMapper {
int insertBatch(@Param("list") List<IndicatorData> indicatorDataList, @Param("gatewayId")String gatewayId); int insertBatch(@Param("list") List<IndicatorData> list, @Param("gatewayId")String gatewayId);
void createDB();
void createTable(); void createTable();
} }
package com.yeejoin.amos.boot.module.das.mapper.iot;
import com.yeejoin.amos.boot.module.das.entity.iot.StbDtoData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface TdengineIotDataMapper {
@Select(" select last(`value`) as `value`, point_seq from #{stbName} group by point_seq")
List<StbDtoData> getStbDtoDataByStbName(String stbName);
@Select(" select count(1) from information_schema.ins_tables where stable_name=#{stbName} and db_name ='iot_data_data'")
Long getTtableCount(String stbName);
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.das.mapper.msyql;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.das.entity.FrontGatewayDevicePoints;
public interface FrontGatewayDevicePointsMapper extends BaseMapper<FrontGatewayDevicePoints> {
}
package com.yeejoin.amos.boot.module.das.mapper.mysql;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.das.entity.mysql.FrontGatewayDevicePoints;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface FrontGatewayDevicePointsMapper extends BaseMapper<FrontGatewayDevicePoints> {
@Select("select distinct gateway_id from iot_front_gateway_device_points")
List<String> getGatewayIds();
@Select("select SEQUENCE_NBR,POINT_NAME,POINT_DATA_TYPE,POINT_ADDRESS,POINT_LOCATION from iot_front_gateway_device_points where gateway_id = #{gatewayId}")
List<FrontGatewayDevicePoints> getFrontGatewayDevicePointsByGatewayId(String gatewayId);
}
package com.yeejoin.amos.boot.module.das.mapper.tdengineiot;
import com.yeejoin.amos.boot.module.das.entity.StbDtoData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;
import java.util.List;
@Mapper
public interface TdengineIotDataMapper {
@Select(" select last(`value`) as `value` ,point_seq from iot_data_data.stb_#{gateWayId} group by point_seq")
List<StbDtoData> getStbDtoDataByStbName(String gateWayId);
}
package com.yeejoin.amos.boot.module.das.service; package com.yeejoin.amos.boot.module.das.service;
import org.checkerframework.checker.units.qual.A;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
public interface DasService { public interface DasService {
void dataSolidification();
} }
package com.yeejoin.amos.boot.module.das.service.impl;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.yeejoin.amos.boot.module.das.entity.analysis.IndicatorData;
import com.yeejoin.amos.boot.module.das.entity.mysql.FrontGatewayDevicePoints;
import com.yeejoin.amos.boot.module.das.entity.iot.StbDtoData;
import com.yeejoin.amos.boot.module.das.mapper.mysql.FrontGatewayDevicePointsMapper;
import com.yeejoin.amos.boot.module.das.mapper.analysis.IndicatorDataMapper;
import com.yeejoin.amos.boot.module.das.mapper.iot.TdengineIotDataMapper;
import com.yeejoin.amos.boot.module.das.service.DasService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.component.emq.EmqKeeper;
import java.util.*;
import java.util.stream.Collectors;
@RequiredArgsConstructor
@EnableAsync
@Slf4j
@Service
public class DasServiceImpl implements DasService {
private final FrontGatewayDevicePointsMapper frontGatewayDevicePointsMapper;
// private final EmqKeeper emqKeeper;
private final IndicatorDataMapper indicatorDataMapper;
private final TdengineIotDataMapper tdengineIotDataMapper;
private final List<String> booleans = Arrays.asList("true", "false");
@Scheduled(cron = "0 */3 * * * ?")
@Override
public void dataSolidification() {
Long startTime = System.currentTimeMillis();
indicatorDataMapper.createTable();
List<String> gateWayIds = frontGatewayDevicePointsMapper.getGatewayIds();
gateWayIds.parallelStream().forEach(gatewayId -> {
dataSolidificationByGatewayId(gatewayId);
});
Long endTime = System.currentTimeMillis();
log.info("同步ES数据至TDengine耗时:" + (endTime - startTime) + "ms");
}
@Async("jxiopAsyncExecutor")
public void dataSolidificationByGatewayId(String gatewayId) {
List<FrontGatewayDevicePoints> tempPoints = frontGatewayDevicePointsMapper.getFrontGatewayDevicePointsByGatewayId(gatewayId);
if (!ObjectUtils.isEmpty(tempPoints)) {
Long tableCount = tdengineIotDataMapper.getTtableCount("stb_" + gatewayId);
if (!(tableCount > 0)) {
return;
}
List<StbDtoData> stbDtoDataList = tdengineIotDataMapper.getStbDtoDataByStbName("stb_" + gatewayId);
Map<String, String> stbMap = stbDtoDataList.parallelStream().collect(Collectors.toMap(StbDtoData::getPointSeq, StbDtoData::getValue));
if (stbMap.size() > 0) {
List<IndicatorData> listAll = new ArrayList<>();
tempPoints.stream().forEach(point -> {
IndicatorData indicatorData = new IndicatorData();
indicatorData.setDataType(point.getDataType());
indicatorData.setPointSeq(point.getSequenceNbr().toString());
indicatorData.setPointAddress(point.getPointAddress());
indicatorData.setPointLocation(point.getPointLocation());
indicatorData.setPointName(point.getPointName());
indicatorData.setValue(stbMap.get(point.getSequenceNbr().toString()));
if (!ObjectUtils.isEmpty(indicatorData.getValue()) && !booleans.contains(indicatorData.getValue())) {
try {
indicatorData.setValueF(Double.valueOf(indicatorData.getValue()));
} catch (Exception e) {
e.printStackTrace();
}
}
listAll.add(indicatorData);
});
Lists.partition(listAll, 1000).stream().forEach(
list -> {
indicatorDataMapper.insertBatch(list, gatewayId);
}
);
try {
HashMap<String, String> syncFlag = new HashMap<>();
syncFlag.put("gateway_id", gatewayId);
syncFlag.put("sync_flag", "success");
// emqKeeper.getMqttClient().publish("sync_esdata_to_tdengine_notice", JSON.toJSONString(syncFlag).getBytes(), 0, false);
log.info("同步ES数据至发发送消息给业务发送通知成功!");
} catch (Exception exception) {
log.info("同步ES数据至发发送消息给业务发送通知失败!");
}
}
}
}
}
## db1 - amos-iot-data-view ## db1 - amos-iot-data-view
spring.db1.datasource.type: com.alibaba.druid.pool.DruidDataSource spring.db1.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.db1.datasource.url=jdbc:mysql://10.20.1.157:3306/amos-iot-data-view?allowMultiQueries=true&serverTimezone=GMT%2B8&characterEncoding=utf8 spring.db1.datasource.url=jdbc:mysql://47.92.234.253:3306/amos-iot-data-view?allowMultiQueries=true&serverTimezone=GMT%2B8&characterEncoding=utf8
spring.db1.datasource.username=root spring.db1.datasource.username=root
spring.db1.datasource.password=Yeejoin@2020 spring.db1.datasource.password=Yeejoin@2020
spring.db1.datasource.driver-class-name: com.mysql.cj.jdbc.Driver spring.db1.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
## db2 - analysis_data ## db2 - analysis_data
spring.db2.datasource.type: com.alibaba.druid.pool.DruidDataSource spring.db2.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.db2.datasource.url=jdbc:TAOS-RS://10.20.0.203:6041/analysis_data?user=root&password=taosdata&timezone=GMT%2b8&allowMultiQueries=true spring.db2.datasource.url=jdbc:TAOS-RS://10.20.0.203:6041/analysis_data?user=root&password=taosdata&timezone=GMT%2b8&allowMultiQueries=true
spring.db2.datasource.username=root spring.db2.datasource.username=root
spring.db2.datasource.password=taosdata spring.db2.datasource.password=taosdata
spring.db2.datasource.driver-class-name: com.taosdata.jdbc.rs.RestfulDriver spring.db2.datasource.driver-class-name=com.taosdata.jdbc.rs.RestfulDriver
#spring.db3 iot-data #spring.db3 iot-data
spring.db3.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.db3.datasource.url=jdbc:TAOS-RS://10.20.0.203:6041/iot_data_data?user=root&password=taosdata&timezone=GMT%2b8&allowMultiQueries=true spring.db3.datasource.url=jdbc:TAOS-RS://10.20.0.203:6041/iot_data_data?user=root&password=taosdata&timezone=GMT%2b8&allowMultiQueries=true
spring.db3.datasource.username=root spring.db3.datasource.username=root
spring.db3.datasource.password=taosdata spring.db3.datasource.password=taosdata
spring.db3.datasource.driver-class-name: com.taosdata.jdbc.rs.RestfulDriver spring.db3.datasource.driver-class-name=com.taosdata.jdbc.rs.RestfulDriver
## eureka properties: ## eureka properties:
......
...@@ -13,15 +13,15 @@ mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl ...@@ -13,15 +13,15 @@ mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
### DB properties: ### DB properties:
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.type=com.zaxxer.hikari.HikariDataSource
#spring.datasource.hikari.minimum-idle=10 spring.datasource.hikari.minimum-idle=10
#spring.datasource.hikari.maximum-pool-size=25 spring.datasource.hikari.maximum-pool-size=25
#spring.datasource.hikari.auto-commit=true spring.datasource.hikari.auto-commit=true
#spring.datasource.hikari.idle-timeout=30000 spring.datasource.hikari.idle-timeout=30000
#spring.datasource.hikari.pool-name=DatebookHikariCP spring.datasource.hikari.pool-name=DatebookHikariCP
#spring.datasource.hikari.max-lifetime=120000 spring.datasource.hikari.max-lifetime=120000
#spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.connection-timeout=30000
#spring.datasource.hikari.connection-test-query=SELECT 1 spring.datasource.hikari.connection-test-query=SELECT 1
#JPA Configuration: #JPA Configuration:
spring.jpa.show-sql=false spring.jpa.show-sql=false
spring.jpa.open-in-view=true spring.jpa.open-in-view=true
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.das.mapper.tdengineanalysis.IndicatorDataMapper">
<!--创建数据库,指定压缩比-->
<update id="createDB">
create database if not exists iot_data vgroups 10 buffer 10 COMP 2 PRECISION 'ns';
</update>
<!--创建超级表-->
<update id="createTable">
create STABLE if not exists s_indicator_his
(created_time timestamp,
address binary(64),
equipments_idx NCHAR(64),
data_type NCHAR(12),
is_alarm BIGINT,
equipment_index_name VARCHAR(200) ,
equipment_specific_name VARCHAR(200),
`value` VARCHAR(12),
`value_f` float,
value_label VARCHAR(24),
unit NCHAR(12))
TAGS (gateway_id binary(64));
</update>
<insert id="insertBatch" parameterType="java.util.List">
insert into
<foreach separator=" " collection="list" item="item" index="index">
indicator_his_#{gatewayId,jdbcType=VARCHAR} USING s_indicator_his
TAGS (#{item.gatewayId,jdbcType=VARCHAR})
VALUES (NOW + #{index}a,
#{item.address,jdbcType=VARCHAR},
#{item.equipmentsIdx,jdbcType=VARCHAR},
#{item.dataType,jdbcType=VARCHAR},
#{item.isAlarm,jdbcType=VARCHAR},
#{item.equipmentSpecificName,jdbcType=VARCHAR},
#{item.equipmentIndexName,jdbcType=VARCHAR},
#{item.value,jdbcType=VARCHAR},
#{item.valueF,jdbcType=FLOAT},
#{item.valueLabel,jdbcType=VARCHAR},
#{item.unit,jdbcType=VARCHAR})
</foreach>
</insert>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.das.mapper.analysis.IndicatorDataMapper">
<!--创建超级表-->
<update id="createTable">
create STABLE if not exists indicator_data
(created_time timestamp,
data_type NCHAR(12),
point_seq VARCHAR(100) ,
point_address VARCHAR(100) ,
point_location VARCHAR(500) ,
point_name VARCHAR(200),
`value` VARCHAR(50),
`value_f` float)
TAGS (gateway_id binary(64));
</update>
<insert id="insertBatch" parameterType="java.util.List">
insert into
<foreach separator=" " collection="list" item="item" index="index">
indicator_data_#{gatewayId,jdbcType=VARCHAR} USING indicator_data
TAGS (#{gatewayId,jdbcType=VARCHAR})
VALUES (NOW + #{index}a,
#{item.dataType,jdbcType=VARCHAR},
#{item.pointSeq,jdbcType=VARCHAR},
#{item.pointAddress,jdbcType=VARCHAR},
#{item.pointLocation,jdbcType=VARCHAR},
#{item.pointName,jdbcType=VARCHAR},
#{item.value,jdbcType=VARCHAR},
#{item.valueF,jdbcType=FLOAT})
</foreach>
</insert>
</mapper>
\ No newline at end of file
spring.application.name=AMOS-JXIOP-MONITOR-cz spring.application.name=AMOS-JXIOP-MONITOR-CT
server.servlet.context-path=/jxiop-monitor server.servlet.context-path=/jxiop-monitor
server.port=33200 server.port=33200
server.uri-encoding=UTF-8 server.uri-encoding=UTF-8
spring.profiles.active=dev spring.profiles.active=dev1
spring.jackson.time-zone=GMT+8 spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
logging.config=classpath:logback-${spring.profiles.active}.xml #logging.config=classpath:logback-${spring.profiles.active}.xml
## mybatis-plus配置控制台打印完整带参数SQL语句 ## mybatis-plus配置控制台打印完整带参数SQL语句
...@@ -30,8 +30,8 @@ spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.Im ...@@ -30,8 +30,8 @@ spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.Im
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
##liquibase ##liquibase
spring.liquibase.change-log=classpath:/db/changelog/changelog-master.xml #spring.liquibase.change-log=classpath:/db/changelog/changelog-master.xml
spring.liquibase.enabled=false #spring.liquibase.enabled=false
## eureka properties: ## eureka properties:
......
...@@ -103,6 +103,12 @@ ...@@ -103,6 +103,12 @@
<artifactId>pooled-jms</artifactId> <artifactId>pooled-jms</artifactId>
<version>1.0.5</version> <version>1.0.5</version>
</dependency> </dependency>
<dependency>
<groupId>com.amosframework.boot</groupId>
<artifactId>amos-boot-module-jxiop-das</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment