From 60fa13f76afe72a6f48416de2904d58164859382 Mon Sep 17 00:00:00 2001 From: houzhongjian <houzhongyi@126.com> Date: 星期五, 17 一月 2025 13:51:55 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/DataPointApi.java | 5 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/dto/QuerySourceValueDTO.java | 2 iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/dto/ApiPointPageReqVO.java | 19 ++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/AtomItemHandler.java | 10 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/ihdb/HttpCollectorForIhd.java | 9 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/PointCollector.java | 1 iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java | 17 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordServiceImpl.java | 5 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/point/DataPointApiImpl.java | 35 +++ iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/dto/ApiPointDTO.java | 4 iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataViewRespDTO.java | 9 + iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/utils/JavaScriptHandler.java | 5 iailab-module-model/iailab-module-model-biz/db/mysql.sql | 2 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/common/config/InfluxDBInstance.java | 2 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/utils/IndSqlUtils.java | 38 +++- iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/DaPointService.java | 2 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/MeasureHandle.java | 4 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/DaPointDao.java | 3 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/DerItemHandler.java | 3 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaMathPointServiceImpl.java | 3 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java | 5 iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PredictLastValueReqVO.java | 18 ++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/controller/admin/ApiDataController.java | 25 ++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/IndTimeLimitEnum.java | 1 iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml | 15 + iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/CalItemHandler.java | 12 + iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/DaMathPointService.java | 7 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java | 8 iailab-module-data/iailab-module-data-biz/src/main/resources/application.yaml | 2 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemOutputService.java | 1 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemOutputServiceImpl.java | 15 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordService.java | 2 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/controller/admin/McsApiController.java | 27 +++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/IndItemCollector.java | 2 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java | 159 ++++++++++++++++ iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDao.xml | 10 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/InfluxDBService.java | 1 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleDataConstructor.java | 21 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDao.java | 2 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/DaPointPageReqVO.java | 4 40 files changed, 465 insertions(+), 50 deletions(-) diff --git a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/DataPointApi.java b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/DataPointApi.java index 98ab9d3..f0b97d8 100644 --- a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/DataPointApi.java +++ b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/DataPointApi.java @@ -1,5 +1,6 @@ package com.iailab.module.data.api.point; +import com.iailab.framework.common.pojo.PageResult; import com.iailab.module.data.api.point.dto.*; import com.iailab.module.data.enums.ApiConstants; import io.swagger.v3.oas.annotations.Operation; @@ -50,5 +51,7 @@ @Operation(summary = "写入单个测点值") Boolean writePointRealValue(@RequestBody ApiPointValueWriteDTO queryDto); - + @PostMapping(PREFIX + "/query-math-point/current-value") + @Operation(summary = "根据计算点编号查询测点集合") + PageResult<ApiPointDTO> queryMathPointCurrentValue(@RequestBody ApiPointPageReqVO reqVO); } diff --git a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/dto/ApiPointDTO.java b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/dto/ApiPointDTO.java index e98d182..40f9fa2 100644 --- a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/dto/ApiPointDTO.java +++ b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/dto/ApiPointDTO.java @@ -1,5 +1,6 @@ package com.iailab.module.data.api.point.dto; +import com.iailab.framework.common.pojo.PageParam; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -26,4 +27,7 @@ @Schema(description = "采集频率", required = true) private String minfreqid; + + @Schema(description = "当前值", required = false) + private Object currentValue; } \ No newline at end of file diff --git a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/dto/ApiPointPageReqVO.java b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/dto/ApiPointPageReqVO.java new file mode 100644 index 0000000..38728e9 --- /dev/null +++ b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/dto/ApiPointPageReqVO.java @@ -0,0 +1,19 @@ +package com.iailab.module.data.api.point.dto; + +import com.iailab.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author lirm + * @Description + * @createTime 2025年01月14日 + */ +@Schema(description = "") +@Data +public class ApiPointPageReqVO extends PageParam { + + @Schema(description = "测点编码", required = true) + private String pointNo; + +} \ No newline at end of file diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/controller/admin/ApiDataController.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/controller/admin/ApiDataController.java index 339c042..7c3537c 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/controller/admin/ApiDataController.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/controller/admin/ApiDataController.java @@ -1,7 +1,9 @@ package com.iailab.module.data.api.controller.admin; import com.iailab.framework.common.pojo.CommonResult; +import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.common.util.date.DateUtils; +import com.iailab.framework.common.util.object.BeanUtils; import com.iailab.framework.common.util.object.ConvertUtils; import com.iailab.framework.excel.core.util.ExcelUtils; import com.iailab.module.data.api.dto.DeviceValueDTO; @@ -13,9 +15,7 @@ import com.iailab.module.data.api.plan.PlanItemApi; import com.iailab.module.data.api.plan.dto.ApiPlanDataDTO; import com.iailab.module.data.api.point.DataPointApi; -import com.iailab.module.data.api.point.dto.ApiPointValueDTO; -import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO; -import com.iailab.module.data.api.point.dto.ApiPointsValueQueryDTO; +import com.iailab.module.data.api.point.dto.*; import com.iailab.module.data.common.ApiDataQueryDTO; import com.iailab.module.data.common.ApiDataValueDTO; import com.iailab.module.data.common.utils.ApiSecurityUtils; @@ -310,10 +310,12 @@ List<IndItemValueVO> list = indItemCollector.queryValue(itemNo); List<ApiIndItemValueDTO> dtoList = new ArrayList<>(); list.forEach(item -> { - ApiIndItemValueDTO dto = new ApiIndItemValueDTO(); - dto.setDataTime(item.getDataTime()); - dto.setDataValue(item.getDataValue().doubleValue()); - dtoList.add(dto); + if (item != null) { + ApiIndItemValueDTO dto = new ApiIndItemValueDTO(); + dto.setDataTime(item.getDataTime()); + dto.setDataValue(item.getDataValue().doubleValue()); + dtoList.add(dto); + } }); return success(dtoList); } @@ -325,4 +327,13 @@ List<IndItemValueVO> list = indItemCollector.queryValue(dto.getItemNo(), dto.getStart(), dto.getEnd()); return success(ConvertUtils.sourceToTarget(list, ApiIndItemValueDTO.class)); } + + @PermitAll + @PostMapping("/query-math-point/current-value") + @Operation(summary = "根据计算点编号查询测点集合") + public CommonResult<PageResult<ApiPointDTO>> queryMathPointCurrentValue(@RequestBody ApiPointPageReqVO reqVO) { + PageResult<ApiPointDTO> data = dataPointApi.queryMathPointCurrentValue(reqVO); + return success(data); + } + } diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/point/DataPointApiImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/point/DataPointApiImpl.java index a8d9f0c..9141100 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/point/DataPointApiImpl.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/point/DataPointApiImpl.java @@ -1,5 +1,6 @@ package com.iailab.module.data.api.point; +import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.common.util.date.DateUtils; import com.iailab.framework.common.util.object.ConvertUtils; import com.iailab.module.data.api.point.dto.*; @@ -7,9 +8,13 @@ import com.iailab.module.data.influxdb.service.InfluxDBService; import com.iailab.module.data.influxdb.service.impl.InfluxDBServiceImpl; import com.iailab.module.data.point.collection.PointCollector; +import com.iailab.module.data.point.collection.handler.CalculateHandle; +import com.iailab.module.data.point.dto.DaMathPointDTO; import com.iailab.module.data.point.dto.DaPointDTO; import com.iailab.module.data.point.dto.DaPointWriteValueDTO; +import com.iailab.module.data.point.service.DaMathPointService; import com.iailab.module.data.point.service.DaPointService; +import com.iailab.module.data.point.vo.DaPointPageReqVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; @@ -17,6 +22,7 @@ import java.util.*; import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * @author PanZhibao @@ -35,6 +41,9 @@ @Autowired private InfluxDBService influxDBService; + + @Autowired + private DaMathPointService daMathPointService; @Override public ApiPointDTO getInfoById(String pointId) { @@ -130,4 +139,30 @@ return false; } } + + @Override + public PageResult<ApiPointDTO> queryMathPointCurrentValue(ApiPointPageReqVO reqVO) { + DaPointDTO daPointDTO = daPointService.getSimpleInfoByNo(reqVO.getPointNo()); + DaMathPointDTO daMathPointDTO = daMathPointService.getByPoint(daPointDTO.getId()); + String[] pointNos = daMathPointDTO.getExpression().split(CalculateHandle.regex); + DaPointPageReqVO pageReqVO = new DaPointPageReqVO(); + pageReqVO.setPageNo(reqVO.getPageNo()); + pageReqVO.setPageSize(reqVO.getPageSize()); + pageReqVO.setPointNos(Arrays.asList(pointNos)); + PageResult<DaPointDTO> pageResult = daPointService.queryPage(pageReqVO); + List<String> pointNosL = pageResult.getList().stream().map(item -> { + return item.getPointNo(); + }).collect(Collectors.toList()); + Map<String, Object> currentValueMap = pointCollector.getCurrentValue(pointNosL); + + List<ApiPointDTO> dataList = new ArrayList<>(); + pageResult.getList().forEach(item -> { + ApiPointDTO dto = new ApiPointDTO(); + dto.setPointNo(item.getPointNo()); + dto.setPointName(item.getPointName()); + dto.setCurrentValue(currentValueMap.get(item.getPointNo()).toString()); + dataList.add(dto); + }); + return new PageResult<>(dataList, pageResult.getTotal()); + } } \ No newline at end of file diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/ihdb/HttpCollectorForIhd.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/ihdb/HttpCollectorForIhd.java index bb76199..ca01dca 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/ihdb/HttpCollectorForIhd.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/ihdb/HttpCollectorForIhd.java @@ -87,6 +87,11 @@ */ private static final String T = "t"; + /** + * 数据质量G:good,B:bad + */ + private static final String Q = "q"; + private HttpApiEntity getHttpApi(String id) { if (apiMap.containsKey(id)) { return apiMap.get(id); @@ -288,7 +293,9 @@ if (!CollectionUtils.isEmpty(tagValueList)) { for (int i = 0; i < tagValueList.size(); i++) { JSONObject item = tagValueList.getJSONObject(i); - result.put(TagUtils.genTagId(DataSourceType.HTTP.getCode(), sourceName, item.get(N).toString()), item.get(V)); + if (item.get(Q).toString().equals("G")) { + result.put(TagUtils.genTagId(DataSourceType.HTTP.getCode(), sourceName, item.get(N).toString()), item.get(V)); + } } } } diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/IndTimeLimitEnum.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/IndTimeLimitEnum.java index 001bb29..57ad871 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/IndTimeLimitEnum.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/IndTimeLimitEnum.java @@ -17,6 +17,7 @@ LAST_DAY_7("LAST_DAY_7", "最近7天"), LAST_DAY_30("LAST_DAY_30", "最近30天"), THIS_MONTH("THIS_MONTH", "当前月"), + LAST_MONTH("LAST_MONTH", "上月"), LAST_MONTH_12("LAST_MONTH_12", "最近12个月"), THIS_YEAR_MONTH("THIS_YEAR_MONTH", "当年月份"), LAST_YEAR("LAST_YEAR", "去年"), diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/utils/JavaScriptHandler.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/utils/JavaScriptHandler.java index c47391b..6c47762 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/utils/JavaScriptHandler.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/utils/JavaScriptHandler.java @@ -1,6 +1,9 @@ package com.iailab.module.data.common.utils; import javax.annotation.Resource; + +import cn.hutool.script.JavaScriptEngine; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.script.ScriptEngine; @@ -10,6 +13,7 @@ * @author PanZhibao * @date 2021年06月04日 16:01 */ +@Slf4j @Component public class JavaScriptHandler { @@ -20,6 +24,7 @@ try { return scriptEngine.eval(script).toString(); } catch (ScriptException e) { + log.error("计算异常,计算公式:" + script); e.printStackTrace(); return null; } diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/IndItemCollector.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/IndItemCollector.java index 0b9271a..51b27f8 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/IndItemCollector.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/IndItemCollector.java @@ -51,7 +51,7 @@ result = derItemHandler.queryValue(indItem.getId()); break; case CAL: - result = calItemHandler.queryValue(itemNo); + result = calItemHandler.queryValue(indItem.getId()); break; default: break; diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/AtomItemHandler.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/AtomItemHandler.java index 76b80d4..5c2f392 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/AtomItemHandler.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/AtomItemHandler.java @@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; @@ -27,10 +28,15 @@ private IndItemValueService indItemValueService; public List<IndItemValueVO> queryValue(String itemId) { - List<IndItemValueVO> result = new ArrayList<IndItemValueVO>(); + List<IndItemValueVO> result = new ArrayList<>(); try { QuerySourceValueDTO queryDto = indSqlUtils.getAtomSql(itemId); - return indItemValueService.getSourceValue(queryDto); + result = indItemValueService.getSourceValue(queryDto); + if (!CollectionUtils.isEmpty(result)) { + result.forEach(item -> { + item.setItemNo(queryDto.getItemNo()); + }); + } } catch (Exception ex) { ex.printStackTrace(); } diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/CalItemHandler.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/CalItemHandler.java index e2b3297..48a3c7b 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/CalItemHandler.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/CalItemHandler.java @@ -14,6 +14,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -63,16 +64,23 @@ } IndItemEntity subItem = indItemService.getInfoByNo(s); ItemTypeEnum itemType = ItemTypeEnum.getEumByCode(subItem.getItemType()); + List<IndItemValueVO> vl = new ArrayList<>(); switch (itemType) { case ATOM: - valueMix.add(atomItemHandler.queryValue(subItem.getId())); + vl = atomItemHandler.queryValue(subItem.getId()); break; case DER: - valueMix.add(derItemHandler.queryValue(subItem.getId())); + vl = derItemHandler.queryValue(subItem.getId()); break; default: break; } + if (!CollectionUtils.isEmpty(vl)) { + vl.forEach(vi -> { + vi.setItemNo(s); + }); + } + valueMix.add(vl); } dataLength = valueMix.get(0).size(); diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/DerItemHandler.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/DerItemHandler.java index 404f4c5..f76c567 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/DerItemHandler.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/DerItemHandler.java @@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Date; @@ -31,7 +32,7 @@ List<IndItemValueVO> result = new ArrayList<IndItemValueVO>(); try { QuerySourceValueDTO queryDto = indSqlUtils.getDerSql(itemId); - return indItemValueService.getSourceValue(queryDto); + result = indItemValueService.getSourceValue(queryDto); } catch (Exception ex) { ex.printStackTrace(); } diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/utils/IndSqlUtils.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/utils/IndSqlUtils.java index 4636904..87fee61 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/utils/IndSqlUtils.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/utils/IndSqlUtils.java @@ -4,10 +4,11 @@ import com.iailab.module.data.common.enums.IndStatFuncEnum; import com.iailab.module.data.common.enums.IndTimeLimitEnum; import com.iailab.module.data.ind.data.dto.IndDataSetDTO; -import com.iailab.module.data.ind.data.service.IndDataSetFieldService; import com.iailab.module.data.ind.data.service.IndDataSetService; +import com.iailab.module.data.ind.item.entity.IndItemEntity; import com.iailab.module.data.ind.item.service.IndItemAtomService; import com.iailab.module.data.ind.item.service.IndItemDerService; +import com.iailab.module.data.ind.item.service.IndItemService; import com.iailab.module.data.ind.item.vo.IndItemAtomVO; import com.iailab.module.data.ind.item.vo.IndItemDerVO; import com.iailab.module.data.ind.value.dto.QuerySourceValueDTO; @@ -33,7 +34,7 @@ private IndDataSetService indDataSetService; @Autowired - private IndDataSetFieldService indDataSetFieldService; + private IndItemService indItemService; @Autowired private IndItemDerService indItemDerService; @@ -50,6 +51,8 @@ if (indItem == null) { return result; } + IndItemEntity itemEntity = indItemService.get(itemId); + result.setItemNo(itemEntity.getItemNo()); result.setIndItemAtom(indItem); IndDataSetDTO dataSet = indDataSetService.getDet(indItem.getDataSet()); if (dataSet == null) { @@ -57,7 +60,7 @@ } result.setDataSource(indItem.getDataSource()); StringBuilder selectSql = new StringBuilder(); - IndStatFuncEnum statFun = IndStatFuncEnum.getEumByCode(StringUtils.isBlank(indItem.getStatFunc())? IndStatFuncEnum.DEFAULT.getCode() : indItem.getStatFunc()); + IndStatFuncEnum statFun = IndStatFuncEnum.getEumByCode(StringUtils.isBlank(indItem.getStatFunc()) ? IndStatFuncEnum.DEFAULT.getCode() : indItem.getStatFunc()); switch (statFun) { case AVG: selectSql.append("AVG("); @@ -91,19 +94,19 @@ if (indItem == null) { return result; } + IndItemEntity itemEntity = indItemService.get(itemId); + result.setItemNo(itemEntity.getItemNo()); result = getAtomSql(indItem.getAtomItemId()); // 拼接SELECT StringBuilder selectSql = new StringBuilder(); - if (StringUtils.isNotBlank(indItem.getDimension()) && StringUtils.isNotBlank(result.getIndItemAtom().getStatFunc())){ + if (StringUtils.isNotBlank(indItem.getDimension()) && StringUtils.isNotBlank(result.getIndItemAtom().getStatFunc())) { selectSql.append(indItem.getDimension()); selectSql.append(", "); selectSql.append(result.getSelectSql()); - } - else if(StringUtils.isBlank(indItem.getDimension()) && StringUtils.isNotBlank(result.getIndItemAtom().getStatFunc())){ + } else if (StringUtils.isBlank(indItem.getDimension()) && StringUtils.isNotBlank(result.getIndItemAtom().getStatFunc())) { selectSql.append(result.getSelectSql()); - } - else{ + } else { selectSql.append(result.getSelectSql()); selectSql.append(", "); selectSql.append(indItem.getTimeLabel()); @@ -156,6 +159,18 @@ whereSql.append(DateUtils.format(calendar.getTime(), PATTERN_MON)); whereSql.append("'"); break; + case LAST_MONTH: + calendar.add(Calendar.MONTH, -1); // 将当前日期减去一个月,得到上个月的日期 + whereSql.append(indItem.getTimeLabel()); + whereSql.append(" >= '"); + whereSql.append(DateUtils.format(calendar.getTime(), PATTERN_MON)); // 上个月的第一天 + calendar.add(Calendar.MONTH, 1); // 再加一个月,回到当前月 + whereSql.append("' AND '"); + whereSql.append(indItem.getTimeLabel()); + whereSql.append("' < '"); + whereSql.append(DateUtils.format(calendar.getTime(), PATTERN_MON)); // 当前月 + whereSql.append("'"); + break; case LAST_MONTH_12: whereSql.append(indItem.getTimeLabel()); whereSql.append(" <= '"); @@ -206,14 +221,14 @@ // 拼接GROUP StringBuilder groupSql = new StringBuilder(); - if (StringUtils.isNotBlank(indItem.getDimension())){ + if (StringUtils.isNotBlank(indItem.getDimension())) { groupSql.append(indItem.getDimension()); } result.setGroupSql(groupSql.toString()); // 拼接ORDER StringBuilder orderBySql = new StringBuilder(); - if (StringUtils.isNotBlank(indItem.getDimension()) && indItem.getDimension().equals(indItem.getTimeLabel())){ + if (StringUtils.isNotBlank(indItem.getDimension()) && indItem.getDimension().equals(indItem.getTimeLabel())) { orderBySql.append(indItem.getTimeLabel()); result.setOrderBySql(orderBySql.toString()); } @@ -228,6 +243,9 @@ } result = getAtomSql(indItem.getAtomItemId()); + IndItemEntity itemEntity = indItemService.get(itemId); + result.setItemNo(itemEntity.getItemNo()); + // 拼接SELECT StringBuilder selectSql = new StringBuilder(); selectSql.append(indItem.getDimension()); diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/dto/QuerySourceValueDTO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/dto/QuerySourceValueDTO.java index 1b3ec27..93ec419 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/dto/QuerySourceValueDTO.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/dto/QuerySourceValueDTO.java @@ -11,6 +11,8 @@ @Data public class QuerySourceValueDTO { + private String itemNo; + private String dataSource; private String selectSql; diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/PointCollector.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/PointCollector.java index 53f9b2f..a9b3215 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/PointCollector.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/PointCollector.java @@ -145,6 +145,7 @@ data.putAll(cumulateHandle.getCurrent(pointNos)); return data; } catch (Exception ex) { + ex.printStackTrace(); return R.error(ex.getMessage()); } diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java index d97b8f7..66dc01f 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java @@ -152,6 +152,11 @@ pointNos.add(s); dataMap.putAll(measureHandle.getCurrent(pointNos)); dataMap.putAll(constantHandle.getCurrent(pointNos)); + if (dataMap.get(s) == null) { + log.info("计算点数据异常"); + log.info("pointNo=" + dto.getPointNo() +";dataMap.key=" + s); + return CommonConstant.BAD_VALUE; + } String valueStr = dataMap.get(s).toString(); if (StrUtils.isNumeric(valueStr) && new BigDecimal(valueStr).compareTo(CommonConstant.BAD_VALUE) == 0) { log.info("BAD_VALUE:" + s); diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/MeasureHandle.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/MeasureHandle.java index 27cfad0..fd55e6d 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/MeasureHandle.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/MeasureHandle.java @@ -120,9 +120,7 @@ private void toCommonResult(Date collectTime, List<DaPointDTO> dtos, Map<String, Object> tagValues, Map<String, Object> dataMap, List<InfluxPointValuePOJO> result,List<String> listGood,List<String> listBad) { if (!CollectionUtils.isEmpty(tagValues)) { - tagValues.forEach((k, v) -> { - dataMap.put(k, v); - }); +// dataMap.putAll(tagValues); dtos.forEach(dto -> { String tagId = TagUtils.genTagId(dto.getSourceType(), dto.getSourceName(), dto.getTagNo()); if (tagValues.containsKey(tagId)) { diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/DaPointDao.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/DaPointDao.java index c97c35c..e5589c2 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/DaPointDao.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/DaPointDao.java @@ -3,12 +3,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.iailab.framework.mybatis.core.mapper.BaseMapperX; import com.iailab.framework.tenant.core.db.dynamic.TenantDS; +import com.iailab.module.data.api.point.dto.ApiPointDTO; import com.iailab.module.data.point.dto.DaPointDTO; import com.iailab.module.data.point.entity.DaPointEntity; import com.iailab.module.data.point.vo.DaPointPageReqVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/DaMathPointService.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/DaMathPointService.java index 864af89..ce5feb2 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/DaMathPointService.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/DaMathPointService.java @@ -1,8 +1,14 @@ package com.iailab.module.data.point.service; import com.iailab.framework.common.service.BaseService; +import com.iailab.framework.common.validation.group.AddGroup; +import com.iailab.framework.common.validation.group.UpdateGroup; import com.iailab.module.data.point.entity.DaMathPointEntity; import com.iailab.module.data.point.dto.DaMathPointDTO; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Null; +import java.util.List; /** * @author PanZhibao @@ -22,4 +28,5 @@ void deleteBatch(String[] ids); void deleteByPoint(String[] ids); + } diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/DaPointService.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/DaPointService.java index 0249769..f2d0dec 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/DaPointService.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/DaPointService.java @@ -5,6 +5,8 @@ import com.iailab.module.data.point.dto.DaPointDTO; import com.iailab.module.data.point.vo.*; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaMathPointServiceImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaMathPointServiceImpl.java index 5014dd2..ec6bd8c 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaMathPointServiceImpl.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaMathPointServiceImpl.java @@ -10,6 +10,8 @@ import org.springframework.stereotype.Service; import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.UUID; /** @@ -61,4 +63,5 @@ wrapper.in("point_id", Arrays.asList(ids)); baseDao.delete(wrapper); } + } \ No newline at end of file diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java index b365cb9..beada3c 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java @@ -6,7 +6,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.iailab.framework.common.constant.Constant; import com.iailab.framework.common.pojo.PageResult; +import com.iailab.framework.common.service.impl.BaseServiceImpl; import com.iailab.framework.common.util.object.BeanUtils; import com.iailab.framework.common.util.object.ConvertUtils; import com.iailab.module.data.api.point.dto.ApiPointDTO; @@ -45,7 +47,7 @@ * @createTime 2024年09月2日 */ @Service -public class DaPointServiceImpl extends ServiceImpl<DaPointDao, DaPointEntity> implements DaPointService { +public class DaPointServiceImpl extends BaseServiceImpl<DaPointDao, DaPointEntity> implements DaPointService { @Autowired private DaMeasurePointService daMeasurePointService; @@ -395,7 +397,7 @@ importPoints.forEach(importPoint -> { // 判断如果不存在,再进行插入 - DaPointEntity existPoint = baseMapper.selectByPointName(importPoint.getPointName()); + DaPointEntity existPoint = baseDao.selectByPointName(importPoint.getPointName()); if (existPoint == null) { DaPointEntity daPointEntity = ConvertUtils.sourceToTarget(importPoint, DaPointEntity.class); daPointEntity.setId(UUID.randomUUID().toString()); @@ -444,7 +446,7 @@ DaPointEntity updatePoint = BeanUtils.toBean(importPoint, DaPointEntity.class); updatePoint.setId(existPoint.getId()); - baseMapper.updateById(updatePoint); + baseDao.updateById(updatePoint); DaMeasurePointEntity measurePoint = new DaMeasurePointEntity(); measurePoint.setSourceType(importPoint.getSourceType()); measurePoint.setSourceId(sourcesIdMap.get(importPoint.getSourceType()).get(importPoint.getSourceName())); diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/DaPointPageReqVO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/DaPointPageReqVO.java index 7c7d21d..cf2fb6e 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/DaPointPageReqVO.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/DaPointPageReqVO.java @@ -6,6 +6,8 @@ import lombok.EqualsAndHashCode; import lombok.ToString; +import java.util.List; + /** * @author lirm * @Description @@ -32,4 +34,6 @@ private Integer isEnable; private String collectQuality; + + private List<String> pointNos; } \ No newline at end of file diff --git a/iailab-module-data/iailab-module-data-biz/src/main/resources/application.yaml b/iailab-module-data/iailab-module-data-biz/src/main/resources/application.yaml index 4cf6525..7c52b23 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/resources/application.yaml +++ b/iailab-module-data/iailab-module-data-biz/src/main/resources/application.yaml @@ -170,7 +170,7 @@ - t_http_tag - t_http_token - t_ind_data_set - - t_ind_data_set_field8982 + - t_ind_data_set_field - t_ind_item_category - t_ind_item - t_ind_item_atom diff --git a/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml b/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml index 4b08398..a994c6e 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml +++ b/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml @@ -71,6 +71,12 @@ <if test="params.collectQuality != null and params.collectQuality != ''"> and t6.collect_quality = #{params.collectQuality} </if> + <if test="params.pointNos != null"> + AND t1.point_no in + <foreach collection="params.pointNos" item="item" index="item" open="(" close=")" separator=","> + #{item} + </foreach> + </if> </where> order by t1.create_time desc, t1.point_no desc </select> @@ -286,5 +292,14 @@ </if> </where> </select> + <select id="getPointPage" parameterType="map" resultType="com.iailab.module.data.api.point.dto.ApiPointDTO"> + select point_no pointNo,point_name pointName from t_da_point + <where> + point_no in + <foreach item="value" collection="paramsMap.values" separator="," open="(" close=")"> + '${value}' + </foreach> + </where> + </select> </mapper> \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java index 7a70e0a..1deb278 100644 --- a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java +++ b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -101,7 +102,19 @@ @Operation(summary = "获取多个预测项Double类型数据") Map<String, Map<String, Double>> getPreDoubleData(PreDoubleDataReqVO reqVO); - /*@PostMapping(PREFIX + "/predict-data/last-value") + @PostMapping(PREFIX + "/predict-data/last-value") @Operation(summary = "获取最后预测值") - Double getPredictLastValue();*/ + Map<String, BigDecimal> getPredictLastValue(@RequestBody PredictLastValueReqVO reqVO); + + @GetMapping("/predict-data/electric") + @Operation(summary = "电力功率因数预测结果查询") + Map<String,List<Object[]>> getElectricPredictData(String itemCode); + + @GetMapping("/schedule-data/last") + @Operation(summary = "调度模型最新结果查询") + String getLastScheduleData(String scheduleCode); + + @GetMapping("/machineRealTimeStatus") + @Operation(summary = "发电机组实时状态查询") + List<Map<String, Object>> getRealTimeStatus(@RequestBody List<Map<String, Object>> machines); } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataViewRespDTO.java b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataViewRespDTO.java index ded569b..7713ffd 100644 --- a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataViewRespDTO.java +++ b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataViewRespDTO.java @@ -57,6 +57,9 @@ @Schema(description = "运行下限") private BigDecimal limitL; + @Schema(description = "当前") + private BigDecimal currValue; + @Schema(description = "最大值") private BigDecimal maxValue; @@ -110,4 +113,10 @@ @Schema(description = "预警信息") private List<AlarmMessageRespDTO> alarmList; + + @Schema(description = "预警信息") + private String alarmMessage; + + @Schema(description = "展示线类型") + private String lineType; } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PredictLastValueReqVO.java b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PredictLastValueReqVO.java new file mode 100644 index 0000000..fccd0d9 --- /dev/null +++ b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PredictLastValueReqVO.java @@ -0,0 +1,18 @@ +package com.iailab.module.model.api.mcs.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * @author PanZhibao + * @Description + * @createTime 2025年01月14日 + */ +@Schema(description = "RPC 模型 - 预警和建议 DTO") +@Data +public class PredictLastValueReqVO { + + private List<String[]> itemNos; +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/db/mysql.sql b/iailab-module-model/iailab-module-model-biz/db/mysql.sql index 8781409..6f9c092 100644 --- a/iailab-module-model/iailab-module-model-biz/db/mysql.sql +++ b/iailab-module-model/iailab-module-model-biz/db/mysql.sql @@ -146,7 +146,7 @@ id varchar(36) not null, outputid varchar(36), predicttime datetime, - jsonvalue varchar(6400), + jsonvalue text, cumulant varchar(36), primary key (id), INDEX idx_outputid (outputid), diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java index 3dade90..cdc43e1 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java @@ -26,6 +26,7 @@ import com.iailab.module.model.mcs.pre.vo.MmPredictAlarmMessageSaveReqVO; import com.iailab.module.model.mcs.pre.vo.MmPredictItemRespVO; import com.iailab.module.model.mcs.sche.entity.StScheduleSuggestEntity; +import com.iailab.module.model.mcs.sche.service.StScheduleRecordService; import com.iailab.module.model.mcs.sche.service.StScheduleSchemeService; import com.iailab.module.model.mcs.sche.service.StScheduleSuggestService; import com.iailab.module.model.mcs.sche.vo.StScheduleSuggestSaveReqVO; @@ -40,6 +41,7 @@ import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; +import java.text.DecimalFormat; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -93,6 +95,9 @@ @Autowired private StScheduleSchemeService stScheduleSchemeService; + + @Autowired + private StScheduleRecordService stScheduleRecordService; @Autowired private ChartParamService chartParamService; @@ -150,7 +155,13 @@ } Date predictTime = reqVO.getPredictTime(); if (predictTime == null) { - MmItemOutputEntity output = mmItemOutputService.getOutPutById(reqVO.getOutIds().get(0)); + MmItemOutputEntity output = null; + for (String outId : outIds) { + output = mmItemOutputService.getOutPutById(outId); + if (output != null) { + break; + } + } ItemVO predictItem = mmPredictItemService.getItemByIdFromCache(output.getItemid()); if (predictItem.getLastTime() != null) { predictTime = predictItem.getLastTime(); @@ -329,10 +340,10 @@ } String timeFormat = StringUtils.isBlank(reqVO.getTimeFormat()) ? DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND : reqVO.getTimeFormat(); PreLineTypeEnum lineType = chartParams.get(CommonConstant.LINE_TYPE) == null ? PreLineTypeEnum.TN : PreLineTypeEnum.getEumByCode(chartParams.get(CommonConstant.LINE_TYPE)); - BigDecimal rangeH = chartParams.get(CommonConstant.RANGE_H) == null ? BigDecimal.ZERO : new BigDecimal(chartParams.get(CommonConstant.RANGE_H)); - BigDecimal rangeL = chartParams.get(CommonConstant.RANGE_L) == null ? BigDecimal.ZERO : new BigDecimal(chartParams.get(CommonConstant.RANGE_L)); - BigDecimal limitH = chartParams.get(CommonConstant.LIMIT_H) == null ? BigDecimal.ZERO : new BigDecimal(chartParams.get(CommonConstant.LIMIT_H)); - BigDecimal limitL = chartParams.get(CommonConstant.LIMIT_L) == null ? BigDecimal.ZERO : new BigDecimal(chartParams.get(CommonConstant.LIMIT_L)); + BigDecimal rangeH = chartParams.get(CommonConstant.RANGE_H) == null ? null : new BigDecimal(chartParams.get(CommonConstant.RANGE_H)); + BigDecimal rangeL = chartParams.get(CommonConstant.RANGE_L) == null ? null : new BigDecimal(chartParams.get(CommonConstant.RANGE_L)); + BigDecimal limitH = chartParams.get(CommonConstant.LIMIT_H) == null ? null : new BigDecimal(chartParams.get(CommonConstant.LIMIT_H)); + BigDecimal limitL = chartParams.get(CommonConstant.LIMIT_L) == null ? null : new BigDecimal(chartParams.get(CommonConstant.LIMIT_L)); int lengthLeft = chartParams.get(CommonConstant.LENGTH_LEFT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_LEFT)).intValue(); int lengthRight = chartParams.get(CommonConstant.LENGTH_RIGHT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_RIGHT)).intValue(); @@ -358,6 +369,7 @@ dataView.setRealData(new ArrayList<>()); } dataView.setCurData(mmItemResultJsonService.getData(outPut.getId(), predictTime, timeFormat)); + dataView.setLineType(lineType.getCode()); switch (lineType) { case TN: dataView.setPreDataN(mmItemResultService.getData(outPut.getId(), startTime, endTime, timeFormat)); @@ -369,6 +381,10 @@ default: break; } + if (!CollectionUtils.isEmpty(dataView.getRealData())) { + Object[] rdo = dataView.getRealData().get(dataView.getRealData().size() - 1); + dataView.setCurrValue(new BigDecimal(rdo[1].toString())); + } if (!CollectionUtils.isEmpty(dataView.getCurData())) { List<Double> curList = dataView.getCurData().stream().map(t -> { @@ -376,12 +392,20 @@ }).collect(Collectors.toList()); dataView.setPreMax(new BigDecimal(curList.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP)); dataView.setPreMin(new BigDecimal(curList.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP)); + dataView.setPreLast(new BigDecimal(curList.get(curList.size() - 1))); + dataView.setPreCumulant(new BigDecimal(curList.stream().mapToDouble(Double::doubleValue).sum()) + .divide(new BigDecimal(HOUR_MINS), 2, BigDecimal.ROUND_HALF_UP)); } String alarmObj = chartParams.get(CommonConstant.ALARM_OBJ); if (StringUtils.isNotBlank(alarmObj)) { List<AlarmMessageRespDTO> alarmList = ConvertUtils.sourceToTarget(mmPredictAlarmMessageService.getList(alarmObj, predictTime), AlarmMessageRespDTO.class); dataView.setAlarmList(alarmList); + if (CollectionUtils.isEmpty(alarmList)) { + dataView.setAlarmMessage("暂无预警信息"); + } else { + dataView.setAlarmMessage(alarmList.get(0).getContent()); + } } result.setPredictTime(predictTime); @@ -620,27 +644,146 @@ return result; } + public Map<String, BigDecimal> getPredictLastValue(PredictLastValueReqVO reqVO) { + Map<String, BigDecimal> result = new HashMap<>(reqVO.getItemNos().size()); + if (CollectionUtils.isEmpty(reqVO.getItemNos())) { + return result; + } + List<String[]> itemNos = reqVO.getItemNos(); + for (String[] itemNo : itemNos) { + String key = itemNo[0] + "_" + itemNo[1] + "_" + itemNo[2]; + ItemVO predictItem = mmPredictItemService.getItemByItemNo(itemNo[0]); + if (predictItem == null || predictItem.getLastTime() == null) { + result.put(key, BigDecimal.ZERO); + } + MmItemOutputEntity outPut = mmItemOutputService.getByItemid(predictItem.getId(), itemNo[1], itemNo[2]); + + Date predictTime = predictItem.getLastTime(); + List<Object[]> curData = mmItemResultJsonService.getData(outPut.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); + if(CollectionUtils.isEmpty(curData)) { + result.put(key, BigDecimal.ZERO); + } else { + result.put(key, new BigDecimal(curData.get(curData.size() - 1)[1].toString())); + } + } + return result; + } + + @Override + public Map<String,List<Object[]>> getElectricPredictData(String itemCode) { + ItemVO predictItem = mmPredictItemService.getItemByItemNo(itemCode); + if (null == predictItem) { + return new HashMap<>(); + } + List<Integer> resultIndexs = new ArrayList<>(); + resultIndexs.add(0); + resultIndexs.add(1); + resultIndexs.add(2); + List<MmItemOutputEntity> outPuts = mmItemOutputService.getByItemid(predictItem.getId(),"predictValues",resultIndexs); + if (CollectionUtils.isEmpty(outPuts)) { + return new HashMap<>(); + } + InfluxModelResultByOutPutIdsPOJO pojo = new InfluxModelResultByOutPutIdsPOJO(); + pojo.setOutPutIds(outPuts.stream().map(MmItemOutputEntity::getId).collect(Collectors.toList())); + pojo.setType(DataTypeEnum.FLOAT.getCode()); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(predictItem.getLastTime()); + calendar.add(Calendar.DAY_OF_YEAR, 7); + Map<String, List<InfluxModelResultVO>> outPutDatas = influxDBService.queryModelResultsByOutPutIds(pojo, predictItem.getLastTime(), calendar.getTime()); + Map<String,List<Object[]>> result = new HashMap<>(outPuts.size()); + for (MmItemOutputEntity outPut : outPuts) { + String outPutId = outPut.getId(); + if (outPutDatas.containsKey(outPutId)) { + List<InfluxModelResultVO> influxModelResultVOS = outPutDatas.get(outPutId); + result.put(null == outPut.getResultIndex() ? outPut.getResultstr() : outPut.getResultstr()+"_"+outPut.getResultIndex(),influxModelResultVOS.stream().map(e -> { + Object[] values = new Object[2]; + values[0] = DateUtils.format(Date.from(e.getTimestamp()), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); + values[1] = Double.valueOf(e.getValue().toString()); + return values; + }).collect(Collectors.toList())); + } + } + return result; + } + + @Override + public String getLastScheduleData(String scheduleCode) { + if (StringUtils.isBlank(scheduleCode)) { + return null; + } + return stScheduleRecordService.getLastScheduleResult(scheduleCode); + } + + @Override + public List<Map<String, Object>> getRealTimeStatus(List<Map<String, Object>> machines) { + List<String> pointNos = new ArrayList<>(16); + for (Map<String, Object> machine : machines) { + List<String> list = (List<String>) machine.get("pointNos"); + pointNos.addAll(list); + } + Map<String, Object> pointValues = dataPointApi.queryPointsRealValue(pointNos); + List<Map<String, Object>> results = new ArrayList<>(); + for (Map<String, Object> machine : machines) { + List<String> pointNoList = (List<String>) machine.get("pointNos"); + if (!pointValues.containsKey(pointNoList.get(0)) || !pointValues.containsKey(pointNoList.get(1))) { + machine.put("status",false); + machine.put("num",0); + results.add(machine); + continue; + } + Double PValue = Double.valueOf(pointValues.get(pointNoList.get(0)).toString()); + Double QValue = Double.valueOf(pointValues.get(pointNoList.get(1)).toString()); + Double cos = calculateCos(PValue, QValue); + if (cos.equals(0.0)) { + machine.put("status",false); + machine.put("num",0); + }else { + machine.put("status",true); + machine.put("num",cos); + } + results.add(machine); + } + return results; + } + + /** + * 计算功率因数 p²/(根号:p²+Q²) + **/ + public Double calculateCos(Double PValue,Double QValue) { + // 绝对值 + PValue = Math.abs(PValue); + QValue = Math.abs(QValue); + //PValue [0,0.001] 直接判断为关闭返回0 + if (PValue >= 0 && PValue <= 0.001) { + return 0.0; + }else { + BigDecimal result = new BigDecimal(PValue).divide(BigDecimal.valueOf(Math.sqrt(Math.pow(PValue, 2) + Math.pow(QValue, 2))), 2, BigDecimal.ROUND_HALF_UP); + return result.doubleValue(); + } + } + private Date[] calResultTime(ItemVO predictItem, Date startTimeReq, Date endTimeReq, int lengthLeft, int lengthRight) { Date[] result = new Date[3]; Date predictTime = predictItem.getLastTime(); + Integer granularity = predictItem.getGranularity(); Date startTime = startTimeReq; if (startTime == null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(predictItem.getLastTime()); - calendar.add(Calendar.MINUTE, -1 * lengthLeft); + calendar.add(Calendar.SECOND, -1 * lengthLeft * granularity); startTime = calendar.getTime(); } Date endTime = endTimeReq; if (endTime == null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(predictItem.getLastTime()); - calendar.add(Calendar.MINUTE, lengthRight); + calendar.add(Calendar.SECOND, lengthRight * granularity); endTime = calendar.getTime(); } if (endTime.getTime() <= startTime.getTime()) { Calendar calendar = Calendar.getInstance(); calendar.setTime(startTime); - calendar.add(Calendar.MINUTE, lengthRight); + calendar.add(Calendar.SECOND, lengthRight * granularity); endTime = calendar.getTime(); } result[0] = predictTime; diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/controller/admin/McsApiController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/controller/admin/McsApiController.java index d10dec7..f5fb719 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/controller/admin/McsApiController.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/controller/admin/McsApiController.java @@ -7,6 +7,7 @@ import com.iailab.module.model.api.mcs.dto.*; import com.iailab.module.model.common.utils.ApiSecurityUtils; import com.iailab.module.model.common.utils.ExcelUtil; +import com.iailab.module.model.influxdb.vo.InfluxModelResultVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; @@ -17,6 +18,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @@ -170,4 +172,29 @@ Map<String, Map<String,Double>> map = mcsApi.getPreDoubleData(reqVO); return CommonResult.success(map); } + + @PostMapping("/predict-data/last-value") + @Operation(summary = "获取最后预测值") + public CommonResult<Map<String, BigDecimal>> getPredictLastValue(@RequestBody PredictLastValueReqVO reqVO) { + Map<String, BigDecimal> data = mcsApi.getPredictLastValue(reqVO); + return CommonResult.success(data); + } + + @GetMapping("/predict-data/electric") + @Operation(summary = "电力功率因数预测结果查询") + public CommonResult<Map<String,List<Object[]>>> getElectricPredictData(@RequestParam String itemCode) { + Map<String,List<Object[]>> data = mcsApi.getElectricPredictData(itemCode); + return CommonResult.success(data); + } + @GetMapping("/schedule-data/last") + @Operation(summary = "调度模型最新结果查询") + public CommonResult<String> getLastScheduleData(@RequestParam String scheduleCode) { + return CommonResult.success(mcsApi.getLastScheduleData(scheduleCode)); + } + + @PostMapping("/machineRealTimeStatus") + @Operation(summary = "发电机组实时状态查询") + CommonResult<List<Map<String, Object>>> getRealTimeStatus(@RequestBody List<Map<String, Object>> machines) { + return CommonResult.success(mcsApi.getRealTimeStatus(machines)); + } } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/common/config/InfluxDBInstance.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/common/config/InfluxDBInstance.java index e2dbb92..926b76a 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/common/config/InfluxDBInstance.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/common/config/InfluxDBInstance.java @@ -36,7 +36,7 @@ private Set<String> isExistBucket = new HashSet<>(); - private final static String BUCKET_NAME = "bucket_model_"; + private final static String BUCKET_NAME = "bucket_"; private Logger logger = LoggerFactory.getLogger(getClass()); diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/InfluxDBService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/InfluxDBService.java index 532b170..2676343 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/InfluxDBService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/InfluxDBService.java @@ -16,5 +16,6 @@ void asyncWriteModelResults(List<InfluxModelResultPOJO> pointValues); List<InfluxModelResultVO> queryModelResults(InfluxModelResultPOJO pojo, Date startTime, Date endTime); + Map<String,List<InfluxModelResultVO>> queryModelResultsByOutPutIds(InfluxModelResultByOutPutIdsPOJO pojo, Date startTime, Date endTime); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemOutputService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemOutputService.java index c006793..c1be4eb 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemOutputService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemOutputService.java @@ -23,6 +23,7 @@ List<MmItemOutputEntity> getByItemid(String itemId); MmItemOutputEntity getByItemid(String itemid, String resultstr, String resultIndex); + List<MmItemOutputEntity> getByItemid(String itemid, String resultstr, List<Integer> resultIndexs); void deleteByItemId(String itemId); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemOutputServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemOutputServiceImpl.java index 0e3bdc7..ff058ab 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemOutputServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemOutputServiceImpl.java @@ -84,6 +84,15 @@ } @Override + public List<MmItemOutputEntity> getByItemid(String itemid, String resultstr, List<Integer> resultIndexs) { + QueryWrapper<MmItemOutputEntity> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("itemid", itemid) + .eq("resultstr", resultstr) + .in(!CollectionUtils.isEmpty(resultIndexs), "result_index", resultIndexs); + return mmItemOutputDao.selectList(queryWrapper); + } + + @Override public void deleteByItemId(String itemId) { QueryWrapper<MmItemOutputEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("itemid", itemId); @@ -101,7 +110,9 @@ return outputMap.get(outputid); } MmItemOutputEntity entity = mmItemOutputDao.selectById(outputid); - outputMap.put(outputid, entity); - return entity; + if (entity != null) { + outputMap.put(outputid, entity); + } + return outputMap.get(outputid); } } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDao.java index 2c0cd2f..949727b 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDao.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDao.java @@ -25,4 +25,6 @@ .leIfPresent(StScheduleRecordEntity::getScheduleTime, reqVO.getEndTime()) .orderByDesc(StScheduleRecordEntity::getCreateTime)); } + + String getLastScheduleResult(String scheduleCode); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordService.java index 5fe5e6b..9af3014 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordService.java @@ -19,4 +19,6 @@ StScheduleRecordRespVO getInfo(String id); void create(ScheduleResultVO resultVO); + + String getLastScheduleResult(String scheduleCode); } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordServiceImpl.java index dd844be..8002344 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordServiceImpl.java @@ -61,4 +61,9 @@ baseDao.insert(entity); stScheduleRecordDetailService.create(entity.getId(), resultVO); } + + @Override + public String getLastScheduleResult(String scheduleCode) { + return baseDao.getLastScheduleResult(scheduleCode); + } } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleDataConstructor.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleDataConstructor.java index 5f5befc..5c7cda8 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleDataConstructor.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleDataConstructor.java @@ -63,8 +63,15 @@ case MERGEITEM: // 预测值 oneMin = granularity * 1000L; - start = start - (start % oneMin); - end = end - (end % oneMin); + // 设置时间偏移量 + if (granularity >= 24*60*60) { + // 如果时间粒度大于等于一天,因为时区问题,特殊处理,否则时间为8:00,而非0:00 + start = start - ((start+8*60*60*1000) % oneMin); + end = end - ((end+8*60*60*1000) % oneMin); + } else { + start = start - (start % oneMin); + end = end - (end % oneMin); + } mins = ((end - start) / oneMin); break; case DATAPOINT: @@ -72,8 +79,14 @@ // 测点值 oneMin = 1000L * granularity; // 设置时间偏移量 - start = start - (start % oneMin) + oneMin; - end = end - (end % oneMin) + oneMin; + if (granularity >= 24*60*60) { + // 如果时间粒度大于等于一天,因为时区问题,特殊处理,否则时间为8:00,而非0:00 + start = start - ((start+8*60*60*1000) % oneMin); + end = end - ((end+8*60*60*1000) % oneMin); + } else { + start = start - (start % oneMin); + end = end - (end % oneMin); + } mins = ((end - start) / oneMin); break; case IND: diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDao.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDao.xml new file mode 100644 index 0000000..ebfceed --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDao.xml @@ -0,0 +1,10 @@ +<?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.iailab.module.model.mcs.sche.dao.StScheduleRecordDao"> + <select id="getLastScheduleResult" resultType="java.lang.String"> + SELECT t2.result_data FROM t_st_schedule_scheme t1 LEFT JOIN t_st_schedule_record t2 on t1.id = t2.scheme_id + WHERE t1.`code` = #{scheduleCode} AND result_code = "100" + ORDER BY t2.schedule_time desc + LIMIT 1 + </select> +</mapper> \ No newline at end of file -- Gitblit v1.9.3