jinpengyong
2020-10-19 0289e2c5349f6b2e8cf41126be7ff31381b3f1d5
多设备单因子数据及其平均值对比
2 files modified
127 ■■■■ changed files
src/main/java/com/moral/controller/ScreenController.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java 120 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/ScreenController.java
@@ -2244,18 +2244,17 @@
        return alarmData;
    }
    @GetMapping("multiDeviceSensor")
    @GetMapping("multiDeviceContrast")
    @ApiOperation(value = "多设备因子对比", notes = "多设备因子对比")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "monitorPoint", value = "监控站id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "macs", value = "设备mac,如有多个用逗号分隔", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", value = "传感器key", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", value = "时间,日期(格式:2018-03-12)", required = true, paramType = "query", dataType = "String"),})
    public ResultBean<List<Map<String, Object>>> multiDeviceSensor(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        ParameterUtils.getTimeType4Time(parameters);
        List<Map<String, Object>> multiDeviceSensorData = historyMinutelyService.getMultiDeviceSensorData(parameters);
        return new ResultBean<List<Map<String, Object>>>(multiDeviceSensorData);
        List<Map<String, Object>> list = historyMinutelyService.getMultiDeviceSensorData(parameters);
        return new ResultBean<List<Map<String, Object>>>(list);
    }
    @GetMapping("screenVersion")
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -4,6 +4,7 @@
import io.swagger.models.auth.In;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
@@ -893,38 +894,115 @@
    @Override
    public List<Map<String, Object>> getMultiDeviceSensorData(Map<String, Object> parameters) throws Exception {
        String sensorKey = parameters.get("sensorKey").toString();
        System.out.println(parameters);
        String[] macs = parameters.get("macs").toString().split(",");
        List<String> sensorKeys = new ArrayList<>();
        sensorKeys.add(sensorKey);
        parameters.put("sensorKeys", sensorKeys);
        parameters.put("sensors", sensorKeys);
        System.out.println(parameters);
        List<Map<String, Object>> list = new ArrayList<>(24);
        int max = 0;
        String type = parameters.get("type").toString();
        List<Map<String, Object>> list = new ArrayList<>();
        for (int i = 0; i < 31; i++) {
            list.add(null);
        }
        for (String mac : macs) {
            parameters.put("mac", mac);
            List<Map<String, Object>> data = getMonitorPointOrDeviceAvgData(parameters);
            if (data.size() >= max) {
                max = data.size();
            List<Map<String, Object>> l = new ArrayList<>();
            for (int i = 0; i < 31; i++) {
                l.add(null);
            }
            for (Map<String, Object> map : data) {
                List<String> values = new ArrayList<>();
                Map<String, Object> hashMap = new HashMap<>();
                String time = map.get("time").toString();
                hashMap.put("time",time);
                int length = time.length();
            for (Map<String, Object> dataMap : data) {
                String time = dataMap.get("time").toString();
                Integer t = Integer.valueOf(time.substring(time.length() - 2));
                String value = map.get(sensorKey).toString();
               /* if (length > 10) {
                }*/
                values.add(value);
                dataMap.put("time", t);
                if ("day".equals(type)) {
                    l.set(t, dataMap);
                } else {
                    l.set(t - 1, dataMap);
                }
            }
            System.out.println(data);
            for (int i = 0; i < l.size(); i++) {
                if (l.get(i) == null) {
                    Map<String, Object> m = new HashMap<>();
                    List<String> v = new ArrayList<>();
                    v.add("");
                    if ("day".equals(type)) {
                        m.put("time", i);
                    } else {
                        m.put("time", i + 1);
                    }
                    m.put("values", v);
                    l.set(i, m);
                }
            }
            data = l;
            for (Map<String, Object> map : data) {
                Map<String, Object> hashMap = new HashMap<>();
                if (map != null) {
                    int t = Integer.valueOf(map.get("time").toString());
                    hashMap.put("time", t);
                    String value;
                    if (map.get(sensorKey) == null) {
                        value = "";
                    } else {
                        value = map.get(sensorKey).toString();
                    }
                    List<String> values;
                    if ("day".equals(type)) {
                        t = t + 1;
                    }
                    if (list.get(t - 1) != null) {
                        values = (ArrayList<String>) list.get(t - 1).get("values");
                    } else {
                        values = new ArrayList<>();
                    }
                    values.add(value);
                    hashMap.put("values", values);
                    list.set(t - 1, hashMap);
                }
            }
        }
        return null;
        boolean flag = false;
        Iterator<Map<String, Object>> iterator = list.iterator();
        int digit = 0;
        while (iterator.hasNext()) {
            Map<String, Object> next = iterator.next();
            ArrayList<String> values = (ArrayList<String>) next.get("values");
            for (String value : values) {
                if ("".equals(value)) {
                    flag = true;
                } else {
                    digit = value.split("\\.")[1].length();
                    flag = false;
                    break;
                }
            }
            if (flag) {
                iterator.remove();
            }
        }
        NumberFormat nf = NumberFormat.getNumberInstance();
        nf.setMaximumFractionDigits(digit);
        for (Map<String, Object> map : list) {
            int time = Integer.valueOf(map.get("time").toString());
            ArrayList<String> values = (ArrayList<String>) map.get("values");
            if (values.size() > 1) {
                int length = 0;
                double sum = 0.0;
                for (String value : values) {
                    if (!"".equals(value)) {
                        Double v = Double.valueOf(value);
                        length += 1;
                        sum += v;
                    }
                }
                Double avg = sum / length;
                String format = nf.format(avg);
                values.add(format);
                map.put("values", values);
            }
        }
        return list;
    }
}