潘志宝
2024-11-22 8a74e9c0f3f9fbf5709201719431d0a2b7cb8794
计划数据图表
已修改7个文件
已添加2个文件
208 ■■■■ 文件已修改
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PlanDataRecordDTO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PlanDataSingleChartRespVO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/doc/c++代码生成.md 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/controller/admin/McsApiController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/CommonConstant.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/MethodSettingService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MethodSettingServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java
@@ -40,6 +40,10 @@
    @Operation(summary = "预测数据图表")
    PreDataSingleChartRespVO getPreDataSingleChart(@RequestBody PreDataSingleChartReqVO reqVO);
    @PostMapping(PREFIX + "/plan-data/single-chart")
    @Operation(summary = "计划数据图表")
    PlanDataSingleChartRespVO getPlanDataSingleChart(@RequestBody PreDataSingleChartReqVO reqVO);
    @PostMapping(PREFIX + "/alarm-message/create")
    @Operation(summary = "添加预警信息")
    Boolean createAlarmMessage(@RequestBody AlarmMessageRespDTO dto);
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PlanDataRecordDTO.java
对比新文件
@@ -0,0 +1,21 @@
package com.iailab.module.model.api.mcs.dto;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;
import java.io.Serializable;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年11月21日
 */
@Data
@Tag(name = "计划值")
public class PlanDataRecordDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String startTime;
    private String endTime;
}
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PlanDataSingleChartRespVO.java
对比新文件
@@ -0,0 +1,41 @@
package com.iailab.module.model.api.mcs.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年11月21日
 */
@Data
public class PlanDataSingleChartRespVO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "预测时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date predictTime;
    @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 List<String> legend;
    @Schema(description = "X轴数据")
    private List<String> categories;
    @Schema(description = "计划记录")
    private LinkedHashMap<String, List<PlanDataRecordDTO>> record;
}
iailab-module-model/iailab-module-model-biz/doc/c++代码生成.md
@@ -2,7 +2,9 @@
Windows10 x64
# 安装SmartEnergyStudio
SmartEnergyStudio提供标准的c++环境,python环境(python3.7.5及相关依赖包)
1、SmartEnergyStudio提供标准的c++环境,python环境(python3.7.5及相关依赖包)
2、安装python依赖包
3、安装license
# 安装VS2017专业版
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java
@@ -1,10 +1,14 @@
package com.iailab.module.model.api;
import com.iailab.framework.common.util.date.DateUtils;
import com.iailab.framework.common.util.object.ConvertUtils;
import com.iailab.module.data.api.plan.PlanItemApi;
import com.iailab.module.data.api.plan.dto.ApiPlanDataDTO;
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.data.api.point.dto.ApiPointDTO;
import com.iailab.module.data.api.point.dto.ApiPointValueDTO;
import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
import com.iailab.module.data.common.ApiDataQueryDTO;
import com.iailab.module.model.api.mcs.McsApi;
import com.iailab.module.model.api.mcs.dto.*;
import com.iailab.module.model.common.enums.CommonConstant;
@@ -58,6 +62,9 @@
    @Autowired
    private ChartService chartService;
    @Autowired
    private PlanItemApi planItemApi;
    private int HOUR_MINS = 60;
