From cb5066ddca3d7c8d0959b20715f0f46948e6753e Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期二, 14 一月 2025 14:40:42 +0800 Subject: [PATCH] Merge branch 'master' of http://dlindusit.com:53929/r/iailab-plat --- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/impl/InfluxDBServiceImpl.java | 46 +++++++++ iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmPredictItemDao.xml | 26 +++++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/controller/admin/ApiDataController.java | 12 ++ iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml | 9 + 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/point/service/DaMathPointService.java | 7 + iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java | 14 ++ iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDoubleDataReqVO.java | 20 ++++ iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java | 4 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/controller/admin/McsApiController.java | 7 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java | 39 +++++++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/InfluxDBService.java | 3 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/point/DataPointApiImpl.java | 27 +++++ iailab-module-model/iailab-module-model-biz/src/main/resources/logback-spring.xml | 8 iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/dto/ApiPointDTO.java | 3 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/common/config/InfluxDBInstance.java | 6 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictItemDao.java | 2 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/DaPointService.java | 4 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictItemService.java | 2 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/DaPointDao.java | 5 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictItemServiceImpl.java | 11 ++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaMathPointServiceImpl.java | 3 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/pojo/InfluxModelResultByOutPutIdsPOJO.java | 23 ++++ 23 files changed, 277 insertions(+), 9 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..917915f 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); - + @GetMapping(PREFIX + "/info/nos/{pointNo}") + @Operation(summary = "根据计算点编号查询测点集合") + PageResult<ApiPointDTO> getPageByNo(@PathVariable("pointNo") String pointNo); } 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..da5269e 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 @@ -26,4 +26,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-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..3611905 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,6 +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.ApiPointDTO; 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; @@ -325,4 +328,13 @@ List<IndItemValueVO> list = indItemCollector.queryValue(dto.getItemNo(), dto.getStart(), dto.getEnd()); return success(ConvertUtils.sourceToTarget(list, ApiIndItemValueDTO.class)); } + + @PermitAll + @GetMapping("/query-points/info") + @Operation(summary = "根据计算点编号查询测点集合") + public CommonResult<PageResult<ApiPointDTO>> queryPageByNo(@RequestParam String pointNo) { + PageResult<ApiPointDTO> data = dataPointApi.getPageByNo(pointNo); + 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..aca9940 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,8 +8,10 @@ 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.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 org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; @@ -17,6 +20,7 @@ import java.util.*; import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * @author PanZhibao @@ -35,6 +39,9 @@ @Autowired private InfluxDBService influxDBService; + + @Autowired + private DaMathPointService daMathPointService; @Override public ApiPointDTO getInfoById(String pointId) { @@ -130,4 +137,24 @@ return false; } } + + @Override + public PageResult<ApiPointDTO> getPageByNo(String pointNo) { + DaPointDTO daPointDTO = daPointService.getSimpleInfoByNo(pointNo); + DaMathPointDTO daMathPointDTO = daMathPointService.getByPoint(daPointDTO.getId()); + String[] pointNos = daMathPointDTO.getExpression().split("[-+]+"); + HashMap<Integer, String> map = new HashMap<>(); + IntStream.range(0, pointNos.length).forEach(i -> map.put(i, pointNos[i])); + List<String> pointNosL = new ArrayList<>(); + for (String value : map.values()) { + pointNosL.add(value); + } + PageResult<ApiPointDTO> pageResult = daPointService.getPointPage(map); + Map<String, Object> CurrentValueMap = pointCollector.getCurrentValue(pointNosL); + pageResult.getList().stream().map(item -> { + item.setCurrentValue(CurrentValueMap.get(item.getPointNo())); + return item; + }).collect(Collectors.toList()); + return pageResult; + } } \ No newline at end of file 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..60d66ba 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; @@ -37,6 +40,8 @@ return getPageList(getPage(reqVO), reqVO); } + IPage<ApiPointDTO> getPointPage(IPage<DaPointEntity> page, @Param("paramsMap") HashMap map); + default DaPointEntity selectByPointName(String pointName) { return selectOne("point_name", pointName); } 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..66ebb95 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; @@ -69,4 +71,6 @@ List<DaPointDTO> getMeasurePoint(DaPointPageReqVO reqVO); List<DaPointDTO> getMathPoint(DaPointPageReqVO reqVO); + + PageResult<ApiPointDTO> getPointPage(HashMap 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..cf84ff1 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; @@ -306,6 +308,12 @@ } @Override + public PageResult<ApiPointDTO> getPointPage(HashMap map) { + IPage<ApiPointDTO> page = daPointDao.getPointPage(getPage(map, Constant.CREATE_TIME, false),map); + return new PageResult<>(page.getRecords(), page.getTotal()); + } + + @Override public List<DaPointDTO> getMathPoint(String freq) { Map<String, Object> params = new HashMap<>(); params.put("pointType", PointTypeEnum.CALCULATE_POINT.getCode()); @@ -395,7 +403,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 +452,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/resources/mapper/point/DaPointDao.xml b/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml index 4b08398..bacf39d 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 @@ -286,5 +286,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 729c468..7a70e0a 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 @@ -97,6 +97,10 @@ @Operation(summary = "获取预警信息和调度建议分页列表") PageResult<StAlarmAndSuggestRespVO> getAlarmAndSuggestPage(@RequestBody StAlarmAndSuggestPageReqVO reqVO); + @PostMapping(PREFIX + "/predict-data/doubleValue") + @Operation(summary = "获取多个预测项Double类型数据") + Map<String, Map<String, Double>> getPreDoubleData(PreDoubleDataReqVO reqVO); + /*@PostMapping(PREFIX + "/predict-data/last-value") @Operation(summary = "获取最后预测值") Double getPredictLastValue();*/ diff --git a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDoubleDataReqVO.java b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDoubleDataReqVO.java new file mode 100644 index 0000000..f6a0f6c --- /dev/null +++ b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDoubleDataReqVO.java @@ -0,0 +1,20 @@ +package com.iailab.module.model.api.mcs.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @description: + * @author: dzd + * @date: 2025/1/13 13:59 + **/ +@Data +public class PreDoubleDataReqVO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(description = "预测编号") + private List<String> itemNos; +} \ No newline at end of file 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 ea66d6a..cb22a4f 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 @@ -12,13 +12,19 @@ import com.iailab.module.data.common.ApiDataQueryDTO; import com.iailab.module.model.api.mcs.McsApi; import com.iailab.module.model.api.mcs.dto.*; +import com.iailab.module.model.common.enums.DataTypeEnum; import com.iailab.module.model.enums.CommonConstant; import com.iailab.module.model.common.enums.PreLineTypeEnum; +import com.iailab.module.model.influxdb.pojo.InfluxModelResultByOutPutIdsPOJO; +import com.iailab.module.model.influxdb.service.InfluxDBService; +import com.iailab.module.model.influxdb.vo.InfluxModelResultVO; import com.iailab.module.model.mcs.pre.entity.DmModuleEntity; import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity; import com.iailab.module.model.mcs.pre.entity.MmPredictAlarmMessageEntity; import com.iailab.module.model.mcs.pre.service.*; +import com.iailab.module.model.mcs.pre.vo.MmItemOutputRespVO; 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.StScheduleSchemeService; import com.iailab.module.model.mcs.sche.service.StScheduleSuggestService; @@ -35,7 +41,9 @@ import java.math.BigDecimal; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author PanZhibao @@ -88,6 +96,9 @@ @Autowired private ChartParamService chartParamService; + + @Autowired + private InfluxDBService influxDBService; private int HOUR_MINS = 60; @@ -587,6 +598,34 @@ return stScheduleSchemeService.getAlarmAndSuggestPage(reqVO); } + @Override + public Map<String, Map<String, Double>> getPreDoubleData(PreDoubleDataReqVO reqVO) { + List<MmPredictItemRespVO> doubleItemOutPuts = mmPredictItemService.getDoubleOutPutsByItemNos(reqVO.getItemNos()); + + //<itemNo,<resultStr,double>> + Map<String, Map<String, Double>> result = new HashMap<>(reqVO.getItemNos().size()); + + for (MmPredictItemRespVO mmPredictItemRespVO : doubleItemOutPuts) { + List<String> outPutIds = mmPredictItemRespVO.getOutPuts().stream().map(MmItemOutputRespVO::getId).collect(Collectors.toList()); + InfluxModelResultByOutPutIdsPOJO pojo = new InfluxModelResultByOutPutIdsPOJO(); + pojo.setOutPutIds(outPutIds); + pojo.setType(DataTypeEnum.FLOAT.getCode()); + Map<String, List<InfluxModelResultVO>> outPutIdDoubles = influxDBService.queryModelResultsByOutPutIds(pojo, mmPredictItemRespVO.getLastTime(), mmPredictItemRespVO.getLastTime()); + Map<String, Double> outPutIdDouble = new HashMap<>(outPutIds.size()); + for (MmItemOutputRespVO outPut : mmPredictItemRespVO.getOutPuts()) { + String outPutId = outPut.getId(); + if (outPutIdDoubles.containsKey(outPutId)) { + List<InfluxModelResultVO> influxModelResultVOS = outPutIdDoubles.get(outPutId); + if (!CollectionUtils.isEmpty(influxModelResultVOS)) { + outPutIdDouble.put(outPut.getResultstr(),Double.valueOf(influxModelResultVOS.get(0).getValue().toString())); + } + } + } + result.put(mmPredictItemRespVO.getItemno(),outPutIdDouble); + } + return result; + } + private Date[] calResultTime(ItemVO predictItem, Date startTimeReq, Date endTimeReq, int lengthLeft, int lengthRight) { Date[] result = new Date[3]; Date predictTime = predictItem.getLastTime(); 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 b97d09c..d10dec7 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 @@ -163,4 +163,11 @@ List<ChartParamDTO> chartParamList = mcsApi.getChartParamList(chartCode); return CommonResult.success(chartParamList); } + + @PostMapping("/predict-data/doubleValue") + @Operation(summary = "获取多个预测项Double类型数据") + public CommonResult<Map<String, Map<String,Double>>> getPreDoubleData(@RequestBody PreDoubleDataReqVO reqVO) { + Map<String, Map<String,Double>> map = mcsApi.getPreDoubleData(reqVO); + return CommonResult.success(map); + } } \ 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 28ea1a0..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 @@ -4,6 +4,7 @@ import com.influxdb.client.InfluxDBClient; import com.influxdb.client.InfluxDBClientFactory; import com.influxdb.client.domain.Bucket; +import com.influxdb.client.domain.BucketRetentionRules; import com.influxdb.client.domain.Organization; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,6 +41,8 @@ private Logger logger = LoggerFactory.getLogger(getClass()); private InfluxDBClient client; + // bucket过期时间 + private Integer everySeconds = 3600 * 24 * 10; public InfluxDBClient getClient() { try { @@ -60,7 +63,8 @@ Bucket bucketByName = client.getBucketsApi().findBucketByName(bucketName); if (null == bucketByName) { Organization organization = client.getOrganizationsApi().findOrganizations().stream().filter(e -> e.getName().equals(org)).findFirst().orElseThrow(() -> new RuntimeException("influxdb:org不存在,org:" + org)); - client.getBucketsApi().createBucket(bucketName,organization); + // 创建Bucket,并设置过期时间 + client.getBucketsApi().createBucket(bucketName,new BucketRetentionRules().everySeconds(everySeconds),organization); }else { isExistBucket.add(bucketName); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/pojo/InfluxModelResultByOutPutIdsPOJO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/pojo/InfluxModelResultByOutPutIdsPOJO.java new file mode 100644 index 0000000..13accb1 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/pojo/InfluxModelResultByOutPutIdsPOJO.java @@ -0,0 +1,23 @@ +package com.iailab.module.model.influxdb.pojo; + +import lombok.Data; + +import java.io.Serializable; +import java.time.Instant; +import java.util.List; + +/** + * @description: + * @author: dzd + * @date: 2025/1/13 14:39 + **/ +@Data +public class InfluxModelResultByOutPutIdsPOJO implements Serializable { + private static final long serialVersionUID = 1L; + + private List<String> outPutIds; + + private Instant timestamp; + + private String type; +} 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 45667bd..532b170 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 @@ -1,10 +1,12 @@ package com.iailab.module.model.influxdb.service; +import com.iailab.module.model.influxdb.pojo.InfluxModelResultByOutPutIdsPOJO; import com.iailab.module.model.influxdb.pojo.InfluxModelResultPOJO; import com.iailab.module.model.influxdb.vo.InfluxModelResultVO; import java.util.Date; import java.util.List; +import java.util.Map; /** * InfluxDB操作类 @@ -14,4 +16,5 @@ 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/influxdb/service/impl/InfluxDBServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/impl/InfluxDBServiceImpl.java index 3e93489..7dd2fc5 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/impl/InfluxDBServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/impl/InfluxDBServiceImpl.java @@ -2,6 +2,7 @@ import com.iailab.module.model.influxdb.common.config.InfluxDBInstance; import com.iailab.module.model.influxdb.common.utils.MeasurementUtils; +import com.iailab.module.model.influxdb.pojo.InfluxModelResultByOutPutIdsPOJO; import com.iailab.module.model.influxdb.pojo.InfluxModelResultPOJO; import com.iailab.module.model.influxdb.service.InfluxDBService; import com.iailab.module.model.influxdb.vo.InfluxModelResultVO; @@ -17,6 +18,7 @@ import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.*; +import java.util.stream.Collectors; /** * InfluxDB操作类 @@ -80,4 +82,48 @@ } return dataList; } + + @Override + public Map<String, List<InfluxModelResultVO>> queryModelResultsByOutPutIds(InfluxModelResultByOutPutIdsPOJO pojo, Date startTime, Date endTime) { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.MILLISECOND, 0); + String start = startTime.toInstant().toString(); + + if (startTime.getTime() == endTime.getTime()) { + // 如果相等,则engTime加1毫秒,否则influxdb报错(因为influxdb的range函数是左闭右开区间,所以将engTime加一毫秒,才可以查到startTime时间点的数据) + endTime.setTime(endTime.getTime() + 1); + } + String stop = endTime.toInstant().toString(); + + String measurement = MeasurementUtils.getMeasurement(pojo.getType()); + // 拼接OutPutIds + String outPutIdsFilter = pojo.getOutPutIds().stream().map(id -> "r[\"outPutId\"] == \"" + id + "\"").collect(Collectors.joining(" or ")); + StringBuilder sb = new StringBuilder(); + sb.append("from(bucket:\"" + influxDBInstance.getBucket() + "\") "); + sb.append("|> range(start: ").append(start).append(", stop: ").append(stop).append(") "); + sb.append("|> filter(fn: (r) => r[\"_measurement\"] == \"" + measurement + "\")"); + sb.append("|> filter(fn: (r) => r[\"_field\"] == \"value\")"); + sb.append("|> filter(fn: (r) => " + outPutIdsFilter + ")"); + sb.append("|> sort(columns: [\"_time\"]) "); + sb.append("|> yield(name: \"mean\")"); + log.info("influxdbSql===============" + sb); + List<FluxTable> tables = queryApi.query(sb.toString(), influxDBInstance.org); + + Map<String, List<InfluxModelResultVO>> result = new HashMap<>(pojo.getOutPutIds().size()); + for (FluxTable table : tables) { + List<FluxRecord> records = table.getRecords(); + for (FluxRecord record : records) { + String outPutId = record.getValueByKey("outPutId").toString(); + if (result.containsKey(outPutId)) { + result.get(outPutId).add( new InfluxModelResultVO(record.getValueByKey("_value"),record.getTime())); + } else { + List<InfluxModelResultVO> dataList = new ArrayList<>(); + InfluxModelResultVO vo = new InfluxModelResultVO(record.getValueByKey("_value"),record.getTime()); + dataList.add(vo); + result.put(outPutId,dataList); + } + } + } + return result; + } } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictItemDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictItemDao.java index 8786e02..b07c54c 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictItemDao.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictItemDao.java @@ -35,4 +35,6 @@ default IPage<MmPredictItemRespVO> selectPage(MmPredictItemPageReqVO reqVO) { return getPageList(getPage(reqVO), reqVO); } + + List<MmPredictItemRespVO> getDoubleOutPutsByItemNos(Map<String, Object> params); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictItemService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictItemService.java index 72dc043..8cb78be 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictItemService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictItemService.java @@ -45,4 +45,6 @@ List<MmPredictItemRespVO> list(Map<String, Object> params); MmPredictItemEntity getById(String id); + + List<MmPredictItemRespVO> getDoubleOutPutsByItemNos(List<String> itemNos); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictItemServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictItemServiceImpl.java index 0bd305c..268b8a0 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictItemServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictItemServiceImpl.java @@ -78,6 +78,17 @@ return mmPredictItemDao.selectById(id); } + @Override + public List<MmPredictItemRespVO> getDoubleOutPutsByItemNos(List<String> itemNos) { + if (CollectionUtils.isEmpty(itemNos)) { + return new ArrayList<>(); + } + Map<String, Object> params = new HashMap(1); + params.put("itemNos", itemNos); + List<MmPredictItemRespVO> list = mmPredictItemDao.getDoubleOutPutsByItemNos(params); + return list; + } + @DSTransactional(rollbackFor = Exception.class) @Override public void add(MmPredictItemDTO mmPredictItemDto) { diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/logback-spring.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/logback-spring.xml index 7c90fd0..9c48330 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/resources/logback-spring.xml +++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/logback-spring.xml @@ -31,7 +31,7 @@ <!-- 启动服务时,是否清理历史日志,一般不建议清理 --> <cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart> <!-- 日志文件,到达多少容量,进行滚动 --> - <maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-100MB}</maxFileSize> + <maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-50MB}</maxFileSize> <!-- 日志文件的总大小,0 表示不限制 --> <totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap> <!-- 日志文件的保留天数 --> @@ -57,15 +57,15 @@ </appender> <!-- 本地环境 --> - <springProfile name="local"> - <root level="INFO"> + <springProfile name="dev"> + <root level="DEBUG"> <appender-ref ref="STDOUT"/> <appender-ref ref="GRPC"/> <!-- 本地环境下,如果不想接入 SkyWalking 日志服务,可以注释掉本行 --> <appender-ref ref="ASYNC"/> <!-- 本地环境下,如果不想打印日志,可以注释掉本行 --> </root> </springProfile> <!-- 其它环境 --> - <springProfile name="dev,test,stage,prod,default"> + <springProfile name="test,stage,prod,default"> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="ASYNC"/> diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmPredictItemDao.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmPredictItemDao.xml index 58885d1..940250c 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmPredictItemDao.xml +++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmPredictItemDao.xml @@ -88,10 +88,12 @@ <result property="itemorder" column="ITEMORDER"/> <result property="status" column="STATUS"/> <result property="categoryid" column="CATEGORYID"/> + <result property="lastTime" column="last_time"/> <collection property="outPuts" ofType="com.iailab.module.model.mcs.pre.vo.MmItemOutputRespVO"> <result property="id" column="out_put_id"/> <result property="outputorder" column="out_put_order"/> <result property="resultName" column="result_name"/> + <result property="resultstr" column="result_str"/> </collection> </resultMap> @@ -191,6 +193,30 @@ FROM t_mm_predict_merge_item t1 WHERE t1.itemid = #{ITEMID} </select> + <select id="getDoubleOutPutsByItemNos" resultMap="MmPredictItemRespVO" parameterType="map"> + SELECT + TMPI.ID, + TMPI.ITEMNO, + TMPI.ITEMNAME, + TMPI.ITEMTYPEID, + TMPI.predictlength, + TMPI.GRANULARITY, + TMPI.ISFUSE, + TMPI.WORKCHECKED, + TMPI.STATUS, + TMIO.id out_put_id, + TMIO.outputorder out_put_order, + TMIO.resultstr result_str, + TMIO.result_name, + TMIS.last_time + FROM T_MM_PREDICT_ITEM TMPI + LEFT JOIN t_mm_item_output TMIO ON TMIO.itemid = TMPI.ID AND TMIO.result_type = 3 + LEFT JOIN t_mm_item_status TMIS ON TMIS.item_id = TMPI.ID + WHERE TMPI.itemno in + <foreach collection="itemNos" item="item" open="(" close=")" separator=","> + #{item} + </foreach> + </select> </mapper> \ No newline at end of file -- Gitblit v1.9.3