| | |
| | | return sciCal(data.get((int) v), 4); |
| | | } |
| | | |
| | | public static Object getCOAvgOfWeek(List<Map<String, Object>> list) { |
| | | //一氧化碳周月均值计算 |
| | | public static Object getCOAvgOfWeekOrMonth(List<Map<String, Object>> list) { |
| | | List<Double> data = new ArrayList<>(); |
| | | for (Map<String, Object> dataMap : list) { |
| | | Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); |
| | |
| | | return percentile(data, 95); |
| | | } |
| | | |
| | | public static Object getO3AvgOfWeek(List<Map<String, Object>> list) { |
| | | //臭氧周月均值计算 |
| | | public static Object getO3AvgOfWeekOrMonth(List<Map<String, Object>> list) { |
| | | List<Double> data = new ArrayList<>(); |
| | | for (Map<String, Object> dataMap : list) { |
| | | Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); |
| | |
| | | } |
| | | |
| | | //获取上周一 |
| | | public static Date geLastWeekMonday() { |
| | | public static Date getLastWeekMonday() { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(getDate(getMondayOfThisWeek(), yyyy_MM_dd_EN)); |
| | | cal.add(Calendar.DATE, -7); |
| | |
| | | //获取所有在线设备 |
| | | List<Device> devices = deviceMapper.selectList(queryWrapper); |
| | | for (Device device : devices) { |
| | | Map<String, Object> data = getDataFromRedis(device.getMac()); |
| | | Map<String, Object> data = (Map<String, Object>) redisTemplate.opsForValue().get(RedisConstants.DEVICE_DATA + device.getMac());; |
| | | device.setState(Constants.DEVICE_STATE_OFFLINE); |
| | | if (data != null && data.containsKey("DataTime")) { |
| | | long time = Long.parseLong(data.get("DataTime").toString()); |
| | | Date time = DateUtils.getDate((String) data.get("DataTime"), DateUtils.yyyyMMddHHmmss_EN); |
| | | //超过两分钟无数据就离线 |
| | | if (DateUtils.getDateOfMin(new Date(time), 2).getTime() < new Date().getTime()) { |
| | | if (DateUtils.getDateOfMin(time, 2).getTime() < new Date().getTime()) { |
| | | updateDeviceState(device); |
| | | } |
| | | } else { |
| | |
| | | UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>(); |
| | | updateWrapper.eq("id", device.getId()).set("state", device.getState()); |
| | | deviceMapper.update(null, updateWrapper); |
| | | } |
| | | |
| | | private Map<String, Object> getDataFromRedis(String mac) { |
| | | return (Map<String, Object>) redisTemplate.opsForValue().get(RedisConstants.DEVICE_DATA + mac); |
| | | } |
| | | } |
| | |
| | | public void insertHistoryDaily() { |
| | | String format = DateUtils.yyyy_MM_dd_EN; |
| | | Date now = new Date(); |
| | | //开始时间 |
| | | //开始时间,昨日 |
| | | Date start = DateUtils.dataToTimeStampTime(DateUtils.getDateOfDay(now, -1), format); |
| | | //结束时间 |
| | | //结束时间,今日 |
| | | Date end = DateUtils.dataToTimeStampTime(now, format); |
| | | //因子 |
| | | QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); |
| | |
| | | |
| | | //存入数据库 |
| | | historyDailyMapper.insertHistoryDaily(insertData); |
| | | } |
| | | |
| | | |
| | | public static void main(String[] args) { |
| | | List<Integer> list = new ArrayList<>(); |
| | | list.add(8);//1点 |
| | | list.add(12);//2 |
| | | list.add(10);//3 |
| | | list.add(18);//4 |
| | | list.add(16);//5 |
| | | list.add(22);//6 |
| | | list.add(4);//7 |
| | | list.add(12); |
| | | list.add(28); |
| | | list.add(26); |
| | | list.add(25); |
| | | list.add(21); |
| | | list.add(6); |
| | | list.add(18); |
| | | list.add(28); |
| | | list.add(18); |
| | | list.add(16); |
| | | list.add(15); |
| | | list.add(12); |
| | | list.add(14); |
| | | list.add(12); |
| | | list.add(10); |
| | | list.add(5); |
| | | list.add(88);//24 |
| | | Integer max = 0; |
| | | for (int i = 7; i < list.size(); i++) { |
| | | Integer sum = 0; |
| | | for (int j = i - 7; j <= i; j++) { |
| | | Integer b = list.get(j); |
| | | sum = sum + b; |
| | | } |
| | | if (sum > max) { |
| | | max = sum; |
| | | } |
| | | } |
| | | System.out.println((max / 8F)); |
| | | } |
| | | } |
| | |
| | | |
| | | @Override |
| | | public void insertHistoryMonthly() { |
| | | |
| | | Date now = new Date(); |
| | | //开始时间,上月1号 |
| | | Date start = DateUtils.getFirstDayOfLastMonth(); |
| | | //结束时间,本月1号 |
| | | Date end = DateUtils.addMonths(start, 1); |
| | | //因子 |
| | | QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); |
| | | sensorQueryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE); |
| | |
| | | |
| | | //获取所有设备日数据 |
| | | QueryWrapper<HistoryDaily> historyDailyQueryWrapper = new QueryWrapper<>(); |
| | | historyDailyQueryWrapper.ge("time", DateUtils.dateToDateString(start)).lt("time", DateUtils.dateToDateString(now)); |
| | | historyDailyQueryWrapper.ge("time", DateUtils.dateToDateString(start)).lt("time", DateUtils.dateToDateString(end)); |
| | | List<Map<String, Object>> weeklyData = historyDailyService.listMaps(historyDailyQueryWrapper); |
| | | if (weeklyData.size() == 0) { |
| | | return; |
| | |
| | | } |
| | | |
| | | //CO 95百分位计算并修约 |
| | | Object coAvg = AmendUtils.getCOAvgOfWeek(value); |
| | | Object coAvg = AmendUtils.getCOAvgOfWeekOrMonth(value); |
| | | if (coAvg != null) { |
| | | jsonMap.put(Constants.SENSOR_CODE_CO, coAvg); |
| | | } |
| | | |
| | | //O3 90百分位计算并修约 |
| | | Object o3Avg = AmendUtils.getO3AvgOfWeek(value); |
| | | Object o3Avg = AmendUtils.getO3AvgOfWeekOrMonth(value); |
| | | if (o3Avg != null) { |
| | | jsonMap.put(Constants.SENSOR_CODE_O3, o3Avg); |
| | | } |
| | |
| | | |
| | | //存入数据库 |
| | | historyMonthlyMapper.insertHistoryMonthly(insertData); |
| | | |
| | | |
| | | } |
| | | } |
| | |
| | | |
| | | @Override |
| | | public void insertHistoryWeekly() { |
| | | Date now = new Date(); |
| | | //开始时间,上周一 |
| | | Date start = DateUtils.geLastWeekMonday(); |
| | | Date start = DateUtils.getLastWeekMonday(); |
| | | //结束时间,本周一 |
| | | Date end = DateUtils.addDays(start, 7); |
| | | //因子 |
| | | QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); |
| | | sensorQueryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE); |
| | |
| | | |
| | | //获取所有设备日数据 |
| | | QueryWrapper<HistoryDaily> historyDailyQueryWrapper = new QueryWrapper<>(); |
| | | historyDailyQueryWrapper.ge("time", DateUtils.dateToDateString(start)).lt("time", DateUtils.dateToDateString(now)); |
| | | historyDailyQueryWrapper.ge("time", DateUtils.dateToDateString(start)).lt("time", DateUtils.dateToDateString(end)); |
| | | List<Map<String, Object>> weeklyData = historyDailyService.listMaps(historyDailyQueryWrapper); |
| | | if (weeklyData.size() == 0) { |
| | | return; |
| | |
| | | } |
| | | |
| | | //CO 95百分位计算并修约 |
| | | Object coAvg = AmendUtils.getCOAvgOfWeek(value); |
| | | Object coAvg = AmendUtils.getCOAvgOfWeekOrMonth(value); |
| | | if (coAvg != null) { |
| | | jsonMap.put(Constants.SENSOR_CODE_CO, coAvg); |
| | | } |
| | | |
| | | //O3 90百分位计算并修约 |
| | | Object o3Avg = AmendUtils.getO3AvgOfWeek(value); |
| | | Object o3Avg = AmendUtils.getO3AvgOfWeekOrMonth(value); |
| | | if (o3Avg != null) { |
| | | jsonMap.put(Constants.SENSOR_CODE_O3, o3Avg); |
| | | } |
| | |
| | | //存入数据库 |
| | | historyWeeklyMapper.insertHistoryWeekly(insertData); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | List<Double> data = new ArrayList<>(); |
| | | data.add(7d); |
| | | data.add(15d); |
| | | data.add(36d); |
| | | data.add(39d); |
| | | data.add(40d); |
| | | data.add(41d); |
| | | data.add(20d); |
| | | data.add(18d); |
| | | System.out.println(data); |
| | | System.out.println(AmendUtils.percentile(data, 95)); |
| | | |
| | | } |
| | | |
| | | |
| | | } |