@@ -289,28 +296,12 @@
        BigDecimal limitL = chartParams.get(CommonConstant.LIMIT_L) == null ? BigDecimal.ZERO : new BigDecimal(chartParams.get(CommonConstant.LIMIT_L));
        int lengthLeft = chartParams.get(CommonConstant.LENGTH_LEFT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_LEFT)).intValue();
        int lengthRight = chartParams.get(CommonConstant.LENGTH_RIGHT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_RIGHT)).intValue();
        result.setPredictTime(predictItem.getLastTime());
        Date predictTime = predictItem.getLastTime();
        Date startTime = reqVO.getStartTime();
        if (startTime == null) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictItem.getLastTime());
            calendar.add(Calendar.MINUTE, -1 * lengthLeft);
            startTime = calendar.getTime();
        }
        Date endTime = reqVO.getEndTime();
        if (endTime == null) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictItem.getLastTime());
            calendar.add(Calendar.MINUTE, lengthRight);
            endTime = calendar.getTime();
        }
        if (endTime.getTime() <= startTime.getTime()) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(startTime);
            calendar.add(Calendar.MINUTE, lengthRight);
            endTime = calendar.getTime();
        }
        Date[] timeArray = calResultTime(predictItem, reqVO.getStartTime(), reqVO.getEndTime(), lengthLeft, lengthRight);
        Date predictTime = timeArray[0];
        Date startTime = timeArray[1];
        Date endTime = timeArray[2];
        List<String> categories = DateUtils.getTimeScale(startTime, endTime, predictItem.getGranularity(), timeFormat);
        List<String> legend = new ArrayList<>();
        MmItemOutputEntity outPut = mmItemOutputService.getByItemid(predictItem.getId(), resultStr);
@@ -344,11 +335,62 @@
            dataView.setPreMin(new BigDecimal(curList.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
        }
        result.setPredictTime(predictTime);
        result.setStartTime(startTime);
        result.setEndTime(endTime);
        result.setCategories(categories);
        result.setLegend(legend);
        result.setDataView(dataView);
        return result;
    }
    @Override
    public PlanDataSingleChartRespVO getPlanDataSingleChart(PreDataSingleChartReqVO reqVO) {
        PlanDataSingleChartRespVO result = new PlanDataSingleChartRespVO();
        Map<String, String> chartParams = chartService.getByChartCode(reqVO.getChartCode());
        if (CollectionUtils.isEmpty(chartParams)) {
            return result;
        }
        String itemCode = chartParams.get(CommonConstant.ITEM_CODE);
        if (itemCode == null) {
            return result;
        }
        String planItemStr = chartParams.get(CommonConstant.PLAN_ITEM_LIST);
        if (planItemStr == null) {
            return result;
        }
        List<String> planItemCodeList = Arrays.asList(planItemStr.split(","));
        ItemVO predictItem = mmPredictItemService.getItemByItemNo(itemCode);
        if (predictItem == null || predictItem.getLastTime() == null) {
            return result;
        }
        String timeFormat = StringUtils.isBlank(reqVO.getTimeFormat()) ? DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND : reqVO.getTimeFormat();
        int lengthLeft = chartParams.get(CommonConstant.LENGTH_LEFT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_LEFT)).intValue();
        int lengthRight = chartParams.get(CommonConstant.LENGTH_RIGHT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_RIGHT)).intValue();
        Date[] timeArray = calResultTime(predictItem, reqVO.getStartTime(), reqVO.getEndTime(), lengthLeft, lengthRight);
        Date predictTime = timeArray[0];
        Date startTime = timeArray[1];
        Date endTime = timeArray[2];
        List<String> categories = DateUtils.getTimeScale(startTime, endTime, predictItem.getGranularity(), timeFormat);
        List<String> legend = new ArrayList<>();
        LinkedHashMap<String, List<PlanDataRecordDTO>> record = new LinkedHashMap<>();
        ApiDataQueryDTO queryDTO = new ApiDataQueryDTO();
        queryDTO.setItemNos(planItemCodeList);
        queryDTO.setStart(startTime);
        queryDTO.setEnd(endTime);
        LinkedHashMap<String, List<ApiPlanDataDTO>> planData = planItemApi.queryPlanItemRecordValue(queryDTO);
        if (CollectionUtils.isEmpty(planData)) {
            planData.forEach((key, value) -> {
                record.put(key, ConvertUtils.sourceToTarget(value, PlanDataRecordDTO.class));
            });
        }
        result.setPredictTime(predictTime);
        result.setStartTime(startTime);
        result.setEndTime(endTime);
        result.setCategories(categories);
        result.setLegend(legend);
        result.setRecord(record);
        return result;
    }
