潘志宝
2024-12-10 a440ec3bfaa1363f5841100b8948d852971a2eb1
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/controller/admin/MmPredictItemController.java
@@ -4,31 +4,21 @@
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.date.DateUtils;
import com.iailab.module.model.common.enums.CommonConstant;
import com.iailab.module.model.mcs.pre.dto.MmPredictItemDTO;
import com.iailab.module.model.mcs.pre.entity.DmModuleEntity;
import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity;
import com.iailab.module.model.mcs.pre.entity.MmPredictItemEntity;
import com.iailab.module.model.mcs.pre.service.DmModuleService;
import com.iailab.module.model.mcs.pre.service.MmItemOutputService;
import com.iailab.module.model.mcs.pre.service.MmPredictItemService;
import com.iailab.module.model.mcs.pre.vo.*;
import com.iailab.module.model.mpk.common.utils.IAILModelUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.security.PermitAll;
import java.io.File;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import static com.iailab.framework.common.pojo.CommonResult.success;
@@ -51,13 +41,6 @@
    @Autowired
    private MmPredictItemService mmPredictItemService;
    @Autowired
    private DmModuleService dmModuleService;
    @Autowired
    private MmItemOutputService mmItemOutputService;
    private int HOUR_MINS = 60;
    /**
     * 预测项列表
     */
