kaiyu
2021-10-09 2dee01ae6f13a72b1d2ba9ca3d1ffbea72ab513b
screen-aqi
增加监测因子对比图接口
2 files added
4 files modified
231 ■■■■■ changed files
screen-api/src/main/java/com/moral/api/controller/DataDisplayController.java 74 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/SensorComparisonDisplayDTO.java 21 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/MonitorPointDataDisplayForm.java 8 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/SensorComparisonDisplayForm.java 54 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java 66 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/constant/Constants.java 8 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/controller/DataDisplayController.java
@@ -1,23 +1,18 @@
package com.moral.api.controller;
import com.moral.api.pojo.dto.dataDisplay.MonitorPointDataDisplayDTO;
import com.moral.api.pojo.dto.dataDisplay.SensorComparisonDisplayDTO;
import com.moral.api.pojo.form.dataDisplay.MonitorPointDataDisplayForm;
import com.moral.api.pojo.form.dataDisplay.SensorComparisonDisplayForm;
import com.moral.api.service.DataDisplayService;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
import com.moral.util.DateUtils;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @ClassName DataDisplayController
@@ -43,60 +38,19 @@
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        List<MonitorPointDataDisplayDTO> list = dataDisplayService.getMonitorPointDisplayData(form);
        /*MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
        MonitorPointDataDisplayDTO dto1 = new MonitorPointDataDisplayDTO();
        MonitorPointDataDisplayDTO dto2 = new MonitorPointDataDisplayDTO();
        List<MonitorPointDataDisplayDTO> dtos = dataDisplayService.getMonitorPointDisplayData(form);
        dto.setDeviceName("模拟设备1");
        dto1.setDeviceName("模拟设备2");
        dto2.setDeviceName("模拟设备3");
        return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),dtos);
    }
        dto.setTime("yyyy-MM-dd HH:mm:ss");
        dto1.setTime("yyyy-MM-dd HH:mm:ss");
        dto2.setTime("yyyy-MM-dd HH:mm:ss");
        dto.setOrganizationName("模拟组织1");
        dto1.setOrganizationName("模拟组织2");
        dto2.setOrganizationName("模拟组织3");
        dto.setA05024(1);
        dto1.setA05024(1);
        dto2.setA05024(1);
        dto.setA21005(1d);
        dto1.setA21005(1d);
        dto2.setA21005(1d);
        dto.setA21004(1);
        dto1.setA21004(1);
        dto2.setA21004(1);
        dto.setA21026(1);
        dto1.setA21026(1);
        dto2.setA21026(1);
        dto.setA34002(1);
        dto1.setA34002(1);
        dto2.setA34002(1);
        dto.setA34004(1);
        dto1.setA34004(1);
        dto2.setA34004(1);
        dto.setA99054(1d);
        dto1.setA99054(1d);
        dto2.setA99054(1d);
        dto.setAQI(1);
        dto1.setAQI(1);
        dto2.setAQI(1);
        List<MonitorPointDataDisplayDTO> list = new ArrayList<>();
        list.add(dto);
        list.add(dto1);
        list.add(dto2);*/
        return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),list);
    @PostMapping("sensorComparisonDisplay")
    public ResultMessage sensorComparisonDisplay(@RequestBody SensorComparisonDisplayForm form){
        //判断是否缺少参数
        if (!form.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        List<SensorComparisonDisplayDTO> dtos = dataDisplayService.getSensorComparisonDisplayData(form);
        return  new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),dtos);
    }
}
screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/SensorComparisonDisplayDTO.java
New file
@@ -0,0 +1,21 @@
package com.moral.api.pojo.dto.dataDisplay;
import lombok.Data;
import java.util.Map;
/**
 * @ClassName SensorComparisonDisplayDTO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/10/8 15:54
 * @Version TODO
 **/
