潘志宝
2025-03-23 ead3a7406d18f4f2ee5afe581bcb04f8d64fcb5e
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java
@@ -25,6 +25,7 @@
import com.iailab.module.model.mcs.pre.entity.MmPredictAlarmMessageEntity;
import com.iailab.module.model.mcs.pre.service.*;
import com.iailab.module.model.mcs.pre.vo.MmItemOutputRespVO;
import com.iailab.module.model.mcs.pre.vo.MmPredictAlarmConfigSaveReqVO;
import com.iailab.module.model.mcs.pre.vo.MmPredictAlarmMessageSaveReqVO;
import com.iailab.module.model.mcs.pre.vo.MmPredictItemRespVO;
import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
@@ -79,6 +80,9 @@
    private MmItemResultJsonService mmItemResultJsonService;
    @Autowired
    private StAdjustResultService stAdjustResultService;
    @Autowired
    private ChartService chartService;
    @Autowired
@@ -116,7 +120,6 @@
    @Autowired
    private StAdjustConfigService stAdjustConfigService;
    private int HOUR_MINS = 60;
    @Override
@@ -197,6 +200,7 @@
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictTime);
            calendar.add(Calendar.HOUR_OF_DAY, 1);
            calendar.add(Calendar.MINUTE, 1);
            endTime = calendar.getTime();
        }
