From 6344a8b6b7e2853dbfa9e6506ff2e17a31930297 Mon Sep 17 00:00:00 2001
From: cjl <276999030@qq.com>
Date: Mon, 10 Jul 2023 14:17:40 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/cjl' into dev

---
 screen-common/src/main/java/com/moral/util/DateUtils.java                         |   16 +
 screen-api/src/main/java/com/moral/api/utils/EasyExcelUtils.java                  |   77 ++++
 screen-api/src/main/java/com/moral/api/utils/SimpleWriteData.java                 |   11 
 screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java           |    4 
 screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java     |   62 +++
 screen-job/src/main/java/com/moral/api/controller/PubController.java              |   64 ++++
 screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java  |  176 +++++++++++
 screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java      |    5 
 screen-manage/src/main/java/com/moral/api/util/CacheUtils.java                    |    2 
 screen-api/src/main/java/com/moral/api/utils/NoModelWriteData.java                |   15 
 screen-manage/src/main/java/com/moral/api/controller/PubController.java           |   73 ++++
 screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java |    9 
 screen-api/pom.xml                                                                |   11 
 screen-api/src/main/java/com/moral/api/service/MonitorPointService.java           |    7 
 screen-job/src/main/resources/application-qa.yml                                  |  109 ++++++
 screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java  |   15 
 screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java           |    6 
 screen-api/src/main/resources/application-qa.yml                                  |  136 ++++++++
 screen-api/src/main/java/com/moral/api/service/HistoryHourlyService.java          |    9 
 screen-manage/src/main/resources/application-qa.yml                               |  129 ++++++++
 20 files changed, 922 insertions(+), 14 deletions(-)

diff --git a/screen-api/pom.xml b/screen-api/pom.xml
index 21b3486..1d30c2f 100644
--- a/screen-api/pom.xml
+++ b/screen-api/pom.xml
@@ -37,6 +37,17 @@
             <artifactId>poi-ooxml-schemas</artifactId>
             <version>4.0.1</version>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>2.1.6</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.66</version>
+        </dependency>
+
     </dependencies>
 
     <build>
diff --git a/screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java b/screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java
index 02a53c6..96b0729 100644
--- a/screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java
@@ -5,6 +5,8 @@
 import com.moral.api.pojo.vo.monitorPoint.MonitorPointsVO;
 import com.moral.api.service.HistoryFiveMinutelyService;
 import com.moral.api.service.MonitorPointService;
+import com.moral.api.utils.EasyExcelUtils;
+import com.moral.api.utils.NoModelWriteData;
 import com.moral.constant.ResponseCodeEnum;
 import com.moral.constant.ResultMessage;
 import com.moral.util.WebUtils;
@@ -14,6 +16,8 @@
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -22,13 +26,11 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * @ClassName DeviceController
@@ -97,7 +99,7 @@
             return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
         }
         String[] monitorPointIds = params.remove("monitorPointIds").toString().split(",");
-        if (monitorPointIds.length >3){
+        if (monitorPointIds.length > 3) {
             return ResultMessage.ok();
         }
         params.put("monitorPointIds", monitorPointIds);
@@ -137,4 +139,54 @@
         return ResultMessage.ok(resList);
     }
 
+
+    @PostMapping("getHourlyDataExcelNew")
+    public ResultMessage getHourlyDataExcelNew(@RequestBody Map<String, Object> params) {
+        if (!params.containsKey("macs") || !params.containsKey("sensors") || !params.containsKey("times") || !params.containsKey("type")) {
+            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+        }
+        List<Map<String, Object>> resList = monitorPointService.getHourlyDataDataV3Excel(params);
+        return ResultMessage.ok(resList);
+    }
+
+    @PostMapping("/exlOut")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String")
+    })
+    public void exlOut(HttpServletResponse response,@RequestBody Map<String, Object> params) {
+        //������������������
+        // List<ExcelHeader> excelHeaders = Arrays.asList(new ExcelHeader("phone", "���������"), new ExcelHeader("sexStr", "������"));
+       /* Map<String, Object> params = new HashMap<>();
+        params.put("macs", Arrays.asList("p5dnd7a0245446", "p5dnd7a0745450"));
+        params.put("sensors", "a34004,a34002");
+        params.put("type", "hours");
+        params.put("times", Arrays.asList("2023-07-01 00", "2023-07-02 00"));*/
+        if (!params.containsKey("macs") || !params.containsKey("sensors") || !params.containsKey("times") || !params.containsKey("type")) {
+            return;
+        }
+        //������������
+        List<Map<String, Object>> resList = monitorPointService.getHourlyDataDataV3Excel(params);
+        if (CollectionUtils.isEmpty(resList)) {
+            return;
+        }
+        Map<String, Object> map = resList.get(0);
+        List<String> list = new ArrayList<>();
+        for (String key : map.keySet()) {
+            list.add(key);
+        }
+        String[] s2 = new String[list.size()];
+        list.toArray(s2);
+        NoModelWriteData d = new NoModelWriteData();
+        d.setFileName("������������");
+        d.setHeadMap(s2);
+        d.setDataStrMap(s2);
+        d.setDataList(resList);
+        try {
+            EasyExcelUtils easyExcelUtils = new EasyExcelUtils();
+            easyExcelUtils.noModleWrite(d, response);
+        } catch (Exception e) {
+            int i = 0;
+        }
+
+    }
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/HistoryHourlyService.java b/screen-api/src/main/java/com/moral/api/service/HistoryHourlyService.java
index 0c87a8c..22e5ca4 100644
--- a/screen-api/src/main/java/com/moral/api/service/HistoryHourlyService.java
+++ b/screen-api/src/main/java/com/moral/api/service/HistoryHourlyService.java
@@ -92,6 +92,15 @@
     List<HistoryHourly> getValueByMacAndTime(String mac, Date startDate, Date endDate);
 
     /**
+     * @Description: ������mac������������������������
+     * @Param: [mac, startDate, endDate]
+     * @return: java.util.List<com.moral.api.entity.HistoryHourly>
+     * @Author: ���������
+     * @Date: 2021/9/28
+     */
+    List<HistoryHourly> getValueByMacAndTime(List<String> mac, Date startDate, Date endDate);
+
+    /**
      * @param macs List<String>
      * @param time String ������2021-12-23
      * @description: ���������������������������������������
diff --git a/screen-api/src/main/java/com/moral/api/service/MonitorPointService.java b/screen-api/src/main/java/com/moral/api/service/MonitorPointService.java
index 8094db6..9dd3484 100644
--- a/screen-api/src/main/java/com/moral/api/service/MonitorPointService.java
+++ b/screen-api/src/main/java/com/moral/api/service/MonitorPointService.java
@@ -45,6 +45,13 @@
      */
     List<Map<String, Object>> getHourlyDataDataV3(Map<String, Object> params);
 
