screen-api/src/main/java/com/moral/api/controller/DataDisplayController.java
@@ -32,10 +32,10 @@ @Autowired DataDisplayService dataDisplayService; @GetMapping("monitorPointDataDisplay") public ResultMessage monitorPointDataDisplay(MonitorPointDataDisplayForm form){ @PostMapping("monitorPointDataDisplay") public ResultMessage monitorPointDataDisplay( @RequestBody MonitorPointDataDisplayForm form){ //判断是否缺少参数 if (!form.valid()) if (form.getMacs()==null && form.getEndTime() ==null && form.getStartTime() ==null && form.getReportType()==null) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); screen-api/src/main/java/com/moral/api/controller/ExcelController.java
@@ -150,4 +150,20 @@ } /** * 天数据补充 * @param request * @return * @throws IOException */ @PostMapping("rexcelImport") public ResultMessage rexcelImport(HttpServletRequest request) throws IOException { List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("files"); excelService.rexcelImport(files); return ResultMessage.ok(1); } } screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/MonitorPointDataDisplayForm.java
@@ -7,6 +7,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; import java.util.List; /** * @ClassName MonitorPointDataDisplayForm @@ -20,21 +21,27 @@ /* * 站点id * */ private Integer monitorPointId; */ // private Integer monitorPointId; /** * mac号 */ private List<String> macs; /* * 开始时间 * */ @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH") @JsonFormat(pattern = "yyyy-MM-dd HH", timezone = "GMT+8") private Date startTime; /* * 结束时间 * */ @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH") @JsonFormat(pattern = "yyyy-MM-dd HH", timezone = "GMT+8") private Date endTime; /* @@ -45,41 +52,41 @@ /* * 检测数据是否有效 * */ public boolean valid() { if (monitorPointId == null) return false; if (reportType == null) { if (startTime == null || endTime == null) return false; //结束时间获取当天最后一个小时 String endTimeStr = DateUtils.dateToDateString(endTime,"yyyy-MM-dd"); endTimeStr+=" 23:59:59"; endTime = DateUtils.getDate(endTimeStr,"yyyy-MM-dd HH:mm:ss"); } else { if(startTime!=null&&endTime!=null) return false; if (reportType.equals(Constants.HOURLY_REPORT)) { //时报选项默认为上个小时的数据 Date previousHour = DateUtils.getDateOfMin(new Date(), -60); startTime = DateUtils.getHourlyStartTime(previousHour); } else if (reportType.equals(Constants.DAILY_REPORT)) { //日报选项默认为昨天的数据 Date yesterday = DateUtils.getDateOfDay(new Date(),-1); startTime = DateUtils.getDailyStartTime(yesterday); } 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.MONTHLY_REPORT)) { //月报选项默认为上月的数据 Date lastMonthFirstDay = DateUtils.getFirstDayOfLastMonth(); startTime = DateUtils.getMonthlyStartTime(lastMonthFirstDay); endTime = DateUtils.getMonthlyEndTime(lastMonthFirstDay); } else return false; } return true; } // public boolean valid() { // if (monitorPointId == null) // return false; // if (reportType == null) { // if (startTime == null || endTime == null) // return false; // //结束时间获取当天最后一个小时 // String endTimeStr = DateUtils.dateToDateString(endTime,"yyyy-MM-dd"); // endTimeStr+=" 23:59:59"; // endTime = DateUtils.getDate(endTimeStr,"yyyy-MM-dd HH:mm:ss"); // } else { // if(startTime!=null&&endTime!=null) // return false; // if (reportType.equals(Constants.HOURLY_REPORT)) { // //时报选项默认为上个小时的数据 // Date previousHour = DateUtils.getDateOfMin(new Date(), -60); // startTime = DateUtils.getHourlyStartTime(previousHour); // } else if (reportType.equals(Constants.DAILY_REPORT)) { // //日报选项默认为昨天的数据 // Date yesterday = DateUtils.getDateOfDay(new Date(),-1); // startTime = DateUtils.getDailyStartTime(yesterday); // } 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.MONTHLY_REPORT)) { // //月报选项默认为上月的数据 // Date lastMonthFirstDay = DateUtils.getFirstDayOfLastMonth(); // startTime = DateUtils.getMonthlyStartTime(lastMonthFirstDay); // endTime = DateUtils.getMonthlyEndTime(lastMonthFirstDay); // } else // return false; // } // return true; // } } screen-api/src/main/java/com/moral/api/service/ExcelService.java
@@ -35,6 +35,9 @@ public List<ExcelBO> excelSelect(String startTime,String code,String endTime); //天数据补充 public void rexcelImport(List<MultipartFile> files) throws IOException; } screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
@@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.*; import com.moral.api.mapper.DeviceMapper; import com.moral.api.mapper.HistoryMonthlyMapper; import com.moral.api.pojo.dto.dataDisplay.MonitorPointDataDisplayDTO; import com.moral.api.pojo.dto.dataDisplay.SensorComparisonDisplayDTO; @@ -17,6 +18,8 @@ import org.springframework.util.ObjectUtils; import java.util.*; import static com.moral.util.DateUtils.dateToDateString; /** * @ClassName DataDisplayServiceImpl @@ -41,19 +44,27 @@ @Autowired HistoryMonthlyService historyMonthlyService; @Autowired DeviceMapper deviceMapper; @Override public List<MonitorPointDataDisplayDTO> getMonitorPointDisplayData(MonitorPointDataDisplayForm form) { //取参 Integer monitorPointId = form.getMonitorPointId(); // Integer monitorPointId = form.getMacs(); List<String> macs = form.getMacs(); String reportType = form.getReportType(); Date startTime = form.getStartTime(); Date endTime = form.getEndTime(); //根据站点id获取站点下所有的设备 List<Device> devices = deviceService.getDevicesByMonitorPointId(monitorPointId); // List<Device> devices = deviceService.getDevicesByMonitorPointId(monitorPointId); QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>(); deviceQueryWrapper.eq("is_delete",Constants.NOT_DELETE); deviceQueryWrapper.in("mac", macs); List<Device> devices = deviceMapper.selectList(deviceQueryWrapper); Map<String, Device> deviceMap = new HashMap<>(); List<String> macs = new ArrayList<>(); // List<String> ListMacs = new ArrayList<>(); devices.forEach(value -> { macs.add(value.getMac()); // ListMacs.add(value.getMac()); deviceMap.put(value.getMac(), value); }); List<MonitorPointDataDisplayDTO> dtos = new ArrayList<>(); @@ -73,20 +84,26 @@ } //处理小时报表请求,默认取上一个小时的值 else if (reportType.equals(Constants.HOURLY_REPORT)) { Map<String, HistoryHourly> macDataMap = new HashMap<>(); Map<String, List<HistoryHourly>> macDataMap = new HashMap<>(); //获取数据 macs.forEach(value -> { List<HistoryHourly> datas = historyHourlyService.getValueByMacAndTime(value, startTime, startTime); List<HistoryHourly> datas = historyHourlyService.getValueByMacAndTime(value, startTime, endTime); if (datas.size() != 0) macDataMap.put(value, datas.get(0)); macDataMap.put(value,datas); }); if (macDataMap.size() != 0) dtos = calculateReportData(macDataMap, deviceMap, reportType, startTime); } //处理日报请求,默认获取昨天的值 else if (reportType.equals(Constants.DAILY_REPORT)) { Map<String, List<HistoryDaily>> macDataMap = new HashMap<>(); //获取数据 Map<String, HistoryDaily> macDataMap = historyDailyService.getHistoryDailyByMacsAndDate(macs, startTime); macs.forEach(value -> { List<HistoryDaily> datas = historyDailyService.getHistoryDailyByMacAndTimeSlot(value, startTime, endTime); if (datas.size() != 0) macDataMap.put(value,datas); }); if (macDataMap.size() != 0) dtos = calculateReportData(macDataMap, deviceMap, reportType, startTime); } @@ -101,7 +118,15 @@ else if (reportType.equals(Constants.MONTHLY_REPORT)) { //月报需要获取一个月每天的数据用来算综合指数,其他数据从月表中取出 Map<String, List<HistoryDaily>> macDataDailyMap = new HashMap<>(); Map<String, HistoryMonthly> macDataMonthlyMap = historyMonthlyService.getHistoryMonthlyByMacsAndDate(macs, startTime); Map<String, List<HistoryMonthly>> macDataMonthlyMap = new HashMap<>(); macs.forEach(mac -> { QueryWrapper<HistoryMonthly> wrapper = new QueryWrapper<>(); wrapper.eq("mac",mac); wrapper.between("time",startTime,endTime); List<HistoryMonthly> monthlyList = historyMonthlyMapper.selectList(wrapper); if (!ObjectUtils.isEmpty(monthlyList)) macDataMonthlyMap.put(mac, monthlyList); }); macs.forEach(mac -> { List<HistoryDaily> dailyDatas = historyDailyService.getHistoryDailyByMacAndTimeSlot(mac, startTime, endTime); if (!ObjectUtils.isEmpty(dailyDatas)) @@ -533,35 +558,103 @@ */ private <T> List<MonitorPointDataDisplayDTO> calculateReportData(Map<String, T> macDataMap, Map<String, Device> deviceMap, String reportType, Date... date) { List<MonitorPointDataDisplayDTO> dtos = new ArrayList<>(); macDataMap.forEach((key, valueObject) -> { MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO(); dto.setMac(key); //数据的map Map<String, Object> valueMap; //获取对象的value属性值 Object valueO = ClassUtils.getPropertyValue(valueObject, "value"); if (valueO == null) return; String value = (String) valueO; valueMap = JSON.parseObject(value, Map.class); Set<String> strings = macDataMap.keySet(); for (String key : strings) { if (reportType.equals("0")){ List<HistoryHourly> t = (List<HistoryHourly>)macDataMap.get(key); for (HistoryHourly historyHourly : t) { MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO(); String value = historyHourly.getValue(); Map map = JSON.parseObject(value, Map.class); String time = DateUtils.dateToDateString(historyHourly.getTime(), "yyyy-MM-dd HH:00:00"); injectDataToDto(map, false, dto, reportType); dto.setTime(time); dto.setMac(key); dto.setDeviceName(deviceMap.get(key).getName()); dtos.add(dto); } } if (reportType.equals("1")){ List<HistoryDaily> t = (List<HistoryDaily>)macDataMap.get(key); for (HistoryDaily historyDaily : t) { MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO(); String value = historyDaily.getValue(); Map map = JSON.parseObject(value, Map.class); String time = DateUtils.dateToDateString(historyDaily.getTime(), "yyyy-MM-dd"); injectDataToDto(map, false, dto, reportType); dto.setTime(time); dto.setMac(key); dto.setDeviceName(deviceMap.get(key).getName()); dtos.add(dto); } } if (reportType.equals("2")){ HistoryWeekly historyWeekly = (HistoryWeekly)macDataMap.get(key); MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO(); String value = historyWeekly.getValue(); Map map = JSON.parseObject(value, Map.class); String time = DateUtils.dateToDateString(historyWeekly.getTime(), "yyyy-MM-dd"); injectDataToDto(map, false, dto, reportType); dto.setTime(time); dto.setMac(key); dto.setDeviceName(deviceMap.get(key).getName()); dtos.add(dto); } if (reportType.equals("3")){ List<HistoryMonthly> t = (List<HistoryMonthly>)macDataMap.get(key); for (HistoryMonthly historyMonthly : t) { MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO(); String value = historyMonthly.getValue(); Map map = JSON.parseObject(value, Map.class); String time = DateUtils.dateToDateString(historyMonthly.getTime(), "yyyy-MM"); injectDataToDto(map, false, dto, reportType); dto.setTime(time); dto.setMac(key); dto.setDeviceName(deviceMap.get(key).getName()); dtos.add(dto); } } } // macDataMap.forEach((key, valueObject) -> { // MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO(); // dto.setMac(key); // //数据的map // Map<String, Object> valueMap; // List<Map<String, Object>> list; // //获取对象的value属性值 // Object valueO = ClassUtils.getPropertyValue(valueObject, "value"); // if (valueO == null) // return; // String value = (String) valueO; // list = JSON.parseObject(value, List.class); // for (Map<String, Object> map : list) { // String o = map.get("value").toString(); // valueMap = JSON.parseObject(o, Map.class); // injectDataToDto(valueMap, false, dto, reportType); // String deviceName = deviceMap.get(key).getName(); // dto.setDeviceName(deviceName); // String startTime = DateUtils.dateToDateString((Date) map.get("time"), "yyyy-MM-dd HH:mm:ss"); // dto.setTime(startTime); // dtos.add(dto); // } //获取设备名称 String deviceName = deviceMap.get(key).getName(); dto.setDeviceName(deviceName); //拼接时间,时报的时间需要精确到小时,日报精确到当天,周报需要含有开始和结束时间 String startTime = ""; if (valueObject instanceof HistoryHourly && date.length == 1) startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd HH:mm:ss"); else if (valueObject instanceof HistoryDaily && date.length == 1) startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd"); else if (valueObject instanceof HistoryWeekly && date.length == 2) startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd") + " -- " + DateUtils.dateToDateString(date[1], "yyyy-MM-dd"); else if (valueObject instanceof HistoryMonthly && date.length == 1) startTime = DateUtils.dateToDateString(date[0], "yyyy-MM"); dto.setTime(startTime); // String startTime = ""; // if (valueObject instanceof HistoryHourly && date.length == 1) // startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd HH:mm:ss"); // else if (valueObject instanceof HistoryDaily && date.length == 1) // startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd"); // else if (valueObject instanceof HistoryWeekly && date.length == 2) // startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd") + " -- " + DateUtils.dateToDateString(date[1], "yyyy-MM-dd"); // else if (valueObject instanceof HistoryMonthly && date.length == 1) // startTime = DateUtils.dateToDateString(date[0], "yyyy-MM"); // dto.setTime(startTime); //注入数据 injectDataToDto(valueMap, false, dto, reportType); dtos.add(dto); }); // }); return dtos; } screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java
@@ -1,6 +1,7 @@ package com.moral.api.service.impl; import lombok.extern.slf4j.Slf4j; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -11,7 +12,6 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @@ -25,12 +25,13 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.HistoryDaily; import com.moral.api.entity.TbExcel; import com.moral.api.mapper.ExcelMapper; import com.moral.api.mapper.HistoryDailyMapper; import com.moral.api.pojo.bo.ExcelBO; import com.moral.api.pojo.vo.excel.ExcelVo; @@ -41,10 +42,14 @@ @Service @Slf4j public class ExcelServiceImpl implements ExcelService { @Autowired private ExcelMapper excelMapper; @Autowired private HistoryDailyMapper historyDailyMapper; /** * 高新区导入 @@ -452,6 +457,120 @@ return excelBOS; } /** * 天数据补充 * @param files * @return */ @Override public void rexcelImport(List<MultipartFile> files) throws IOException { MultipartFile file = files.get(0); XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); // HashMap<String, Object> rsMap = new HashMap<>(); ArrayList<Map<String, Object>> list = new ArrayList<>(); XSSFSheet sheetAt = workbook.getSheetAt(0); //一共有多少行 int lastRowNum = sheetAt.getLastRowNum(); for (int i = 1; i <= lastRowNum; i++) { XSSFRow row = sheetAt.getRow(i); if (row == null) { continue; } short lastCellNum = row.getLastCellNum(); // if (lastCellNum < 10) { // continue; // } Object[] objects = new Object[lastCellNum]; for (int j = 0; j < lastCellNum; j++) { Cell cell = row.getCell(j); Object value = ExcelUtils.getValue(cell); objects[j] = value; } HashMap<String, Object> map = new HashMap<>(); map.put("mac", objects[0]); map.put("time", objects[1]); // 二氧化硫 if (!objects[2].toString().equals("--")){ map.put("a21026", objects[2]); } // 二氧化氮 if (!objects[3].toString().equals("--")){ map.put("a21004", objects[3]); } // 一氧化碳 if (!objects[4].toString().equals("--")){ map.put("a21005", objects[4]); } // 臭氧 if (!objects[5].toString().equals("--")){ map.put("a05024", objects[5]); } // PM10 if (!objects[6].toString().equals("--")){ map.put("a34002", objects[6]); } // PM 2.5 if (!objects[7].toString().equals("--")){ map.put("a34004", objects[7]); } // TVOCs if (!objects[8].toString().equals("--")){ map.put("a99054", objects[8]); } // 温度 if (!objects[9].toString().equals("--")){ map.put("a01001", objects[9]); } // 湿度 if (!objects[10].toString().equals("--")){ map.put("a01002", objects[10]); } // 气压 if (!objects[11].toString().equals("--")){ map.put("a01006", objects[11]); } // 风速 if (!objects[12].toString().equals("--")){ map.put("a01007", objects[12]); } // 风向 if (!objects[13].toString().equals("--")){ map.put("a01008", objects[13]); } // 光照 if (!objects[14].toString().equals("--")){ map.put("a00e12", objects[14]); } // map.put("颗粒物0.3", objects[15]); // map.put("颗粒物2.5", objects[16]); // map.put("硫化氢", objects[17]); // map.put("氨气", objects[18]); // map.put("苯", objects[19]); // map.put("甲苯", objects[20]); // map.put("二甲苯", objects[21]); // map.put("非甲烷总烃", objects[22]); list.add(map); } // ArrayList<HistoryDaily> rsList = new ArrayList<>(); for (Map<String, Object> map : list) { HistoryDaily historyDaily = new HistoryDaily(); String time = map.remove("time").toString(); Date date = DateUtils.dateStringToDate(time); String mac = map.remove("mac").toString(); String value = JSONObject.toJSONString(map); historyDaily.setMac(mac); historyDaily.setTime(date); historyDaily.setValue(value); // log.info(historyDaily.getValue()); historyDailyMapper.insert(historyDaily); // rsList.add(historyDaily); } } private String getBuilder(StringBuilder sb) { if (sb.length() > 0 && sb.charAt(sb.length() - 1) == '、') { screen-api/src/main/resources/application-dev.yml
@@ -19,7 +19,7 @@ redis: host: r-bp1xdlb9wfc6zt0msp.redis.rds.aliyuncs.com port: 6379 password: moral_123456 password: moral_qx_12345 timeout: 30000 jedis: pool: @@ -36,7 +36,7 @@ tokenRedis: host: r-bp1xdlb9wfc6zt0msp.redis.rds.aliyuncs.com port: 6379 password: moral_123456 password: moral_qx_12345 timeout: 30000 database: 15 pool: @@ -55,8 +55,8 @@ type: com.alibaba.druid.pool.DruidDataSource max-wait: 60000 url: jdbc:mysql://rm-bp1pr3rx9m3fnkwsk.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: moral_123456 username: moral_qx password: moral_qx_12345 test-on-borrow: false sql-script-encoding: utf-8 pool-prepared-statements: true screen-api/src/main/resources/application-local.yml
@@ -54,8 +54,8 @@ type: com.alibaba.druid.pool.DruidDataSource max-wait: 60000 url: jdbc:mysql://rm-bp1pr3rx9m3fnkwsk8o2.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: moral_123456 username: moral_qx password: moral_qx_12345 test-on-borrow: false sql-script-encoding: utf-8 pool-prepared-statements: true screen-common/src/main/java/com/moral/util/AESUtils.java
@@ -67,8 +67,8 @@ //解密 public static String decrypt(String content, String key) { try { SecretKeySpec skey = new SecretKeySpec(key.getBytes(), algorithm); IvParameterSpec iv = new IvParameterSpec(key.getBytes(), 0, offset); SecretKeySpec skey = new SecretKeySpec(key.getBytes("utf-8"), algorithm); IvParameterSpec iv = new IvParameterSpec(key.getBytes("utf-8"), 0, offset); Cipher cipher = Cipher.getInstance(transformation); cipher.init(Cipher.DECRYPT_MODE, skey, iv);// 初始化 byte[] result = cipher.doFinal(new Base64().decode(content)); screen-job/src/main/java/com/moral/api/controller/PubController.java
@@ -1,6 +1,7 @@ package com.moral.api.controller; import com.moral.api.service.HistoryDailyService; import com.moral.api.service.HistoryFiveMinutelyService; import com.moral.constant.ResultMessage; import com.moral.util.DateUtils; import io.swagger.annotations.Api; @@ -29,6 +30,8 @@ public class PubController { @Autowired private HistoryDailyService historyDailyService; @Autowired private HistoryFiveMinutelyService historyFiveMinutelyService; @GetMapping("insertHistoryDaily") @ApiOperation(value = "天数据补录", notes = "天数据补录") @@ -39,6 +42,15 @@ return new ResultMessage(); } @GetMapping("insertHistoryFiveMinutely") @ApiOperation(value = "5分钟数据", notes = "5分钟数据") public ResultMessage insertHistoryFiveMinutely() { historyFiveMinutelyService.insertHistoryFiveMinutely(); return new ResultMessage(); } public static void main(String[] args) { String s = "2023-9-01"; Date d = DateUtils.getDate(s,"yyyy-MM-dd"); screen-job/src/main/resources/application-dev.yml
@@ -20,7 +20,7 @@ redis: host: r-bp1xdlb9wfc6zt0msp.redis.rds.aliyuncs.com port: 6379 password: moral_123456 password: moral_qx_12345 timeout: 30000 jedis: pool: @@ -37,7 +37,7 @@ tokenRedis: host: r-bp1xdlb9wfc6zt0msp.redis.rds.aliyuncs.com port: 6379 password: moral_123456 password: moral_qx_12345 timeout: 30000 database: 14 pool: @@ -56,8 +56,8 @@ type: com.alibaba.druid.pool.DruidDataSource max-wait: 60000 url: jdbc:mysql://rm-bp1pr3rx9m3fnkwsk.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: moral_123456 username: moral_qx password: moral_qx_12345 test-on-borrow: false sql-script-encoding: utf-8 pool-prepared-statements: true screen-job/src/main/resources/application-qa.yml
@@ -55,7 +55,7 @@ filters: stat type: com.alibaba.druid.pool.DruidDataSource max-wait: 60000 url: jdbc:mysql://121.199.44.85:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai url: jdbc:mysql://rm-bp1pr3rx9m3fnkwsk8o2.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: moral_123456 test-on-borrow: false screen-manage/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java
@@ -19,7 +19,7 @@ @Configuration @EnableKafka public class KafkaConsumerConfig { @Value("${kafka.consumer.servers}") @Value("47.99.145.48:9092,47.111.116.38:9092,47.111.124.159:9092") private String servers; @Value("${kafka.consumer.enable.auto.commit}") private boolean enableAutoCommit; screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java
@@ -16,7 +16,7 @@ /*@Configuration @EnableKafka*/ public class KafkaProducerConfig { @Value("${kafka.producer.servers}") @Value("47.99.145.48:9092,47.111.116.38:9092,47.111.124.159:9092") private String servers; @Value("${kafka.producer.retries}") private int retries; screen-manage/src/main/java/com/moral/api/controller/PubController.java
@@ -6,6 +6,7 @@ import com.moral.api.pojo.form.user.UserQueryForm; import com.moral.api.pojo.form.user.UserUpdateForm; import com.moral.api.pojo.vo.user.UserQueryVO; import com.moral.api.service.DeviceAdjustValueService; import com.moral.api.service.UserService; import com.moral.api.util.CacheUtils; import com.moral.constant.ResponseCodeEnum; @@ -17,6 +18,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Map; /** * @ClassName UserController @@ -32,6 +36,8 @@ public class PubController { @Autowired private CacheUtils cacheUtils; @Resource private DeviceAdjustValueService deviceAdjustValueService; @GetMapping("deviceAlarmInfo") @ApiOperation(value = "设备因子", notes = "设备因子") @@ -54,4 +60,14 @@ return new ResultMessage(); } @GetMapping(value = "adjust") @ApiOperation(value = "adjust编码", notes = "adjust编码") @ApiImplicitParams(value = { @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") }) public ResultMessage adjust() { Map<String,Object> resultMap = deviceAdjustValueService.refreshRedis(); return new ResultMessage(); } } screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java
@@ -1,201 +1,201 @@ //package com.moral.api.kafka.consumer; // //import com.moral.api.service.*; //import lombok.extern.slf4j.Slf4j; //import org.apache.kafka.clients.consumer.ConsumerRecord; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.data.redis.core.RedisTemplate; //import org.springframework.kafka.annotation.KafkaListener; //import org.springframework.kafka.support.Acknowledgment; //import org.springframework.stereotype.Component; //import org.springframework.util.ObjectUtils; // //import java.util.HashMap; //import java.util.Iterator; //import java.util.Map; // //import com.alibaba.fastjson.JSON; //import com.moral.constant.KafkaConstants; //import com.moral.constant.RedisConstants; // // // //@Component //@Slf4j //public class DeviceConsumer { // // @Autowired // private HistoryMinutelyService historyMinutelyService; // // @Autowired // private HistoryHourlyService historyHourlyService; // // @Autowired // private DeviceService deviceService; // // @Autowired // private RedisTemplate redisTemplate; // // @Autowired // private HistorySecondCruiserService historySecondCruiserService; // // @Autowired // private HistorySecondUavService historySecondUavService; // // //分钟数据 // @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, containerFactory = "insertListenerContainerFactory") // public void listenMinute(ConsumerRecord<String, String> record, Acknowledgment ack) { // String msg = record.value(); // try { // Map<String, Object> data = JSON.parseObject(msg, Map.class); // Object mac = data.get("mac"); // Object time = data.get("DataTime"); // if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { // log.warn("some properties is null, param{}", msg); // ack.acknowledge(); // return; // } // // //数据过滤 //// data.remove("time"); // data.remove("entryTime"); // Iterator<Map.Entry<String, Object>> iterator = data.entrySet().iterator(); // Map<String, Object> newMap = new HashMap<>(); // Map.Entry<String, Object> next; // while (iterator.hasNext()) { // next = iterator.next(); // String key = next.getKey(); // Object value = next.getValue(); // if (key.contains("-Avg")) { // newMap.put(key.replaceAll("-Avg", ""), Double.parseDouble(value.toString())); // } else { // newMap.put(key, value); // } // iterator.remove(); // } // //存入数据库 // historyMinutelyService.insertHistoryMinutely(newMap); // ack.acknowledge(); // } catch (Exception e) { // log.error("param{}" + msg); // } // } // // //小时数据 // @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, containerFactory = "insertListenerContainerFactory") // public void listenHour(ConsumerRecord<String, String> record, Acknowledgment ack) { // String msg = record.value(); // try { // Map<String, Object> data = JSON.parseObject(msg, Map.class); // Object mac = data.get("mac"); // Object time = data.get("DataTime"); // if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { // log.warn("some properties is null, param{}", msg); // ack.acknowledge(); // return; // } // // //数据过滤 //// data.remove("time"); // data.remove("entryTime"); // Iterator<Map.Entry<String, Object>> iterator = data.entrySet().iterator(); // Map<String, Object> newMap = new HashMap<>(); // Map.Entry<String, Object> next; // while (iterator.hasNext()) { // next = iterator.next(); // String key = next.getKey(); // Object value = next.getValue(); // if (key.contains("-Avg")) { // newMap.put(key.replaceAll("-Avg", ""), Double.parseDouble(value.toString())); // } else { // newMap.put(key, value); // } // iterator.remove(); // } // //存入数据库 // historyHourlyService.insertHistoryHourly(newMap); // ack.acknowledge(); // } catch (Exception e) { // log.error("param{}" + msg); // } // } // // //秒数据,修改设备状态,缓存最新秒数据 // @KafkaListener(topics = KafkaConstants.TOPIC_SECOND, containerFactory = "stateListenerContainerFactory") // public void listenSecond(ConsumerRecord<String, String> record) { // String msg = record.value(); // try { // Map<String, Object> data = JSON.parseObject(msg, Map.class); // Object mac = data.get("mac"); // Object time = data.get("DataTime"); // if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { // log.warn("some properties is null, param{}", msg); // return; // } // //数据过滤 package com.moral.api.kafka.consumer; import com.moral.api.service.*; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.support.Acknowledgment; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import com.alibaba.fastjson.JSON; import com.moral.constant.KafkaConstants; import com.moral.constant.RedisConstants; @Component @Slf4j public class DeviceConsumer { @Autowired private HistoryMinutelyService historyMinutelyService; @Autowired private HistoryHourlyService historyHourlyService; @Autowired private DeviceService deviceService; @Autowired private RedisTemplate redisTemplate; @Autowired private HistorySecondCruiserService historySecondCruiserService; @Autowired private HistorySecondUavService historySecondUavService; //分钟数据 @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, containerFactory = "insertListenerContainerFactory") public void listenMinute(ConsumerRecord<String, String> record, Acknowledgment ack) { String msg = record.value(); try { Map<String, Object> data = JSON.parseObject(msg, Map.class); Object mac = data.get("mac"); Object time = data.get("DataTime"); if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { log.warn("some properties is null, param{}", msg); ack.acknowledge(); return; } //数据过滤 // data.remove("time"); // data.remove("entryTime"); // // //数据校准 // data = deviceService.adjustDeviceData(data,"0"); // //存入redis // data.put("DataTime", time); // redisTemplate.opsForHash().put(RedisConstants.DATA_SECOND, mac, data); // //判断并修改设备状态 // data.put("mac", mac); // deviceService.judgeDeviceState(data); // } catch (Exception e) { // log.error("param{}" + msg); // } // } // // //无人机秒数据 // @KafkaListener(topics = KafkaConstants.UAV_TOPIC_SECOND, groupId = KafkaConstants.GROUP_INSERT, containerFactory = "insertListenerContainerFactory") // public void listenSecondSpecial(ConsumerRecord<String, String> record, Acknowledgment ack) { // String msg = record.value(); // try { // Map<String, Object> data = JSON.parseObject(msg, Map.class); // Object mac = data.get("mac"); // Object time = data.get("DataTime"); // if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { // log.warn("some properties is null, param{}", msg); // ack.acknowledge(); // return; // } // // //数据过滤 data.remove("entryTime"); Iterator<Map.Entry<String, Object>> iterator = data.entrySet().iterator(); Map<String, Object> newMap = new HashMap<>(); Map.Entry<String, Object> next; while (iterator.hasNext()) { next = iterator.next(); String key = next.getKey(); Object value = next.getValue(); if (key.contains("-Avg")) { newMap.put(key.replaceAll("-Avg", ""), Double.parseDouble(value.toString())); } else { newMap.put(key, value); } iterator.remove(); } //存入数据库 historyMinutelyService.insertHistoryMinutely(newMap); ack.acknowledge(); } catch (Exception e) { log.error("param{}" + msg); } } //小时数据 @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, containerFactory = "insertListenerContainerFactory") public void listenHour(ConsumerRecord<String, String> record, Acknowledgment ack) { String msg = record.value(); try { Map<String, Object> data = JSON.parseObject(msg, Map.class); Object mac = data.get("mac"); Object time = data.get("DataTime"); if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { log.warn("some properties is null, param{}", msg); ack.acknowledge(); return; } //数据过滤 // data.remove("time"); // data.remove("entryTime"); // // historySecondUavService.insertHistorySecond(data); // ack.acknowledge(); // } catch (Exception e) { // log.error("param{}" + msg); // } // } // // //走航车秒数据 // @KafkaListener(topics = KafkaConstants.CRUISER_TOPIC_SECOND, containerFactory = "insertListenerContainerFactory") // public void listenSecondCruiser(ConsumerRecord<String, String> record, Acknowledgment ack) { // String msg = record.value(); // try { // Map<String, Object> data = JSON.parseObject(msg, Map.class); // Object mac = data.get("mac"); // Object time = data.get("DataTime"); // if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { // log.warn("some properties is null, param{}", msg); // ack.acknowledge(); // return; // } // // //数据过滤 // data.remove("time"); // data.remove("entryTime"); // // historySecondCruiserService.insertHistorySecond(data); // ack.acknowledge(); // } catch (Exception e) { // log.error("param{}" + e); // } // } //} data.remove("entryTime"); Iterator<Map.Entry<String, Object>> iterator = data.entrySet().iterator(); Map<String, Object> newMap = new HashMap<>(); Map.Entry<String, Object> next; while (iterator.hasNext()) { next = iterator.next(); String key = next.getKey(); Object value = next.getValue(); if (key.contains("-Avg")) { newMap.put(key.replaceAll("-Avg", ""), Double.parseDouble(value.toString())); } else { newMap.put(key, value); } iterator.remove(); } //存入数据库 historyHourlyService.insertHistoryHourly(newMap); ack.acknowledge(); } catch (Exception e) { log.error("param{}" + msg); } } //秒数据,修改设备状态,缓存最新秒数据 @KafkaListener(topics = KafkaConstants.TOPIC_SECOND, containerFactory = "stateListenerContainerFactory") public void listenSecond(ConsumerRecord<String, String> record) { String msg = record.value(); try { Map<String, Object> data = JSON.parseObject(msg, Map.class); Object mac = data.get("mac"); Object time = data.get("DataTime"); if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { log.warn("some properties is null, param{}", msg); return; } //数据过滤 data.remove("time"); data.remove("entryTime"); //数据校准 data = deviceService.adjustDeviceData(data,"0"); //存入redis data.put("DataTime", time); redisTemplate.opsForHash().put(RedisConstants.DATA_SECOND, mac, data); //判断并修改设备状态 data.put("mac", mac); deviceService.judgeDeviceState(data); } catch (Exception e) { log.error("param{}" + msg); } } //无人机秒数据 @KafkaListener(topics = KafkaConstants.UAV_TOPIC_SECOND, groupId = KafkaConstants.GROUP_INSERT, containerFactory = "insertListenerContainerFactory") public void listenSecondSpecial(ConsumerRecord<String, String> record, Acknowledgment ack) { String msg = record.value(); try { Map<String, Object> data = JSON.parseObject(msg, Map.class); Object mac = data.get("mac"); Object time = data.get("DataTime"); if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { log.warn("some properties is null, param{}", msg); ack.acknowledge(); return; } //数据过滤 data.remove("time"); data.remove("entryTime"); historySecondUavService.insertHistorySecond(data); ack.acknowledge(); } catch (Exception e) { log.error("param{}" + msg); } } //走航车秒数据 @KafkaListener(topics = KafkaConstants.CRUISER_TOPIC_SECOND, containerFactory = "insertListenerContainerFactory") public void listenSecondCruiser(ConsumerRecord<String, String> record, Acknowledgment ack) { String msg = record.value(); try { Map<String, Object> data = JSON.parseObject(msg, Map.class); Object mac = data.get("mac"); Object time = data.get("DataTime"); if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) { log.warn("some properties is null, param{}", msg); ack.acknowledge(); return; } //数据过滤 data.remove("time"); data.remove("entryTime"); historySecondCruiserService.insertHistorySecond(data); ack.acknowledge(); } catch (Exception e) { log.error("param{}" + e); } } } screen-manage/src/main/resources/application-dev.yml
@@ -20,7 +20,7 @@ redis: host: r-bp1xdlb9wfc6zt0msp.redis.rds.aliyuncs.com port: 6379 password: moral_123456 password: moral_qx_12345 timeout: 30000 jedis: pool: @@ -37,7 +37,7 @@ tokenRedis: host: r-bp1xdlb9wfc6zt0msp.redis.rds.aliyuncs.com port: 6379 password: moral_123456 password: moral_qx_12345 timeout: 30000 database: 14 pool: @@ -56,8 +56,8 @@ type: com.alibaba.druid.pool.DruidDataSource max-wait: 60000 url: jdbc:mysql://rm-bp1pr3rx9m3fnkwsk.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: moral_123456 username: moral_qx password: moral_qx_12345 test-on-borrow: false sql-script-encoding: utf-8 pool-prepared-statements: true screen-manage/src/main/resources/application-qa.yml
@@ -92,11 +92,11 @@ enable: auto: commit: false servers: 172.16.44.65:9092,172.16.44.67:9092,172.16.44.66:9092 servers: 47.99.145.48:9092,47.111.116.38:9092,47.111.124.159:9092 session: timeout: 6000 zookeeper: connect: 172.16.44.65:2181,172.16.44.67:2181,172.16.44.66:2181 connect: 47.99.145.48:2181,47.111.116.38:2181,47.111.124.159:2181 producer: batch: size: 4096 @@ -104,7 +104,7 @@ memory: 40960 linger: 1 retries: 0 servers: 172.16.44.65:9092,172.16.44.67:9092,172.16.44.66:9092 servers: 47.99.145.48:9092,47.111.116.38:9092,47.111.124.159:9092 groupId: insert: Dev_insert state: Dev_state