@@ -215,7 +219,10 @@
            viewDto.setRealData(getHisData(output.getPointid(), startTime, endTime));
            viewDto.setPreDataN(mmItemResultService.getData(output.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
            viewDto.setPreDataL(mmItemResultLastPointService.getData(output.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
            viewDto.setCurData(mmItemResultJsonService.getData(output.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, 3));
            viewDto.setCurData(mmItemResultJsonService.getData(output.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
            // 模拟调整曲线
            viewDto.setAdjData(stAdjustResultService.getData(output.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
            List<Double> values = new ArrayList<>();
            if (!CollectionUtils.isEmpty(viewDto.getRealData())) {
                List<Double> hisValues = new ArrayList<>();
@@ -334,6 +341,8 @@
                }
                viewDto.setCumulantPreData(mmItemResultService.getData(out.getId() + CommonDict.CUMULANT_SUFFIX, startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
            }
            // 调整预测值
            viewDto.setAdjData(stAdjustResultService.getData(out.getId(),predictItem.getLastTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
            viewMap.put(out.getResultName(), viewDto);
        }
@@ -344,6 +353,7 @@
        result.setViewMap(viewMap);
        return result;
    }
    @Override
    public PreDataSingleChartRespVO getPreDataSingleChart(PreDataSingleChartReqVO reqVO) {
@@ -398,12 +408,18 @@
            dataView.setRealData(new ArrayList<>());
        }
        dataView.setCurData(mmItemResultJsonService.getData(outPut.getId(), predictTime, timeFormat, 3));
        // 调整预测值
        dataView.setAdjData(stAdjustResultService.getData(outPut.getId(),predictTime,timeFormat));
        dataView.setLineType(lineType.getCode());
        switch (lineType) {
            case TN:
                dataView.setPreDataN(mmItemResultService.getData(outPut.getId(), startTime, endTime, timeFormat));
                break;
            case TL:
                dataView.setPreDataN(mmItemResultService.getData(outPut.getId(), predictTime, endTime, timeFormat));
                dataView.setPreDataL(mmItemResultLastPointService.getData(outPut.getId(), startTime, endTime, timeFormat));
                break;
            case CL:
                dataView.setPreDataN(mmItemResultService.getData(outPut.getId(), predictTime, endTime, timeFormat));
                dataView.setPreDataL(mmItemResultLastPointService.getData(outPut.getId(), startTime, endTime, timeFormat));
                break;
@@ -427,7 +443,8 @@
        String alarmObj = chartParams.get(CommonConstant.ALARM_OBJ);
        if (StringUtils.isNotBlank(alarmObj)) {
            List<AlarmMessageRespDTO> alarmList = ConvertUtils.sourceToTarget(mmPredictAlarmMessageService.getList(alarmObj, predictTime), AlarmMessageRespDTO.class);
            String alarmTitle = chartParams.get(CommonConstant.ALARM_TITLE);
            List<AlarmMessageRespDTO> alarmList = ConvertUtils.sourceToTarget(mmPredictAlarmMessageService.getList(alarmObj, predictTime, alarmTitle), AlarmMessageRespDTO.class);
            dataView.setAlarmList(alarmList);
            if (CollectionUtils.isEmpty(alarmList)) {
                dataView.setAlarmMessage("暂无预警信息");
@@ -584,7 +601,7 @@
        valueDTOS.forEach(item -> {
            Object[] values = new Object[2];
            values[0] = DateUtils.format(item.getT(), timeFormat);
            values[1] = new BigDecimal(item.getV()).setScale(2, BigDecimal.ROUND_HALF_UP);
            values[1] = new BigDecimal(item.getV()).setScale(3, BigDecimal.ROUND_HALF_UP);
            result.add(values);
        });
        return result;
@@ -711,9 +728,15 @@
                result.put(key, BigDecimal.ZERO);
            }
            MmItemOutputEntity outPut = mmItemOutputService.getByItemid(predictItem.getId(), itemNo[1], itemNo[2]);
            String outputId = outPut.getId();
            // 判断是否有第五个参数,如果有第5个参数为1,则取累计值
            if (itemNo.length >= 5){
                if (StringUtils.isNotBlank(itemNo[4]) && "1".equals(itemNo[4])){
                    outputId = outPut.getId() + CommonDict.CUMULANT_SUFFIX;
                }
            }
            Date predictTime = predictItem.getLastTime();
            List<Object[]> curData = mmItemResultJsonService.getData(outPut.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
            List<Object[]> curData = mmItemResultJsonService.getData(outputId, predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
            if(CollectionUtils.isEmpty(curData)) {
                result.put(key, BigDecimal.ZERO);
            } else {
@@ -805,25 +828,44 @@
    }
    @Override
    public List<StAdjustConfigDetDTO> getAdjustConfigListByModelId(String modelId) {
        List<StAdjustConfigDetEntity> list = stAdjustConfigService.getDetByModelId(modelId);
        return ConvertUtils.sourceToTarget(list, StAdjustConfigDetDTO.class);
    public Boolean updateAlarmConfig(String alarmObj,String upperLimit,String lowerLimit) {
        MmPredictAlarmConfigSaveReqVO reqVO = new MmPredictAlarmConfigSaveReqVO();
        reqVO.setAlarmObj(alarmObj);
        reqVO.setUpperLimit(BigDecimal.valueOf(Double.parseDouble(upperLimit)));
        reqVO.setLowerLimit(BigDecimal.valueOf(Double.parseDouble(lowerLimit)));
        mmPredictAlarmConfigService.updateByAlarmObj(reqVO);
        return true;
    }
    /**
     * 计算功率因数 p²/(根号:p²+Q²)
     **/
    public Double calculateCos(Double PValue,Double QValue) {
        // 绝对值
        PValue = Math.abs(PValue);
        QValue = Math.abs(QValue);
        //PValue [0,0.001] 直接判断为关闭返回0
        if (PValue >= 0 && PValue <= 0.001) {
            return 0.0;
        }else {
            BigDecimal result = new BigDecimal(PValue).divide(BigDecimal.valueOf(Math.sqrt(Math.pow(PValue, 2) + Math.pow(QValue, 2))), 2, BigDecimal.ROUND_HALF_UP);
            return result.doubleValue();
        }
    @Override
    public Boolean updateChartParam(ChartDTO chartDTO) {
        ChartDTO oldChartDTO = chartService.getChartByChartCode(chartDTO.getChartCode());
        List<ChartParamDTO> chartParams = chartDTO.getChartParams();
        chartParams.forEach(item -> {
            item.setChartId(oldChartDTO.getId());
        });
        chartParamService.updateByChartIdAndParamCode(chartParams);
        return true;
    }
    @Override
    public MmItemOutputDTO getItemOutputByItemid(String itemid, String resultstr, String resultIndex) {
        return ConvertUtils.sourceToTarget(mmItemOutputService.getByItemid(itemid,resultstr,resultIndex),MmItemOutputDTO.class);
    }
    @Override
    public List<Object[]> getItemResult(String outputid, Date startTime, Date endTime, String timeFormat) {
        return mmItemResultService.getData(outputid,startTime,endTime,timeFormat);
    }
    @Override
    public PredictItemVO getPredictItemByItemNo(String itemNo) {
        return ConvertUtils.sourceToTarget(mmPredictItemService.getItemByItemNo(itemNo),PredictItemVO.class);
    }
    @Override
    public List<Object[]> getItemResultLastPoint(String outputid, Date startTime, Date endTime, String timeFormat) {
        return mmItemResultLastPointService.getData(outputid,startTime,endTime,timeFormat);
    }
    private Date[] calResultTime(ItemVO predictItem, Date startTimeReq, Date endTimeReq, int lengthLeft, int lengthRight) {