influxdb简单学习
首先得装influxdb,其次操作如下。
application.properties
spring.datasource.test1.jdbc-url=jdbc:mysql://localhost:3306/spms-prod?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=UTF-8 spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver spring.datasource.test1.username=root spring.datasource.test1.password=root spring.datasource.test2.jdbc-url=jdbc:oracle:thin:@localhost:1521:orcl spring.datasource.test2.driver-class-name=oracle.jdbc.driver.OracleDriver spring.datasource.test2.username=SYSTEM spring.datasource.test2.password=root #spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.use-lock=true server.port=8089 mybatis.mapper-locations= classpath*:mapper/*/*.xml mybatis.type-aliases-package=com.hainei.dao.* pagehelper.helper-dialect=mysql pagehelper.reasonable=true pagehelper.support-methods-arguments=true pagehelper.params=count=countSql #??????sql???????????????????? #mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl #????????????????? #jasypt.encryptor.password=zheTang spring.jackson.time-zone= GMT+8 #influxDB influxDBUserName=admin influxDBPassword= hainei1205 influxDBOpenurl=http://192.168.1.145:8086 influxDBDatabase= newopc opcIp: 192.168.100.231 opcUserName: Administrator opcPassWord: Abc.123+ opcCode: D66FD91F-927D-47df-B074-EB2CD3F85C18

