7 天以前 | dongyukun | ![]() |
7 天以前 | dongyukun | ![]() |
7 天以前 | dongyukun | ![]() |
7 天以前 | dongyukun | ![]() |
7 天以前 | dengzedong | ![]() |
7 天以前 | dengzedong | ![]() |
9 天以前 | 潘志宝 | ![]() |
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