@@ -69,7 +52,7 @@
    }
    @GetMapping("/list")
    public CommonResult<List<MmPredictItemRespVO>> list(Map<String, Object> params) {
    public CommonResult<List<MmPredictItemRespVO>> list(@RequestParam Map<String, Object> params) {
        List<MmPredictItemRespVO> list = mmPredictItemService.list(params);
        return success(list);
    }
@@ -137,157 +120,6 @@
        file.transferTo(new File(uploadDir));
        Map<String, Object> result = iAILModelUtil.parseModel(uploadDir);
        result.put("originalFilename", file.getOriginalFilename().replace(CommonConstant.MDK_SUFFIX, ""));
        return success(result);
    }
    @GetMapping("/tree")
    public CommonResult<List<PreItemOptionVO>> itemTree() {
        List<PreItemOptionVO> result = new ArrayList<>();
        List<DmModuleEntity> moduleList = dmModuleService.list(new HashMap<>());
        if (CollectionUtils.isEmpty(moduleList)) {
            return success(result);
        }
        moduleList.forEach(item -> {
            PreItemOptionVO moduleOpt = new PreItemOptionVO();
            moduleOpt.setId(item.getId());
            moduleOpt.setLabel(item.getModulename());
            List<PreItemOptionVO> children = new ArrayList<>();
            Map<String, Object> params = new HashMap<>(2);
            params.put("status", 1);
            params.put("moduleid", item.getId());
            List<MmPredictItemRespVO> itemList = mmPredictItemService.list(params);
            itemList.forEach(item1 -> {
                PreItemOptionVO chd = new PreItemOptionVO();
                chd.setLabel(item1.getItemname());
                chd.setId(item1.getId());
                children.add(chd);
            });
            moduleOpt.setChildren(children);
            result.add(moduleOpt);
        });
        return success(result);
    }
    @GetMapping("/view-charts")
    public CommonResult<PreDataBarLineVO> viewCharts(@RequestParam Map<String, Object> params) {
        PreDataBarLineVO result = new PreDataBarLineVO();
        List<String> legends = new ArrayList<>();
        List<PreDataViewVO> dataViewList = new ArrayList<>();
        if (params.get("itemIds") == null) {
            return success(result);
        }
        List<String> itemIdList = Arrays.asList(params.get("itemIds").toString().split(","));
        Date predictTime;
        if (StringUtils.isBlank((String) params.get("predictTime"))) {
            DmModuleEntity dmModule = dmModuleService.getModuleByItemId(itemIdList.get(0));
            if (dmModule != null) {
                predictTime = dmModule.getPredicttime();
            } else {
                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.MILLISECOND, 0);
                calendar.set(Calendar.SECOND, 0);
                predictTime = calendar.getTime();
            }
        } else {
            predictTime = DateUtils.parse(params.get("predictTime").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        }
        Date startTime;
        if (StringUtils.isBlank((String) params.get("startTime"))) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictTime);
            calendar.add(Calendar.HOUR_OF_DAY, -1);
            startTime = calendar.getTime();
        } else {
            startTime = DateUtils.parse(params.get("startTime").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        }
        Date endTime = null;
        if (StringUtils.isBlank((String) params.get("endTime"))) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictTime);
            calendar.add(Calendar.HOUR_OF_DAY, 1);
            endTime = calendar.getTime();
        } else {
            endTime = DateUtils.parse(params.get("endTime").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        }
        for (int i = 0; i < itemIdList.size(); i++) {
            PreDataViewVO viewDto = new PreDataViewVO();
            String itemId = itemIdList.get(i);
            MmItemOutputEntity mmItemOutput = mmItemOutputService.getByItemid(itemId);
            MmPredictItemEntity predictItem = mmPredictItemService.getById(itemId);
            if (predictItem == null) {
                log.info("itemId=" + itemId + "; is null");
                continue;
            }
            try {
                viewDto.setItemId(itemId);
                viewDto.setItemName(predictItem.getItemname());
                viewDto.setRealData(mmPredictItemService.getHisData(itemId, startTime, endTime));
//                viewDto.setPreDataN(mmItemResultService.getData(mmItemOutput.getId(), startTime, endTime));
//                viewDto.setPreDataL(mmItemResultLastPointService.getData(mmItemOutput.getId(), startTime, endTime));
//                viewDto.setCurData(mmItemResultJsonService.getData(mmItemOutput.getId(), predictTime));
//                viewDto.setAdjData(scheduleAdjustResultService.getData(itemId, predictTime));
                legends.add(predictItem.getItemname());
                List<Double> values = new ArrayList<>();
                if (!CollectionUtils.isEmpty(viewDto.getRealData())) {
                    List<Double> hisValues = new ArrayList<>();
                    viewDto.getRealData().forEach(item -> {
                        values.add(Double.parseDouble(item[1].toString()));
                        hisValues.add(Double.parseDouble(item[1].toString()));
                    });
                    viewDto.setHisMax(BigDecimal.valueOf(hisValues.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, RoundingMode.HALF_UP));
                    viewDto.setHisMin(BigDecimal.valueOf(hisValues.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, RoundingMode.HALF_UP));
                    viewDto.setHisAvg(BigDecimal.valueOf(hisValues.stream().mapToDouble(Double::doubleValue).average().getAsDouble()).setScale(2, RoundingMode.HALF_UP));
                    viewDto.setHisCumulant(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).sum())
                            .divide(new BigDecimal(HOUR_MINS), 2, BigDecimal.ROUND_HALF_UP));
                }
                if (!CollectionUtils.isEmpty(viewDto.getPreDataN())) {
                    viewDto.getPreDataN().forEach(item -> {
                        values.add(Double.parseDouble(item[1].toString()));
                    });
                }
                if (!CollectionUtils.isEmpty(viewDto.getPreDataL())) {
                    List<Double> preValues = new ArrayList<>();
                    viewDto.getPreDataL().forEach(item -> {
                        values.add(Double.parseDouble(item[1].toString()));
                        preValues.add(Double.parseDouble(item[1].toString()));
                    });
                    viewDto.setPreMax(BigDecimal.valueOf(preValues.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, RoundingMode.HALF_UP));
                    viewDto.setPreMin(BigDecimal.valueOf(preValues.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, RoundingMode.HALF_UP));
                    viewDto.setPreAvg(BigDecimal.valueOf(preValues.stream().mapToDouble(Double::doubleValue).average().getAsDouble()).setScale(2, RoundingMode.HALF_UP));
                }
                if (!CollectionUtils.isEmpty(viewDto.getCurData())) {
                    List<Double> preValues = new ArrayList<>();
                    viewDto.getCurData().forEach(item -> {
                        values.add(Double.parseDouble(item[1].toString()));
                        preValues.add(Double.parseDouble(item[1].toString()));
                    });
                    viewDto.setPreCumulant(BigDecimal.valueOf(preValues.stream().mapToDouble(Double::doubleValue).sum())
                            .divide(new BigDecimal(HOUR_MINS), 2, RoundingMode.HALF_UP));
                }
                if (!CollectionUtils.isEmpty(viewDto.getAdjData())) {
                    viewDto.getAdjData().forEach(item -> {
                        values.add(Double.parseDouble(item[1].toString()));
                    });
                }
                if (!CollectionUtils.isEmpty(values)) {
                    viewDto.setMaxValue(BigDecimal.valueOf(values.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, RoundingMode.HALF_UP));
                    viewDto.setMinValue(BigDecimal.valueOf(values.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, RoundingMode.HALF_UP));
                }
                dataViewList.add(viewDto);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        result.setStartTime(startTime);
        result.setEndTime(endTime);
        result.setPredictTime(predictTime);
        result.setCategories(DateUtils.getTimeScale(startTime, endTime, 60));
        result.setLegend(legends);
        result.setDataViewList(dataViewList);
        return success(result);
    }
}