@Data
public class SensorComparisonDisplayDTO {
    private String sensorCode;
    private Map<String,Double> timeValueMap;
}
screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/MonitorPointDataDisplayForm.java
@@ -58,20 +58,20 @@
        } else {
            if(startTime!=null&&endTime!=null)
                return false;
            if (reportType.equals(Constants.HOURYLYREPORT)) {
            if (reportType.equals(Constants.HOURLY_REPORT)) {
                //时报选项默认为上个小时的数据
                Date previousHour = DateUtils.getDateOfMin(new Date(), -60);
                startTime = DateUtils.getHourlyStartTime(previousHour);
            } else if (reportType.equals(Constants.DAILYREPORT)) {
            } else if (reportType.equals(Constants.DAILY_REPORT)) {
                //日报选项默认为昨天的数据
                Date yesterday = DateUtils.getDateOfDay(new Date(),-1);
                startTime = DateUtils.getDailyStartTime(yesterday);
            } else if (reportType.equals(Constants.WEEKLYREPORT)) {
            } else if (reportType.equals(Constants.WEEKLY_REPORT)) {
                //周报选项默认为上周的数据
                Date previous = DateUtils.getDateOfDay(new Date(),-7);
                startTime = DateUtils.getWeeklyStartTime(previous);
                endTime = DateUtils.getWeeklyEndTime(previous);
            } else if (reportType.equals(Constants.MONTHLYREPORT)) {
            } else if (reportType.equals(Constants.MONTHLY_REPORT)) {
                //月报选项默认为上月的数据
                Date lastMonthFirstDay = DateUtils.getFirstDayOfLastMonth();
                startTime = DateUtils.getMonthlyStartTime(lastMonthFirstDay);
screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/SensorComparisonDisplayForm.java
New file
@@ -0,0 +1,54 @@
package com.moral.api.pojo.form.dataDisplay;
import com.moral.constant.Constants;
import com.moral.util.DateUtils;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * @ClassName SensorComparsionDisplayForm
 * @Description 监测因子对比图请求实体
 * @Author 陈凯裕
 * @Date 2021/10/8 14:18
 * @Version TODO
 **/
@Data
public class SensorComparisonDisplayForm {
    private String mac;
    private String reportType;
    private String time;
    private List<String> sensors;
    /*
    * 该属性不由前端传递,由time和reportType进行计算
    * */
    private Date startDate;
    /*
     * 该属性不由前端传递,由time和reportType进行计算
     * */
    private Date endDate;
    public boolean valid(){
        if(mac==null||reportType==null||time==null||sensors==null)
            return false;
        if(reportType.equals(Constants.DAILY_REPORT)){
            Date date = DateUtils.getDate(time,"yyyy-MM-dd");
            startDate = DateUtils.getDailyStartTime(date);
            endDate = DateUtils.getDailyEndTime(date);
        }else if(reportType.equals(Constants.MONTHLY_REPORT)){
            Date date = DateUtils.getDate(time,"yyyy-MM");
            startDate = DateUtils.getMonthlyStartTime(date);
            endDate = DateUtils.getMonthlyEndTime(date);
        }else
            return false;
        return true;
    }
}
screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
@@ -3,7 +3,9 @@
import com.alibaba.fastjson.JSON;
import com.moral.api.entity.*;
import com.moral.api.pojo.dto.dataDisplay.MonitorPointDataDisplayDTO;
import com.moral.api.pojo.dto.dataDisplay.SensorComparisonDisplayDTO;
import com.moral.api.pojo.form.dataDisplay.MonitorPointDataDisplayForm;
import com.moral.api.pojo.form.dataDisplay.SensorComparisonDisplayForm;
import com.moral.api.service.*;
import com.moral.constant.Constants;
import com.moral.util.*;
@@ -65,7 +67,7 @@
                dtos = calculateCustomData(macDataMap, deviceMap, startTime, endTime);
        }
        //处理小时报表请求,默认取上一个小时的值
        else if (reportType.equals(Constants.HOURYLYREPORT)) {
        else if (reportType.equals(Constants.HOURLY_REPORT)) {
            Map<String, HistoryHourly> macDataMap = new HashMap<>();
            //获取数据
            macs.forEach(value -> {
@@ -77,21 +79,21 @@
                dtos = calculateReportData(macDataMap, deviceMap, startTime);
        }
        //处理日报请求,默认获取昨天的值
        else if (reportType.equals(Constants.DAILYREPORT)) {
        else if (reportType.equals(Constants.DAILY_REPORT)) {
            //获取数据
            Map<String, HistoryDaily> macDataMap = historyDailyService.getHistoryDailyByMacsAndDate(macs, startTime);
            if (macDataMap.size() != 0)
                dtos = calculateReportData(macDataMap, deviceMap, startTime);
        }
        //处理周报请求,默认获取上周的值
        else if (reportType.equals(Constants.WEEKLYREPORT)) {
        else if (reportType.equals(Constants.WEEKLY_REPORT)) {
            //获取数据
            Map<String, HistoryWeekly> macDataMap = historyWeeklyService.getHistoryWeeklyByMacsAndDate(macs, startTime);
            if (macDataMap.size() != 0)
                dtos = calculateReportData(macDataMap, deviceMap, startTime, endTime);
        }
        //处理月报请求
        else if (reportType.equals(Constants.MONTHLYREPORT)) {
        else if (reportType.equals(Constants.MONTHLY_REPORT)) {
            //月报需要获取一个月每天的数据用来算综合指数,其他数据从月表中取出
            Map<String, List<HistoryDaily>> macDataDailyMap = new HashMap<>();
            Map<String, HistoryMonthly> macDataMonthlyMap = historyMonthlyService.getHistoryMonthlyByMacsAndDate(macs, startTime);
@@ -108,6 +110,62 @@
        return dtos;
    }
    @Override
    public List<SensorComparisonDisplayDTO> getSensorComparisonDisplayData(SensorComparisonDisplayForm form) {
        //取参
        List<String> sensors = form.getSensors();
        Date startDate = form.getStartDate();
        Date endDate = form.getEndDate();
        String mac = form.getMac();
        String reportType = form.getReportType();
        Map<String, String> timeValueMap = new LinkedHashMap<>();//key为time,value为数据的json
        //处理日报数据
        if (reportType.equals(Constants.DAILY_REPORT)) {
            List<HistoryHourly> hourlies = historyHourlyService.getValueByMacAndTime(mac, startDate, endDate);
            for (HistoryHourly historyHourly : hourlies) {
                Date time = historyHourly.getTime();
                int hour = DateUtils.getHour(time);
                String value = historyHourly.getValue();
                timeValueMap.put(String.valueOf(hour), value);
            }
        }
        //处理月报数据
        else if (reportType.equals(Constants.MONTHLY_REPORT)) {
            List<HistoryDaily> dailies = historyDailyService.getHistoryDailyByMacAndTimeSlot(mac, startDate, endDate);
            for (HistoryDaily historyDaily : dailies) {
                Date time = historyDaily.getTime();
                int day = DateUtils.getDay(time);
                String value = historyDaily.getValue();
                timeValueMap.put(String.valueOf(day), value);
            }
        } else
            return null;
        //封装返回数据
        List<SensorComparisonDisplayDTO> dtos = new ArrayList<>();
        for (String sensor : sensors) {
            SensorComparisonDisplayDTO dto = new SensorComparisonDisplayDTO();
            Map<String,Double> dtoTimeValueMap = new LinkedHashMap<>();
            dto.setSensorCode(sensor);
            timeValueMap.forEach((time, valueJson) -> {
                Map<String, Object> valueMap = JSON.parseObject(valueJson, Map.class);
                Object sensorValueObject = valueMap.get(sensor);
                if(sensorValueObject==null)
                    return;
                Double sensorValue = Double.parseDouble(sensorValueObject.toString());
                //如果是小时数据需要判断标记位
                if(reportType.equals(Constants.HOURLY_REPORT)){
                    if(!Constants.NORMAL_FLAG.equals(valueMap.get(sensor+"-Flag")))
                        return;
                }
                //封装数据
                dtoTimeValueMap.put(time,sensorValue);
                dto.setTimeValueMap(dtoTimeValueMap);
            });
            dtos.add(dto);
        }
        return dtos;
    }
    /**
     * @Description: 计算自定义报表的数据
screen-common/src/main/java/com/moral/constant/Constants.java
@@ -222,22 +222,22 @@
    /*
    * 时报
    * */
    public static final String HOURYLYREPORT = "0";
    public static final String HOURLY_REPORT = "0";
    /*
    * 日报
    * */
    public static final String DAILYREPORT = "1";
    public static final String DAILY_REPORT = "1";
    /*
    * 周报
    * */
    public static final String WEEKLYREPORT = "2";
    public static final String WEEKLY_REPORT = "2";
    /*
    * 月报
    * */
    public static final String MONTHLYREPORT = "3";
    public static final String MONTHLY_REPORT = "3";
    /*
    * 数据正常标识符