influxdb中的模块
schedule
package com.hainei.influxdb.schedule; import com.hainei.influxdb.utils.InfluxDBConnection; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; /** * Created with IntelliJ IDEA. * User: lzx * Date: 2019/9/26 * Time: 17:41 * Description: No Description */ @Component @PropertySource({"classpath:application.properties"}) public class PointSchedule { @Value("${influxDBUserName}") private String influxDBUserName ; @Value("${influxDBPassword}") private String influxDBPassword ; @Value("${influxDBOpenurl}") private String influxDBOpenurl ; @Value("${influxDBDatabase}") private String influxDBDatabase ; //@Scheduled(cron = "*/5 * * * * *") public void simulate(String tag,String pointId,String value,String status,Long times){ // InfluxDBConnection influxDBConnection = new InfluxDBConnection("admin", "admin2", "http://10.100.10.127:8086", "opc", null); InfluxDBConnection influxDBConnection = new InfluxDBConnection(influxDBUserName, influxDBPassword, influxDBOpenurl, influxDBDatabase, null); Map<String, String> tags = new HashMap<String, String>(); tags.put("tag1", tag); Map<String, Object> fields = new HashMap<String, Object>(); fields.put("pointId", pointId); fields.put("pointValue", value); fields.put("status", status); fields.put("times", times); influxDBConnection.insert("opc", tags, fields, System.currentTimeMillis(), TimeUnit.MILLISECONDS); } public static void main(String[] args){ new Thread() { @Override public void run() { while (true) { System.out.println(2); for(int i = 0;i<100;i++){ double v = (1 + Math.random() * (10 - 1 + 1)); InfluxDBConnection influxDBConnection = new InfluxDBConnection("admin", "admin2", "http://192.168.1.145:8086", "newopc", null); Map<String, String> tags = new HashMap<String, String>(); tags.put("tag1", "TIA_70"+i); Map<String, Object> fields = new HashMap<String, Object>(); fields.put("pointId", "TIA_70"+i); fields.put("pointValue", ""+v); fields.put("status", "good"); fields.put("times", new Date().getTime()); influxDBConnection.insert("opc", tags, fields, System.currentTimeMillis(), TimeUnit.MILLISECONDS); } try { Thread.sleep(10000); //设置暂停的时间,5000=5秒 } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } }
service
package com.hainei.influxdb.schedule; import com.hainei.influxdb.utils.InfluxDBConnection; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; /** * Created with IntelliJ IDEA. * User: lzx * Date: 2019/9/26 * Time: 17:41 * Description: No Description */ @Component @PropertySource({"classpath:application.properties"}) public class PointSchedule { @Value("${influxDBUserName}") private String influxDBUserName ; @Value("${influxDBPassword}") private String influxDBPassword ; @Value("${influxDBOpenurl}") private String influxDBOpenurl ; @Value("${influxDBDatabase}") private String influxDBDatabase ; //@Scheduled(cron = "*/5 * * * * *") public void simulate(String tag,String pointId,String value,String status,Long times){ // InfluxDBConnection influxDBConnection = new InfluxDBConnection("admin", "admin2", "http://10.100.10.127:8086", "opc", null); InfluxDBConnection influxDBConnection = new InfluxDBConnection(influxDBUserName, influxDBPassword, influxDBOpenurl, influxDBDatabase, null); Map<String, String> tags = new HashMap<String, String>(); tags.put("tag1", tag); Map<String, Object> fields = new HashMap<String, Object>(); fields.put("pointId", pointId); fields.put("pointValue", value); fields.put("status", status); fields.put("times", times); influxDBConnection.insert("opc", tags, fields, System.currentTimeMillis(), TimeUnit.MILLISECONDS); } public static void main(String[] args){ new Thread() { @Override public void run() { while (true) { System.out.println(2); for(int i = 0;i<100;i++){ double v = (1 + Math.random() * (10 - 1 + 1)); InfluxDBConnection influxDBConnection = new InfluxDBConnection("admin", "admin2", "http://192.168.1.145:8086", "newopc", null); Map<String, String> tags = new HashMap<String, String>(); tags.put("tag1", "TIA_70"+i); Map<String, Object> fields = new HashMap<String, Object>(); fields.put("pointId", "TIA_70"+i); fields.put("pointValue", ""+v); fields.put("status", "good"); fields.put("times", new Date().getTime()); influxDBConnection.insert("opc", tags, fields, System.currentTimeMillis(), TimeUnit.MILLISECONDS); } try { Thread.sleep(10000); //设置暂停的时间,5000=5秒 } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } }
utils
package com.hainei.influxdb.utils; import okhttp3.OkHttpClient; import org.influxdb.InfluxDB; import org.influxdb.InfluxDBFactory; import org.influxdb.dto.*; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; /** * FileName: InfluxDBConnection * Author: Administrator * Date: 2019/7/30 9:20 * Description: influxDb工具类 */ public class InfluxDBConnection { // 用户名 private String username; // 密码 private String password; // 连接地址 private String openurl; // 数据库 private String database; // 保留策略 private String retentionPolicy; private InfluxDB influxDB; public InfluxDBConnection(String username, String password, String openurl, String database, String retentionPolicy) { this.username = username; this.password = password; this.openurl = openurl; this.database = database; this.retentionPolicy = retentionPolicy == null || retentionPolicy.equals("") ? "autogen" : retentionPolicy; influxDbBuild(); } /** * 创建数据库 * * @param dbName */ @SuppressWarnings("deprecation") public void createDB(String dbName) { influxDB.createDatabase(dbName); } /** * 删除数据库 * * @param dbName */ @SuppressWarnings("deprecation") public void deleteDB(String dbName) { influxDB.deleteDatabase(dbName); } /** * 测试连接是否正常 * * @return true 正常 */ public boolean ping() { boolean isConnected = false; Pong pong; try { pong = influxDB.ping(); if (pong != null) { isConnected = true; } } catch (Exception e) { e.printStackTrace(); } return isConnected; } /** * 连接时序数据库 ,若不存在则创建 * * @return */ public InfluxDB influxDbBuild() { if (influxDB == null) { influxDB = InfluxDBFactory.connect(openurl, username, password); } try { // if (!influxDB.databaseExists(database)) { // influxDB.createDatabase(database); // } } catch (Exception e) { // 该数据库可能设置动态代理,不支持创建数据库 // e.printStackTrace(); } finally { influxDB.setRetentionPolicy(retentionPolicy); } influxDB.setLogLevel(InfluxDB.LogLevel.NONE); return influxDB; } /** * 创建自定义保留策略 * * @param policyName * 策略名 * @param duration * 保存天数 * @param replication * 保存副本数量 * @param isDefault * 是否设为默认保留策略 */ public void createRetentionPolicy(String policyName, String duration, int replication, Boolean isDefault) { String sql = String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s ", policyName, database, duration, replication); if (isDefault) { sql = sql + " DEFAULT"; } this.query(sql); } /** * 创建默认的保留策略 * 策略名 * @param :default,保存天数:30天,保存副本数量:1 * 设为默认保留策略 */ public void createDefaultRetentionPolicy() { String command = String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s DEFAULT", "default", database, "30d", 1); this.query(command); } /** * 查询 * * @param command * 查询语句 * @return */ public QueryResult query(String command) { return influxDB.query(new Query(command, database)); } /** * 插入 * * @param measurement * 表 * @param tags * 标签 * @param fields * 字段 */ public void insert(String measurement, Map<String, String> tags, Map<String, Object> fields, long time, TimeUnit timeUnit) { Point.Builder builder = Point.measurement(measurement); builder.tag(tags); builder.fields(fields); if (0 != time) { builder.time(time, timeUnit); } influxDB.write(database, retentionPolicy, builder.build()); } /** * 批量写入测点 * * @param batchPoints */ public void batchInsert(BatchPoints batchPoints) { influxDB.write(batchPoints); // influxDB.enableGzip(); // influxDB.enableBatch(2000,100,TimeUnit.MILLISECONDS); // influxDB.disableGzip(); // influxDB.disableBatch(); } /** * 批量写入数据 * * @param database * 数据库 * @param retentionPolicy * 保存策略 * @param consistency * 一致性 * @param records * 要保存的数据(调用BatchPoints.lineProtocol()可得到一条record) */ public void batchInsert(final String database, final String retentionPolicy, final InfluxDB.ConsistencyLevel consistency, final List<String> records) { influxDB.write(database, retentionPolicy, consistency, records); } /** * 删除 * * @param command * 删除语句 * @return 返回错误信息 */ public String deleteMeasurementData(String command) { QueryResult result = influxDB.query(new Query(command, database)); return result.getError(); } /** * 关闭数据库 */ public void close() { influxDB.close(); } /** * 构建Point * * @param measurement * @param time * @param fields * @return */ public Point pointBuilder(String measurement, long time, Map<String, String> tags, Map<String, Object> fields) { Point point = Point.measurement(measurement).time(time, TimeUnit.MILLISECONDS).tag(tags).fields(fields).build(); return point; } }
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.hainei</groupId> <artifactId>getoracle</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>getoracle</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <java.encoding>UTF-8</java.encoding> <junit-version>4.11</junit-version> <jar-no-version-redefined-version>2.0.0.RELEASE</jar-no-version-redefined-version> <pom-version>3.10-FINAL</pom-version> <spring-version>4.0.7.RELEASE</spring-version> <servlet-version>2.5</servlet-version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <jar.scope>compile</jar.scope> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- jackson --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <!--引入pageHelper分页插件 --> <!--mybatis分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.6</version> </dependency> <!--引入第三方数据源--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.43</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc7</artifactId> <version>12.2.0.1</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Jackson --> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-guava</artifactId> <version>2.5.3</version> </dependency> <!-- tools --> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency> <!--<dependency>--> <!--<groupId>org.quartz-scheduler</groupId>--> <!--<artifactId>quartz</artifactId>--> <!--<version>1.8.4</version>--> <!--</dependency>--> <!--多数据源--> <dependency> <groupId>org.influxdb</groupId> <artifactId>influxdb-java</artifactId> <version>2.15</version> </dependency> <dependency> <groupId>org.opentsdb.opc</groupId> <artifactId>lib</artifactId> <version>1.3.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.jinterop.dcom</groupId> <artifactId>common</artifactId> <version>2.0.4</version> </dependency> <!--<!–kie api 构建kie虚拟文件系统,关联decisiontable和drl文件,很关键 –>--> <!--<dependency>--> <!--<groupId>org.kie</groupId>--> <!--<artifactId>kie-api</artifactId>--> <!--</dependency>--> <!--<!– 规则引擎核心包,里面包含了RETE引擎和LEAPS 引擎–>--> <!--<dependency>--> <!--<groupId>org.drools</groupId>--> <!--<artifactId>drools-core</artifactId>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.drools</groupId>--> <!--<artifactId>drools-compiler</artifactId>--> <!--</dependency>--> <!--<!– 决策表依赖–>--> <!--<dependency>--> <!--<groupId>org.drools</groupId>--> <!--<artifactId>drools-decisiontables</artifactId>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.drools</groupId>--> <!--<artifactId>drools-templates</artifactId>--> <!--</dependency>--> <!--导出poi的需要的工具类--> <!--<dependency>--> <!--<groupId>org.apache.poi</groupId>--> <!--<artifactId>poi</artifactId>--> <!--<version>3.0-FINAL</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.apache.poi</groupId>--> <!--<artifactId>poi-ooxml</artifactId>--> <!--<version>4.0.1</version>--> <!--</dependency>--> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>1.16</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.1.5.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <!--activiti--> <!--<dependency>--> <!--<groupId>org.activiti</groupId>--> <!--<artifactId>activiti-spring-boot-starter-basic</artifactId>--> <!--<version>5.22.0</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.activiti</groupId>--> <!--<artifactId>activiti-modeler</artifactId>--> <!--<version>5.22.0</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.activiti</groupId>--> <!--<artifactId>activiti-diagram-rest</artifactId>--> <!--<version>5.22.0</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.aspectj</groupId>--> <!--<artifactId>aspectjweaver</artifactId>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>com.alibaba</groupId>--> <!--<artifactId>druid-spring-boot-starter</artifactId>--> <!--<version>${druid.version}</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.quartz-scheduler</groupId>--> <!--<artifactId>quartz</artifactId>--> <!--<version>${quartz.version}</version>--> <!--<exclusions>--> <!--<exclusion>--> <!--<groupId>com.mchange</groupId>--> <!--<artifactId>c3p0</artifactId>--> <!--</exclusion>--> <!--</exclusions>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>commons-fileupload</groupId>--> <!--<artifactId>commons-fileupload</artifactId>--> <!--<version>${commons.fileupload.version}</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>commons-io</groupId>--> <!--<artifactId>commons-io</artifactId>--> <!--<version>${commons.io.version}</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>io.springfox</groupId>--> <!--<artifactId>springfox-swagger2</artifactId>--> <!--<version>${swagger.version}</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>io.springfox</groupId>--> <!--<artifactId>springfox-swagger-ui</artifactId>--> <!--<version>${swagger.version}</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-starter-websocket</artifactId>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>commons-beanutils</groupId>--> <!--<artifactId>commons-beanutils</artifactId>--> <!--<version>${commons.beanutils.version}</version>--> <!--</dependency>--> <!--<!– https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 –>--> <!--<dependency>--> <!--<groupId>org.apache.commons</groupId>--> <!--<artifactId>commons-collections4</artifactId>--> <!--<version>${commons.collections4.version}</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>com.aspose</groupId>--> <!--<artifactId>cells</artifactId>--> <!--<version>${aspose.cells.version}</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>com.aspose</groupId>--> <!--<artifactId>words</artifactId>--> <!--<version>${aspose.words.version}</version>--> <!--</dependency>--> <!--图片压缩,缩放--> <!--<dependency>--> <!--<groupId>net.coobird</groupId>--> <!--<artifactId>thumbnailator</artifactId>--> <!--<version>${net.coobird.thumbnailator.version}</version>--> <!--</dependency>--> <!--<!–restTemplate访问https–>--> <!--<dependency>--> <!--<groupId>org.apache.httpcomponents</groupId>--> <!--<artifactId>httpclient</artifactId>--> <!--<version>${org.apache.httpcomponents.version}</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.apache.ant</groupId>--> <!--<artifactId>ant</artifactId>--> <!--<version>${org.apache.ant.version}</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.apache.ant</groupId>--> <!--<artifactId>ant</artifactId>--> <!--<version>1.8.4</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>com.baomidou</groupId>--> <!--<artifactId>mybatisplus-spring-boot-starter</artifactId>--> <!--<version>1.0.4</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>com.baomidou</groupId>--> <!--<artifactId>mybatis-plus</artifactId>--> <!--<version>2.0.7</version>--> <!--</dependency>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> <version>1.4.0.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servlet-version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.7.0</version> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> <scope>compile</scope> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.1</version> <scope>compile</scope> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> <scope>compile</scope> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> <scope>${jar.scope}</scope> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> <scope>${jar.scope}</scope> </dependency> <dependency> <groupId>net.sf.ezmorph</groupId> <artifactId>ezmorph</artifactId> <version>1.0.6</version> <scope>${jar.scope}</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
influxDBUtil
package com.hainei.service.impl.point; import com.hainei.common.enums.OpcStatus; import com.hainei.common.influxdb.InfluxDBConnection; import com.hainei.mapper.point.PointOpcDataMapper; import com.hainei.pojo.model.point.EmulatorInfo; import com.hainei.pojo.model.point.PointOpcData; import org.influxdb.InfluxDB; import org.influxdb.dto.Point; import org.influxdb.dto.Query; import org.influxdb.dto.QueryResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** * @Author: WangJunsa * @Date: 2020/5/14 14:45 * @Version 1.0 */ @Component public class InfluxDBUtil { @Value("${spring.influx.userName}") private String userName; @Value("${spring.influx.password}") private String password; @Value("${spring.influx.url}") private String url; @Value("${spring.influx.database}") private String database; @Autowired private InfluxDB influxDB; /** * 查询检测点的1个点值 * @param pointid * @return */ public Map selectInfkyxdb(String pointid){ String sql ="SELECT * FROM opc where tag1='"+pointid+"' order by time desc limit 1 "; Map mapmap =new HashMap(); Query query = new Query(sql, database); influxDB.setLogLevel(InfluxDB.LogLevel.BASIC); QueryResult.Result oneResult= influxDB.query(query, TimeUnit.MILLISECONDS).getResults().get(0); if (oneResult.getSeries() != null) { List<List<Object>> valueList = oneResult.getSeries().stream().map(QueryResult.Series::getValues) .collect(Collectors.toList()).get(0); if (valueList != null && valueList.size() > 0) { for (List<Object> value : valueList) { Map<String, String> map = new HashMap<String, String>(); // 数据库中字段1取值 String field0 = value.get(0) == null ? null : value.get(0).toString(); String field1 = value.get(1) == null ? null : value.get(1).toString(); String field2 = value.get(2) == null ? null : value.get(2).toString(); String field3 = value.get(3) == null ? null : value.get(3).toString(); String field4 = value.get(4) == null ? null : value.get(4).toString(); String field5 = value.get(5) == null ? null : value.get(5).toString(); // TODO 用取出的字段做你自己的业务逻辑…… mapmap.put("time",field0); mapmap.put("alarmStatus",field1); mapmap.put("status",field2); mapmap.put("sensorNumber",field3); mapmap.put("value",field5); mapmap.put("times",field4); } } }else{ mapmap.put("time",""); mapmap.put("alarmStatus",""); mapmap.put("sensorNumber",pointid); mapmap.put("value",""); mapmap.put("status",""); mapmap.put("times",""); } return mapmap; } /** * 查询检测点的1w个点值 * @param pointid * @return */ public List<Map> selectInfkyxdbAll(String pointid){ List<Map> list = new ArrayList(); String sql ="SELECT * FROM opc where tag1='"+pointid+"' order by time desc limit 10000"; Query query = new Query(sql, database); influxDB.setLogLevel(InfluxDB.LogLevel.BASIC); QueryResult.Result oneResult = influxDB.query(query, TimeUnit.MILLISECONDS).getResults().get(0); if (oneResult.getSeries() != null) { List<List<Object>> valueList = oneResult.getSeries().stream().map(QueryResult.Series::getValues) .collect(Collectors.toList()).get(0); if (valueList != null && valueList.size() > 0) { for (List<Object> value : valueList) { Map mapmap =new HashMap(); Map<String, String> map = new HashMap<String, String>(); // 数据库中字段1取值 String field0 = value.get(0) == null ? null : value.get(0).toString(); String field1 = value.get(1) == null ? null : value.get(1).toString(); String field2 = value.get(2) == null ? null : value.get(2).toString(); String field3 = value.get(3) == null ? null : value.get(3).toString(); String field4 = value.get(4) == null ? null : value.get(4).toString(); String field5 = value.get(5) == null ? null : value.get(5).toString(); // TODO 用取出的字段做你自己的业务逻辑…… mapmap.put("time",field0); mapmap.put("alarmStatus",field1); mapmap.put("status",field2); mapmap.put("sensorNumber",field3); mapmap.put("value",field5); mapmap.put("times",field4); list.add(mapmap); } } } return list; } /** * 查询检测点的10个点值 * @param pointid * @return */ public List<Map> selectInfkyxdbTen(String pointid){ List<Map> list = new ArrayList(); String sql = "SELECT * FROM opc where tag1='"+pointid+"' order by time desc limit 10 "; Query query = new Query(sql, database); influxDB.setLogLevel(InfluxDB.LogLevel.BASIC); QueryResult.Result oneResult = influxDB.query(query, TimeUnit.MILLISECONDS).getResults().get(0); if (oneResult.getSeries() != null) { List<List<Object>> valueList = oneResult.getSeries().stream().map(QueryResult.Series::getValues) .collect(Collectors.toList()).get(0); if (valueList != null && valueList.size() > 0) { for (List<Object> value : valueList) { Map mapmap =new HashMap(); Map<String, String> map = new HashMap<String, String>(); // 数据库中字段1取值 String field0 = value.get(0) == null ? null : value.get(0).toString(); String field1 = value.get(1) == null ? null : value.get(1).toString(); String field2 = value.get(2) == null ? null : value.get(2).toString(); String field3 = value.get(3) == null ? null : value.get(3).toString(); String field4 = value.get(4) == null ? null : value.get(4).toString(); String field5 = value.get(5) == null ? null : value.get(5).toString(); // TODO 用取出的字段做你自己的业务逻辑…… mapmap.put("time",field0); mapmap.put("alarmStatus",field1); mapmap.put("status",field2); mapmap.put("sensorNumber",field3); mapmap.put("value",field5); mapmap.put("times",field4); list.add(mapmap); } } } return list; } // /** // * 查询检测点的1个点值 // * @param pointid // * @return // */ // public Map selectInfkyxdb(String pointid){ // Map mapmap =new HashMap(); // InfluxDBConnection influxDBConnection = new InfluxDBConnection(userName, password, url, database, "hour"); // QueryResult results = influxDBConnection // .query("SELECT * FROM opc where tag1='"+pointid+"' order by time desc limit 1 "); // //System.out.println("SELECT * FROM opc where pointId='"+pointid+"' order by time desc limit 1 "); // //results.getResults()是同时查询多条SQL语句的返回值,此处我们只有一条SQL,所以只取第一个结果集即可。 // QueryResult.Result oneResult = results.getResults().get(0); // // if (oneResult.getSeries() != null) { // List<List<Object>> valueList = oneResult.getSeries().stream().map(QueryResult.Series::getValues) // .collect(Collectors.toList()).get(0); // if (valueList != null && valueList.size() > 0) { // for (List<Object> value : valueList) { // Map<String, String> map = new HashMap<String, String>(); // // 数据库中字段1取值 // String field0 = value.get(0) == null ? null : value.get(0).toString(); // String field1 = value.get(1) == null ? null : value.get(1).toString(); // String field2 = value.get(2) == null ? null : value.get(2).toString(); // String field3 = value.get(3) == null ? null : value.get(3).toString(); // String field4 = value.get(4) == null ? null : value.get(4).toString(); // String field5 = value.get(5) == null ? null : value.get(5).toString(); // // TODO 用取出的字段做你自己的业务逻辑…… // // mapmap.put("time",field0); // mapmap.put("alarmStatus",field1); // mapmap.put("status",field2); // mapmap.put("sensorNumber",field3); // mapmap.put("value",field5); // mapmap.put("times",field4); // // } // } // }else{ // mapmap.put("time",""); // mapmap.put("alarmStatus",""); // mapmap.put("sensorNumber",pointid); // mapmap.put("value",""); // mapmap.put("status",""); // mapmap.put("times",""); // } // return mapmap; // } // // // /** // * 查询检测点的1w个点值 // * @param pointid // * @return // */ // public List<Map> selectInfkyxdbAll(String pointid){ // List<Map> list = new ArrayList(); // // InfluxDBConnection influxDBConnection = new InfluxDBConnection(userName, password, url, database, "hour"); // QueryResult results = influxDBConnection.query("SELECT * FROM opc where tag1='"+pointid+"' order by time desc limit 10000 "); // // QueryResult.Result oneResult = results.getResults().get(0); // // if (oneResult.getSeries() != null) { // List<List<Object>> valueList = oneResult.getSeries().stream().map(QueryResult.Series::getValues) // .collect(Collectors.toList()).get(0); // if (valueList != null && valueList.size() > 0) { // for (List<Object> value : valueList) { // Map mapmap =new HashMap(); // Map<String, String> map = new HashMap<String, String>(); // // 数据库中字段1取值 // String field0 = value.get(0) == null ? null : value.get(0).toString(); // String field1 = value.get(1) == null ? null : value.get(1).toString(); // String field2 = value.get(2) == null ? null : value.get(2).toString(); // String field3 = value.get(3) == null ? null : value.get(3).toString(); // String field4 = value.get(4) == null ? null : value.get(4).toString(); // String field5 = value.get(5) == null ? null : value.get(5).toString(); // // TODO 用取出的字段做你自己的业务逻辑…… // // mapmap.put("time",field0); // mapmap.put("alarmStatus",field1); // mapmap.put("status",field2); // mapmap.put("sensorNumber",field3); // mapmap.put("value",field5); // mapmap.put("times",field4); // list.add(mapmap); // // } // } // } // return list; // } // // /** // * 查询检测点的10个点值 // * @param pointid // * @return // */ // public List<Map> selectInfkyxdbTen(String pointid){ // List<Map> list = new ArrayList(); // // InfluxDBConnection influxDBConnection = new InfluxDBConnection(userName, password, url, database, "hour"); // QueryResult results = influxDBConnection.query("SELECT * FROM opc where tag1='"+pointid+"' order by time desc limit 10 "); // // QueryResult.Result oneResult = results.getResults().get(0); // // if (oneResult.getSeries() != null) { // List<List<Object>> valueList = oneResult.getSeries().stream().map(QueryResult.Series::getValues) // .collect(Collectors.toList()).get(0); // if (valueList != null && valueList.size() > 0) { // for (List<Object> value : valueList) { // Map mapmap =new HashMap(); // Map<String, String> map = new HashMap<String, String>(); // // 数据库中字段1取值 // String field0 = value.get(0) == null ? null : value.get(0).toString(); // String field1 = value.get(1) == null ? null : value.get(1).toString(); // String field2 = value.get(2) == null ? null : value.get(2).toString(); // String field3 = value.get(3) == null ? null : value.get(3).toString(); // String field4 = value.get(4) == null ? null : value.get(4).toString(); // String field5 = value.get(5) == null ? null : value.get(5).toString(); // // TODO 用取出的字段做你自己的业务逻辑…… // // mapmap.put("time",field0); // mapmap.put("alarmStatus",field1); // mapmap.put("status",field2); // mapmap.put("sensorNumber",field3); // mapmap.put("value",field5); // mapmap.put("times",field4); // list.add(mapmap); // // } // } // } // return list; // } // /** // * 给模拟器生成值 // * @param info // */ // public void setValue(EmulatorInfo info) { // InfluxDBConnection influxDBConnection = new InfluxDBConnection(userName, password, url, database, null); // Random rand = new Random(); // int pow = (int) Math.pow(10, 2); // Map<String, String> tags = new HashMap<String, String>(); // tags.put("tag1", info.getSensorNumber()); // Map<String, Object> fields = new HashMap<String, Object>(); // // Integer num = rand.nextInt(9); // //10分之一的概率 // if (num == 3 && info.getIsSimulate() == true) { // //监测量 // if (info.getType() == 0) { // fields.put("value", info.getMaximum().doubleValue() + num); // String s = firstAlarm(info.getSensorNumber(), info.getMaximum().doubleValue() + num); // fields.put("alarmStatus", s); // } else if (info.getType() == 1) { // //开关量 // fields.put("value", info.getNormalValue() == 1 ? 0d: 1d); // String s = firstAlarm(info.getSensorNumber(),info.getNormalValue() == 1 ? 0d : 1d); // fields.put("alarmStatus", s); // } // } else { // //监测量 // if (info.getType() == 0) { // double currentValue = Math.floor((rand.nextFloat() * (info.getMaximum().floatValue() - info.getMinimum().floatValue()) + info.getMinimum().floatValue()) * pow) / pow; // fields.put("value", currentValue); // String s =firstAlarm(info.getSensorNumber(),currentValue); //// fields.put("alarmStatus", s); // } else if (info.getType() == 1) { // //开关量 // fields.put("value", info.getNormalValue().doubleValue()); // String s =firstAlarm(info.getSensorNumber(),info.getNormalValue().doubleValue()); // fields.put("alarmStatus", s); // } // } // // fields.put("status", "good"); // fields.put("times", new Date().getTime()); // influxDBConnection.insert("opc", tags, fields, System.currentTimeMillis(), TimeUnit.MILLISECONDS); // } /** * 给模拟器生成值 * @param info */ public void setValue(EmulatorInfo info) { Random rand = new Random(); int pow = (int) Math.pow(10, 2); Point.Builder builder = Point.measurement("opc"); builder.tag("tag1", info.getSensorNumber()); Integer num = rand.nextInt(9); //10分之一的概率 if ( num == 3 && info.getIsSimulate() == true) { //监测量 if (info.getType() == 0) { builder.addField("value", info.getMaximum().floatValue()+num); String s =firstAlarm(info.getSensorNumber(),info.getMaximum().doubleValue() + num); builder.addField("alarmStatus", s); }else if (info.getType() == 1) { //开关量 builder.addField("value", info.getNormalValue() == 1 ? 0d : 1d); String s =firstAlarm(info.getSensorNumber(),info.getMaximum().doubleValue() + num); builder.addField("alarmStatus", s); } }else { //监测量 if (info.getType() == 0) { double currentValue = Math.floor((rand.nextFloat() * (info.getMaximum().floatValue()-info.getMinimum().floatValue())+info.getMinimum().floatValue()) * pow) / pow; builder.addField("value",currentValue ); String s =firstAlarm(info.getSensorNumber(),currentValue); builder.addField("alarmStatus", s); } else if (info.getType() == 1) { //开关量 builder.addField("value", info.getNormalValue().floatValue()); String s =firstAlarm(info.getSensorNumber(),info.getNormalValue().doubleValue()); builder.addField("alarmStatus", s); } } builder.addField("status", "good"); builder.addField("times", new Date().getTime()); Point point = builder.build(); influxDB.setDatabase(database).write(point); } @Autowired private PointOpcDataMapper pointOpcDataMapper; public String firstAlarm (String id,Double value){ PointOpcData pointOpcData = pointOpcDataMapper.selectBySensor(id); if(pointOpcData!=null){ if("1".equals(pointOpcData.getAlarmType())){ if("1".equals(pointOpcData.getSensorType())){ //监测数值 if(pointOpcData.getOne()!=null && !pointOpcData.getOne().equals("") && Double.parseDouble(pointOpcData.getOne())>= value){ //低低低低限报警 return OpcStatus.LLLLALAEM.type; } //监测数值 if(pointOpcData.getTwo()!=null && !pointOpcData.getTwo().equals("") && Double.parseDouble(pointOpcData.getTwo())>= value){ //低低低限报警 return OpcStatus.LLLALAEM.type; } //监测数值 if(pointOpcData.getThree()!=null && !pointOpcData.getThree().equals("") && Double.parseDouble(pointOpcData.getThree())>= value){ //低低限报警 return OpcStatus.LLALAEM.type; } //监测数值 if(pointOpcData.getFour()!=null && !pointOpcData.getFour().equals("") && Double.parseDouble(pointOpcData.getFour())>= value){ //低限报警 return OpcStatus.LALAEM.type; } //监测数值 if(pointOpcData.getFive()!=null && !pointOpcData.getFive().equals("") && Double.parseDouble(pointOpcData.getFive())<= value){ //高限报警 return OpcStatus.HALAEM.type; } //监测数值 if(pointOpcData.getSix()!=null && !pointOpcData.getSix().equals("") && Double.parseDouble(pointOpcData.getSix())<= value){ //高高限报警 return OpcStatus.HHALAEM.type; }//监测数值 if(pointOpcData.getSeven()!=null && !pointOpcData.getSeven().equals("") && Double.parseDouble(pointOpcData.getSeven())<=value){ //高高高限报警 return OpcStatus.HHHALAEM.type; }//监测数值 if(pointOpcData.getEight()!=null && !pointOpcData.getEight().equals("") && Double.parseDouble(pointOpcData.getEight())<= value){ //高高高高限报警 return OpcStatus.HHHHALAEM.type; } } if("2".equals(pointOpcData.getSensorType())){ //开关信号 if(Double.parseDouble(pointOpcData.getNormalType())!=(value)){ return OpcStatus.KGALAEM.type; } } } } return OpcStatus.NOALAEM.type; } }
个人学习笔记,记录日常学习,便于查阅及加深,仅为方便个人使用。

浙公网安备 33010602011771号