Ver Fonte

完善液位高度和宽度

hfxc226 há 1 ano atrás
pai
commit
06e270db08

+ 4 - 0
platform-dao/src/main/java/com/platform/dao/entity/remote/RemoteOpc.java

@@ -95,6 +95,10 @@ public class RemoteOpc implements Serializable {
     private BigDecimal imgHeight;
     /**
      * 图片方向(开关点位type=2:图片有上下左右四个方向)
+     * 1:   LEFT
+     * 2:   UP
+     * 3:   RIGHT
+     * 4:   DOWN* * * *
      */
     private BigDecimal imgPosition;
     /**

+ 52 - 15
platform-dao/src/main/java/com/platform/dao/influxdb/builder/InfluxDbBuilder.java

@@ -6,39 +6,42 @@ import com.influxdb.client.domain.WritePrecision;
 import com.influxdb.client.write.Point;
 import com.influxdb.query.FluxRecord;
 import com.influxdb.query.FluxTable;
+import com.platform.dao.enums.RemoteOpcTypeEnum;
 import com.platform.dao.util.influxDB.InfluxDBFluxExpression;
 import com.platform.dao.vo.query.remote.RemoteOpcVO;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.math.RandomUtils;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.Instant;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 @Slf4j
 public class InfluxDbBuilder {
-
     // 数据转化为可以存储的
-    public static Point bulidOnePoint(RemoteOpcVO vo){
+    public static Point bulidOnePoint(RemoteOpcVO vo) {
         Instant now = Instant.now();
         Point point = Point
                 .measurement(InfluxDBFluxExpression.measurement)
                 .addTag(InfluxDBFluxExpression.tag, vo.getPositionNum())
                 .addField(InfluxDBFluxExpression.field_result, vo.getResult())
-                .time(now, WritePrecision.NS);
+                .time(vo.getTestInstant(), WritePrecision.NS);
         return point;
     }
 
     // 数据转化为可以存储的
-    public static List<Point> bulidBatchPoint(List<RemoteOpcVO> resultList){
+    public static List<Point> bulidBatchPoint(List<RemoteOpcVO> resultList) {
         List<Point> points = new ArrayList<>();
-        Instant now = Instant.now();
-        for(RemoteOpcVO vo: resultList){
+        for (RemoteOpcVO vo : resultList) {
             Point point = Point
                     .measurement(InfluxDBFluxExpression.measurement)
                     .addTag(InfluxDBFluxExpression.tag, vo.getPositionNum())
                     .addField(InfluxDBFluxExpression.field_result, vo.getResult())
-                    .time(now, WritePrecision.NS);
+                    .time(vo.getTestInstant(), WritePrecision.NS);
             points.add(point);
         }
         return points;
@@ -46,24 +49,58 @@ public class InfluxDbBuilder {
 
     /**
      * 数据转化为可以表格展示、chart展示的
+     * 最多5000个点位,取样点位,但是导出的时候不取样
      * 只能查询某一个点位的历史数据
+     *
      * @param tables
      * @return
      */
-    public static String bulidRemoteOpcVO(List<FluxTable> tables ){
-        JSONArray array = new JSONArray();
-        Instant now = Instant.now();
+    public static String bulidRemoteOpcVO(List<FluxTable> tables) {
+        List<RemoteOpcVO> list = new ArrayList<>();
         for (FluxTable table : tables) {
             List<FluxRecord> records = table.getRecords();
             for (FluxRecord record : records) {
                 RemoteOpcVO vo = new RemoteOpcVO();
-                log.info("{}---{}---{}---{}", record.getMeasurement(),record.getField(),record.getValue(),record.getTime());
-                JSONObject object = new JSONObject();
+                vo.setTime(record.getTime().toString());
+                vo.setResult(new BigDecimal(record.getValue().toString()));
+                list.add(vo);
+                // log.info("{}---{}---{}---{}", record.getMeasurement(),record.getField(),record.getValue(),record.getTime());
+                /*JSONObject object = new JSONObject();
                 object.put("time",record.getTime().toString() );
                 object.put("value",new BigDecimal(record.getValue().toString()));
-                array.add(object);
+                array.add(object);*/
             }
         }
+        if(list.size()>5000){
+            log.info("collect.size(): " + list.size());
+            Collections.shuffle(list);
+            list = list.stream().limit(5000).collect(Collectors.toList());
+            log.info("collect.size(): " + list.size());
+            list.sort(Comparator.comparing(RemoteOpcVO::getTime));
+        }
+        JSONArray array = new JSONArray();
+        for (RemoteOpcVO record : list) {
+            JSONObject object = new JSONObject();
+            object.put("time", record.getTime());
+            object.put("value", record.getResult());
+            array.add(object);
+        }
         return array.toJSONString();
     }
+
+    public static void main(String[] args) {
+        int total= 1000000;
+        List<RemoteOpcVO> voList = new ArrayList<>();
+        for(int i =0;i<total;i++){
+            RemoteOpcVO test = new RemoteOpcVO();
+            test.setPositionNum("11111111");
+            float value = RandomUtils.nextFloat();
+            test.setResult(new BigDecimal(value).setScale(2, RoundingMode.HALF_UP));
+            voList.add(test);
+        }
+        log.info("collect.size(): " + voList.size());
+        Collections.shuffle(voList);
+        List<RemoteOpcVO> newList1 =voList.stream().limit(5000).collect(Collectors.toList());
+        log.info("collect.size(): " + newList1.size());
+    }
 }

+ 7 - 17
platform-dao/src/main/java/com/platform/dao/influxdb/impl/InfluxDBServiceImpl.java

@@ -1,19 +1,15 @@
 package com.platform.dao.influxdb.impl;
 
 import com.influxdb.client.InfluxDBClient;
-import com.influxdb.client.QueryApi;
 import com.influxdb.client.WriteApi;
 import com.influxdb.client.WriteOptions;
 import com.influxdb.client.domain.DeletePredicateRequest;
-import com.influxdb.client.domain.WritePrecision;
-import com.influxdb.client.write.Point;
-import com.influxdb.query.FluxRecord;
 import com.influxdb.query.FluxTable;
 import com.platform.common.exception.BusinessException;
 import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.BeanUtils;
 import com.platform.common.util.DateUtils;
 import com.platform.dao.dto.remote.RemoteOpcDTO;
-import com.platform.dao.entity.remote.RemoteOpc;
 import com.platform.dao.influxdb.InfluxDBService;
 import com.platform.dao.influxdb.builder.InfluxDbBuilder;
 import com.platform.dao.mapper.remote.RemoteOpcMapper;
@@ -21,17 +17,12 @@ import com.platform.dao.util.influxDB.InfluxDBFluxExpression;
 import com.platform.dao.vo.query.remote.RemoteOpcVO;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.text.ParseException;
-import java.time.Instant;
 import java.time.LocalDateTime;
-import java.time.OffsetDateTime;
 import java.time.ZoneOffset;
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 @Service("influxDBService")
 @Slf4j
@@ -40,7 +31,6 @@ public class InfluxDBServiceImpl implements InfluxDBService {
 
 
     private InfluxDBClient influxDBClient;
-    private RemoteOpcMapper remoteOpcMapper;
 
     /**
      * *
@@ -102,20 +92,20 @@ public class InfluxDBServiceImpl implements InfluxDBService {
 
     /**
      * 查询数据: 查询某个点位,某个时间段的数据*,表格数据,图表数据
-     *
      */
     @Override
-    public RemoteOpcVO select(RemoteOpcDTO remoteOpcDTO) {;
+    public RemoteOpcVO select(RemoteOpcDTO remoteOpcDTO) {
+        ;
         StringBuffer stringBuilder = new StringBuffer();
         LocalDateTime start;
         LocalDateTime stop;
-        if(remoteOpcDTO.getStartTime() == null){// 默认当前时间的5分钟
-            remoteOpcDTO.setStartTime(LocalDateTime.now().minusMinutes(5));
+        if (remoteOpcDTO.getStartTime() == null) {// 默认20分钟
+            remoteOpcDTO.setStartTime(LocalDateTime.now().minusMinutes(20));
         }
-        if(remoteOpcDTO.getEndTime() == null){// 默认当前时间
+        if (remoteOpcDTO.getEndTime() == null) {// 默认当前时间
             remoteOpcDTO.setEndTime(LocalDateTime.now());
         }
-        if(remoteOpcDTO.getEndTime().isAfter(LocalDateTime.now())){
+        if (remoteOpcDTO.getEndTime().isAfter(LocalDateTime.now())) {
             throw new BusinessException("截止时间不能晚于当前系统时间");
         }
         start = remoteOpcDTO.getStartTime().minusHours(8);

+ 5 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/remote/RemoteOpcVO.java

@@ -7,6 +7,7 @@ import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.Instant;
 import java.time.LocalDateTime;
 
 /**
@@ -19,6 +20,10 @@ import java.time.LocalDateTime;
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = true)
 public class RemoteOpcVO extends BaseVO implements Serializable {
+    /**
+     * 测试时候的时间
+     */
+    private Instant testInstant;
     /**
      * 是否配置了显示位置:0否,1是,导入的时候默认0
      */

+ 3 - 1
platform-opc/src/main/java/com/platform/opc/util/OpcDAClient.java

@@ -24,6 +24,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.net.UnknownHostException;
+import java.time.Instant;
 import java.util.*;
 import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
@@ -336,13 +337,14 @@ public class OpcDAClient {
             log.info("获取分组的数据数量:" + items.length);
             Map<Item, ItemState> resultMap = group.read(true, items);
             //log.info("数据获取完成。数量:", resultMap.size() + ", 组序号:" + i);
+            Instant now = Instant.now();
             for (Item item : resultMap.keySet()) {
                 RemoteOpcVO result = new RemoteOpcVO();
                 ItemState itemMap = resultMap.get(item);
                 String value = getVal(itemMap.getValue());
                 result.setPositionNum(item.getId());
                 result.setResult(new BigDecimal(value));
-                result.setTime(DateUtils.dateToString(itemMap.getTimestamp().getTime()));
+                result.setTestInstant(now);
                 // log.info("id: " + item.getId() + ", value: " + value + ", timestamp: " + itemMap.getTimestamp());
                 resultList.add(result);
             }

+ 1 - 1
platform-rest/src/main/java/com/platform/rest/config/init/ServletInit.java

@@ -35,7 +35,7 @@ public class ServletInit {
     @PostConstruct
     public void initClients() {
         // 判断开发环境还是本地环境
-        if (BeanUtils.isDev() || BeanUtils.isTest()) {
+        if (BeanUtils.remoteOpcServicev() || BeanUtils.isTest()) {
             Boolean has = RedisUtils.hasKey(UpmsRedisKeyConstants.CACHE_ALL_CLIENT);
             if (has) {
                 return;

+ 17 - 8
platform-rest/src/main/java/com/platform/rest/controller/influxdb/InfluxDBController.java

@@ -27,10 +27,12 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @Description InfluxDB数据库测试 控制器
@@ -67,7 +69,7 @@ public class InfluxDBController {
             boolean value = RandomUtils.nextBoolean();
             vo.setResult(new BigDecimal(value ? 1 : 0));
         }
-
+        vo.setTestInstant(Instant.now());
         influxDBService.writeOne(vo);
         return new R<>();
     }
@@ -87,19 +89,26 @@ public class InfluxDBController {
     @SysLog("新增点位记录")
     @PutMapping("/batch")
     public R updateBatch(@RequestBody RemoteOpcDTO remoteOpcDTO, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "20") int pageSize) {
-        List<RemoteOpcVO> voList = remoteOpcService.selectPageList(null, pageNum, pageSize).getRows();
-        for (RemoteOpcVO vo : voList) {
-            if (vo.getType().equals(RemoteOpcTypeEnum.PUTONG.getValue())) {
+        int total= 1000000;
+        List<RemoteOpcVO> voList = new ArrayList<>();
+        Instant time = Instant.now().minusMillis(TimeUnit.DAYS.toMillis(30));;
+        for(int i =0;i<total;i++){
+            RemoteOpcVO test = new RemoteOpcVO();
+            test.setPositionNum(remoteOpcDTO.getPositionNum());
+            test.setTestInstant(time.plusMillis(TimeUnit.SECONDS.toMillis(2)));
+            if (remoteOpcDTO.getType().equals(RemoteOpcTypeEnum.PUTONG.getValue())) {
                 float value = RandomUtils.nextFloat();
-                vo.setResult(new BigDecimal(value).setScale(2, RoundingMode.HALF_UP));
-            } else if (vo.getType().equals(RemoteOpcTypeEnum.YW.getValue())) {
+                test.setResult(new BigDecimal(value).setScale(2, RoundingMode.HALF_UP));
+            } else if (remoteOpcDTO.getType().equals(RemoteOpcTypeEnum.YW.getValue())) {
                 int value = (int) (Math.random() * 100 + 1);
-                vo.setResult(new BigDecimal(value));
+                test.setResult(new BigDecimal(value));
             } else {
                 boolean value = RandomUtils.nextBoolean();
-                vo.setResult(new BigDecimal(value ? 1 : 0));
+                test.setResult(new BigDecimal(value ? 1 : 0));
             }
+            voList.add(test);
         }
+
         influxDBService.writeBatch(voList);
         return new R<>("批量新增点位记录成功");
     }