@@ -438,4 +480,34 @@
    public Boolean modifyScheduleModelSetting(List<ScheduleModelSettingReqDTO> dtos) {
        return true;
    }
    private Date[] calResultTime(ItemVO predictItem, Date startTimeReq, Date endTimeReq, int lengthLeft, int lengthRight) {
        Date[] result = new Date[3];
        Date predictTime = predictItem.getLastTime();
        Date startTime = startTimeReq;
        if (startTime == null) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictItem.getLastTime());
            calendar.add(Calendar.MINUTE, -1 * lengthLeft);
            startTime = calendar.getTime();
        }
        Date endTime = endTimeReq;
        if (endTime == null) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictItem.getLastTime());
            calendar.add(Calendar.MINUTE, lengthRight);
            endTime = calendar.getTime();
        }
        if (endTime.getTime() <= startTime.getTime()) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(startTime);
            calendar.add(Calendar.MINUTE, lengthRight);
            endTime = calendar.getTime();
        }
        result[0] = predictTime;
        result[1] = startTime;
        result[2] = endTime;
        return result;
    }
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/controller/admin/McsApiController.java
@@ -80,6 +80,15 @@
        return CommonResult.success(respVO);
    }
    @PostMapping("/plan-data/single-chart")
    @Operation(summary = "预测数据图表")
    public CommonResult<PlanDataSingleChartRespVO> getPlanDataSingleChart(HttpServletResponse response, HttpServletRequest
            request, @RequestBody PreDataSingleChartReqVO reqVO) throws Exception {
        apiSecurityUtils.validate(request);
        PlanDataSingleChartRespVO respVO = mcsApi.getPlanDataSingleChart(reqVO);
        return CommonResult.success(respVO);
    }
    @GetMapping("/predict-data/exportValue")
    @Operation(summary = "导出预测数据")
    @ApiAccessLog(operateType = EXPORT)
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/CommonConstant.java
@@ -32,6 +32,9 @@
    String LIMIT_L = "LIMIT_L";
    String ITEM_CODE = "ITEM_CODE";
    String PLAN_ITEM_LIST = "PLAN_ITEM_LIST";
    String RESULT_STR = "RESULT_STR";
    String LENGTH_LEFT = "LENGTH_LEFT";
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/MethodSettingService.java
@@ -2,11 +2,9 @@
import com.iailab.framework.common.service.BaseService;
import com.iailab.module.model.mpk.dto.MethodSettingDTO;
import com.iailab.module.model.mpk.dto.ModelMethodDTO;
import com.iailab.module.model.mpk.entity.MethodSettingEntity;
import java.util.List;
import java.util.Map;
/**
 * @description:
@@ -14,5 +12,6 @@
 * @date: 2024/9/14 15:10
 **/
public interface MethodSettingService extends BaseService<MethodSettingEntity> {
    void insertList(List<MethodSettingDTO> list, String MethodId);
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MethodSettingServiceImpl.java
@@ -1,12 +1,10 @@
package com.iailab.module.model.mpk.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iailab.framework.common.service.impl.BaseServiceImpl;
import com.iailab.framework.common.util.object.ConvertUtils;
import com.iailab.module.model.mpk.dao.MethodSettingDao;
import com.iailab.module.model.mpk.dto.MethodSettingDTO;
import com.iailab.module.model.mpk.entity.MethodSettingEntity;
import com.iailab.module.model.mpk.entity.SettingSelectEntity;
import com.iailab.module.model.mpk.service.MethodSettingService;
import com.iailab.module.model.mpk.service.SettingSelectService;
import lombok.extern.slf4j.Slf4j;
@@ -16,7 +14,6 @@
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
@@ -35,6 +32,10 @@
        List<MethodSettingEntity> entityList = ConvertUtils.sourceToTarget(list, MethodSettingEntity.class);
        for(int i = 0; i < entityList.size(); i++){
            MethodSettingEntity entity = entityList.get(i);
            if (StringUtils.isNotBlank(entity.getValue())){
                // 去掉空格
                entity.setValue(entity.getValue().trim().replace("\\s+", ""));
            }
            entity.setId(UUID.randomUUID().toString());
            entity.setMethodId(MethodId);
            entity.setSort(i);