From fdc8e1e781851904b05f234523f372c8c1098b69 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Thu, 01 Jul 2021 11:42:45 +0800 Subject: [PATCH] 定时任务CO.O3算法 --- screen-common/src/main/java/com/moral/util/DateUtils.java | 8 screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java | 28 ++ screen-common/src/main/java/com/moral/constant/KafkaConstants.java | 11 screen-job/src/main/resources/mapper/HistoryWeeklyMapper.xml | 20 ++ screen-job/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java | 147 ++++++++++++++ screen-job/src/main/java/com/moral/api/service/HistoryWeeklyService.java | 18 + screen-job/src/main/java/com/moral/api/mapper/HistoryWeeklyMapper.java | 21 ++ screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java | 6 screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java | 57 ++--- screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java | 26 + screen-job/src/main/java/com/moral/api/entity/HistoryWeekly.java | 44 ++++ screen-common/src/main/java/com/moral/constant/Constants.java | 13 + screen-common/src/main/java/com/moral/util/AmendUtils.java | 168 ++++++++++++++++ 13 files changed, 511 insertions(+), 56 deletions(-) diff --git a/screen-common/src/main/java/com/moral/constant/Constants.java b/screen-common/src/main/java/com/moral/constant/Constants.java index 75ce9a3..d20f4af 100644 --- a/screen-common/src/main/java/com/moral/constant/Constants.java +++ b/screen-common/src/main/java/com/moral/constant/Constants.java @@ -139,5 +139,18 @@ * */ public static final String SENSOR_CODE_TEMP = "a01001"; + /* + * ������code + * */ + public static final String SENSOR_CODE_WIND_DIR = "a01008"; + /* + * ������code + * */ + public static final String SENSOR_CODE_WIND_SPEED = "a01008"; + + /* + * ������������code + * */ + public static final String SENSOR_CODE_CO= "a21005"; } diff --git a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java index 83edd76..2b3a9f2 100644 --- a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java +++ b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java @@ -18,12 +18,17 @@ public static final String TOPIC_SECOND = "second_data"; /** - * ������������������������������������������ + * ��������������������� */ - public static final String GROUP_ID_INSERT = "insert"; + public static final String GROUP_HOUR = "hour"; + + /** + * ��������������������� + */ + public static final String GROUP_MINUTE = "minute"; /** * ��������������������������������� */ - public static final String GROUP_ID_STATE = "state"; + public static final String GROUP_STATE = "state"; } diff --git a/screen-common/src/main/java/com/moral/util/AmendUtils.java b/screen-common/src/main/java/com/moral/util/AmendUtils.java new file mode 100644 index 0000000..fde9768 --- /dev/null +++ b/screen-common/src/main/java/com/moral/util/AmendUtils.java @@ -0,0 +1,168 @@ +package com.moral.util; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.JSONObject; +import com.moral.constant.Constants; + +public class AmendUtils { + /** + * @param value ��������������������������� + * @param digit ������������������ + * @return ��������������������������������������� + */ + public static double sciCal(double value, int digit) { + String result; + try { + double ratio = Math.pow(10, digit); + double _num = value * ratio; + double mod = _num % 1; + double integer = Math.floor(_num); + double returnNum; + if (mod > 0.5) { + returnNum = (integer + 1) / ratio; + } else if (mod < 0.5) { + returnNum = integer / ratio; + } else { + returnNum = (integer % 2 == 0 ? integer : integer + 1) / ratio; + } + BigDecimal bg = new BigDecimal(returnNum); + result = bg.setScale(digit, BigDecimal.ROUND_HALF_UP).toString(); + } catch (RuntimeException e) { + throw e; + } + return Double.parseDouble(result); + } + + /** + * @param list ���������[value={"O3"���12},.....] + * @return ������������������������������ + */ + public static Object getO3AvgOfDay(List<Map<String, Object>> list) { + double max; + List<Double> avgs = new ArrayList<>(); + for (int i = 8; i <= 24; i++) { + List<Double> data = new ArrayList<>(); + for (Map<String, Object> dataMap : list) { + Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); + Double o3 = Double.parseDouble(dataValue.get(Constants.SENSOR_CODE_O3).toString()); + int hour = DateUtils.getHour((Date) dataMap.get("time")); + if (hour == 0) { + hour = 24; + } + if (hour <= i && hour >= i - 7) { + data.add(o3); + } + } + if (data.size() < 6) { + continue; + } + double average = data.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage(); + avgs.add(average); + } + max = avgs.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getMax(); + if (avgs.size() < 14) { + if (max < 160d) { + return null; + } + } + return sciCal(max, 4); + } + + /** + * @param list ���������[value={"������"���12������������������200},.....] + * @return ��������������������������� + */ + public static Object getWindDirAvg(List<Map<String, Object>> list) { + double avgDir; + double sumSin = 0d; + double sumCos = 0d; + int size = 0; + for (Map<String, Object> map : list) { + Map<String, Object> dataValue = JSONObject.parseObject((String) map.get("value"), Map.class); + Object wind = dataValue.get(Constants.SENSOR_CODE_WIND_DIR); + Object speed = dataValue.get(Constants.SENSOR_CODE_WIND_SPEED); + if (wind == null || speed == null) { + continue; + } + size++; + int windDir = Integer.parseInt(wind.toString()); + double windSpeed = Double.parseDouble(speed.toString()); + double sin = windSpeed * Math.sin(windDir / 180d) * Math.PI; + double cos = windSpeed * Math.cos(windDir / 180d) * Math.PI; + sumSin += sin; + sumCos += cos; + } + if (size == 0) { + return null; + } + double avgSin = sumSin / size; + double avgCos = sumCos / size; + if (avgSin > 0 && avgCos > 0) { + avgDir = Math.atan(avgSin / avgCos) * 180 / Math.PI; + } else if ((avgSin > 0 && avgCos < 0) || (avgSin < 0 && avgCos < 0)) { + avgDir = Math.atan(avgSin / avgCos) * 180 / Math.PI + 180; + } else { + avgDir = Math.atan(avgSin / avgCos) * 180 / Math.PI + 360; + } + return sciCal(avgDir, 4); + } + + /** + * @param data ��������������������������� + * @param p ������������������95������������p=95 + * @return ��������������������������� + */ + public static double percentile(List<Double> data, int p) { + int n = data.size(); + Collections.sort(data); + double v = n / (100 / p); + System.out.println(n % (100 / p)); + if (n % (100 / p) == 0) { + if (v == n) { + return data.get(n - 1); + } + return (data.get((int) v - 1) + data.get((int) v)) / 2; + } + return sciCal(data.get((int) v), 4); + } + + public static Object getCOAvgOfWeek(List<Map<String, Object>> list) { + List<Double> data = new ArrayList<>(); + for (Map<String, Object> dataMap : list) { + Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); + Object o = dataValue.get(Constants.SENSOR_CODE_CO); + if (o == null) { + continue; + } + Double co = Double.parseDouble(o.toString()); + data.add(co); + } + if (data.size() == 0) { + return null; + } + return percentile(data, 95); + } + + public static Object getO3AvgOfWeek(List<Map<String, Object>> list) { + List<Double> data = new ArrayList<>(); + for (Map<String, Object> dataMap : list) { + Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); + Object o = dataValue.get(Constants.SENSOR_CODE_O3); + if (o == null) { + continue; + } + Double o3 = Double.parseDouble(o.toString()); + data.add(o3); + } + if (data.size() == 0) { + return null; + } + return percentile(data, 90); + } +} 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 495e929..1542852 100644 --- a/screen-common/src/main/java/com/moral/util/DateUtils.java +++ b/screen-common/src/main/java/com/moral/util/DateUtils.java @@ -1310,4 +1310,12 @@ throw new RuntimeException(e); } } + + //��������������� + public static Date geLastWeekMonday() { + Calendar cal = Calendar.getInstance(); + cal.setTime(getDate(getMondayOfThisWeek(),yyyy_MM_dd_EN) ); + cal.add(Calendar.DATE, -7); + return cal.getTime(); + } } diff --git a/screen-job/src/main/java/com/moral/api/entity/HistoryWeekly.java b/screen-job/src/main/java/com/moral/api/entity/HistoryWeekly.java new file mode 100644 index 0000000..85e065c --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/entity/HistoryWeekly.java @@ -0,0 +1,44 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import java.time.LocalDateTime; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ��������� + * </p> + * + * @author moral + * @since 2021-06-30 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class HistoryWeekly extends Model<HistoryWeekly> { + + private static final long serialVersionUID = 1L; + + /** + * ������mac + */ + private String mac; + + /** + * ������ + */ + private LocalDateTime time; + + /** + * ������ + */ + private String value; + + + @Override + protected Serializable pkVal() { + return null; + } + +} diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistoryWeeklyMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistoryWeeklyMapper.java new file mode 100644 index 0000000..2e3aef9 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/HistoryWeeklyMapper.java @@ -0,0 +1,21 @@ +package com.moral.api.mapper; + +import java.util.List; +import java.util.Map; + +import com.moral.api.entity.HistoryWeekly; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ��������� Mapper ������ + * </p> + * + * @author moral + * @since 2021-06-30 + */ +public interface HistoryWeeklyMapper extends BaseMapper<HistoryWeekly> { + + void insertHistoryWeekly(List<Map<String,Object>> list); + +} diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryWeeklyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryWeeklyService.java new file mode 100644 index 0000000..506c43a --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/HistoryWeeklyService.java @@ -0,0 +1,18 @@ +package com.moral.api.service; + +import com.moral.api.entity.HistoryWeekly; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * ��������� ��������� + * </p> + * + * @author moral + * @since 2021-06-30 + */ +public interface HistoryWeeklyService extends IService<HistoryWeekly> { + + void insertHistoryWeekly(); + +} 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 eec1a25..40a1e1a 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 @@ -11,6 +11,7 @@ import com.moral.api.service.HistoryHourlyService; import com.moral.api.service.SensorService; import com.moral.constant.Constants; +import com.moral.util.AmendUtils; import com.moral.util.DateUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -46,10 +47,8 @@ @Autowired private HistoryHourlyService historyHourlyService; - @Override public void insertHistoryDaily() { - String format = DateUtils.yyyy_MM_dd_EN; Date now = new Date(); //������������ @@ -82,14 +81,20 @@ List<Map<String, Object>> tempValue = new ArrayList<>(value); value.removeIf(map -> ((Date) map.get("time")).getTime() == start.getTime()); - //������8��������������� - double o3AvgOfDay = getO3AvgOfDay(value); - jsonMap.put(Constants.SENSOR_CODE_O3, o3AvgOfDay); - System.out.println("������==" + value); - - //��������������������������� + //������8������������������������������������ + Object o3AvgOfDay = AmendUtils.getO3AvgOfDay(value); + if (o3AvgOfDay != null) { + jsonMap.put(Constants.SENSOR_CODE_O3, o3AvgOfDay); + } + //������������������������������������ tempValue.removeIf(map -> ((Date) map.get("time")).getTime() == end.getTime()); - System.out.println("������������==" + tempValue); + + //��������������������������� + Object windDirAvg = AmendUtils.getWindDirAvg(value); + if (windDirAvg != null) { + jsonMap.put(Constants.SENSOR_CODE_WIND_DIR, windDirAvg); + } + sensorCodes.forEach(sensorCode -> { OptionalDouble optionalDouble = tempValue.parallelStream() .flatMapToDouble(v -> { @@ -104,41 +109,19 @@ return DoubleStream.of(Double.parseDouble(sensorValue.toString())); }).average(); if (optionalDouble.isPresent()) { - jsonMap.put(sensorCode.toString(), Double.parseDouble(String.format("%.4f", optionalDouble.getAsDouble()))); + //��������������������� + double sciCal = AmendUtils.sciCal(optionalDouble.getAsDouble(), 4); + jsonMap.put(sensorCode.toString(), sciCal); } }); dataMap.put("value", JSONObject.toJSONString(jsonMap)); insertData.add(dataMap); }); - //������8��������������� - System.out.println(insertData); + //��������������� historyDailyMapper.insertHistoryDaily(insertData); } - //������8��������������� - private double getO3AvgOfDay(List<Map<String, Object>> list) { - double max = 0d; - for (int i = 8; i <= 24; i++) { - List<Double> data = new ArrayList<>(); - for (Map<String, Object> dataMap : list) { - Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); - Double o3 = Double.parseDouble(dataValue.get(Constants.SENSOR_CODE_O3).toString()); - int hour = DateUtils.getHour((Date) dataMap.get("time")); - if (hour == 0) { - hour = 24; - } - if (hour <= i && hour >= i - 7) { - data.add(o3); - } - } - double average = data.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage(); - if (max < average) { - max = average; - } - } - return Double.parseDouble(String.format("%.4f", max)); - } public static void main(String[] args) { List<Integer> list = new ArrayList<>(); @@ -148,7 +131,7 @@ list.add(18);//4 list.add(16);//5 list.add(22);//6 - list.add(4);//8 + list.add(4);//7 list.add(12); list.add(28); list.add(26); @@ -165,7 +148,7 @@ list.add(12); list.add(10); list.add(5); - list.add(88); + list.add(88);//24 Integer max = 0; for (int i = 7; i < list.size(); i++) { Integer sum = 0; diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java index e762167..1b3c45d 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java @@ -21,6 +21,7 @@ import com.moral.api.service.HistoryMinutelyService; import com.moral.api.service.SensorService; import com.moral.constant.Constants; +import com.moral.util.AmendUtils; import com.moral.util.DateUtils; @Service @@ -72,9 +73,17 @@ data.forEach((key, value) -> { Map<String, Object> dataMap = new HashMap<>(); - Map<String, Object> jsonMap = new HashMap<>(); dataMap.put("mac", key); dataMap.put("time", end); + Map<String, Object> jsonMap = new HashMap<>(); + + //��������������������������� + Object windDirAvg = AmendUtils.getWindDirAvg(value); + if (windDirAvg != null) { + jsonMap.put(Constants.SENSOR_CODE_WIND_DIR, windDirAvg); + } + + //������������������������������������ sensorCodes.forEach(sensorCode -> { OptionalDouble optionalDouble = value.parallelStream() .flatMapToDouble(v -> { @@ -83,10 +92,16 @@ if (ObjectUtils.isEmpty(sensorValue)) { return null; } + //������������������ + if (Constants.SENSOR_CODE_WIND_DIR.equals(sensorCode)) { + return null; + } return DoubleStream.of(Double.parseDouble(sensorValue.toString())); }).average(); if (optionalDouble.isPresent()) { - jsonMap.put(sensorCode.toString(), Double.parseDouble(String.format("%.4f", optionalDouble.getAsDouble()))); + //��������������������� + double sciCal = AmendUtils.sciCal(optionalDouble.getAsDouble(), 4); + jsonMap.put(sensorCode.toString(), sciCal); } }); dataMap.put("value", JSONObject.toJSONString(jsonMap)); @@ -95,11 +110,13 @@ //5��������������� String insertTimeUnits = DateUtils.dateToDateString(now, DateUtils.yyyyMM_EN); + //��������������� historyFiveMinutelyMapper.insertHistoryFiveMinutely(insertData, insertTimeUnits); } + public static void main(String[] args) { - //������������ + /* //������������ List<Map<String, Object>> list = new ArrayList<>(); Map<String, Object> map1 = new HashMap<>(); map1.put("mac", "p5dnd1234567"); @@ -154,6 +171,9 @@ }); - System.out.println("666==" + insertData); + System.out.println("666==" + insertData);*/ + + double a = 5.5d; + System.out.println(Math.round(a)); } } diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java new file mode 100644 index 0000000..95bf167 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java @@ -0,0 +1,147 @@ +package com.moral.api.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.moral.api.entity.HistoryDaily; +import com.moral.api.entity.HistoryWeekly; +import com.moral.api.entity.Sensor; +import com.moral.api.mapper.HistoryWeeklyMapper; +import com.moral.api.service.HistoryDailyService; +import com.moral.api.service.HistoryWeeklyService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.moral.api.service.SensorService; +import com.moral.constant.Constants; +import com.moral.util.AmendUtils; +import com.moral.util.DateUtils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.OptionalDouble; +import java.util.stream.Collectors; +import java.util.stream.DoubleStream; + +/** + * <p> + * ��������� ��������������� + * </p> + * + * @author moral + * @since 2021-06-30 + */ +@Service +public class HistoryWeeklyServiceImpl extends ServiceImpl<HistoryWeeklyMapper, HistoryWeekly> implements HistoryWeeklyService { + + @Autowired + private HistoryWeeklyMapper historyWeeklyMapper; + + @Autowired + private SensorService sensorService; + + @Autowired + private HistoryDailyService historyDailyService; + + @Override + public void insertHistoryWeekly() { + Date now = new Date(); + //������������������������ + Date start = DateUtils.geLastWeekMonday(); + //������ + QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); + sensorQueryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE); + List<Object> sensorCodes = sensorService.listObjs(sensorQueryWrapper); + + //��������������������������� + QueryWrapper<HistoryDaily> historyDailyQueryWrapper = new QueryWrapper<>(); + historyDailyQueryWrapper.ge("time", DateUtils.dateToDateString(start)).lt("time", DateUtils.dateToDateString(now)); + List<Map<String, Object>> weeklyData = historyDailyService.listMaps(historyDailyQueryWrapper); + + //���mac������ + Map<String, List<Map<String, Object>>> data = weeklyData.parallelStream().collect(Collectors.groupingBy(o -> (String) o.get("mac"))); + + //��������������������������� + List<Map<String, Object>> insertData = new ArrayList<>(); + + data.forEach((key, value) -> { + Map<String, Object> dataMap = new HashMap<>(); + Map<String, Object> jsonMap = new HashMap<>(); + dataMap.put("mac", key); + dataMap.put("time", start); + + //��������������������������� + Object windDirAvg = AmendUtils.getWindDirAvg(value); + if (windDirAvg != null) { + jsonMap.put(Constants.SENSOR_CODE_WIND_DIR, windDirAvg); + } + + //CO 95������������������������ + Object coAvg = AmendUtils.getCOAvgOfWeek(value); + if (coAvg != null) { + jsonMap.put(Constants.SENSOR_CODE_CO, coAvg); + } + + //CO 90������������������������ + Object o3Avg = AmendUtils.getO3AvgOfWeek(value); + if (o3Avg != null) { + jsonMap.put(Constants.SENSOR_CODE_O3, o3Avg); + } + + sensorCodes.forEach(sensorCode -> { + OptionalDouble optionalDouble = value.parallelStream() + .flatMapToDouble(v -> { + Map<String, Object> dataValue = JSONObject.parseObject((String) v.get("value"), Map.class); + Object sensorValue = dataValue.get(sensorCode.toString()); + if (ObjectUtils.isEmpty(sensorValue)) { + return null; + } + //������������������ + if (Constants.SENSOR_CODE_WIND_DIR.equals(sensorCode)) { + return null; + } + //CO������������ + if (Constants.SENSOR_CODE_CO.equals(sensorCode)) { + return null; + } + //O3������������ + if (Constants.SENSOR_CODE_O3.equals(sensorCode)) { + return null; + } + return DoubleStream.of(Double.parseDouble(sensorValue.toString())); + }).average(); + if (optionalDouble.isPresent()) { + //��������������������� + double sciCal = AmendUtils.sciCal(optionalDouble.getAsDouble(), 4); + jsonMap.put(sensorCode.toString(), sciCal); + } + }); + dataMap.put("value", JSONObject.toJSONString(jsonMap)); + insertData.add(dataMap); + }); + + //��������������� + historyWeeklyMapper.insertHistoryWeekly(insertData); + } + + public static void main(String[] args) { + List<Double> data = new ArrayList<>(); + data.add(7d); + data.add(15d); + data.add(36d); + data.add(39d); + data.add(40d); + data.add(41d); + data.add(20d); + data.add(18d); + System.out.println(data); + System.out.println(AmendUtils.percentile(data, 95)); + + } + + +} 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 fcc205c..88b63a2 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 @@ -3,16 +3,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.alibaba.fastjson.JSON; -import com.moral.api.entity.HistoryDaily; import com.moral.api.service.HistoryDailyService; import com.moral.api.service.HistoryFiveMinutelyService; +import com.moral.api.service.HistoryWeeklyService; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; @@ -21,10 +14,13 @@ public class HistoryTableInsertTask { @Autowired + private HistoryFiveMinutelyService historyFiveMinutelyService; + + @Autowired private HistoryDailyService historyDailyService; @Autowired - private HistoryFiveMinutelyService historyFiveMinutelyService; + private HistoryWeeklyService historyWeeklyService; //5������������������ @XxlJob("insertHistoryFiveMinutely") @@ -49,4 +45,16 @@ } return ReturnT.SUCCESS; } + + //��������������� + @XxlJob("insertHistoryWeekly") + public ReturnT insertHistoryWeekly() { + try { + historyWeeklyService.insertHistoryWeekly(); + } catch (Exception e) { + XxlJobHelper.log(e.getMessage()); + return ReturnT.FAIL; + } + return ReturnT.SUCCESS; + } } diff --git a/screen-job/src/main/resources/mapper/HistoryWeeklyMapper.xml b/screen-job/src/main/resources/mapper/HistoryWeeklyMapper.xml new file mode 100644 index 0000000..c47833f --- /dev/null +++ b/screen-job/src/main/resources/mapper/HistoryWeeklyMapper.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.moral.api.mapper.HistoryWeeklyMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.HistoryWeekly"> + <result column="mac" property="mac"/> + <result column="time" property="time"/> + <result column="value" property="value"/> + </resultMap> + + <insert id="insertHistoryWeekly"> + INSERT INTO history_weekly + VALUES + <foreach collection="list" item="item" separator=","> + (#{item.mac},#{item.time},#{item.value}) + </foreach> + </insert> + +</mapper> \ No newline at end of file diff --git a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java index 94ec2f1..8b185e0 100644 --- a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java +++ b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java @@ -37,7 +37,7 @@ private RedisTemplate redisTemplate; //������������ - @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, groupId = KafkaConstants.GROUP_ID_INSERT, containerFactory = "kafkaListenerContainerFactory") + @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, groupId = KafkaConstants.GROUP_MINUTE, containerFactory = "kafkaListenerContainerFactory") public void listenMinute(ConsumerRecord<String, String> record, Acknowledgment ack) { String msg = record.value(); try { @@ -68,7 +68,7 @@ } //������������ - @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, groupId = KafkaConstants.GROUP_ID_INSERT, containerFactory = "kafkaListenerContainerFactory") + @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, groupId = KafkaConstants.GROUP_HOUR, containerFactory = "kafkaListenerContainerFactory") public void listenHour(ConsumerRecord<String, String> record, Acknowledgment ack) { String msg = record.value(); try { @@ -99,7 +99,7 @@ } //������������������������������������������������������ - @KafkaListener(topics = KafkaConstants.TOPIC_SECOND, groupId = KafkaConstants.GROUP_ID_STATE, containerFactory = "kafkaListenerContainerFactory") + @KafkaListener(topics = KafkaConstants.TOPIC_SECOND, groupId = KafkaConstants.GROUP_STATE, containerFactory = "kafkaListenerContainerFactory") public void listenSecond(ConsumerRecord<String, String> record, Acknowledgment ack) { String msg = record.value(); try { -- Gitblit v1.8.0