From 9881ce0814ad642646d9b76ad2caa70a0b966036 Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期一, 26 五月 2025 16:15:16 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetPageReqVO.java | 21 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotConfDetServiceImpl.java | 50 ++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StSuggestSnapshotConfMainController.java | 71 +++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotConfMainDao.java | 9 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordResVO.java | 3 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/PointCollector.java | 14 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestOperationRecordServiceImpl.java | 43 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StScheduleSuggestController.java | 19 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleSuggestServiceImpl.java | 4 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotRecordChartReqVO.java | 30 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotRecordServiceImpl.java | 39 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetRespVO.java | 49 ++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java | 5 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StSuggestSnapshotConfDetController.java | 68 ++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StScheduleSuggestPageReqVO.java | 3 iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/SuggestOperationRecordReqVO.java | 3 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StSuggestSnapshotRecordController.java | 40 + iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/ExtremalHandle.java | 12 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java | 8 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleSuggestDao.java | 1 iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java | 2 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotConfDetDao.java | 8 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java | 5 iailab-module-model/iailab-module-model-biz/db/增量SQL/2025.sql | 7 iailab-cloud/iailab-gateway/src/main/resources/application.yaml | 7 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotConfMainService.java | 16 iailab-module-model/iailab-module-model-biz/src/main/resources/application.yml | 3 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotRecordService.java | 10 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotRecordRespVO.java | 50 ++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfMainRespVO.java | 32 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordPageReqVO.java | 3 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestOperationRecordEntity.java | 5 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/common/PointCumulateUnitEnum.java | 2 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfMainSaveReqVO.java | 32 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotConfDetService.java | 16 iailab-module-model/iailab-module-model-biz/db/mysql.sql | 6 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/MeasureHandle.java | 106 ++-- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfMainPageReqVO.java | 30 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotRecordSaveReqVO.java | 54 ++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotRecordDao.java | 7 iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml | 1 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetReqVO.java | 2 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestSnapshotRecordEntity.java | 5 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/ConstantHandle.java | 12 iailab-module-system/iailab-module-system-biz/src/main/java/com/iailab/module/system/service/permission/MenuServiceImpl.java | 5 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestSnapshotConfDetEntity.java | 5 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordReqVO.java | 6 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAutoAdjustConfigServiceImpl.java | 312 +++++++------ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetSaveReqVO.java | 49 ++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/ScheduleSuggestStatusEnum.java | 3 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictAutoAdjustConfigService.java | 2 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotConfMainServiceImpl.java | 46 ++ 52 files changed, 1,093 insertions(+), 248 deletions(-) diff --git a/iailab-cloud/iailab-gateway/src/main/resources/application.yaml b/iailab-cloud/iailab-gateway/src/main/resources/application.yaml index 02f0004..30d1831 100644 --- a/iailab-cloud/iailab-gateway/src/main/resources/application.yaml +++ b/iailab-cloud/iailab-gateway/src/main/resources/application.yaml @@ -115,6 +115,13 @@ - Path=/admin-api/model/** filters: - RewritePath=/admin-api/model/v3/api-docs, /v3/api-docs + ## ai-server 服务 + - id: ai-admin-api # 路由的编号 + uri: grayLb://ai-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/ai/** + filters: + - RewritePath=/admin-api/ai/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs ## fast 服务 - id: fast-admin-api # 路由的编号 uri: grayLb://fast-server 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 c9520d8..7859366 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 @@ -76,7 +76,7 @@ public static final String PV = "point_value:"; - public static final long offset = 60 * 2L; + public static final long offset = 3L; /** * 采集 @@ -100,17 +100,17 @@ List<DaPointDTO> pointMeasureList = daPointService.getMeasurePoint(minfreq); pointValues.addAll(measureHandle.handle(collectTime, pointMeasureList, dataMap, listGood, listBad)); - log.info("读取计算点"); - List<DaPointDTO> pointCalculateList = daPointService.getMathPoint(minfreq); - pointValues.addAll(calculateHandle.handle(collectTime, pointCalculateList, dataMap, listGood, listBad)); - log.info("读取累计点"); List<DaPointDTO> pointCumulateList = daPointService.getCumulatePoint(minfreq); - pointValues.addAll(cumulateHandle.handle(collectTime, pointCumulateList, listGood, listBad)); + pointValues.addAll(cumulateHandle.handle(collectTime, pointCumulateList, dataMap, listGood, listBad)); log.info("读取极值点"); List<DaPointDTO> pointExtremalList = daPointService.getExtremalPoint(minfreq); - pointValues.addAll(extremalHandle.handle(collectTime, pointExtremalList, listGood, listBad)); + pointValues.addAll(extremalHandle.handle(collectTime, pointExtremalList, dataMap, listGood, listBad)); + + log.info("读取计算点"); + List<DaPointDTO> pointCalculateList = daPointService.getMathPoint(minfreq); + pointValues.addAll(calculateHandle.handle(collectTime, pointCalculateList, dataMap, listGood, listBad)); log.info("存入时序库"); log.info("pointValueTimestamp=" + (pointValues.get(0) == null ? 0 : pointValues.get(0).getTimestamp().getNano())); 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 6073712..cdca696 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 @@ -47,6 +47,12 @@ private ConstantHandle constantHandle; @Resource + private CumulateHandle cumulateHandle; + + @Resource + private ExtremalHandle extremalHandle; + + @Resource private JavaScriptHandler javaScriptHandler; @Autowired @@ -171,6 +177,8 @@ pointNos.add(s); dataMap.putAll(measureHandle.getCurrent(pointNos)); dataMap.putAll(constantHandle.getCurrent(pointNos)); + dataMap.putAll(cumulateHandle.getCurrent(pointNos)); + dataMap.putAll(extremalHandle.getCurrent(pointNos)); if (dataMap.get(s) == null) { log.info("计算点数据异常"); log.info("pointNo=" + dto.getPointNo() + ";dataMap.key=" + s); diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/ConstantHandle.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/ConstantHandle.java index 28f2758..e15be10 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/ConstantHandle.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/ConstantHandle.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; import java.util.*; /** @@ -33,9 +34,13 @@ return result; } dtos.forEach(dto -> { - InfluxPointValuePOJO pojo = GenInfluxPointValueUtils.getByPoint(dto); + BigDecimal defaultValue = dto.getDefaultValue(); + BigDecimal coefficient = dto.getUnittransfactor() == null ? BigDecimal.ONE : dto.getUnittransfactor(); + defaultValue = defaultValue.multiply(coefficient); + InfluxPointValuePOJO pojo = GenInfluxPointValueUtils.getByPoint(dto,defaultValue); pojo.setTimestamp(GenInfluxPointValueUtils.getByMin(collectTime, DataPointFreqEnum.getEumByCode(dto.getMinfreqid()))); - dataMap.put(dto.getPointNo(), dto.getDefaultValue()); + + dataMap.put(dto.getPointNo(), defaultValue); result.add(pojo); listGood.add(dto.getPointNo()); }); @@ -49,7 +54,8 @@ List<DaPointDTO> pointConstantList = daPointService.getConstantPoint(pointNos); if (!CollectionUtils.isEmpty(pointConstantList)) { pointConstantList.forEach(item -> { - data.put(item.getPointNo(), item.getDefaultValue()); + BigDecimal coefficient = item.getUnittransfactor() == null ? BigDecimal.ONE : item.getUnittransfactor(); + data.put(item.getPointNo(), item.getDefaultValue().multiply(coefficient)); }); } return data; diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java index 69421be..c0e8f0e 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java @@ -45,7 +45,7 @@ @Autowired private RedisTemplate<String, Object> redisTemplate; - public List<InfluxPointValuePOJO> handle(Date collectTime, List<DaPointDTO> dtos, List<String> listGood, List<String> listBad) { + public List<InfluxPointValuePOJO> handle(Date collectTime, List<DaPointDTO> dtos, Map<String, Object> dataMap, List<String> listGood, List<String> listBad) { List<InfluxPointValuePOJO> result = new ArrayList<>(); try { log.info("累计点处理开始"); @@ -59,6 +59,7 @@ BigDecimal calValue = new BigDecimal(rawValue.toString()).multiply(coefficient); InfluxPointValuePOJO pojo = GenInfluxPointValueUtils.getByPoint(dto, calValue); pojo.setTimestamp(GenInfluxPointValueUtils.getByMin(collectTime, DataPointFreqEnum.getEumByCode(dto.getMinfreqid()))); + dataMap.put(dto.getPointNo(), calValue); result.add(pojo); } catch (Exception ex) { ex.printStackTrace(); @@ -163,7 +164,7 @@ long start = startTime.getTime(); long end = endTime.getTime(); long oneMin = 1000L * DataPointFreqEnum.getEumByCode(minfreqid).getValue(); - long mins = (end - start) / oneMin; + long mins = ((end - start) / oneMin) + 1; //找出缺少项 Map<Long, Double> sourceDataMap = new HashMap<>(dataList.size()); diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/ExtremalHandle.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/ExtremalHandle.java index 5e9b273..2f07689 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/ExtremalHandle.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/ExtremalHandle.java @@ -20,6 +20,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; /** @@ -43,7 +44,7 @@ @Autowired private RedisTemplate<String, Object> redisTemplate; - public List<InfluxPointValuePOJO> handle(Date collectTime, List<DaPointDTO> dtos, List<String> listGood, List<String> listBad) { + public List<InfluxPointValuePOJO> handle(Date collectTime, List<DaPointDTO> dtos, Map<String, Object> dataMap, List<String> listGood, List<String> listBad) { List<InfluxPointValuePOJO> result = new ArrayList<>(); try { log.info("极值点处理开始"); @@ -52,9 +53,12 @@ } dtos.forEach(dto -> { try { - Object value = singleCompute(dto, collectTime, listGood, listBad); - InfluxPointValuePOJO pojo = GenInfluxPointValueUtils.getByPoint(dto, value); + Object rawValue = singleCompute(dto, collectTime, listGood, listBad); + BigDecimal coefficient = dto.getUnittransfactor() == null ? BigDecimal.ONE : dto.getUnittransfactor(); + BigDecimal calValue = new BigDecimal(rawValue.toString()).multiply(coefficient); + InfluxPointValuePOJO pojo = GenInfluxPointValueUtils.getByPoint(dto, calValue); pojo.setTimestamp(GenInfluxPointValueUtils.getByMin(collectTime, DataPointFreqEnum.getEumByCode(dto.getMinfreqid()))); + dataMap.put(dto.getPointNo(), calValue); result.add(pojo); } catch (Exception ex) { ex.printStackTrace(); @@ -83,6 +87,8 @@ value = redisTemplate.opsForValue().get(PointCollector.PV + item.getPointNo()); } else { value = singleCompute(item, calendar.getTime(), new ArrayList<>(), new ArrayList<>()); + BigDecimal coefficient = item.getUnittransfactor() == null ? BigDecimal.ONE : item.getUnittransfactor(); + value = new BigDecimal(value.toString()).multiply(coefficient); } data.put(item.getPointNo(), value); }); 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 8a9f766..2bed5dc 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 @@ -224,61 +224,61 @@ public Map<String, Object> getCurrent(List<String> pointNos) { Map<String, Object> data = new HashMap<>(); List<DaPointDTO> pointMeasureList = daPointService.getMeasurePoint(pointNos); - pointMeasureList.forEach( - item -> { - try { - Object value = CommonConstant.BAD_VALUE; - boolean hasKey = redisTemplate.hasKey(PointCollector.PV + item.getPointNo()); - if (hasKey) { - value = redisTemplate.opsForValue().get(PointCollector.PV + item.getPointNo()); - } - if(hasKey && StrUtils.isNumeric(value.toString()) && - new BigDecimal(value.toString()).compareTo(CommonConstant.BAD_VALUE) != 0 ) { - value = redisTemplate.opsForValue().get(PointCollector.PV + item.getPointNo()); - } else if (DataSourceType.OPCUA.getCode().equals(item.getSourceType())) { - value = opcUaCollector.getTagValue(item.getSourceId(), item.getTagNo()); - } else if (DataSourceType.ModBus.getCode().equals(item.getSourceType())) { - value = modBusCollector.getTagValue(item.getSourceId(), item.getTagNo()); - } else if (DataSourceType.KIO.getCode().equals(item.getSourceType())) { - value = kingIOCollector.getTagValue(item.getSourceId(), item.getTagNo()); - } else if (DataSourceType.HTTP.getCode().equals(item.getSourceType())) { - if (SourceApiEnum.iHyperDB.getCode().equals(item.getSourceName())) { - value = httpCollectorForIhd.getTagValue(item.getSourceId(), item.getTagNo(), item.getDimension(), item.getValueType()); - } else if (SourceApiEnum.ASDB.getCode().equals(item.getSourceName())) { - value = httpCollectorForAsdb.getTagValue(item.getSourceId(), item.getTagNo()); - } else if (SourceApiEnum.ASDE.getCode().equals(item.getSourceName())) { - value = httpCollectorForAsde.getTagValue(item.getSourceId(), item.getTagNo()); - } else if (SourceApiEnum.ASDC.getCode().equals(item.getSourceName())) { - value = httpCollectorForAsdc.getTagValue(item.getSourceId(), item.getTagNo()); - } else if (SourceApiEnum.ASDY.getCode().equals(item.getSourceName())) { - value = httpCollectorForAsdy.getTagValue(item.getSourceId(), item.getTagNo()); - } - } else { - log.info("没有匹配的TagNo=" + item.getTagNo()); - } - log.info("TagNo=" + item.getTagNo() + ",value=" + value.toString()); - if (!PointDataTypeEnum.BOOLEAN.getCode().equals(item.getDataType())) { - BigDecimal decValue = new BigDecimal(value.toString()); - if (PointDataTypeEnum.FLOAT.getCode().equals(item.getDataType())) { - decValue = decValue.setScale(2, BigDecimal.ROUND_HALF_UP); - } else if (PointDataTypeEnum.INT.getCode().equals(item.getDataType())) { - decValue = decValue.setScale(0, BigDecimal.ROUND_HALF_UP); - } - data.put(item.getPointNo(), decValue); - } else { - data.put(item.getPointNo(), value); - } - - if (!hasKey) { - // 存入缓存 - toRedis(value, item); - } - } catch (Exception ex) { - ex.printStackTrace(); + for (DaPointDTO item : pointMeasureList) { + try { + Object value = CommonConstant.BAD_VALUE; + boolean hasKey = redisTemplate.hasKey(PointCollector.PV + item.getPointNo()); + if (hasKey && !StrUtils.isNumeric(value.toString())) { + value = redisTemplate.opsForValue().get(PointCollector.PV + item.getPointNo()); + data.put(item.getPointNo(), value); + continue; + } else if(hasKey && StrUtils.isNumeric(value.toString()) && new BigDecimal(value.toString()).compareTo(CommonConstant.BAD_VALUE) != 0 ) { + value = redisTemplate.opsForValue().get(PointCollector.PV + item.getPointNo()); + data.put(item.getPointNo(), value); + continue; + } else if (DataSourceType.OPCUA.getCode().equals(item.getSourceType())) { + value = opcUaCollector.getTagValue(item.getSourceId(), item.getTagNo()); + } else if (DataSourceType.ModBus.getCode().equals(item.getSourceType())) { + value = modBusCollector.getTagValue(item.getSourceId(), item.getTagNo()); + } else if (DataSourceType.KIO.getCode().equals(item.getSourceType())) { + value = kingIOCollector.getTagValue(item.getSourceId(), item.getTagNo()); + } else if (DataSourceType.HTTP.getCode().equals(item.getSourceType())) { + if (SourceApiEnum.iHyperDB.getCode().equals(item.getSourceName())) { + value = httpCollectorForIhd.getTagValue(item.getSourceId(), item.getTagNo(), item.getDimension(), item.getValueType()); + } else if (SourceApiEnum.ASDB.getCode().equals(item.getSourceName())) { + value = httpCollectorForAsdb.getTagValue(item.getSourceId(), item.getTagNo()); + } else if (SourceApiEnum.ASDE.getCode().equals(item.getSourceName())) { + value = httpCollectorForAsde.getTagValue(item.getSourceId(), item.getTagNo()); + } else if (SourceApiEnum.ASDC.getCode().equals(item.getSourceName())) { + value = httpCollectorForAsdc.getTagValue(item.getSourceId(), item.getTagNo()); + } else if (SourceApiEnum.ASDY.getCode().equals(item.getSourceName())) { + value = httpCollectorForAsdy.getTagValue(item.getSourceId(), item.getTagNo()); } - + } else { + log.info("没有匹配的TagNo=" + item.getTagNo()); } - ); + log.info("TagNo=" + item.getTagNo() + ",value=" + value.toString()); + if (!PointDataTypeEnum.BOOLEAN.getCode().equals(item.getDataType())) { + BigDecimal coefficient = item.getUnittransfactor() == null ? BigDecimal.ONE : item.getUnittransfactor(); + BigDecimal decValue = new BigDecimal(value.toString()).multiply(coefficient); + if (PointDataTypeEnum.FLOAT.getCode().equals(item.getDataType())) { + decValue = decValue.setScale(2, BigDecimal.ROUND_HALF_UP); + } else if (PointDataTypeEnum.INT.getCode().equals(item.getDataType())) { + decValue = decValue.setScale(0, BigDecimal.ROUND_HALF_UP); + } + data.put(item.getPointNo(), decValue); + } else { + data.put(item.getPointNo(), value); + } + + if (!hasKey) { + // 存入缓存 + toRedis(value, item); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } return data; } diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/common/PointCumulateUnitEnum.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/common/PointCumulateUnitEnum.java index 2e85b7e..d8353c8 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/common/PointCumulateUnitEnum.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/common/PointCumulateUnitEnum.java @@ -67,7 +67,7 @@ } } - Calendar startCal = unit.calculate(endTime, length); + Calendar startCal = unit.calculate(endTime, length-1); return startCal.getTime(); } } 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 a77a0bd..bd170f0 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 @@ -161,6 +161,7 @@ t1.point_type, t1.store_type, t1.data_type, + t1.unittransfactor, t1.minfreqid FROM t_da_point t1 <where> diff --git a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/SuggestOperationRecordReqVO.java b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/SuggestOperationRecordReqVO.java index 6624e3d..8d63a38 100644 --- a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/SuggestOperationRecordReqVO.java +++ b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/SuggestOperationRecordReqVO.java @@ -16,6 +16,9 @@ @Schema(description = "操作(已采纳,取消采纳,已忽略等)") private String operate; + @Schema(description = "原因") + private String reason; + @Schema(description = "处理人ID") private String handlerId; 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 78d6434..4a049ab 100644 --- a/iailab-module-model/iailab-module-model-biz/db/mysql.sql +++ b/iailab-module-model/iailab-module-model-biz/db/mysql.sql @@ -1028,11 +1028,9 @@ `adjust_value_rule` varchar(36) DEFAULT NULL COMMENT '调整值计算规则', `is_enable` tinyint DEFAULT NULL COMMENT '是否启用(0禁用 1启用)', `create_time` datetime DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `config_code` (`config_code`) + `adjust_coefficient` decimal(10,6) DEFAULT '1.000000' COMMENT '调整系数', + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='预测结果自动调整配置表'; - -alter table t_mm_predict_auto_adjust_config add column `adjust_coefficient` decimal(10,6) DEFAULT 1 COMMENT '调整系数'; -- 预测项影响因素 diff --git "a/iailab-module-model/iailab-module-model-biz/db/\345\242\236\351\207\217SQL/2025.sql" "b/iailab-module-model/iailab-module-model-biz/db/\345\242\236\351\207\217SQL/2025.sql" index e10818d..1f61836 100644 --- "a/iailab-module-model/iailab-module-model-biz/db/\345\242\236\351\207\217SQL/2025.sql" +++ "b/iailab-module-model/iailab-module-model-biz/db/\345\242\236\351\207\217SQL/2025.sql" @@ -40,7 +40,7 @@ CREATE TABLE `t_st_suggest_snapshot_conf_det` ( `id` varchar(36) NOT NULL, - `conf_id` varchar(36) COMMENT '模型ID', + `conf_id` varchar(36) COMMENT '快照配置ID', `data_type` varchar(20) DEFAULT NULL COMMENT '数据类型(DATAPOINT,IND,PLAN,PREDICTITEM)', `data_no` varchar(36) COMMENT '数据编号', `data_name` varchar(36) COMMENT '数据名称', @@ -72,4 +72,7 @@ `sort` integer COMMENT '排序', PRIMARY KEY (`id`) USING BTREE, KEY `idx_suggest_id` (`suggest_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='调度建议快照记录表'; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='调度建议快照记录表'; + +ALTER TABLE `iailab_expert_tenant_shasteel`.`t_st_suggest_operation_record` + ADD COLUMN `reason` varchar(255) NULL COMMENT '原因' AFTER `operate`; \ 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 88fb800..f541366 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 @@ -34,8 +34,8 @@ import com.iailab.module.model.mcs.sche.entity.StScheduleSuggestEntity; import com.iailab.module.model.mcs.sche.service.*; import com.iailab.module.model.mcs.sche.vo.StScheduleRecordRespVO; -import com.iailab.module.model.mcs.sche.vo.StSuggestOperationRecordReqVO; import com.iailab.module.model.mcs.sche.vo.StScheduleSuggestSaveReqVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestOperationRecordReqVO; import com.iailab.module.model.mdk.vo.ItemVO; import com.iailab.module.model.mpk.service.ChartParamService; import com.iailab.module.model.mpk.service.ChartService; @@ -1012,7 +1012,9 @@ @Override public Boolean saveSuggestOperationRecord(SuggestOperationRecordReqVO reqVO) { StSuggestOperationRecordReqVO operationRecordVo = new StSuggestOperationRecordReqVO(); + operationRecordVo.setSuggestId(reqVO.getId()); operationRecordVo.setOperate(reqVO.getOperate()); + operationRecordVo.setReason(reqVO.getReason()); operationRecordVo.setHandler(reqVO.getHandler()); operationRecordVo.setHandlerId(reqVO.getHandlerId()); //获取建议信息 @@ -1034,7 +1036,6 @@ stSuggestOperationRecordService.create(operationRecordVo); return true; } - 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/common/enums/ScheduleSuggestStatusEnum.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/ScheduleSuggestStatusEnum.java index caadc08..65a871f 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/ScheduleSuggestStatusEnum.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/ScheduleSuggestStatusEnum.java @@ -15,7 +15,8 @@ public enum ScheduleSuggestStatusEnum { S0(0, "未处理"), - S1(1, "已采纳"); + S1(1, "已采纳"), + S2(2, "已忽略"); private Integer code; private String desc; diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictAutoAdjustConfigService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictAutoAdjustConfigService.java index b77d6e2..6f4347a 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictAutoAdjustConfigService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictAutoAdjustConfigService.java @@ -20,7 +20,7 @@ MmPredictAutoAdjustConfigEntity getInfo(String id); - MmPredictAutoAdjustConfigEntity getByCode(String code); + List<MmPredictAutoAdjustConfigEntity> getByCode(String code); void create(MmPredictAutoAdjustConfigEntity entity); diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAutoAdjustConfigServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAutoAdjustConfigServiceImpl.java index 3c281d2..9cda6d2 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAutoAdjustConfigServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAutoAdjustConfigServiceImpl.java @@ -60,8 +60,8 @@ } @Override - public MmPredictAutoAdjustConfigEntity getByCode(String code) { - return baseDao.selectOne("config_code",code,"is_enable",1); + public List<MmPredictAutoAdjustConfigEntity> getByCode(String code) { + return baseDao.selectList(MmPredictAutoAdjustConfigEntity::getConfigCode,code,MmPredictAutoAdjustConfigEntity::getIsEnable,1); } @Override @@ -85,164 +85,180 @@ public boolean autoAdjustByCode(String configCode,long adjustStartTime) { log.info("开始自动调整:configCode:" + configCode + ",adjustStartTime:" + new Date(adjustStartTime)); // 查询调整配置 - MmPredictAutoAdjustConfigEntity configEntity = getByCode(configCode); - if (configEntity == null) { - log.info("自动调整失败原因:configEntity为null"); + List<MmPredictAutoAdjustConfigEntity> configEntityList = getByCode(configCode); + if (CollectionUtils.isEmpty(configEntityList)) { + log.info("自动调整失败原因:configEntityList为空"); return false; } + // 根据outputId分组 + Map<String, List<MmPredictAutoAdjustConfigEntity>> outputIdMap = configEntityList.stream().collect(Collectors.groupingBy(MmPredictAutoAdjustConfigEntity::getOutputId)); + for (Map.Entry<String, List<MmPredictAutoAdjustConfigEntity>> entry : outputIdMap.entrySet()) { + String outputId = entry.getKey(); + // 查询调整用户adjustStartTime 至 adjustStartTime - 预测长度 * 预测粒度 范围的值 + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(adjustStartTime); + Date endTime = calendar.getTime(); + ItemVO item = mmPredictItemService.getItemByOutPutId(outputId); + if (item == null) { + log.info("自动调整失败原因:getItemByOutPutId为null,outputId:" + outputId); + continue; + } + calendar.add(Calendar.SECOND,item.getPredictLength() * item.getGranularity() * -1); + Date startTime = calendar.getTime(); - // 查询调整用户adjustStartTime 至 adjustStartTime - 预测长度 * 预测粒度 范围的值 - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(adjustStartTime); - Date endTime = calendar.getTime(); - ItemVO item = mmPredictItemService.getItemByOutPutId(configEntity.getOutputId()); - if (item == null) { - log.info("自动调整失败原因:getItemByOutPutId为null,outputId:" + configEntity.getOutputId()); - return false; - } - calendar.add(Calendar.SECOND,item.getPredictLength() * item.getGranularity() * -1); - Date startTime = calendar.getTime(); - ApiPointValueQueryDTO queryDTO = new ApiPointValueQueryDTO(); - ApiPointDTO pointInfo = dataPointApi.getInfoById(configEntity.getPointId()); - queryDTO.setPointNo(pointInfo.getPointNo()); - queryDTO.setEnd(endTime); - queryDTO.setStart(startTime); - List<ApiPointValueDTO> apiPointValueDTOS = dataPointApi.queryPointHistoryValue(queryDTO); - if (CollectionUtils.isEmpty(apiPointValueDTOS)) { - log.info("自动调整失败原因:测点数据长度为0。queryDTO:" + queryDTO); - return false; - } - // 过滤掉-2 - apiPointValueDTOS = apiPointValueDTOS.stream().filter(e -> !Double.valueOf(e.getV()).equals(-2.0)).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(apiPointValueDTOS)) { - log.info("自动调整失败原因:过滤掉-2之后测点数据长度为0。queryDTO:" + queryDTO); - return false; - } + // 获取预测历史结果 + InfluxModelResultPOJO pojo = new InfluxModelResultPOJO(); + pojo.setType(DataTypeEnum.FLOAT_LAST_BAK.getCode()); + pojo.setOutPutId(outputId); + List<InfluxModelResultVO> influxModelResult = influxDBService.queryModelResults(pojo, new Date(adjustStartTime), new Date(adjustStartTime)); + if (CollectionUtils.isEmpty(influxModelResult)) { + log.info("自动调整失败原因:预测历史结果为空。itemNo:" + item.getItemNo() + ",itemName:" + item.getItemName() + ",outputId:" + outputId + ",time:" + adjustStartTime); + continue; + } - // 获取预测历史结果 - InfluxModelResultPOJO pojo = new InfluxModelResultPOJO(); - pojo.setType(DataTypeEnum.FLOAT_LAST.getCode()); - pojo.setOutPutId(configEntity.getOutputId()); - List<InfluxModelResultVO> influxModelResult = influxDBService.queryModelResults(pojo, new Date(adjustStartTime), new Date(adjustStartTime)); - if (CollectionUtils.isEmpty(influxModelResult)) { - log.info("自动调整失败原因:预测历史结果为空。itemNo:" + item.getItemNo() + ",itemName" + item.getItemName() + ",outputId" + configEntity.getOutputId() + ",time" + adjustStartTime); - return false; - } - - // 触发规则 - AutoAdjustTriggerRuleEnum triggerRuleEnum = AutoAdjustTriggerRuleEnum.fromCode(configEntity.getTriggerRule()); - Double adjustValue = null; - // 判断是否符合触发条件 并计算调整值 - switch (triggerRuleEnum) { - case SLOPE: - // 计算每个△t的斜率,任意一个大于触发值则认为该区间有调整 - Calendar slopeCalendar = Calendar.getInstance(); - slopeCalendar.setTime(startTime); - Date slopeStartTime = slopeCalendar.getTime(); - slopeCalendar.add(Calendar.MINUTE,configEntity.getT()); - Date slopeEndTime = slopeCalendar.getTime(); - if (slopeEndTime.after(endTime)) { - log.info("自动调整失败原因:△t设置过大,大于模型预测长度 * 预测粒度。△t:" + configEntity.getT()); - return false; + // 计算所有影响用户的最终调整值 + Double finalAdjustValue = 0.0; + for (MmPredictAutoAdjustConfigEntity configEntity : entry.getValue()) { + Double adjustValue = null; + // 查询影响用户历史值 + ApiPointValueQueryDTO queryDTO = new ApiPointValueQueryDTO(); + ApiPointDTO pointInfo = dataPointApi.getInfoById(configEntity.getPointId()); + queryDTO.setPointNo(pointInfo.getPointNo()); + queryDTO.setEnd(endTime); + queryDTO.setStart(startTime); + List<ApiPointValueDTO> apiPointValueDTOS = dataPointApi.queryPointHistoryValue(queryDTO); + if (CollectionUtils.isEmpty(apiPointValueDTOS)) { + log.info("影响用户[" + pointInfo.getPointName() + "]调整失败原因:测点数据长度为0。queryDTO:" + queryDTO); + continue; } - while (!slopeEndTime.after(endTime)) { - //计算斜率 - //△t开始时间测点值 - Date finalSlopeStartTime = slopeStartTime; - Optional<ApiPointValueDTO> startOptional = apiPointValueDTOS.stream().filter(apiPointValueDTO -> apiPointValueDTO.getT().equals(finalSlopeStartTime)).findFirst(); - //△t结束时间测点值 - Date finalSlopeEndTime = slopeEndTime; - Optional<ApiPointValueDTO> endOptional = apiPointValueDTOS.stream().filter(e -> e.getT().equals(finalSlopeEndTime)).findFirst(); - if (startOptional.isPresent() && endOptional.isPresent()) { - ApiPointValueDTO startPointValue = startOptional.get(); - ApiPointValueDTO endPointValue = endOptional.get(); - // 计算斜率 - double slope = BigDecimal.valueOf(endPointValue.getV() - startPointValue.getV()).divide(BigDecimal.valueOf(configEntity.getT())).doubleValue(); - // 斜率大于等于触发值则进行调整 - if (Double.valueOf(Math.abs(slope)).compareTo(configEntity.getTriggerValue()) >= 0) { - // 计算调整值 并跳出循环 - adjustValue = AutoAdjustValueRuleEnum.getAdjustValue(configEntity.getAdjustValueRule(), apiPointValueDTOS); - log.info("计算调整值:" + adjustValue + ",斜率:" + slope + ",pointNo:" + pointInfo.getPointNo() + ",pointName:" + pointInfo.getPointName() + ",slopeStartTime:" + slopeStartTime + ",slopeEndTime:" + slopeEndTime); - break; + // 过滤掉-2 + apiPointValueDTOS = apiPointValueDTOS.stream().filter(e -> !Double.valueOf(e.getV()).equals(-2.0)).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(apiPointValueDTOS)) { + log.info("影响用户调整失败原因:过滤掉-2之后测点数据长度为0。queryDTO:" + queryDTO); + continue; + } + + // 触发规则 + AutoAdjustTriggerRuleEnum triggerRuleEnum = AutoAdjustTriggerRuleEnum.fromCode(configEntity.getTriggerRule()); + // 判断是否符合触发条件 并计算调整值 + switch (triggerRuleEnum) { + case SLOPE: + // 计算每个△t的斜率,任意一个大于触发值则认为该区间有调整 + Calendar slopeCalendar = Calendar.getInstance(); + slopeCalendar.setTime(startTime); + Date slopeStartTime = slopeCalendar.getTime(); + slopeCalendar.add(Calendar.MINUTE,configEntity.getT()); + Date slopeEndTime = slopeCalendar.getTime(); + if (slopeEndTime.after(endTime)) { + log.info("影响用户[" + pointInfo.getPointName() + "]调整失败原因:△t设置过大,大于模型预测长度 * 预测粒度。△t:" + configEntity.getT()); + continue; } - log.info("斜率不满足条件,斜率:" + slope); - } - // 下一个△t - slopeStartTime = slopeCalendar.getTime(); - slopeCalendar.add(Calendar.MINUTE,configEntity.getT()); - slopeEndTime = slopeCalendar.getTime(); - } - break; - case AVERAGE_GAP: - // 计算每两个△t的平均差,任意一个大于触发值则认为该区间有调整 - Calendar averageCalendar = Calendar.getInstance(); - averageCalendar.setTime(startTime); - Date averageStartTime = averageCalendar.getTime(); - averageCalendar.add(Calendar.MINUTE,configEntity.getT()); - Date averageMiddleTime = averageCalendar.getTime(); - averageCalendar.add(Calendar.MINUTE,configEntity.getT()); - Date averageEndTime = averageCalendar.getTime(); - - if (averageEndTime.after(endTime)) { - log.info("自动调整失败原因:△t设置过大,△t*2大于模型预测长度 * 预测粒度。△t:" + configEntity.getT()); - return false; - } - while (!averageEndTime.after(endTime)) { - //计算均值差 - //前△t测点平均值 - Date finalAverageStartTime = averageStartTime; - Date finalAverageMiddleTime = averageMiddleTime; - OptionalDouble startAverage = apiPointValueDTOS.stream().filter(e -> e.getT().after(finalAverageStartTime) && !e.getT().after(finalAverageMiddleTime)).mapToDouble(ApiPointValueDTO::getV).average(); - //后△t测点平均值 - Date finalAverageEndTime = averageEndTime; - OptionalDouble endAverage = apiPointValueDTOS.stream().filter(e -> e.getT().after(finalAverageMiddleTime) && !e.getT().after(finalAverageEndTime)).mapToDouble(ApiPointValueDTO::getV).average(); - if (startAverage.isPresent() && endAverage.isPresent()) { - double averageGapValue = startAverage.getAsDouble() - endAverage.getAsDouble(); - // 均值差,大于等于触发值则进行调整 - if (Double.valueOf(Math.abs(averageGapValue)).compareTo(configEntity.getTriggerValue()) >= 0) { - // 计算调整值 并跳出循环 - adjustValue = AutoAdjustValueRuleEnum.getAdjustValue(configEntity.getAdjustValueRule(), apiPointValueDTOS); - log.info("计算调整值:" + adjustValue + ",均值差:" + averageGapValue + ",pointNo:" + pointInfo.getPointNo() + ",pointName:" + pointInfo.getPointName() + ",averageStartTime:" + averageStartTime + ",averageMiddleTime:" + averageMiddleTime + ",averageEndTime:" + averageEndTime); - break; + while (!slopeEndTime.after(endTime)) { + //计算斜率 + //△t开始时间测点值 + Date finalSlopeStartTime = slopeStartTime; + Optional<ApiPointValueDTO> startOptional = apiPointValueDTOS.stream().filter(apiPointValueDTO -> apiPointValueDTO.getT().equals(finalSlopeStartTime)).findFirst(); + //△t结束时间测点值 + Date finalSlopeEndTime = slopeEndTime; + Optional<ApiPointValueDTO> endOptional = apiPointValueDTOS.stream().filter(e -> e.getT().equals(finalSlopeEndTime)).findFirst(); + if (startOptional.isPresent() && endOptional.isPresent()) { + ApiPointValueDTO startPointValue = startOptional.get(); + ApiPointValueDTO endPointValue = endOptional.get(); + // 计算斜率 + double slope = BigDecimal.valueOf(endPointValue.getV() - startPointValue.getV()).divide(BigDecimal.valueOf(configEntity.getT())).doubleValue(); + // 斜率大于等于触发值则进行调整 + if (Double.valueOf(Math.abs(slope)).compareTo(configEntity.getTriggerValue()) >= 0) { + // 计算调整值 并跳出循环 + adjustValue = AutoAdjustValueRuleEnum.getAdjustValue(configEntity.getAdjustValueRule(), apiPointValueDTOS); + log.info("计算调整值:" + adjustValue + ",斜率:" + slope + ",pointNo:" + pointInfo.getPointNo() + ",pointName:" + pointInfo.getPointName() + ",slopeStartTime:" + slopeStartTime + ",slopeEndTime:" + slopeEndTime); + break; + } + log.info("斜率不满足条件,斜率:" + slope); + } + // 下一个△t + slopeStartTime = slopeCalendar.getTime(); + slopeCalendar.add(Calendar.MINUTE,configEntity.getT()); + slopeEndTime = slopeCalendar.getTime(); } - log.info("均值差不满足条件,均值差:" + averageGapValue); - } + break; + case AVERAGE_GAP: + // 计算每两个△t的平均差,任意一个大于触发值则认为该区间有调整 + Calendar averageCalendar = Calendar.getInstance(); + averageCalendar.setTime(startTime); + Date averageStartTime = averageCalendar.getTime(); + averageCalendar.add(Calendar.MINUTE,configEntity.getT()); + Date averageMiddleTime = averageCalendar.getTime(); + averageCalendar.add(Calendar.MINUTE,configEntity.getT()); + Date averageEndTime = averageCalendar.getTime(); - // 下一个△t - averageStartTime = averageMiddleTime; - averageMiddleTime = averageEndTime; - averageCalendar.add(Calendar.MINUTE,configEntity.getT()); - averageEndTime = averageCalendar.getTime(); + if (averageEndTime.after(endTime)) { + log.info("影响用户[" + pointInfo.getPointName() + "]调整失败原因:△t设置过大,△t*2大于模型预测长度 * 预测粒度。△t:" + configEntity.getT()); + continue; + } + while (!averageEndTime.after(endTime)) { + //计算均值差 + //前△t测点平均值 + Date finalAverageStartTime = averageStartTime; + Date finalAverageMiddleTime = averageMiddleTime; + OptionalDouble startAverage = apiPointValueDTOS.stream().filter(e -> e.getT().after(finalAverageStartTime) && !e.getT().after(finalAverageMiddleTime)).mapToDouble(ApiPointValueDTO::getV).average(); + //后△t测点平均值 + Date finalAverageEndTime = averageEndTime; + OptionalDouble endAverage = apiPointValueDTOS.stream().filter(e -> e.getT().after(finalAverageMiddleTime) && !e.getT().after(finalAverageEndTime)).mapToDouble(ApiPointValueDTO::getV).average(); + if (startAverage.isPresent() && endAverage.isPresent()) { + double averageGapValue = startAverage.getAsDouble() - endAverage.getAsDouble(); + // 均值差,大于等于触发值则进行调整 + if (Double.valueOf(Math.abs(averageGapValue)).compareTo(configEntity.getTriggerValue()) >= 0) { + // 计算调整值 并跳出循环 + adjustValue = AutoAdjustValueRuleEnum.getAdjustValue(configEntity.getAdjustValueRule(), apiPointValueDTOS); + log.info("计算调整值:" + adjustValue + ",均值差:" + averageGapValue + ",pointNo:" + pointInfo.getPointNo() + ",pointName:" + pointInfo.getPointName() + ",averageStartTime:" + averageStartTime + ",averageMiddleTime:" + averageMiddleTime + ",averageEndTime:" + averageEndTime); + break; + } + log.info("均值差不满足条件,均值差:" + averageGapValue); + } + + // 下一个△t + averageStartTime = averageMiddleTime; + averageMiddleTime = averageEndTime; + averageCalendar.add(Calendar.MINUTE,configEntity.getT()); + averageEndTime = averageCalendar.getTime(); + } + break; + default: + log.info("影响用户[" + pointInfo.getPointName() + "]调整失败原因:未知触发规则,triggerRule" + configEntity.getTriggerRule()); + continue; } - break; - default: - log.info("自动调整失败原因:未知触发规则,triggerRule" + configEntity.getTriggerRule()); - return false; - } - if (adjustValue == null) { - log.info("自动调整失败原因:未达到触发条件"); - return false; + if (adjustValue == null) { + log.info("影响用户[" + pointInfo.getPointName() + "]调整失败原因:未达到触发条件"); + continue; + } + + // 调整系数 + adjustValue = adjustValue * configEntity.getAdjustCoefficient(); + // 调整方向 + adjustValue = adjustValue * configEntity.getAdjustDirection(); + // 累加到最终调整值 + finalAdjustValue += adjustValue; + } + // 执行调整 + if (finalAdjustValue.equals(0.0)) { + log.info("自动调整失败原因:finalAdjustValue为0,outputId:" + outputId + ",configCode:" + configCode); + continue; + } + List<InfluxModelResultPOJO> lastList = new ArrayList<>(); + for (InfluxModelResultVO resultVO : influxModelResult) { + InfluxModelResultLastSimPOJO adjustPojo = new InfluxModelResultLastSimPOJO(); + // 设置新的调整值 + adjustPojo.setValue(Double.parseDouble(resultVO.getValue().toString()) + finalAdjustValue); + adjustPojo.setTimestamp(resultVO.getTimestamp()); + adjustPojo.setOutPutId(outputId); + lastList.add(adjustPojo); + } + // 相同时间直接覆盖旧值 + influxDBService.asyncWriteModelResults(lastList); + log.info("t+l自动调整。configCode:" + configCode + ",adjustValue:" + finalAdjustValue + ",itemNo:" + item.getItemNo() + ",itemName:" + item.getItemName() + ",outputId:" + outputId + ",adjustTime:" + adjustStartTime); } - // 调整系数 - adjustValue = adjustValue * configEntity.getAdjustCoefficient(); - // 调整方向 - adjustValue = adjustValue * configEntity.getAdjustDirection(); - - - List<InfluxModelResultPOJO> lastList = new ArrayList<>(); - for (InfluxModelResultVO resultVO : influxModelResult) { - InfluxModelResultLastSimPOJO adjustPojo = new InfluxModelResultLastSimPOJO(); - // 设置新的调整值 - adjustPojo.setValue(Double.parseDouble(resultVO.getValue().toString()) + adjustValue); - adjustPojo.setTimestamp(resultVO.getTimestamp()); - adjustPojo.setOutPutId(configEntity.getOutputId()); - lastList.add(adjustPojo); - } - // 相同时间直接覆盖旧值 - influxDBService.asyncWriteModelResults(lastList); - log.info("t+l自动调整。configCode:" + configCode + ",adjustValue:" + adjustValue + ",itemNo:" + item.getItemNo() + ",itemName" + item.getItemName() + ",outputId" + configEntity.getOutputId() + ",adjustTime:" + adjustStartTime); return true; } } \ 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/controller/admin/StScheduleSuggestController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StScheduleSuggestController.java index b28432f..efa03f5 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StScheduleSuggestController.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StScheduleSuggestController.java @@ -1,22 +1,25 @@ package com.iailab.module.model.mcs.sche.controller.admin; import com.iailab.framework.common.pojo.CommonResult; +import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.common.util.object.BeanUtils; import com.iailab.module.model.mcs.pre.service.DmModuleItemService; import com.iailab.module.model.mcs.pre.service.DmModuleService; import com.iailab.module.model.mcs.pre.service.MmItemOutputService; +import com.iailab.module.model.mcs.sche.entity.StScheduleSchemeEntity; import com.iailab.module.model.mcs.sche.entity.StScheduleSuggestEntity; import com.iailab.module.model.mcs.sche.service.StScheduleSuggestService; +import com.iailab.module.model.mcs.sche.vo.StScheduleSchemePageReqVO; +import com.iailab.module.model.mcs.sche.vo.StScheduleSchemeRespVO; import com.iailab.module.model.mcs.sche.vo.StScheduleSuggestPageReqVO; import com.iailab.module.model.mcs.sche.vo.StScheduleSuggestRespVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; import java.util.List; import static com.iailab.framework.common.pojo.CommonResult.success; @@ -52,4 +55,12 @@ List<StScheduleSuggestEntity> list = stScheduleSuggestService.getList(moduleList, pageVO.getPredictTime()); return success(BeanUtils.toBean(list, StScheduleSuggestRespVO.class)); } + + @GetMapping("/page") + @Operation(summary = "获得调度建议分页") + @PreAuthorize("@ss.hasPermission('sche:suggest:query')") + public CommonResult<PageResult<StScheduleSuggestRespVO>> getPage(@Valid StScheduleSuggestPageReqVO pageVO) { + PageResult<StScheduleSuggestEntity> pageResult = stScheduleSuggestService.page(pageVO); + return success(BeanUtils.toBean(pageResult, StScheduleSuggestRespVO.class)); + } } \ 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/controller/admin/StSuggestSnapshotConfDetController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StSuggestSnapshotConfDetController.java new file mode 100644 index 0000000..369ffd7 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StSuggestSnapshotConfDetController.java @@ -0,0 +1,68 @@ +package com.iailab.module.model.mcs.sche.controller.admin; + +import com.iailab.framework.common.pojo.CommonResult; +import com.iailab.framework.common.pojo.PageResult; +import com.iailab.framework.common.util.object.BeanUtils; +import com.iailab.module.model.mcs.sche.entity.StSuggestSnapshotConfDetEntity; +import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotConfDetService; +import com.iailab.module.model.mcs.sche.vo.*; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +import static com.iailab.framework.common.pojo.CommonResult.success; + +/** + * @author DongYukun + * @Description + * @createTime 2025年05月23日 + */ +@Tag(name = "调度建议快照配置详情") +@RestController +@RequestMapping("/model/suggest/snapshot/conf-det") +public class StSuggestSnapshotConfDetController { + + @Autowired + private StSuggestSnapshotConfDetService stSuggestSnapshotConfDetService; + + @GetMapping("/page") + @PreAuthorize("@ss.hasPermission('suggest:snapshot:query')") + public CommonResult<PageResult<StSuggestSnapshotConfDetRespVO>> getPage(@Valid StSuggestSnapshotConfDetPageReqVO pageVO) { + PageResult<StSuggestSnapshotConfDetEntity> pageResult = stSuggestSnapshotConfDetService.page(pageVO); + return success(BeanUtils.toBean(pageResult, StSuggestSnapshotConfDetRespVO.class)); + } + + @PostMapping("/create") + @PreAuthorize("@ss.hasPermission('suggest:snapshot:create')") + public CommonResult<Boolean> create(@Valid @RequestBody StSuggestSnapshotConfDetSaveReqVO createReqVO) { + stSuggestSnapshotConfDetService.create(createReqVO); + return success(true); + } + + @PutMapping("/update") + @PreAuthorize("@ss.hasPermission('suggest:snapshot:update')") + public CommonResult<Boolean> update(@Valid @RequestBody StSuggestSnapshotConfDetSaveReqVO updateReqVO) { + stSuggestSnapshotConfDetService.update(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('suggest:snapshot:delete')") + public CommonResult<Boolean> deleteTenant(@RequestParam("id") String id) { + stSuggestSnapshotConfDetService.delete(id); + return success(true); + } + + @GetMapping("/get") + @PreAuthorize("@ss.hasPermission('suggest:snapshot:info')") + public CommonResult<StSuggestSnapshotConfDetRespVO> get(@RequestParam("id") String id) { + StSuggestSnapshotConfDetRespVO result = stSuggestSnapshotConfDetService.get(id); + return success(result); + } +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StSuggestSnapshotConfMainController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StSuggestSnapshotConfMainController.java new file mode 100644 index 0000000..8e8117c --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StSuggestSnapshotConfMainController.java @@ -0,0 +1,71 @@ +package com.iailab.module.model.mcs.sche.controller.admin; + +import com.iailab.framework.common.pojo.CommonResult; +import com.iailab.framework.common.pojo.PageResult; +import com.iailab.framework.common.util.object.BeanUtils; +import com.iailab.module.model.api.mcs.dto.StScheduleModelOutDTO; +import com.iailab.module.model.mcs.sche.entity.*; +import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotConfMainService; +import com.iailab.module.model.mcs.sche.vo.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +import java.util.List; + +import static com.iailab.framework.common.pojo.CommonResult.success; + +/** + * @author DongYukun + * @Description + * @createTime 2025年05月23日 + */ +@Tag(name = "调度建议快照配置主表") +@RestController +@RequestMapping("/model/suggest/snapshot/conf-main") +public class StSuggestSnapshotConfMainController { + + @Autowired + private StSuggestSnapshotConfMainService stSuggestSnapshotConfMainService; + + @GetMapping("/page") + @PreAuthorize("@ss.hasPermission('suggest:snapshot:query')") + public CommonResult<PageResult<StSuggestSnapshotConfMainRespVO>> getPage(@Valid StSuggestSnapshotConfMainPageReqVO pageVO) { + PageResult<StSuggestSnapshotConfMainEntity> pageResult = stSuggestSnapshotConfMainService.page(pageVO); + return success(BeanUtils.toBean(pageResult, StSuggestSnapshotConfMainRespVO.class)); + } + + @GetMapping("/get") + @PreAuthorize("@ss.hasPermission('suggest:snapshot:info')") + public CommonResult<StSuggestSnapshotConfMainRespVO> get(@RequestParam("id") String id) { + StSuggestSnapshotConfMainRespVO result = stSuggestSnapshotConfMainService.get(id); + return success(result); + } + + @PostMapping("/create") + @PreAuthorize("@ss.hasPermission('suggest:snapshot:create')") + public CommonResult<Boolean> create(@Valid @RequestBody StSuggestSnapshotConfMainSaveReqVO createReqVO) { + stSuggestSnapshotConfMainService.create(createReqVO); + return success(true); + } + + @PutMapping("/update") + @PreAuthorize("@ss.hasPermission('suggest:snapshot:update')") + public CommonResult<Boolean> update(@Valid @RequestBody StSuggestSnapshotConfMainSaveReqVO updateReqVO) { + stSuggestSnapshotConfMainService.update(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @PreAuthorize("@ss.hasPermission('suggest:snapshot:delete')") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult<Boolean> deleteTenant(@RequestParam("id") String id) { + stSuggestSnapshotConfMainService.delete(id); + return success(true); + } +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StSuggestSnapshotRecordController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StSuggestSnapshotRecordController.java new file mode 100644 index 0000000..b65e5d3 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StSuggestSnapshotRecordController.java @@ -0,0 +1,40 @@ +package com.iailab.module.model.mcs.sche.controller.admin; + +import com.iailab.framework.common.pojo.CommonResult; +import com.iailab.framework.common.pojo.PageResult; +import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotRecordService; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordChartReqVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordRespVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordSaveReqVO; +import io.swagger.v3.oas.annotations.Parameter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +import static com.iailab.framework.common.pojo.CommonResult.success; + +public class StSuggestSnapshotRecordController { + + @Autowired + private StSuggestSnapshotRecordService stSuggestSnapshotRecordService; + + @PostMapping("/create") + public CommonResult<Boolean> create(@Valid @RequestBody StSuggestSnapshotRecordSaveReqVO createReqVO) { + stSuggestSnapshotRecordService.create(createReqVO); + return success(true); + } + + @PutMapping("/update") + public CommonResult<Boolean> update(@Valid @RequestBody StSuggestSnapshotRecordSaveReqVO updateReqVO) { + stSuggestSnapshotRecordService.update(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult<Boolean> deleteTenant(@RequestParam("id") String id) { + stSuggestSnapshotRecordService.delete(id); + return success(true); + } +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleSuggestDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleSuggestDao.java index e1902c9..9bf2542 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleSuggestDao.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleSuggestDao.java @@ -25,6 +25,7 @@ default PageResult<StScheduleSuggestEntity> selectPage(StScheduleSuggestPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX<StScheduleSuggestEntity>() .likeIfPresent(StScheduleSuggestEntity::getTitle, reqVO.getTitle()) + .eqIfPresent(StScheduleSuggestEntity::getModelId, reqVO.getModelId()) .likeIfPresent(StScheduleSuggestEntity::getScheduleObj, reqVO.getScheduleObj()) .orderByDesc(StScheduleSuggestEntity::getCreateTime)); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotConfDetDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotConfDetDao.java index c0cd3f5..496fbdb 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotConfDetDao.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotConfDetDao.java @@ -1,8 +1,11 @@ package com.iailab.module.model.mcs.sche.dao; +import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.mybatis.core.mapper.BaseMapperX; +import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX; import com.iailab.framework.tenant.core.db.dynamic.TenantDS; import com.iailab.module.model.mcs.sche.entity.StSuggestSnapshotConfDetEntity; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfDetPageReqVO; import org.apache.ibatis.annotations.Mapper; /** @@ -11,5 +14,8 @@ @TenantDS @Mapper public interface StSuggestSnapshotConfDetDao extends BaseMapperX<StSuggestSnapshotConfDetEntity> { - + default PageResult<StSuggestSnapshotConfDetEntity> selectPage(StSuggestSnapshotConfDetPageReqVO reqVO) { + return selectPage(reqVO,new LambdaQueryWrapperX<StSuggestSnapshotConfDetEntity>() + .likeIfPresent(StSuggestSnapshotConfDetEntity::getConfId,reqVO.getConfId())); + } } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotConfMainDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotConfMainDao.java index b4281c1..d31dfc6 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotConfMainDao.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotConfMainDao.java @@ -1,8 +1,12 @@ package com.iailab.module.model.mcs.sche.dao; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.mybatis.core.mapper.BaseMapperX; +import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX; import com.iailab.framework.tenant.core.db.dynamic.TenantDS; import com.iailab.module.model.mcs.sche.entity.StSuggestSnapshotConfMainEntity; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfMainPageReqVO; import org.apache.ibatis.annotations.Mapper; /** @@ -11,5 +15,8 @@ @TenantDS @Mapper public interface StSuggestSnapshotConfMainDao extends BaseMapperX<StSuggestSnapshotConfMainEntity> { - + default PageResult<StSuggestSnapshotConfMainEntity> selectPage(StSuggestSnapshotConfMainPageReqVO reqVO) { + return selectPage(reqVO,new LambdaQueryWrapperX<StSuggestSnapshotConfMainEntity>() + .likeIfPresent(StSuggestSnapshotConfMainEntity::getModelId,reqVO.getModelId())); + } } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotRecordDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotRecordDao.java index b963f64..c2d9859 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotRecordDao.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StSuggestSnapshotRecordDao.java @@ -1,8 +1,11 @@ package com.iailab.module.model.mcs.sche.dao; +import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.mybatis.core.mapper.BaseMapperX; +import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX; import com.iailab.framework.tenant.core.db.dynamic.TenantDS; import com.iailab.module.model.mcs.sche.entity.StSuggestSnapshotRecordEntity; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordChartReqVO; import org.apache.ibatis.annotations.Mapper; /** @@ -11,5 +14,7 @@ @TenantDS @Mapper public interface StSuggestSnapshotRecordDao extends BaseMapperX<StSuggestSnapshotRecordEntity> { - + default PageResult<StSuggestSnapshotRecordEntity> selectPage(StSuggestSnapshotRecordChartReqVO reqVO) { + return selectPage(reqVO); + } } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestOperationRecordEntity.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestOperationRecordEntity.java index e770e52..3dc1215 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestOperationRecordEntity.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestOperationRecordEntity.java @@ -69,6 +69,11 @@ private String operate; /** + * 原因 + */ + private String reason; + + /** * 处理人ID */ private String handlerId; diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestSnapshotConfDetEntity.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestSnapshotConfDetEntity.java index f2dab4a..150c27d 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestSnapshotConfDetEntity.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestSnapshotConfDetEntity.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.iailab.framework.mybatis.core.dataobject.BaseDO; import lombok.Data; import java.io.Serializable; @@ -23,7 +24,7 @@ private String id; /** - * 模型ID + * 快照配置ID */ private String confId; @@ -43,7 +44,7 @@ private Integer leftLength; /** - * 右侧侧长度(min) + * 右侧长度(min) */ private Integer rightLength; diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestSnapshotRecordEntity.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestSnapshotRecordEntity.java index 155c726..f3deb66 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestSnapshotRecordEntity.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StSuggestSnapshotRecordEntity.java @@ -51,6 +51,11 @@ /** * 开始时间 */ + private Date scheduleTime; + + /** + * 开始时间 + */ private Date startTime; /** diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotConfDetService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotConfDetService.java index 1773898..5bf2ca7 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotConfDetService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotConfDetService.java @@ -1,12 +1,28 @@ package com.iailab.module.model.mcs.sche.service; +import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.common.service.BaseService; import com.iailab.module.model.mcs.sche.entity.StSuggestSnapshotConfDetEntity; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfDetPageReqVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfDetRespVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfDetSaveReqVO; + +import java.util.List; /** * @author Jay */ public interface StSuggestSnapshotConfDetService extends BaseService<StSuggestSnapshotConfDetEntity> { + PageResult<StSuggestSnapshotConfDetEntity> page(StSuggestSnapshotConfDetPageReqVO reqVO); + void create(StSuggestSnapshotConfDetSaveReqVO createReqVO); + + void update(StSuggestSnapshotConfDetSaveReqVO createReqVO); + + void delete(String id); + + List<StSuggestSnapshotConfDetRespVO> getByConfId(String confId); + + StSuggestSnapshotConfDetRespVO get(String id); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotConfMainService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotConfMainService.java index 9b7c726..2d2f1b8 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotConfMainService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotConfMainService.java @@ -1,12 +1,26 @@ package com.iailab.module.model.mcs.sche.service; +import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.common.service.BaseService; +import com.iailab.module.model.mcs.sche.entity.StScheduleModelEntity; import com.iailab.module.model.mcs.sche.entity.StSuggestSnapshotConfMainEntity; - +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfMainPageReqVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfMainRespVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfMainSaveReqVO; /** * @author Jay */ public interface StSuggestSnapshotConfMainService extends BaseService<StSuggestSnapshotConfMainEntity> { + PageResult<StSuggestSnapshotConfMainEntity> page(StSuggestSnapshotConfMainPageReqVO reqVO); + void create(StSuggestSnapshotConfMainSaveReqVO createReqVO); + + void update(StSuggestSnapshotConfMainSaveReqVO createReqVO); + + void delete(String id); + + StSuggestSnapshotConfMainRespVO getByModelIdAndScheduleObj(String modelId, String scheduleObj); + + StSuggestSnapshotConfMainRespVO get(String id); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotRecordService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotRecordService.java index f4dbfdd..9ac2882 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotRecordService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StSuggestSnapshotRecordService.java @@ -1,12 +1,20 @@ package com.iailab.module.model.mcs.sche.service; +import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.common.service.BaseService; import com.iailab.module.model.mcs.sche.entity.StSuggestSnapshotRecordEntity; - +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordChartReqVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordRespVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordSaveReqVO; /** * @author Jay */ public interface StSuggestSnapshotRecordService extends BaseService<StSuggestSnapshotRecordEntity> { + void create(StSuggestSnapshotRecordSaveReqVO createReqVO); + + void update(StSuggestSnapshotRecordSaveReqVO createReqVO); + + void delete(String id); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleSuggestServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleSuggestServiceImpl.java index 6cf4835..f4507f5 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleSuggestServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleSuggestServiceImpl.java @@ -8,10 +8,8 @@ import com.iailab.module.model.api.mcs.dto.ScheduleSuggestReqDTO; import com.iailab.module.model.api.mcs.dto.ScheduleSuggestRespDTO; import com.iailab.module.model.api.mcs.dto.StAlarmAndSuggestReqVO; -import com.iailab.module.model.api.mcs.dto.StAlarmAndSuggestRespVO; import com.iailab.module.model.common.enums.ScheduleSuggestStatusEnum; import com.iailab.module.model.mcs.sche.dao.StScheduleSuggestDao; -import com.iailab.module.model.mcs.sche.entity.StScheduleSchemeEntity; import com.iailab.module.model.mcs.sche.entity.StScheduleSuggestEntity; import com.iailab.module.model.mcs.sche.service.StScheduleSuggestService; import com.iailab.module.model.mcs.sche.vo.StScheduleSuggestPageReqVO; @@ -109,7 +107,7 @@ public Boolean ignoreSuggest(StAlarmAndSuggestReqVO reqVO) { StScheduleSuggestEntity entity = new StScheduleSuggestEntity(); entity.setId(reqVO.getId()); - entity.setStatus(ScheduleSuggestStatusEnum.S0.getCode()); + entity.setStatus(ScheduleSuggestStatusEnum.S2.getCode()); entity.setHandleTime(new Date()); baseDao.updateById(entity); return true; diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestOperationRecordServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestOperationRecordServiceImpl.java index 8908bd5..9963fca 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestOperationRecordServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestOperationRecordServiceImpl.java @@ -6,10 +6,17 @@ import com.iailab.module.model.mcs.sche.dao.StSuggestOperationRecordDao; import com.iailab.module.model.mcs.sche.entity.StSuggestOperationRecordEntity; import com.iailab.module.model.mcs.sche.service.StSuggestOperationRecordService; -import com.iailab.module.model.mcs.sche.vo.StSuggestOperationRecordPageReqVO; -import com.iailab.module.model.mcs.sche.vo.StSuggestOperationRecordReqVO; +import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotConfDetService; +import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotConfMainService; +import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotRecordService; +import com.iailab.module.model.mcs.sche.vo.*; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; +import java.util.List; import java.util.UUID; @@ -20,6 +27,15 @@ public class StSuggestOperationRecordServiceImpl extends BaseServiceImpl<StSuggestOperationRecordDao, StSuggestOperationRecordEntity> implements StSuggestOperationRecordService { + @Autowired + private StSuggestSnapshotConfMainService stSuggestSnapshotConfMainService; + + @Autowired + private StSuggestSnapshotConfDetService stSuggestSnapshotConfDetService; + + @Autowired + private StSuggestSnapshotRecordService stSuggestSnapshotRecordService; + @Override public PageResult<StSuggestOperationRecordEntity> page(StSuggestOperationRecordPageReqVO reqVO) { return baseDao.selectPage(reqVO); @@ -29,7 +45,30 @@ public void create(StSuggestOperationRecordReqVO reqVo) { StSuggestOperationRecordEntity entity = BeanUtils.toBean(reqVo, StSuggestOperationRecordEntity.class); entity.setId(UUID.randomUUID().toString()); + entity.setHandleTime(new Date()); baseDao.insert(entity); + + //获取调度建议快照配置表信息 + StSuggestSnapshotConfMainRespVO confMain = stSuggestSnapshotConfMainService.getByModelIdAndScheduleObj(reqVo.getModelId(), reqVo.getSuggestId()); + if (confMain != null){ + StSuggestSnapshotRecordSaveReqVO snapshotRecordSaveReqVO = new StSuggestSnapshotRecordSaveReqVO(); + snapshotRecordSaveReqVO.setModelId(entity.getModelId()); + List<StSuggestSnapshotConfDetRespVO> confDetList = stSuggestSnapshotConfDetService.getByConfId(confMain.getId()); + confDetList.forEach(confDet -> { + snapshotRecordSaveReqVO.setDataNo(confDet.getDataNo()); + snapshotRecordSaveReqVO.setDataType(confDet.getDataType()); + snapshotRecordSaveReqVO.setScheduleTime(entity.getScheduleTime()); + //计算开始时间,开始时间为当前调度时间减去快照配置表配置的左侧时间长度 + LocalDateTime localStartDateTime = entity.getScheduleTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().minusMinutes(confDet.getLeftLength()); + Date startTime = Date.from(localStartDateTime.atZone(ZoneId.systemDefault()).toInstant()); + snapshotRecordSaveReqVO.setStartTime(startTime); + //计算结束时间,结束时间为当前调度时间加上快照配置表配置的右侧时间长度 + LocalDateTime localEndDateTime = entity.getScheduleTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().plusMinutes(confDet.getRightLength()); + Date endTime = Date.from(localEndDateTime.atZone(ZoneId.systemDefault()).toInstant()); + snapshotRecordSaveReqVO.setEndTime(endTime); + stSuggestSnapshotRecordService.create(snapshotRecordSaveReqVO); + }); + } } } \ 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/StSuggestSnapshotConfDetServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotConfDetServiceImpl.java index a53a48c..8c202a9 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotConfDetServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotConfDetServiceImpl.java @@ -1,10 +1,22 @@ package com.iailab.module.model.mcs.sche.service.impl; +import com.baomidou.dynamic.datasource.annotation.DSTransactional; +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.model.mcs.sche.dao.StSuggestSnapshotConfDetDao; import com.iailab.module.model.mcs.sche.entity.StSuggestSnapshotConfDetEntity; import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotConfDetService; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfDetPageReqVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfDetRespVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfDetSaveReqVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfMainRespVO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.UUID; /** @@ -15,4 +27,42 @@ implements StSuggestSnapshotConfDetService { + @Autowired + private StSuggestSnapshotConfDetService stSuggestSnapshotConfDetService; + + @Override + public PageResult<StSuggestSnapshotConfDetEntity> page(StSuggestSnapshotConfDetPageReqVO reqVO) { + return baseDao.selectPage(reqVO); + } + + @Override + @DSTransactional(rollbackFor = Exception.class) + public void create(StSuggestSnapshotConfDetSaveReqVO createReqVO) { + StSuggestSnapshotConfDetEntity entity = BeanUtils.toBean(createReqVO, StSuggestSnapshotConfDetEntity.class); + entity.setId(UUID.randomUUID().toString()); + baseDao.insert(entity); + } + + @Override + @DSTransactional(rollbackFor = Exception.class) + public void update(StSuggestSnapshotConfDetSaveReqVO updateReqVO) { + StSuggestSnapshotConfDetEntity entity = BeanUtils.toBean(updateReqVO, StSuggestSnapshotConfDetEntity.class); + baseDao.updateById(entity); + } + + @Override + @DSTransactional(rollbackFor = Exception.class) + public void delete(String id) { + baseDao.deleteById(id); + } + + @Override + public List<StSuggestSnapshotConfDetRespVO> getByConfId(String confId) { + return ConvertUtils.sourceToTarget(baseDao.selectList("conf_id", confId), StSuggestSnapshotConfDetRespVO.class); + } + + @Override + public StSuggestSnapshotConfDetRespVO get(String id) { + return ConvertUtils.sourceToTarget( baseDao.selectById(id), StSuggestSnapshotConfDetRespVO.class); + } } \ 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/StSuggestSnapshotConfMainServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotConfMainServiceImpl.java index 5e76e0b..937f795 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotConfMainServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotConfMainServiceImpl.java @@ -1,10 +1,20 @@ package com.iailab.module.model.mcs.sche.service.impl; +import com.baomidou.dynamic.datasource.annotation.DSTransactional; +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.model.mcs.sche.dao.StSuggestSnapshotConfMainDao; +import com.iailab.module.model.mcs.sche.entity.StScheduleModelEntity; import com.iailab.module.model.mcs.sche.entity.StSuggestSnapshotConfMainEntity; import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotConfMainService; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfMainPageReqVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfMainRespVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfMainSaveReqVO; import org.springframework.stereotype.Service; + +import java.util.UUID; /** @@ -13,4 +23,40 @@ @Service public class StSuggestSnapshotConfMainServiceImpl extends BaseServiceImpl<StSuggestSnapshotConfMainDao, StSuggestSnapshotConfMainEntity> implements StSuggestSnapshotConfMainService { + + @Override + public PageResult<StSuggestSnapshotConfMainEntity> page(StSuggestSnapshotConfMainPageReqVO reqVO) { + return baseDao.selectPage(reqVO); + } + + @Override + @DSTransactional(rollbackFor = Exception.class) + public void create(StSuggestSnapshotConfMainSaveReqVO createReqVO) { + StSuggestSnapshotConfMainEntity entity = BeanUtils.toBean(createReqVO, StSuggestSnapshotConfMainEntity.class); + entity.setId(UUID.randomUUID().toString()); + baseDao.insert(entity); + } + + @Override + @DSTransactional(rollbackFor = Exception.class) + public void update(StSuggestSnapshotConfMainSaveReqVO updateReqVO) { + StSuggestSnapshotConfMainEntity entity = BeanUtils.toBean(updateReqVO, StSuggestSnapshotConfMainEntity.class); + baseDao.updateById(entity); + } + + @Override + @DSTransactional(rollbackFor = Exception.class) + public void delete(String id) { + baseDao.deleteById(id); + } + + @Override + public StSuggestSnapshotConfMainRespVO getByModelIdAndScheduleObj(String modelId, String scheduleObj) { + return ConvertUtils.sourceToTarget( baseDao.selectOne("model_id", modelId, "schedule_obj", scheduleObj), StSuggestSnapshotConfMainRespVO.class); + } + + @Override + public StSuggestSnapshotConfMainRespVO get(String id) { + return ConvertUtils.sourceToTarget( baseDao.selectById(id), StSuggestSnapshotConfMainRespVO.class); + } } \ 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/StSuggestSnapshotRecordServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotRecordServiceImpl.java index 0292557..115e612 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotRecordServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotRecordServiceImpl.java @@ -1,10 +1,24 @@ package com.iailab.module.model.mcs.sche.service.impl; +import com.baomidou.dynamic.datasource.annotation.DSTransactional; +import com.baomidou.mybatisplus.core.metadata.IPage; +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.module.model.mcs.sche.dao.StSuggestSnapshotRecordDao; +import com.iailab.module.model.mcs.sche.entity.StScheduleModelEntity; import com.iailab.module.model.mcs.sche.entity.StSuggestSnapshotRecordEntity; import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotRecordService; +import com.iailab.module.model.mcs.sche.vo.StScheduleModelRespVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordChartReqVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordRespVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordSaveReqVO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.util.UUID; + +import static com.iailab.framework.common.pojo.CommonResult.success; /** @@ -13,4 +27,29 @@ @Service public class StSuggestSnapshotRecordServiceImpl extends BaseServiceImpl<StSuggestSnapshotRecordDao, StSuggestSnapshotRecordEntity> implements StSuggestSnapshotRecordService { + + + @Autowired + private StSuggestSnapshotRecordService StSuggestSnapshotRecordService; + + @Override + @DSTransactional(rollbackFor = Exception.class) + public void create(StSuggestSnapshotRecordSaveReqVO createReqVO) { + StSuggestSnapshotRecordEntity entity = BeanUtils.toBean(createReqVO, StSuggestSnapshotRecordEntity.class); + entity.setId(UUID.randomUUID().toString()); + baseDao.insert(entity); + } + + @Override + @DSTransactional(rollbackFor = Exception.class) + public void update(StSuggestSnapshotRecordSaveReqVO updateReqVO) { + StSuggestSnapshotRecordEntity entity = BeanUtils.toBean(updateReqVO, StSuggestSnapshotRecordEntity.class); + baseDao.updateById(entity); + } + + @Override + @DSTransactional(rollbackFor = Exception.class) + public void delete(String id) { + baseDao.deleteById(id); + } } \ 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/vo/StScheduleSuggestPageReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StScheduleSuggestPageReqVO.java index a1b2ede..e2301ed 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StScheduleSuggestPageReqVO.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StScheduleSuggestPageReqVO.java @@ -24,6 +24,9 @@ @Schema(description = "标题,模糊匹配", example = "") private String title; + @Schema(description = "模型id", example = "") + private String modelId; + @Schema(description = "调整对象,模糊匹配", example = "") private String scheduleObj; diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordPageReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordPageReqVO.java index 56e589d..264fe49 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordPageReqVO.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordPageReqVO.java @@ -29,8 +29,7 @@ private String modelName; @Schema(description = "调度时间") - @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = "GMT+8") - private LocalDateTime scheduleTime; + private String scheduleTime; @Schema(description = "开始时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordReqVO.java index 68cade9..f3a12b2 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordReqVO.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordReqVO.java @@ -45,6 +45,9 @@ @Schema(description = "操作(已采纳,取消采纳,已忽略等)") private String operate; + @Schema(description = "原因") + private String reason; + @Schema(description = "处理人ID") private String handlerId; @@ -57,4 +60,7 @@ @Schema(description = "创建时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; + + @Schema(description = "建议ID") + private String suggestId; } \ 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/vo/StSuggestOperationRecordResVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordResVO.java index 67560ac..0104b4d 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordResVO.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestOperationRecordResVO.java @@ -47,6 +47,9 @@ @Schema(description = "操作(已采纳,取消采纳,已忽略等)") private String operate; + @Schema(description = "原因") + private String reason; + @Schema(description = "处理人ID") private String handlerId; diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetPageReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetPageReqVO.java new file mode 100644 index 0000000..50012a9 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetPageReqVO.java @@ -0,0 +1,21 @@ +package com.iailab.module.model.mcs.sche.vo; + +import com.iailab.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + + +/** + * @author Jay + */ +@Schema(description = "模型服务 - 调度建议快照配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class StSuggestSnapshotConfDetPageReqVO extends PageParam { + + @Schema(description = "模型ID") + private String confId; +} \ 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/vo/StSuggestSnapshotConfDetReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetReqVO.java index 2bb615e..8d1c729 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetReqVO.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetReqVO.java @@ -14,7 +14,7 @@ @Schema(description = "ID") private String id; - @Schema(description = "模型ID") + @Schema(description = "快照配置ID") private String confId; @Schema(description = "数据类型(DATAPOINT,IND,PLAN,PREDICTITEM)") diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetRespVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetRespVO.java new file mode 100644 index 0000000..cf2dd94 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetRespVO.java @@ -0,0 +1,49 @@ +package com.iailab.module.model.mcs.sche.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + + +/** + * @author Jay + */ +@Schema(description = "模型服务 - 调度建议创建/修改 Request VO") +@Data +public class StSuggestSnapshotConfDetRespVO { + + @Schema(description = "ID") + private String id; + + @Schema(description = "模型ID") + private String confId; + + @Schema(description = "数据类型(DATAPOINT,IND,PLAN,PREDICTITEM)") + private String dataType; + + @Schema(description = "数据编号") + private String dataNo; + + @Schema(description = "左侧长度(min)") + private Integer leftLength; + + @Schema(description = "右侧侧长度(min)") + private Integer rightLength; + + @Schema(description = "排序") + private Integer sort; + + @Schema(description = "拓展字段1") + private String ext1; + + @Schema(description = "拓展字段2") + private String ext2; + + @Schema(description = "拓展字段3") + private String ext3; + + @Schema(description = "拓展字段4") + private String ext4; + + @Schema(description = "拓展字段5") + private String ext5; +} \ 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/vo/StSuggestSnapshotConfDetSaveReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetSaveReqVO.java new file mode 100644 index 0000000..be48686 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfDetSaveReqVO.java @@ -0,0 +1,49 @@ +package com.iailab.module.model.mcs.sche.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + + +/** + * @author Jay + */ +@Schema(description = "模型服务 - 调度建议创建/修改 Request VO") +@Data +public class StSuggestSnapshotConfDetSaveReqVO { + + @Schema(description = "ID") + private String id; + + @Schema(description = "模型ID") + private String confId; + + @Schema(description = "数据类型(DATAPOINT,IND,PLAN,PREDICTITEM)") + private String dataType; + + @Schema(description = "数据编号") + private String dataNo; + + @Schema(description = "左侧长度(min)") + private Integer leftLength; + + @Schema(description = "右侧侧长度(min)") + private Integer rightLength; + + @Schema(description = "排序") + private Integer sort; + + @Schema(description = "拓展字段1") + private String ext1; + + @Schema(description = "拓展字段2") + private String ext2; + + @Schema(description = "拓展字段3") + private String ext3; + + @Schema(description = "拓展字段4") + private String ext4; + + @Schema(description = "拓展字段5") + private String ext5; +} \ 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/vo/StSuggestSnapshotConfMainPageReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfMainPageReqVO.java new file mode 100644 index 0000000..d6115af --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfMainPageReqVO.java @@ -0,0 +1,30 @@ +package com.iailab.module.model.mcs.sche.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.iailab.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.Date; + + +/** + * @author Jay + */ +@Schema(description = "模型服务 - 调度建议快照配置详情分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class StSuggestSnapshotConfMainPageReqVO extends PageParam { + + @Schema(description = "标题") + private String title; + + @Schema(description = "模型ID") + private String modelId; + + @Schema(description = "调整对象") + private String scheduleObj; +} \ 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/vo/StSuggestSnapshotConfMainRespVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfMainRespVO.java new file mode 100644 index 0000000..31eeba5 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfMainRespVO.java @@ -0,0 +1,32 @@ +package com.iailab.module.model.mcs.sche.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + + +/** + * @author Jay + */ +@Schema(description = "模型服务 - 调度建议创建/修改 Request VO") +@Data +public class StSuggestSnapshotConfMainRespVO { + + @Schema(description = "ID") + private String id; + + @Schema(description = "标题") + private String title; + + @Schema(description = "模型ID") + private String modelId; + + @Schema(description = "调整对象") + private String scheduleObj; + + @Schema(description = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; +} \ 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/vo/StSuggestSnapshotConfMainSaveReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfMainSaveReqVO.java new file mode 100644 index 0000000..06e342c --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotConfMainSaveReqVO.java @@ -0,0 +1,32 @@ +package com.iailab.module.model.mcs.sche.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + + +/** + * @author Jay + */ +@Schema(description = "模型服务 - 调度建议创建/修改 Request VO") +@Data +public class StSuggestSnapshotConfMainSaveReqVO { + + @Schema(description = "ID") + private String id; + + @Schema(description = "标题") + private String title; + + @Schema(description = "模型ID") + private String modelId; + + @Schema(description = "调整对象") + private String scheduleObj; + + @Schema(description = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; +} \ 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/vo/StSuggestSnapshotRecordChartReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotRecordChartReqVO.java new file mode 100644 index 0000000..b584ee0 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotRecordChartReqVO.java @@ -0,0 +1,30 @@ +package com.iailab.module.model.mcs.sche.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + + +/** + * @author Jay + */ +@Schema(description = "模型服务 - 调度建议快照图表查询 Request VO") +@Data +public class StSuggestSnapshotRecordChartReqVO { + + @Schema(description = "数据类型(DATAPOINT,IND,PLAN,PREDICTITEM)") + private String dataType; + + @Schema(description = "数据编号") + private String dataNo; + + @Schema(description = "开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startTime; + + @Schema(description = "结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date endTime; +} \ 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/vo/StSuggestSnapshotRecordRespVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotRecordRespVO.java new file mode 100644 index 0000000..2b14a94 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotRecordRespVO.java @@ -0,0 +1,50 @@ +package com.iailab.module.model.mcs.sche.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + + +/** + * @author Jay + */ +@Schema(description = "模型服务 - 调度建议创建/修改 Request VO") +@Data +public class StSuggestSnapshotRecordRespVO { + + @Schema(description = "ID") + private String id; + + @Schema(description = "建议ID(只记录采纳)") + private String suggestId; + + @Schema(description = "操作记录ID(只记录采纳)") + private String operationId; + + @Schema(description = "模型ID") + private String modelId; + + @Schema(description = "数据类型(DATAPOINT,IND,PLAN,PREDICTITEM)") + private String dataType; + + @Schema(description = "数据编号") + private String dataNo; + + @Schema(description = "开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startTime; + + @Schema(description = "结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date endTime; + + @Schema(description = "序列化的数据") + private String jsonValue; + + @Schema(description = "排序") + private Integer sort; + + +} \ 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/vo/StSuggestSnapshotRecordSaveReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotRecordSaveReqVO.java new file mode 100644 index 0000000..adf43ea --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StSuggestSnapshotRecordSaveReqVO.java @@ -0,0 +1,54 @@ +package com.iailab.module.model.mcs.sche.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + + +/** + * @author Jay + */ +@Schema(description = "模型服务 - 调度建议创建/修改 Request VO") +@Data +public class StSuggestSnapshotRecordSaveReqVO { + + @Schema(description = "ID") + private String id; + + @Schema(description = "建议ID(只记录采纳)") + private String suggestId; + + @Schema(description = "操作记录ID(只记录采纳)") + private String operationId; + + @Schema(description = "模型ID") + private String modelId; + + @Schema(description = "数据类型(DATAPOINT,IND,PLAN,PREDICTITEM)") + private String dataType; + + @Schema(description = "数据编号") + private String dataNo; + + @Schema(description = "调度时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date scheduleTime; + + @Schema(description = "开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startTime; + + @Schema(description = "结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date endTime; + + @Schema(description = "序列化的数据") + private String jsonValue; + + @Schema(description = "排序") + private Integer sort; + + +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/application.yml b/iailab-module-model/iailab-module-model-biz/src/main/resources/application.yml index fbf8a11..893c65a 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/resources/application.yml +++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/application.yml @@ -232,6 +232,9 @@ - t_mm_predict_influence_factor - t_mm_predict_influence_factor_result - t_st_suggest_operation_record + - t_st_suggest_snapshot_conf_det + - t_st_suggest_snapshot_conf_main + - t_st_suggest_snapshot_record app: app-key: model app-secret: 85b0df7edc3df3611913df34ed695011 diff --git a/iailab-module-system/iailab-module-system-biz/src/main/java/com/iailab/module/system/service/permission/MenuServiceImpl.java b/iailab-module-system/iailab-module-system-biz/src/main/java/com/iailab/module/system/service/permission/MenuServiceImpl.java index 5f32ec2..3d9be14 100644 --- a/iailab-module-system/iailab-module-system-biz/src/main/java/com/iailab/module/system/service/permission/MenuServiceImpl.java +++ b/iailab-module-system/iailab-module-system-biz/src/main/java/com/iailab/module/system/service/permission/MenuServiceImpl.java @@ -331,7 +331,10 @@ if (CollUtil.isEmpty(ids)) { return Lists.newArrayList(); } - return menuMapper.selectBatchIds(ids); + return menuMapper.selectList( + new LambdaQueryWrapper<MenuDO>() + .in(MenuDO::getId, ids) + .eq(MenuDO::getStatus, CommonStatusEnum.ENABLE)); } @Override diff --git a/iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java b/iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java index 2a66286..343c0f6 100644 --- a/iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java +++ b/iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java @@ -90,7 +90,7 @@ httpPost.addHeader("Content-Type", "application/json;charset=UTF-8"); httpPost.addHeader("Authorization", "Bearer " + IailabClient.accessToken); httpPost.addHeader("Tenant-Id", SdkAutoConfiguration.TENANT_ID.toString()); - StringEntity stringEntity = new StringEntity(json); + StringEntity stringEntity = new StringEntity(json,"UTF-8"); stringEntity.setContentEncoding("UTF-8"); stringEntity.setContentType("application/json"); httpPost.setEntity(stringEntity); -- Gitblit v1.9.3