+    /**
+     * ������������������������
+     * @param params
+     * @return
+     */
+    List<Map<String, Object>> getHourlyDataDataV3Excel(Map<String, Object> params);
+
 
 }
 
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
index ebd124d..f2a4445 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
@@ -755,6 +755,15 @@
         List<HistoryHourly> datas = multiTableQuery(wrapper, tableNames);
         return datas;
     }
+    @Override
+    public List<HistoryHourly> getValueByMacAndTime(List<String> mac, Date startDate, Date endDate) {
+        QueryWrapper<HistoryHourly> wrapper = new QueryWrapper<>();
+        wrapper.in("mac", mac);
+        wrapper.between("time", startDate, endDate);
+        List<String> tableNames = MybatisPLUSUtils.getTableNamesByWrapper(startDate, endDate, SeparateTableType.MONTH);
+        List<HistoryHourly> datas = multiTableQuery(wrapper, tableNames);
+        return datas;
+    }
 
     @Override
     public List<HistoryHourly> getValueByMacs(List<String> macs, String time) {
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java
index f2aa5c0..3632a25 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java
@@ -314,6 +314,170 @@
         return resultList;
     }
 
+    @Override
+    public List<Map<String, Object>> getHourlyDataDataV3Excel(Map<String, Object> params) {
+        List<String> macs = (List<String>) params.remove("macs");
+        List<String> times = (List<String>) params.remove("times");
+        String type = params.get("type").toString();
+        String startTime = times.get(0);
+        String endTime = times.get(1);
+
+//        String[] macs = params.remove("macs").toString().split(",");
+//        List<String> macsList = Arrays.asList(macs);
+        QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_delete",Constants.NOT_DELETE);
+        queryWrapper.in("mac", macs);
+        List<Device> devices = deviceMapper.selectList(queryWrapper);
+        if (devices.size()<=0){
+            return null;
+        }
+        String[] sensors = params.remove("sensors").toString().split(",");
+        List<String> sensorsList = Arrays.asList(sensors);
+        List<Map<String,Object>> resultList = new ArrayList<>();
+
+//        List<String> sensorsList = (List<String>) params.remove("sensors");
+//        String startTime = params.get("startTime").toString();
+//        String endTime = params.get("endTime").toString();
+        if (type.equals("hours")){
+            Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_HH_EN);
+            Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_dd_HH_EN);
+            List<HistoryHourly> hourlies = historyHourlyService.getValueByMacAndTime(macs, DateUtils.getDate(startTime, DateUtils.yyyy_MM_dd_HH_EN), DateUtils.getDate(endTime, DateUtils.yyyy_MM_dd_HH_EN));
+            Map<String,Map<String,Object>> map = resultMap(hourlies);
+            Map<Integer,String> pointMap = pointMap(devices);
+            Map<String,String> sensorMap = sensorMap(sensorsList);
+
+            for (Device device:devices) {
+                Date ks = DateUtils.getDate(startTime,"yyyy-MM-dd HH");
+                Date js = DateUtils.getDateAddHour(DateUtils.getDate(endTime,"yyyy-MM-dd HH"),1);
+                while (DateUtils.isTimeBefor(js,ks)){
+                    Map<String, Object> timeValueMap = new LinkedHashMap<>();//key���time���value������������json
+                    timeValueMap.put("������������",pointMap.get(device.getMonitorPointId()));
+                    timeValueMap.put("name",device.getName());
+                    String c = DateUtils.dateToDateString(ks,DateUtils.yyyy_MM_dd_HH_EN);
+                    timeValueMap.put("������",c);
+                    for (String sensor:sensorsList) {
+                        String k = c+"_"+device.getMac();
+                        Double num = 0d;
+                        if(map.containsKey(k)){
+                            Object o = map.get(k).get(sensor);
+                            num = Objects.nonNull(o)?Double.valueOf(o.toString()):0d;
+                        }
+                        timeValueMap.put(sensorMap.get(sensor),num);
+                    }
+                    resultList.add(timeValueMap);
+                    ks = DateUtils.getDateAddHour(ks,1);
+                }
+            }
+        } else  if("day".equals(type)){
+            Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_HH_EN);
+            Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_dd_HH_EN);
+            List<HistoryDaily> historyDailyByMacAndTimeSlot = historyDailyService.getHistoryDailyByMacAndTimeSlot(macs, startDate, endDate);
+            Map<String,Map<String,Object>> map = resultMap(historyDailyByMacAndTimeSlot,new ArrayList<>());
+            Map<Integer,String> pointMap = pointMap(devices);
+            Map<String,String> sensorMap = sensorMap(sensorsList);
+            for (Device device:devices) {
+                Date ks = DateUtils.getDate(startTime,"yyyy-MM-dd");
+                Date js = DateUtils.getDateOfDay(DateUtils.getDate(endTime,"yyyy-MM-dd"),1);
+                String nameSite = pointMap.get(device.getMonitorPointId());
+                String name = device.getName();
+                Map<String, Object> timeValueMap = new LinkedHashMap<>();
+                Map<String,ArrayList<Double>> listMap = new HashMap<>();
+                int numCount = 0;
+                while (DateUtils.isTimeBefor(js,ks)){
+                    timeValueMap = new LinkedHashMap<>();//key���time���value������������json
+                    timeValueMap.put("������������",nameSite);
+                    timeValueMap.put("name",name);
+                    String c = DateUtils.dateToDateString(ks,"yyyy-MM-dd");
+                    timeValueMap.put("������",c);
+                    for (String sensor:sensorsList) {
+                        String k = c+"_"+device.getMac();
+                        Double num = 0d;
+                        if(map.containsKey(k)){
+                            Object o = map.get(k).get(sensor);
+                            num = Objects.nonNull(o)?Double.valueOf(o.toString()):0d;
+                            if(Objects.nonNull(num)){
+                                ArrayList<Double> doubleArrayList = Objects.isNull(listMap.get(numCount+"_"+sensorMap.get(sensor)))?new ArrayList<>():listMap.get(numCount+"_"+sensorMap.get(sensor));
+                                doubleArrayList.add(num);
+                                listMap.put(numCount+"_"+sensorMap.get(sensor),doubleArrayList);
+                            }
+                        }
+                        timeValueMap.put(sensorMap.get(sensor),num);
+                    }
+                     resultList.add(timeValueMap);
+                     ks = DateUtils.getDateOfDay(ks,1);
+                }
+                timeValueMap = new LinkedHashMap<>();
+                timeValueMap.put("������������",nameSite);
+                timeValueMap.put("name",name);
+                timeValueMap.put("������","���������");
+                for(int z = 0 ;z< sensorsList.size();z++){
+                    double rsAvg = 0L;
+                    String son = numCount+"_"+sensorMap.get(sensorsList.get(z));
+                    if(listMap.containsKey(numCount+"_"+sensorMap.get(sensorsList.get(z)))){
+                        Double ListAvg = listMap.get(numCount+"_"+sensorMap.get(sensorsList.get(z))).stream().collect(Collectors.averagingDouble(Double::doubleValue));
+                        rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+                    }
+                    timeValueMap.put(sensorMap.get(sensorsList.get(z)),rsAvg);
+                }
+                resultList.add(timeValueMap);
+                numCount++;
+            }
+
+        }else {
+            QueryWrapper<HistoryMonthly> HistoryMonthlyWrapper = new QueryWrapper<>();
+            HistoryMonthlyWrapper.in("mac",devices.stream().map(Device::getMac).collect(Collectors.toList()));
+            HistoryMonthlyWrapper.between("time",startTime,endTime);
+            List<HistoryMonthly> historyMonthlyList = historyMonthlyMapper.selectList(HistoryMonthlyWrapper);
+            Map<String,Map<String,Object>> map = resultMap(new ArrayList<>(),historyMonthlyList);
+            Map<Integer,String> pointMap = pointMap(devices);
+            Map<String,String> sensorMap = sensorMap(sensorsList);
+            for (Device device:devices) {
+                Date ks = DateUtils.getDate(startTime,"yyyy-MM");
+                Date js = DateUtils.addMonths(DateUtils.getDate(endTime,"yyyy-MM"),1);
+                while (DateUtils.isTimeBefor(js,ks)){
+                    Map<String, Object> timeValueMap = new LinkedHashMap<>();//key���time���value������������json
+                    timeValueMap.put("������������",pointMap.get(device.getMonitorPointId()));
+                    timeValueMap.put("name",device.getName());
+                    String c = DateUtils.dateToDateString(ks,"yyyy-MM");
+                    timeValueMap.put("������",c);
+                    for (String sensor:sensorsList) {
+                        String k = c+"_"+device.getMac();
+                        Double num = 0d;
+                        if(map.containsKey(k)){
+                            Object o = map.get(k).get(sensor);
+                            num = Objects.nonNull(o)?Double.valueOf(o.toString()):0d;
+                        }
+                        timeValueMap.put(sensorMap.get(sensor),num);
+                    }
+                    resultList.add(timeValueMap);
+                    ks = DateUtils.addMonths(ks,1);
+                }
+                /*for (String sensor:sensorsList) {
+                    Date ks = DateUtils.getDate(startTime,"yyyy-MM");
+                    Date js = DateUtils.addMonths(DateUtils.getDate(endTime,"yyyy-MM"),1);
+                    Map<String, Object> timeValueMap = new LinkedHashMap<>();//key���time���value������������json
+                    timeValueMap.put("������������",pointMap.get(device.getMonitorPointId()));
+                    timeValueMap.put("name",device.getName());
+                    timeValueMap.put("sensor",sensorMap.get(sensor));
+                    while (DateUtils.isTimeBefor(js,ks)){
+                        String c = DateUtils.dateToDateString(ks,"yyyy-MM");
+                        String k = c+"_"+device.getMac();
+                        if(map.containsKey(k)){
+                            Object o = map.get(k).get(sensor);
+                            timeValueMap.put(c,Objects.nonNull(o)?Double.valueOf(o.toString()):0);
+                        }else {
+                            timeValueMap.put(c,0);
+                        }
+                        ks = DateUtils.addMonths(ks,1);
+                    }
+                    resultList.add(timeValueMap);
+                }*/
+            }
+        }
+        return resultList;
+    }
+
+
     private Map<String,Map<String,Object>> resultMap(List<HistoryDaily> list ,List<HistoryMonthly> historyMonthlyList){
         Map<String,Map<String,Object>> map = new HashMap<>();
         for(HistoryDaily h : list){
@@ -333,6 +497,18 @@
 
         return map;
     }
+    private Map<String,Map<String,Object>> resultMap(List<HistoryHourly> list){
+        Map<String,Map<String,Object>> map = new HashMap<>();
+        for(HistoryHourly h : list){
+            String dateStr = DateUtils.dateToDateString( h.getTime(), DateUtils.yyyy_MM_dd_HH_EN)+"_"+h.getMac();
+            Map<String,Object> jsonMap = new HashMap<>();
+            JSONObject jsonObject = JSONObject.parseObject(h.getValue());
+            jsonMap = jsonObject.getInnerMap();
+            map.put(dateStr,jsonMap);
+        }
+
+        return map;
+    }
     private Map<String,String> sensorMap(List<String> sensorsList){
         Map<String,String> map = new HashMap<>();
         QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>();
diff --git a/screen-api/src/main/java/com/moral/api/utils/EasyExcelUtils.java b/screen-api/src/main/java/com/moral/api/utils/EasyExcelUtils.java
new file mode 100644
index 0000000..318a132
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/utils/EasyExcelUtils.java
@@ -0,0 +1,77 @@
+package com.moral.api.utils;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.fastjson.JSON;
+import com.google.common.net.HttpHeaders;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.*;
+
+public class EasyExcelUtils {
+    //������������������������
+    public void noModleWrite(@RequestBody NoModelWriteData data, HttpServletResponse response) throws IOException {
+        // ������������ ���������������������swagger ������������������������������������������������������postman
+        try {
+//            response.setContentType("application/vnd.ms-excel");
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            // ������URLEncoder.encode������������������������ ���������easyexcel������������
+            String fileName = URLEncoder.encode(data.getFileName(), "UTF-8");
+            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+            // ������������������������������
+            EasyExcel.write(response.getOutputStream()).head(head(data.getHeadMap())).sheet(data.getFileName()).doWrite(dataList(data.getDataList(), data.getDataStrMap()));
+        } catch (Exception e) {
+            // ������response
+            response.reset();
+            response.setContentType("application/json");
+            response.setCharacterEncoding("utf-8");
+            Map<String, String> map = new HashMap<String, String>();
+            map.put("status", "failure");
+            map.put("message", "������������������" + e.getMessage());
+            response.getWriter().println(JSON.toJSONString(map));
+        }
+    }
+
+    //���������������������
+    public <T> void simpleWrite(@RequestBody SimpleWriteData data,Class<T> clazz, HttpServletResponse response) throws IOException {
+        // ������������ ���������������������swagger ������������������������������������������������������postman
+//        response.setContentType("application/vnd.ms-excel");
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        // ������URLEncoder.encode������������������������ ���������easyexcel������������
+        String fileName = URLEncoder.encode(data.getFileName(), "UTF-8");
+        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+        EasyExcel.write(response.getOutputStream(), clazz).sheet(data.getFileName()).doWrite(data.getDataList());
+    }
+
+    //������������
+    private List<List<String>> head(String[] headMap) {
+        List<List<String>> list = new ArrayList<List<String>>();
+
+        for (String head : headMap) {
+            List<String> headList = new ArrayList<String>();
+            headList.add(head);
+            list.add(headList);
+        }
+        return list;
+    }
+
+    //���������������������������
+    private List<List<Object>> dataList(List<Map<String, Object>> dataList, String[] dataStrMap) {
+        List<List<Object>> list = new ArrayList<List<Object>>();
+        for (Map<String, Object> map : dataList) {
+            List<Object> data = new ArrayList<Object>();
+            for (int i = 0; i < dataStrMap.length; i++) {
+                data.add(map.get(dataStrMap[i]));
+            }
+            list.add(data);
+        }
+        return list;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/utils/NoModelWriteData.java b/screen-api/src/main/java/com/moral/api/utils/NoModelWriteData.java
new file mode 100644
index 0000000..a1cb923
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/utils/NoModelWriteData.java
@@ -0,0 +1,15 @@
+package com.moral.api.utils;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+@Data
+public class NoModelWriteData implements Serializable {
+    private String fileName;//���������
+    private String[] headMap;//������������
+    private String[] dataStrMap;//������������������������
+    private List<Map<String, Object>> dataList;//������������
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/utils/SimpleWriteData.java b/screen-api/src/main/java/com/moral/api/utils/SimpleWriteData.java
new file mode 100644
index 0000000..e59bec2
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/utils/SimpleWriteData.java
@@ -0,0 +1,11 @@
+package com.moral.api.utils;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+@Data
+public class SimpleWriteData implements Serializable {
+    private String fileName;//���������
+    private List<?> dataList;//������������
+}
diff --git a/screen-api/src/main/resources/application-qa.yml b/screen-api/src/main/resources/application-qa.yml
new file mode 100644
index 0000000..78bf4a3
--- /dev/null
+++ b/screen-api/src/main/resources/application-qa.yml
@@ -0,0 +1,136 @@
+server:
+  port: 8081
+  tomcat:
+    uri-encoding: UTF-8
+    #���������������
+    min-spare-threads: 500
+    #���������������
+    max-threads: 2500
+    #���������������
+    max-connections: 6500
+    #������������������������
+    accept-count: 1000
+spring:
+  profiles:
+    active: dev
+    include: bulletin, specialCity, announcement
+  application:
+    name: screen-api
+  redis:
+    host: r-bp1hez4g7rkqjswpaypd1.redis.rds.aliyuncs.com
+    port: 6379
+    password: moral_123456
+    timeout: 30000
+    jedis:
+      pool:
+        max-active: 256
+        max-wait: 30000
+        max-idle: 64
+        min-idle: 32
+    lettuce:
+      pool:
+        max-active: 256
+        max-idle: 64
+        max-wait: 30000
+        min-idle: 32
+  tokenRedis:
+    host: r-bp1hez4g7rkqjswpaypd1.redis.rds.aliyuncs.com
+    port: 6379
+    password: moral_123456
+    timeout: 30000
+    database: 15
+    pool:
+      max-active: 256
+      max-wait: 30000
+      max-idle: 64
+      min-idle: 32
+  datasource:
+    minIdle: 1
+    time-between-eviction-runs-millis: 60000
+    max-active: 20
+    test-while-idle: true
+    validation-query: select 'x'
+    filters: stat
+    type: com.alibaba.druid.pool.DruidDataSource
+    max-wait: 60000
+    url: jdbc:mysql://172.16.44.71:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    username: root
+    password: moral_123456
+    test-on-borrow: false
+    sql-script-encoding: utf-8
+    pool-prepared-statements: true
+    min-evictable-idle-time-millis: 300000
+    initial-size: 1
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    max-conn-lifetime-millis: 20
+    test-on-return: false
+
+  servlet:
+    multipart:
+      enabled: true
+      max-file-size: 10MB
+      max-request-size: 10MB
+
+mybatis-plus:
+  mapper-locations: classpath:mapper/*.xml
+  global-config:
+    db-config:
+      id-type: auto
+      field-strategy: NOT_EMPTY
+      db-type: MYSQL
+  configuration:
+    map-underscore-to-camel-case: true
+    call-setters-on-nulls: true
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+
+kafka:
+  listener:
+    # ���������������������������������������������������
+    ack-mode: manual_immediate
+  consumer:
+    auto:
+      offset:
+        reset: latest
+    # ��������������������������������������������������������� ���������*���������
+    concurrency: 3
+    # ������������������������������������������true������������������������������������������������������������������������false������������������������������
+    enable:
+      auto:
+        commit: false
+    servers: 47.99.145.48:9092,47.111.116.38:9092,47.111.124.159:9092
+    session:
+      timeout: 6000
+    zookeeper:
+      connect: 47.99.145.48:2181,47.111.116.38:2181,47.111.124.159:2181
+  producer:
+    batch:
+      size: 4096
+    buffer:
+      memory: 40960
+    linger: 1
+    # ������������������������������������������
+    retries: 0
+    servers: 47.99.145.48:9092,47.111.116.38:9092,47.111.124.159:9092
+  groupId:
+    second-data: SecondsDataGroup1
+    cruiser-data: cruiserDataGroup1
+mvc:
+  interceptor:
+    exclude:
+      - /login
+      - /swagger-ui.html
+      - /swagger-resources/**
+      - /swagger-ui.html/**
+      - /webjars/**
+      - /verificationCode/**
+      - /static/**
+      - /file/**
+
+
+AES:
+  KEY:
+    AD42F7787B035B7580000EF93BE20BAD
+TOKEN:
+  KEY:
+    foh3wi2ooghiCh5
+
diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java
index 25c78ae..2de5766 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -622,6 +622,22 @@
         return dateToDateString(now.getTime(), formatStr);
     }
 
+
+    /**
+     * ������������������day���������������(formatStr)������������
+     *
+     * @param date
+     * @param date,
+     * @param hours
+     * @return
+     */
+    public static Date getDateAddHour(Date date,int hours) {
+        Calendar now = Calendar.getInstance(TimeZone.getDefault());
+        now.setTime(date);
+        now.add(Calendar.HOUR_OF_DAY, hours);
+        return now.getTime();
+    }
+
     /**
      * @Description: ������������������day���������������
      * @Param: [date, day]
diff --git a/screen-job/src/main/java/com/moral/api/controller/PubController.java b/screen-job/src/main/java/com/moral/api/controller/PubController.java
new file mode 100644
index 0000000..7343dd5
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/controller/PubController.java
@@ -0,0 +1,64 @@
+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;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * @ClassName UserController
+ * @Description ������������
+ * @Author ���������
+ * @Date 2021/3/22 13:52
+ * @Version TODO
+ **/
+@Slf4j
+@Api(tags = {"������������"})
+@RestController
+@RequestMapping("/pub")
+public class PubController {
+    @Autowired
+    private HistoryDailyService historyDailyService;
+    @Autowired
+    private HistoryFiveMinutelyService historyFiveMinutelyService;
+
+    @GetMapping("insertHistoryDaily")
+    @ApiOperation(value = "���������������", notes = "���������������")
+    public ResultMessage insertHistoryDaily(String time) {
+        Date d = DateUtils.getDate(time,"yyyy-MM-dd");
+        historyDailyService.insertHistoryDaily(time);
+        int i = 0;
+        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");
+        System.out.println(DateUtils.dateToDateFullString(d));
+        //System.out.println( DateUtils.dateToDateFullString(DateUtils.getDateOfDay(d, -1), "yyyy-MM-dd"));
+
+
+
+    }
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java
index dccc6da..bda267f 100644
--- a/screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java
+++ b/screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java
@@ -6,6 +6,8 @@
 import com.moral.api.entity.HistoryDaily;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import javax.xml.crypto.Data;
+
 /**
  * <p>
  * ���������
@@ -17,6 +19,6 @@
 public interface HistoryDailyService extends IService<HistoryDaily> {
 
     //���������������
-    void insertHistoryDaily();
+    void insertHistoryDaily(String time);
 
 }
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java
index 2dc5a04..bc817e4 100644
--- a/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java
+++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java
@@ -17,7 +17,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
 
+import javax.xml.crypto.Data;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -49,9 +51,14 @@
 
     @Override
     @Transactional
-    public void insertHistoryDaily() {
+    public void insertHistoryDaily(String time) {
         String format = DateUtils.yyyy_MM_dd_EN;
-        Date now = new Date();
+        Date now;
+        if(StringUtils.isEmpty(time)){
+            now = new Date();
+        } else {
+            now = DateUtils.getDate(time,"yyyy-MM-dd");
+        }
         //���������������������
         Date start = DateUtils.dataToTimeStampTime(DateUtils.getDateOfDay(now, -1), format);
         //���������������������
@@ -60,7 +67,6 @@
         QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>();
         sensorQueryWrapper.select("code", "lower", "upper").eq("is_delete", Constants.NOT_DELETE);
         List<Sensor> sensors = sensorService.list(sensorQueryWrapper);
-
         //������������������������������
         Map<String, Object> prop = new HashMap<>();
         String timeUnits = DateUtils.dateToDateString(start, DateUtils.yyyyMM_EN);
@@ -70,6 +76,7 @@
         List<Map<String, Object>> dailyData = historyHourlyService.selectDailyData(prop);
 
         if (dailyData.size() == 0) {
+            System.out.println("������������������"+DateUtils.dateToDateString(start));
             return;
         }
 
@@ -179,8 +186,8 @@
             dataMap.put("value", JSONObject.toJSONString(jsonMap));
             insertData.add(dataMap);
         });
-
         //���������������
         historyDailyMapper.insertHistoryDaily(insertData);
+        System.out.println("������������");
     }
 }
diff --git a/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
index 199f6ae..9f33024 100644
--- a/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
+++ b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
@@ -12,6 +12,9 @@
 import com.xxl.job.core.context.XxlJobHelper;
 import com.xxl.job.core.handler.annotation.XxlJob;
 
+import javax.xml.crypto.Data;
+import java.util.Date;
+
 @Component
 public class HistoryTableInsertTask {
 
@@ -46,7 +49,8 @@
     @XxlJob("insertHistoryDaily")
     public ReturnT insertHistoryDaily() {
         try {
-            historyDailyService.insertHistoryDaily();
+            Date now = new Date();
+            historyDailyService.insertHistoryDaily(null);
         } catch (Exception e) {
             XxlJobHelper.log(e.getMessage());
             return ReturnT.FAIL;
diff --git a/screen-job/src/main/resources/application-qa.yml b/screen-job/src/main/resources/application-qa.yml
new file mode 100644
index 0000000..415d569
--- /dev/null
+++ b/screen-job/src/main/resources/application-qa.yml
@@ -0,0 +1,109 @@
+server:
+  port: 8083
+  tomcat:
+    uri-encoding: UTF-8
+    #���������������
+    min-spare-threads: 500
+    #���������������
+    max-threads: 2500
+    #���������������
+    max-connections: 6500
+    #������������������������
+    accept-count: 1000
+spring:
+  profiles:
+    active: dev
+    include:
+      moduleFormColumn
+  application:
+    name: screen-job
+  redis:
+    host: r-bp1hez4g7rkqjswpaypd1.redis.rds.aliyuncs.com
+    port: 6379
+    password: moral_123456
+    timeout: 30000
+    jedis:
+      pool:
+        max-active: 256
+        max-wait: 30000
+        max-idle: 64
+        min-idle: 32
+    lettuce:
+      pool:
+        max-active: 256
+        max-idle: 64
+        max-wait: 30000
+        min-idle: 32
+  tokenRedis:
+    host: r-bp1hez4g7rkqjswpaypd1.redis.rds.aliyuncs.com
+    port: 6379
+    password: moral_123456
+    timeout: 30000
+    database: 14
+    pool:
+      max-active: 256
+      max-wait: 30000
+      max-idle: 64
+      min-idle: 32
+
+  datasource:
+    minIdle: 1
+    time-between-eviction-runs-millis: 60000
+    max-active: 20
+    test-while-idle: true
+    validation-query: select 'x'
+    filters: stat
+    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
+    test-on-borrow: false
+    sql-script-encoding: utf-8
+    pool-prepared-statements: true
+    min-evictable-idle-time-millis: 300000
+    initial-size: 1
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    max-conn-lifetime-millis: 20
+    test-on-return: false
+
+mybatis-plus:
+  mapper-locations: classpath:mapper/*.xml
+  global-config:
+    db-config:
+      id-type: auto
+      field-strategy: NOT_EMPTY
+      db-type: MYSQL
+  configuration:
+    map-underscore-to-camel-case: true
+    call-setters-on-nulls: true
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+
+logging:
+  config: classpath:logback.xml
+
+xxl:
+  job:
+    admin:
+      # ���������������������������������������������������������������������������������������������������������������������������������"���������������������"���"������������������"
+      addresses: http://127.0.0.1:8090/xxl-job-admin
+
+    #���������������TOKEN������TOKEN���������������
+    accessToken:
+
+    #���������������,������������������
+    executor:
+      # ������������������������������������������������������������������������������������
+      #������������������"���������������������������������"���"���������������"���
+      #������������������������9999������������IP������������������������������IP������������������������������������IP������IP������������Host������������������������
+      #���������������������������������������������������������������������
+      appname: xxl-job-executor-sample-springboot
+      ip:
+      port: 9999
+      #���������������������������������������������������������������������������������������
+      logpath: /data/applogs/xxl-job/jobhandler
+      #������������������������������������������������������������������������������������������������������3���������������������-1���������������
+      logretentiondays: -1
+
+
+
diff --git a/screen-manage/src/main/java/com/moral/api/controller/PubController.java b/screen-manage/src/main/java/com/moral/api/controller/PubController.java
new file mode 100644
index 0000000..128bf4a
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/controller/PubController.java
@@ -0,0 +1,73 @@
+package com.moral.api.controller;
+
+import com.moral.api.pojo.dto.user.UserDTO;
+import com.moral.api.pojo.dto.user.UserQueryDTO;
+import com.moral.api.pojo.form.user.UserInsertForm;
+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;
+import com.moral.constant.ResultMessage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+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
+ * @Description ������������
+ * @Author ���������
+ * @Date 2021/3/22 13:52
+ * @Version TODO
+ **/
+@Slf4j
+@Api(tags = {"������������"})
+@RestController
+@RequestMapping("/pub")
+public class PubController {
+    @Autowired
+    private CacheUtils cacheUtils;
+    @Resource
+    private DeviceAdjustValueService deviceAdjustValueService;
+
+    @GetMapping("deviceAlarmInfo")
+    @ApiOperation(value = "������������", notes = "������������")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String")
+    })
+    public ResultMessage refreshDeviceAlarmInfo() {
+        cacheUtils.refreshDeviceAlarmInfo();
+
+        return new ResultMessage();
+    }
+
+    @GetMapping("sensor")
+    @ApiOperation(value = "sensor������", notes = "sensor������")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String")
+    })
+    public ResultMessage sensor() {
+        cacheUtils.refreshSensor();
+        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();
+    }
+
+}
diff --git a/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java b/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java
index d835587..d6661e4 100644
--- a/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java
+++ b/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java
@@ -18,9 +18,8 @@
 import com.moral.constant.KafkaConstants;
 import com.moral.constant.RedisConstants;
 
-/*
- * ���������������������
- * */
+
+
 @Component
 @Slf4j
 public class DeviceConsumer {
diff --git a/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java b/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java
index 5f292cf..4d6e791 100644
--- a/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java
+++ b/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java
@@ -89,7 +89,9 @@
         Map<String, SysDictData> unitMap = sysDictDataService.getDictDatasByType("unit");
         //���������������������������������������������
         Map<String,Device> result = new HashMap<>();
+        int i = 0;
         for (Device device : devices) {
+            System.out.println(">>>>>>>>>>>:"+(i++));
             Version version = device.getVersion();
             List<Sensor> sensors = version.getSensors();
             for (Sensor sensor : sensors) {
diff --git a/screen-manage/src/main/resources/application-qa.yml b/screen-manage/src/main/resources/application-qa.yml
new file mode 100644
index 0000000..57fe931
--- /dev/null
+++ b/screen-manage/src/main/resources/application-qa.yml
@@ -0,0 +1,129 @@
+server:
+  port: 8082
+  tomcat:
+    uri-encoding: UTF-8
+    #���������������
+    min-spare-threads: 500
+    #���������������
+    max-threads: 2500
+    #���������������
+    max-connections: 6500
+    #������������������������
+    accept-count: 1000
+spring:
+  profiles:
+    active: dev
+    include:
+      moduleFormColumn
+  application:
+    name: screen-manage
+  redis:
+      host: r-bp1hez4g7rkqjswpaypd1.redis.rds.aliyuncs.com
+      port: 6379
+      password: moral_123456
+      timeout: 30000
+      jedis:
+        pool:
+          max-active: 256
+          max-wait: 30000
+          max-idle: 64
+          min-idle: 32
+      lettuce:
+        pool:
+          max-active: 256
+          max-idle: 64
+          max-wait: 30000
+          min-idle: 32
+  tokenRedis:
+    host: r-bp1hez4g7rkqjswpaypd1.redis.rds.aliyuncs.com
+    port: 6379
+    password: moral_123456
+    timeout: 30000
+    database: 14
+    pool:
+      max-active: 256
+      max-wait: 30000
+      max-idle: 64
+      min-idle: 32
+
+  datasource:
+    minIdle: 1
+    time-between-eviction-runs-millis: 60000
+    max-active: 20
+    test-while-idle: true
+    validation-query: select 'x'
+    filters: stat
+    type: com.alibaba.druid.pool.DruidDataSource
+    max-wait: 60000
+    url: jdbc:mysql://172.16.44.71:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    username: root
+    password: moral_123456
+    test-on-borrow: false
+    sql-script-encoding: utf-8
+    pool-prepared-statements: true
+    min-evictable-idle-time-millis: 300000
+    initial-size: 1
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    max-conn-lifetime-millis: 20
+    test-on-return: false
+
+mybatis-plus:
+  mapper-locations: classpath:mapper/*.xml
+  global-config:
+    db-config:
+      id-type: auto
+      field-strategy: NOT_EMPTY
+      db-type: MYSQL
+  configuration:
+     map-underscore-to-camel-case: true
+     call-setters-on-nulls: true
+     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+
+kafka:
+  listener:
+    ack-mode: manual_immediate
+  consumer:
+    auto:
+      commit:
+        interval: 100
+      offset:
+        reset: latest
+    concurrency: 3
+    enable:
+      auto:
+        commit: false
+    servers: 172.16.44.65:9092,172.16.44.67:9092,172.16.44.66:9092
+    session:
+      timeout: 6000
+    zookeeper:
+      connect: 172.16.44.65:2181,172.16.44.67:2181,172.16.44.66:2181
+  producer:
+    batch:
+      size: 4096
+    buffer:
+      memory: 40960
+    linger: 1
+    retries: 0
+    servers: 172.16.44.65:9092,172.16.44.67:9092,172.16.44.66:9092
+  groupId:
+    insert: Dev_insert
+    state: Dev_state
+mvc:
+  interceptor:
+    exclude:
+      - /login
+      - /swagger-ui.html
+      - /swagger-resources/**
+      - /webjars/**
+      - /verificationCode/**
+      - /manageLog/**
+      - /dataReplication/**
+
+AES:
+  KEY:
+    AD42F7787B035B7580000EF93BE20BAD
+TOKEN:
+  KEY:
+    foh3wi2ooghiCh5
+
+

--
Gitblit v1.8.0