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