cjl
2023-07-10 90362d592d28927e5ab56f9b24f97d1f9089b50b
Merge remote-tracking branch 'origin/qa' into qa
18 files modified
872 ■■■■■ changed files
screen-api/src/main/java/com/moral/api/controller/DataDisplayController.java 6 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/controller/ExcelController.java 16 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/MonitorPointDataDisplayForm.java 91 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/ExcelService.java 3 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java 163 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java 123 ●●●●● patch | view | raw | blame | history
screen-api/src/main/resources/application-dev.yml 8 ●●●● patch | view | raw | blame | history
screen-api/src/main/resources/application-local.yml 4 ●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/AESUtils.java 4 ●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/controller/PubController.java 12 ●●●●● patch | view | raw | blame | history
screen-job/src/main/resources/application-dev.yml 8 ●●●● patch | view | raw | blame | history
screen-job/src/main/resources/application-qa.yml 2 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java 2 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java 2 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/PubController.java 16 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java 398 ●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/application-dev.yml 8 ●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/application-qa.yml 6 ●●●● patch | view | raw | blame | history
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