已修改8个文件
已添加1个文件
142 ■■■■■ 文件已修改
iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/arc/service/impl/ArcDataServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/config/ScheduleJobListConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/task/InsertInfluxdbTask.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaPointDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/DaCumulatePointEntity.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/controller/admin/McsApiController.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql
@@ -444,4 +444,5 @@
                                 UNIQUE KEY `uk_code` (`code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='定时归档设置表';
ALTER TABLE `t_da_cumulate_point` ADD COLUMN `cumulate_unit` varchar(10) DEFAULT 'min' COMMENT '累计单位';
ALTER TABLE `t_da_cumulate_point` ADD COLUMN `cumulate_unit` varchar(10) DEFAULT 'min' COMMENT '累计单位';
ALTER TABLE `t_da_cumulate_point` ADD COLUMN `is_cumu_neg` tinyint(1) DEFAULT 0 COMMENT '是否累计负数';
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/arc/service/impl/ArcDataServiceImpl.java
@@ -21,6 +21,7 @@
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -217,8 +218,9 @@
    }
    private BigDecimal calculate(String calculate, List<ApiPointValueDTO> valueList) {
        List<ApiPointValueDTO> valueFilterList = valueList.stream().filter(e -> !Double.valueOf(e.getV()).equals(-2.0) ).collect(Collectors.toList());
        log.debug("开始计算");
        if (valueList == null || valueList.isEmpty()) {
        if ( valueList.isEmpty() || valueFilterList.isEmpty()) {
            throw new IllegalArgumentException("valueList 为空");
        }
@@ -230,24 +232,24 @@
                value = BigDecimal.valueOf(valueList.get(valueList.size() - 1).getV());
                break;
            case SUM:
                value = BigDecimal.valueOf(valueList.stream().mapToDouble(ApiPointValueDTO::getV).sum());
                value = BigDecimal.valueOf(valueFilterList.stream().mapToDouble(ApiPointValueDTO::getV).sum());
                break;
            case DIFF:
                if (valueList.size() < 2) {
                    throw new IllegalArgumentException("valueList size小于2");
                if (valueFilterList.size() < 2) {
                    throw new IllegalArgumentException("valueFilterList size小于2");
                }
                BigDecimal prev = BigDecimal.valueOf(valueList.get(0).getV());
                for (int i = 1; i < valueList.size(); i++) {
                    BigDecimal curr = BigDecimal.valueOf(valueList.get(i).getV());
                    if(curr.compareTo(prev) > 0) {
                BigDecimal prev = BigDecimal.valueOf(valueFilterList.get(0).getV());
                for (int i = 1; i < valueFilterList.size(); i++) {
                    BigDecimal curr = BigDecimal.valueOf(valueFilterList.get(i).getV());
                    if(curr.compareTo(prev) > 0 ) {
                        value = value.add(curr.subtract(prev));
                    }
                    prev = curr;
                }
                break;
            case AVG:
                value = BigDecimal.valueOf(valueList.stream().mapToDouble(ApiPointValueDTO::getV).sum());
                value = value.divide(BigDecimal.valueOf(valueList.size()), 2, BigDecimal.ROUND_HALF_UP);
                value = BigDecimal.valueOf(valueFilterList.stream().mapToDouble(ApiPointValueDTO::getV).sum());
                value = value.divide(BigDecimal.valueOf(valueFilterList.size()), 2, BigDecimal.ROUND_HALF_UP);
                break;
            default:
                throw new IllegalArgumentException("没有对应计算方法");
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/config/ScheduleJobListConfig.java
@@ -31,5 +31,6 @@
        scheduleJobList.add("pointArchivingTaskNetMonth");
        scheduleJobList.add("pointArchivingTaskNetShift");
        scheduleJobList.add("pointArchivingTaskNetYear");
        scheduleJobList.add("insertInfluxdbTask");
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/task/InsertInfluxdbTask.java
对比新文件
@@ -0,0 +1,43 @@
package com.iailab.module.data.job.task;
import com.iailab.module.data.influxdb.pojo.InfluxPointValuePOJO;
import com.iailab.module.data.influxdb.pojo.InfluxPointValueSimPOJO;
import com.iailab.module.data.influxdb.service.InfluxDBService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * insertInfluxdbTask
 */
@Component("insertInfluxdbTask")
public class InsertInfluxdbTask implements ITask{
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Resource
    private InfluxDBService influxDBService;
    @Override
    public void run(String params){
        logger.debug("insertInfluxdbTask定时任务正在执行,参数为:{}", params);
        String[] split = params.split(",");
//        List<InfluxPointValuePOJO> pointValues = new ArrayList<>();
//        InfluxPointValueSimPOJO pojo = new InfluxPointValueSimPOJO();
//        pojo.setPoint(split[0]);
//        pojo.setType("float");
//        pojo.setValue(Double.valueOf(split[1]));
//        pojo.setTimestamp(new Date(Long.valueOf(split[2])).toInstant());
//        pointValues.add(pojo);
//        influxDBService.asyncWritePointValues(pointValues);
        influxDBService.syncWriteFloatValue(split[0],split[1],Long.valueOf(split[2]));
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java
@@ -119,7 +119,18 @@
        queryDto.setEnd(endTime);
        queryDto.setPointNo(dto.getMomentPoint());
        log.info("queryDto=" + JSONObject.toJSONString(queryDto));
        List<ApiPointValueDTO> dataList = dataPointApi.queryPointHistoryValue(queryDto);
        List<ApiPointValueDTO> dataList = new ArrayList<>();
        List<ApiPointValueDTO> dataListTemp = dataPointApi.queryPointHistoryValue(queryDto);
        if (dto.getIsCumuNeg() != null && dto.getIsCumuNeg().equals(0)) {
            for(ApiPointValueDTO item : dataListTemp) {
                if (item.getV() > 0) {
                    dataList.add(item);
                }
            }
        } else {
            dataList = dataListTemp;
        }
        if (CollectionUtils.isEmpty(dataList)) {
            log.info("dataList is empty");
            if (listGood != null) {
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaPointDTO.java
@@ -120,6 +120,9 @@
    @Schema(description = "除数")
    private Integer divisor;
    @Schema(description = "是否累计负数")
    private Integer isCumuNeg;
    @Schema(description = "数据源选项")
    private List<String> sourceOption;
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/DaCumulatePointEntity.java
@@ -49,4 +49,9 @@
     * 除数
     */
    private Integer divisor;
    /**
     * 是否累计负数
     */
    private Integer isCumuNeg;
}
iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml
@@ -280,7 +280,8 @@
        t2.moment_point,
        t2.length,
        t2.cumulate_unit,
        t2.divisor
        t2.divisor,
        t2.is_cumu_neg
        FROM t_da_point t1
        LEFT JOIN t_da_cumulate_point t2 ON t2.point_id = t1.id
        <where>
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/controller/admin/McsApiController.java
@@ -21,6 +21,8 @@
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import static com.iailab.framework.common.pojo.CommonResult.success;
@@ -65,6 +67,53 @@
        return CommonResult.success(respVO);
    }
    @PostMapping("/predict-data/missDataList")
    @Operation(summary = "缺失历史数据表单")
    public CommonResult<List<Map<String,Object>>> getPreDataMissDataList(HttpServletResponse response, HttpServletRequest
            request, @RequestBody PreDataBarLineReqVO reqVO) throws Exception {
        apiSecurityUtils.validate(request);
        PreDataBarLineRespVO respVO = new PreDataBarLineRespVO();
        List<Map<String,Object>> result = new ArrayList<>();
        try {
            respVO = mcsApi.getPreDataCharts(reqVO);
            for (int i = 0; i < respVO.getDataViewList().size()-1; i++) {
                Map<String,Object> real = getMissDataMap(respVO.getDataViewList().get(i).getRealData(),respVO.getDataViewList().get(i).getOutId(),respVO.getDataViewList().get(i).getResultName()+"(真实)");
                Map<String,Object> preN = getMissDataMap(respVO.getDataViewList().get(i).getPreDataN(),respVO.getDataViewList().get(i).getOutId(),respVO.getDataViewList().get(i).getResultName()+"(T+N)");
                Map<String,Object> preL = getMissDataMap(respVO.getDataViewList().get(i).getPreDataL(),respVO.getDataViewList().get(i).getOutId(),respVO.getDataViewList().get(i).getResultName()+"(T+L)");
                result.add(real);
                result.add(preN);
                result.add(preL);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return CommonResult.success(result);
    }
    private Map<String,Object> getMissDataMap( List<Object[]> list,String outId,String resultName){
        Map<String,Object> missDataMap = new HashMap<>();
        if (list == null || list.size() < 2) {
            return missDataMap;
        }
        for (int i = 1; i < list.size(); i++) {
            LocalDateTime startTime = (LocalDateTime) list.get(i-1)[0];
            LocalDateTime endTime = (LocalDateTime) list.get(i)[0];
            long gap = ChronoUnit.MINUTES.between(startTime, endTime);
            if (gap > 10) {
                missDataMap.put("outId",outId);
                missDataMap.put("resultName",resultName);
                missDataMap.put("startTime",startTime);
                missDataMap.put("endTime",endTime);
                missDataMap.put("random",10);
                missDataMap.put("gap",gap);
            }
        }
        return missDataMap;
    }
    @PostMapping("/predict-data/item-chart")
    @Operation(summary = "预测数据图表")
    public CommonResult<PreDataItemChartRespVO> getPreDataItemChart(HttpServletResponse response, HttpServletRequest