screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java
@@ -107,10 +107,15 @@ if (!params.containsKey("monitorPointIds")) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } String[] monitorPointIds = params.remove("monitorPointIds").toString().split(","); String monitorPoint = params.remove("monitorPointIds").toString(); /*if(monitorPoint.contains("")){ }*/ String[] monitorPointIds = monitorPoint.split(","); if (monitorPointIds.length > 3) { return ResultMessage.ok(); } params.put("monitorPointIds", monitorPointIds); List<Object> response = historyFiveMinutelyService.getAreaWindData(params); return ResultMessage.ok(response); screen-api/src/main/java/com/moral/api/controller/SysTestController.java
@@ -56,18 +56,21 @@ @GetMapping("resultWord") public void adresultWordd(HttpServletResponse response,String time,String endTime) { // for(int i = 495;i<1095;i++){ List<SysTest> listAll = sysTestService.listAll(time,endTime,null); if(CollectionUtils.isEmpty(listAll)){ return; } /* Date endTime =listAll.get(0).getTime(); String endTimeStr = DateUtils.dateToDateString(endTime,DateUtils.yyyyMMdd_EN); String ks = "2023-06-22"; endTime = "2023-08-06"; Date ksDate = DateUtils.convertDate(ks); List<SysTest> listAll = sysTestService.listAll(ks,endTime,null); if(CollectionUtils.isEmpty(listAll)){ return; } for(SysTest s : listAll){ Date endTimes =s.getTime(); String endTimeStr = DateUtils.dateToDateString(endTimes,DateUtils.yyyyMMdd_EN); String fileName = "空气质量日报.docx"; Map<String,Object> map = resultMap(listAll); downloadWord(fileName, map, response,"空气质量日报"+endTimeStr+".docx");*/ // time = DateUtils.dateToDateString(DateUtils.addDays(endTime,1),DateUtils.yyyy_MM_dd_EN); // } downloadWord(fileName, map, response,"空气质量日报"+endTimeStr+".docx"); //time = DateUtils.dateToDateString(DateUtils.addDays(endTime,1),DateUtils.yyyy_MM_dd_EN); } } @GetMapping("excelM") @@ -136,9 +139,9 @@ @GetMapping("resultWordMonth") public void resultWordMonth(HttpServletResponse response) { String ks = "2020-06-01"; String ks = "2023-07-01"; Date ksDate = DateUtils.convertDate(ks); for(int i = 0;i<37;i++){ for(int i = 0;i<1;i++){ Date jsDate = DateUtils.getLastDayOfCurrMonth(ksDate);; String time = DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN); String endTime = DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN); @@ -161,7 +164,7 @@ String path = getPath(fileName);//我这放 resources包下 try { //获取模板文档 OutputStream out = new FileOutputStream("E:\\home\\mon\\" + newFileName); OutputStream out = new FileOutputStream("E:\\home\\mon1\\" + newFileName); File rootFile = new File(ResourceUtils.getURL("classpath:").getPath()); File file= new File(rootFile, path); XWPFDocument word = WordExportUtil.exportWord07(file.getPath(), params); screen-api/src/main/java/com/moral/api/entity/SysTest.java
@@ -8,6 +8,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.apache.commons.lang3.StringUtils; /** * <p> @@ -52,4 +53,31 @@ @TableField(exist = false) private String mon; public String getPm25() { return StringUtils.isEmpty(pm25)?"0":String.valueOf(Double.parseDouble(pm25)); } public String getPm10() { return StringUtils.isEmpty(pm10)?"0":String.valueOf(Double.parseDouble(pm10)); } public String getSo2() { return StringUtils.isEmpty(so2)?"0":String.valueOf(Double.parseDouble(so2)); } public String getNo2() { return StringUtils.isEmpty(no2)?"0":String.valueOf(Double.parseDouble(no2)); } public String getCo() { return StringUtils.isEmpty(co)?"0":String.valueOf(Double.parseDouble(co)); } public String getO3() { return StringUtils.isEmpty(o3)?"0":String.valueOf(Double.parseDouble(o3)); } public String getVoc() { return StringUtils.isEmpty(voc)?"0":String.valueOf(Double.parseDouble(voc)); } } screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
@@ -205,6 +205,7 @@ QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); queryWrapper.select("mac", "name").in("mac", macs); queryWrapper.orderByAsc("dev_num","name","id"); List<Device> devices = deviceMapper.selectList(queryWrapper); Map<String,Object> devicesInfo = new HashMap<>(); for (Device device:devices) { @@ -246,8 +247,8 @@ for (HistoryHourly historyHourly:distinctHistoryHourlies) { Map<String,Object> historyHourlyMap = new HashMap<>(); historyHourlyMap.put("mac",mac); JSONObject value = JSONObject.parseObject(historyHourly.getValue()); Double sensorValue = Double.parseDouble(value.get(sensorCode).toString()); JSONObject value= JSONObject.parseObject(historyHourly.getValue()); Double sensorValue = Objects.nonNull(value)&&Objects.nonNull(value.get(sensorCode))?Double.parseDouble(value.get(sensorCode).toString()):0d; historyHourlyMap.put(sensorCode,sensorValue); Date time = historyHourly.getTime(); String timeStr = DateUtils.dateToDateString(time, DateUtils.yyyy_MM_dd_HH_EN); screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java
@@ -30,6 +30,9 @@ void insertHistoryHourlyComplete(@Param("list") List<Map<String, Object>> list, @Param("timeUnits") String timeUnits); void insertHistoryHourlyAvg(@Param("list") List<Map<String, Object>> list, @Param("timeUnits") String timeUnits); } screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java
@@ -43,5 +43,8 @@ void dateToChangShu(String time); //计算海城市的小数数据 void dateInsertHistoryHourlyAvg(); } screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
@@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.config.mybatis.MybatisPlusConfig; import com.moral.api.config.rest.Crc16Utils; import com.moral.api.entity.Device; import com.moral.api.entity.HistoryHourly; import com.moral.api.entity.Sensor; import com.moral.api.mapper.DeviceMapper; import com.moral.api.mapper.HistoryHourlyMapper; import com.moral.api.mapper.HistoryMinutelyMapper; import com.moral.api.service.HistoryHourlyService; @@ -58,6 +60,9 @@ private String dateChangShu; @Autowired private HistoryHourlyMapper historyHourlyMapper; @Autowired private DeviceMapper deviceMapper; @Autowired private RedisTemplate redisTemplate; @@ -239,6 +244,7 @@ //存入小时表 historyHourlyMapper.insertHistoryHourly(insertData); } @Override @@ -461,6 +467,158 @@ log.info("发送完成"); } /** * 计算海城市的小时数据 */ @Override public void dateInsertHistoryHourlyAvg() { QueryWrapper<Device> wrapper = new QueryWrapper<>(); wrapper.select("mac"); wrapper.eq("organization_id",71); wrapper.eq("is_delete",Constants.NOT_DELETE); List<Device> devices = deviceMapper.selectList(wrapper); ArrayList<String> macs = new ArrayList<>(); for (Device device : devices) { macs.add(device.getMac()); } //时间格式化:yyyy-MM-dd HH:mm String format = DateUtils.yyyy_MM_dd_HH_EN; Date now = new Date(); //从数据库获取数据参数 Map<String, Object> params = new HashMap<>(); //开始时间 Date start = DateUtils.dataToTimeStampTime(DateUtils.addHours(now, -1), format); //结束时间 Date end = DateUtils.dataToTimeStampTime(now, format); // String start1= "2023-08-18 03:00:00"; // String end1 = "2023-08-18 04:00:00"; // Date date1 = DateUtils.getDate(start1, DateUtils.yyyy_MM_dd_HH_mm_ss_EN); // Date date2 = DateUtils.getDate(end1, DateUtils.yyyy_MM_dd_HH_mm_ss_EN); params.put("start", start); params.put("end", end); params.put("macs",macs); //获取数据的分钟表后缀 String timeUnits = DateUtils.dateToDateString(start, DateUtils.yyyyMM_EN); params.put("timeUnits", timeUnits); //因子 QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); sensorQueryWrapper.select("code", "lower", "upper").eq("is_delete", Constants.NOT_DELETE); List<Sensor> sensors = sensorService.list(sensorQueryWrapper); // 获取海城设备的一小时内分钟的数据 List<Map<String, Object>> hourlyData = historyMinutelyMapper.getHistoryMinutelyData(params); if (ObjectUtils.isEmpty(hourlyData)) { return; } //按mac分组 Map<String, List<Map<String, Object>>> data = hourlyData.parallelStream() .collect(Collectors.groupingBy(o -> (String) o.get("mac"))); //存入数据库的结果集 List<Map<String, Object>> insertData = new ArrayList<>(); data.forEach((key, value) -> { Map<String, Object> historyHourly = new HashMap<>(); historyHourly.put("mac", key); historyHourly.put("time",start); Map<String, Object> jsonMap = new HashMap<>(); Map<String, Object> map = new HashMap<>(); map.put("data", value); map.put("type", "hour"); for (Sensor sensor : sensors) { String sensorCode = sensor.getCode(); //风向上下限 if (sensorCode.equals(Constants.SENSOR_CODE_WIND_DIR)) { if (sensor.getUpper() != null) { map.put("windDirUpper", sensor.getUpper()); } if (sensor.getLower() != null) { map.put("windDirLower", sensor.getLower()); } } //风速上下限 if (sensorCode.equals(Constants.SENSOR_CODE_WIND_SPEED)) { if (sensor.getUpper() != null) { map.put("windSpeedUpper", sensor.getUpper()); } if (sensor.getLower() != null) { map.put("windSpeedLower", sensor.getLower()); } } } //风向均值计算并修约 Map<String, Object> windDirAvg = AmendUtils.getWindDirAvg(map); if (!ObjectUtils.isEmpty(windDirAvg)) { jsonMap.putAll(windDirAvg); } //除风向外其他因子均值计算 sensors.forEach(sensor -> { String sensorCode = sensor.getCode(); Double upper = sensor.getUpper(); Double lower = sensor.getLower(); AtomicInteger size = new AtomicInteger(); DoubleStream optionalDouble = value.parallelStream() .flatMapToDouble(v -> { Map<String, Object> dataValue = JSONObject.parseObject((String) v.get("value"), Map.class); Object sensorValue = dataValue.get(sensorCode); //数据有效性标记位 Object flag = dataValue.get(sensorCode + "-" + Constants.MARKER_BIT_KEY); if (!Constants.MARKER_BIT_TRUE.equals(flag)) { return null; } if (ObjectUtils.isEmpty(sensorValue)) { return null; } //风向单独计算 if (Constants.SENSOR_CODE_WIND_DIR.equals(sensorCode)) { return null; } //剔除数据超过上下限的数据 double aDouble = Double.parseDouble(sensorValue.toString()); if (!ObjectUtils.isEmpty(upper)) { if (aDouble < upper) { return null; } } if (!ObjectUtils.isEmpty(lower)) { if (aDouble > lower) { return null; } } size.getAndIncrement(); return DoubleStream.of(aDouble); }); OptionalDouble average = optionalDouble.average(); if (average.isPresent()) { //银行家算法修约 double sciCal = AmendUtils.sciCal(average.getAsDouble(), 4); jsonMap.put(sensorCode, sciCal); //标志位 if (size.get() >= 45) { jsonMap.put(sensorCode + "-" + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_TRUE); } else { jsonMap.put(sensorCode + "-" + Constants.MARKER_BIT_KEY, Constants.MARKER_BIT_FALSE); } } }); historyHourly.put("version", value.get(0).get("version")); historyHourly.put("value", JSONObject.toJSONString(jsonMap)); insertData.add(historyHourly); }); //存入数据库 historyHourlyMapper.insertHistoryHourlyAvg(insertData,timeUnits); } private String strList(String startTime,String mn,String msg){ String qn = "QN="+ startTime + "001;ST=22;CN=2061;PW=123456;MN="+mn.toUpperCase()+";CP=&&DataTime="+startTime+";"; Map<String, Object> data = JSON.parseObject(msg, Map.class); screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
@@ -116,4 +116,18 @@ } return ReturnT.SUCCESS; } //海城小时数据统计 @XxlJob("dateInsertHistoryHourlyAvg") public ReturnT dateInsertHistoryHourlyAvg(){ try { historyHourlyService.dateInsertHistoryHourlyAvg(); } catch (Exception e) { e.printStackTrace(); return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } } screen-job/src/main/resources/mapper/HistoryHourlyMapper.xml
@@ -56,4 +56,14 @@ (#{item.mac}, #{item.time}, #{item.value}) </foreach> </insert> <insert id="insertHistoryHourlyAvg"> INSERT INTO history_hourly_${timeUnits} VALUES <foreach collection="list" item="item" separator=","> (#{item.mac}, #{item.time}, #{item.value}, #{item.version}) </foreach> </insert> </mapper> screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java
@@ -1,5 +1,6 @@ package com.moral.api.kafka.consumer; import com.alibaba.fastjson.JSONObject; import com.moral.api.service.*; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.ConsumerRecord; @@ -99,18 +100,25 @@ } //数据过滤 data.remove("time"); // data.remove("time"); data.remove("entryTime"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = dateFormat.format(new Date().getTime()); //获取年份 String substring = format.substring(0, 4); String substring1 = time.toString().substring(0, 4); String replace = time.toString().replace(substring1, substring); data.put("DataTime",replace); Map<String, Object> deviceByMac = deviceService.getDeviceByMac(mac.toString()); HashMap<String, Object> map = (HashMap<String, Object>) deviceByMac.get("organization"); String id = map.get("id").toString(); if (id.equals("71")){ log.warn(id, msg); return; } // SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // String format = dateFormat.format(new Date().getTime()); // //获取年份 // String substring = format.substring(0, 4); // // String substring1 = time.toString().substring(0, 4); // // String replace = time.toString().replace(substring1, substring); // // data.put("DataTime",replace); Iterator<Map.Entry<String, Object>> iterator = data.entrySet().iterator(); Map<String, Object> newMap = new HashMap<>(); screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
@@ -51,13 +51,13 @@ Map<String, Object> versionInfo = (Map<String, Object>) deviceInfo.get("version"); Integer version = (Integer) versionInfo.get("id"); //获取时间戳 // String time1 = data.get("time").toString(); // long l = Long.parseLong(time1); // SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:00:00"); // String format1 = dateFormat.format(l); // Date time = DateUtils.getDate(format1, DateUtils.yyyy_MM_dd_HH_mm_ss_EN); String time1 = data.get("time").toString(); long l = Long.parseLong(time1); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:00:00"); String format1 = dateFormat.format(l); Date time = DateUtils.getDate(format1, DateUtils.yyyy_MM_dd_HH_mm_ss_EN); Date time = DateUtils.getDate((String) data.remove("DataTime"), DateUtils.yyyyMMddHHmmss_EN); // Date time = DateUtils.getDate((String) data.remove("DataTime"), DateUtils.yyyyMMddHHmmss_EN); String yearAndMonth = DateUtils.dateToDateString(DateUtils.addHours(time, -1), DateUtils.yyyyMM_EN); result.put("mac", mac);