iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java
@@ -161,8 +161,8 @@ @Operation(summary = "获取15分钟内最新预警建议信息") List<ScheduleSuggestRespDTO> getLastSuggest(@RequestParam Map<String, Object> params); @PostMapping(PREFIX + "/predict-item/autoAdjustByCode") @Operation(summary = "自动调整") Boolean autoAdjustByCode(@RequestBody MmPredictAutoAdjustReqVO reqVO); @PostMapping(PREFIX + "/predict-data/time-value") @Operation(summary = "根据预测时间获取最后预测值") Map<String, BigDecimal> getPredictValueByTime(@RequestBody PredictLastValueReqVO reqVO); } iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PredictLastValueReqVO.java
@@ -1,8 +1,10 @@ package com.iailab.module.model.api.mcs.dto; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.Date; import java.util.List; /** @@ -15,4 +17,7 @@ public class PredictLastValueReqVO { private List<String[]> itemNos; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date predictTime; } iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mdk/MdkApi.java
@@ -1,5 +1,6 @@ package com.iailab.module.model.api.mdk; import com.iailab.module.model.api.mcs.dto.MmPredictAutoAdjustReqVO; import com.iailab.module.model.api.mdk.dto.*; import com.iailab.module.model.enums.ApiConstants; import io.swagger.v3.oas.annotations.Operation; @@ -48,4 +49,8 @@ @PostMapping(PREFIX + "/schedule-model/out") @Operation(summary = "调度模型数据下发") Boolean scheduleModelOut(@RequestBody MdkScheduleRespDTO dto); @PostMapping(PREFIX + "/predict-item/autoAdjustByCode") @Operation(summary = "预测自动调整") Boolean autoAdjustByCode(@RequestBody MmPredictAutoAdjustReqVO reqVO); } iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java
@@ -117,9 +117,6 @@ @Autowired private StScheduleModelSettingService stScheduleModelSettingService; @Autowired private MmPredictAutoAdjustConfigService autoAdjustService; private int HOUR_MINS = 60; @Override @@ -458,12 +455,23 @@ if (!CollectionUtils.isEmpty(dataView.getCurData())) { List<Double> curList = dataView.getCurData().stream().map(t -> { return new Double(t[1].toString()); }).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)).setScale(2, BigDecimal.ROUND_HALF_UP)); dataView.setPreCumulant(new BigDecimal(curList.stream().mapToDouble(Double::doubleValue).sum()).setScale(2, BigDecimal.ROUND_HALF_UP)); try { return new Double(t[1].toString()); } catch (NumberFormatException e) { return null; } }).filter(Objects::nonNull).collect(Collectors.toList()); if (!curList.isEmpty()) { 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)).setScale(2, BigDecimal.ROUND_HALF_UP)); dataView.setPreCumulant(new BigDecimal(curList.stream().mapToDouble(Double::doubleValue).sum()).setScale(2, BigDecimal.ROUND_HALF_UP)); } else { dataView.setPreMax(null); dataView.setPreMin(null); dataView.setPreLast(null); dataView.setPreCumulant(null); } } String alarmObj = chartParams.get(CommonConstant.ALARM_OBJ); @@ -786,6 +794,7 @@ return result; } @Override public Map<String, BigDecimal> getPredictLastValue(PredictLastValueReqVO reqVO) { Map<String, BigDecimal> result = new HashMap<>(reqVO.getItemNos().size()); if (CollectionUtils.isEmpty(reqVO.getItemNos())) { @@ -808,6 +817,30 @@ } Date predictTime = predictItem.getLastTime(); List<Object[]> curData = mmItemResultJsonService.getData(outputId, 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, BigDecimal> getPredictValueByTime(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]); List<Object[]> curData = mmItemResultJsonService.getData(outPut.getId(), reqVO.getPredictTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); if (CollectionUtils.isEmpty(curData)) { result.put(key, BigDecimal.ZERO); } else { @@ -948,11 +981,6 @@ @Override public List<ScheduleSuggestRespDTO> getLastSuggest(Map<String, Object> params) { return stScheduleSuggestService.getLastSuggest(params); } @Override public Boolean autoAdjustByCode(MmPredictAutoAdjustReqVO reqVO) { return autoAdjustService.autoAdjustByCode(reqVO.getConfigCode(), reqVO.getAdjustStartTime()); } private Date[] calResultTime(ItemVO predictItem, Date startTimeReq, Date endTimeReq, int lengthLeft, int lengthRight) { iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.iailab.module.data.api.point.DataPointApi; import com.iailab.module.data.api.point.dto.ApiPointValueWriteDTO; import com.iailab.module.model.api.mcs.dto.MmPredictAutoAdjustReqVO; import com.iailab.module.model.api.mcs.dto.StScheduleModelOutDTO; import com.iailab.module.model.api.mdk.MdkApi; import com.iailab.module.model.api.mdk.dto.*; @@ -13,6 +14,7 @@ import com.iailab.module.model.enums.PredictItemTypeEnum; import com.iailab.module.model.mcs.pre.entity.DmModuleEntity; import com.iailab.module.model.mcs.pre.service.DmModuleService; import com.iailab.module.model.mcs.pre.service.MmPredictAutoAdjustConfigService; import com.iailab.module.model.mcs.pre.service.MmPredictItemService; import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity; import com.iailab.module.model.mcs.sche.entity.StAdjustConfigEntity; @@ -80,6 +82,9 @@ @Autowired private RedisTemplate<String, Object> redisTemplate; @Autowired private MmPredictAutoAdjustConfigService autoAdjustService; public static final long offset = 60 * 3L; @@ -409,4 +414,9 @@ } return true; } @Override public Boolean autoAdjustByCode(MmPredictAutoAdjustReqVO reqVO) { return autoAdjustService.autoAdjustByCode(reqVO.getConfigCode(), reqVO.getAdjustStartTime()); } } iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemResultJsonServiceImpl.java
@@ -29,7 +29,11 @@ QueryWrapper<MmItemResultJsonEntity> wrapper = new QueryWrapper<>(); wrapper.eq("outputid", outputId) .eq("predicttime", DateUtils.format(predictTime,timeFormat)); MmItemResultJsonEntity data = baseDao.selectOne(wrapper); MmItemResultJsonEntity data = null; List<MmItemResultJsonEntity> dataList = baseDao.selectList(wrapper); if (!CollectionUtils.isEmpty(dataList)) { data = dataList.get(0); } if (data == null || StringUtils.isBlank(data.getJsonvalue())) { return result; } iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleSchemeDao.xml
@@ -37,6 +37,20 @@ #{item} </foreach> </if> <if test="params.title != null and params.title.size() > 0"> and t.title in <foreach collection="params.title" item="item" open="(" close=")" separator=","> #{item} </foreach> </if> <if test="params.contentKey != null and params.contentKey.size() > 0"> AND ( <foreach collection="params.contentKey" item="item" open="" separator="OR" close=""> t.content like concat('%',#{item},'%') </foreach> ) </if> </where> order by t.time desc iailab-module-system/iailab-module-system-biz/pom.xml
@@ -168,45 +168,45 @@ <!-- 设置构建的 jar 包名 --> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.7.0</version> <executions> <!-- 以下配置说明执行mvn的package命令时候,会执行proguard--> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <!-- 就是输入Jar的名称,我们要知道,代码混淆其实是将一个原始的jar,生成一个混淆后的jar,那么就会有输入输出。 --> <injar>${project.build.finalName}.jar</injar> <!-- 输出jar名称,输入输出jar同名的时候就是覆盖,也是比较常用的配置。 --> <outjar>${project.build.finalName}.jar</outjar> <!-- 是否混淆 默认是true --> <obfuscate>true</obfuscate> <putLibraryJarsInTempDir>true</putLibraryJarsInTempDir> <!-- 配置一个文件,通常叫做proguard.cfg,该文件主要是配置options选项,也就是说使用proguard.cfg那么options下的所有内容都可以移到proguard.cfg中 --> <proguardInclude>${project.basedir}/proguard.cfg</proguardInclude> <!-- 额外的jar包,通常是项目编译所需要的jar --> <libs> <lib>${java.home}/lib/rt.jar</lib> <lib>${java.home}/lib/jce.jar</lib> <lib>${java.home}/lib/jsse.jar</lib> </libs> <!-- 对输入jar进行过滤比如,如下配置就是对META-INFO文件不处理。 --> <inLibsFilter>!META-INF/**,!META-INF/versions/9/**.class</inLibsFilter> <!-- 这是输出路径配置,但是要注意这个路径必须要包括injar标签填写的jar --> <outputDirectory>${project.basedir}/target</outputDirectory> <!--这里特别重要,此处主要是配置混淆的一些细节选项,比如哪些类不需要混淆,哪些需要混淆--> <options> <!-- 可以在此处写option标签配置,不过我上面使用了proguardInclude,故而我更喜欢在proguard.cfg中配置 --> </options> </configuration> </plugin> <!-- <plugin>--> <!-- <groupId>com.github.wvengen</groupId>--> <!-- <artifactId>proguard-maven-plugin</artifactId>--> <!-- <version>2.7.0</version>--> <!-- <executions>--> <!-- <!– 以下配置说明执行mvn的package命令时候,会执行proguard–>--> <!-- <execution>--> <!-- <phase>package</phase>--> <!-- <goals>--> <!-- <goal>proguard</goal>--> <!-- </goals>--> <!-- </execution>--> <!-- </executions>--> <!-- <configuration>--> <!-- <!– 就是输入Jar的名称,我们要知道,代码混淆其实是将一个原始的jar,生成一个混淆后的jar,那么就会有输入输出。 –>--> <!-- <injar>${project.build.finalName}.jar</injar>--> <!-- <!– 输出jar名称,输入输出jar同名的时候就是覆盖,也是比较常用的配置。 –>--> <!-- <outjar>${project.build.finalName}.jar</outjar>--> <!-- <!– 是否混淆 默认是true –>--> <!-- <obfuscate>true</obfuscate>--> <!-- <putLibraryJarsInTempDir>true</putLibraryJarsInTempDir>--> <!-- <!– 配置一个文件,通常叫做proguard.cfg,该文件主要是配置options选项,也就是说使用proguard.cfg那么options下的所有内容都可以移到proguard.cfg中 –>--> <!-- <proguardInclude>${project.basedir}/proguard.cfg</proguardInclude>--> <!-- <!– 额外的jar包,通常是项目编译所需要的jar –>--> <!-- <libs>--> <!-- <lib>${java.home}/lib/rt.jar</lib>--> <!-- <lib>${java.home}/lib/jce.jar</lib>--> <!-- <lib>${java.home}/lib/jsse.jar</lib>--> <!-- </libs>--> <!-- <!– 对输入jar进行过滤比如,如下配置就是对META-INFO文件不处理。 –>--> <!-- <inLibsFilter>!META-INF/**,!META-INF/versions/9/**.class</inLibsFilter>--> <!-- <!– 这是输出路径配置,但是要注意这个路径必须要包括injar标签填写的jar –>--> <!-- <outputDirectory>${project.basedir}/target</outputDirectory>--> <!-- <!–这里特别重要,此处主要是配置混淆的一些细节选项,比如哪些类不需要混淆,哪些需要混淆–>--> <!-- <options>--> <!-- <!– 可以在此处写option标签配置,不过我上面使用了proguardInclude,故而我更喜欢在proguard.cfg中配置 –>--> <!-- </options>--> <!-- </configuration>--> <!-- </plugin>--> <!-- 打包 --> <plugin> <groupId>org.springframework.boot</groupId>