From 28670b2f0240a33c982818462d4e716fac0c45c2 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Thu, 01 Jul 2021 16:47:42 +0800 Subject: [PATCH] 周数据统计 --- screen-common/src/main/java/com/moral/util/DateUtils.java | 10 + screen-job/src/main/java/com/moral/api/entity/Sensor.java | 1 screen-job/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java | 2 screen-job/src/main/java/com/moral/api/entity/HistoryMonthly.java | 45 +++++++++ screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java | 16 +++ screen-job/src/main/java/com/moral/api/entity/HistoryWeekly.java | 5 screen-job/src/main/java/com/moral/api/mapper/HistoryMonthlyMapper.java | 21 ++++ screen-job/src/main/resources/mapper/HistoryMonthlyMapper.xml | 20 ++++ screen-job/src/main/java/com/moral/api/service/HistoryMonthlyService.java | 18 +++ screen-job/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java | 133 ++++++++++++++++++++++++++ 10 files changed, 266 insertions(+), 5 deletions(-) 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 1542852..99a7243 100644 --- a/screen-common/src/main/java/com/moral/util/DateUtils.java +++ b/screen-common/src/main/java/com/moral/util/DateUtils.java @@ -1314,8 +1314,16 @@ //��������������� public static Date geLastWeekMonday() { Calendar cal = Calendar.getInstance(); - cal.setTime(getDate(getMondayOfThisWeek(),yyyy_MM_dd_EN) ); + cal.setTime(getDate(getMondayOfThisWeek(), yyyy_MM_dd_EN)); cal.add(Calendar.DATE, -7); return cal.getTime(); } + + //��������������������� + public static Date getFirstDayOfLastMonth() { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MONTH, -1); + calendar.set(Calendar.DAY_OF_MONTH, 1); + return getDate(dateToDateString(calendar.getTime(), yyyy_MM_dd_EN)); + } } diff --git a/screen-job/src/main/java/com/moral/api/entity/HistoryMonthly.java b/screen-job/src/main/java/com/moral/api/entity/HistoryMonthly.java new file mode 100644 index 0000000..639af37 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/entity/HistoryMonthly.java @@ -0,0 +1,45 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ��������� + * </p> + * + * @author moral + * @since 2021-07-01 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class HistoryMonthly extends Model<HistoryMonthly> { + + private static final long serialVersionUID = 1L; + + /** + * ������mac + */ + private String mac; + + /** + * ������ + */ + private Date time; + + /** + * ������ + */ + private String value; + + + @Override + protected Serializable pkVal() { + return null; + } + +} 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 index 85e065c..e083bd6 100644 --- a/screen-job/src/main/java/com/moral/api/entity/HistoryWeekly.java +++ b/screen-job/src/main/java/com/moral/api/entity/HistoryWeekly.java @@ -1,8 +1,9 @@ package com.moral.api.entity; import com.baomidou.mybatisplus.extension.activerecord.Model; -import java.time.LocalDateTime; import java.io.Serializable; +import java.util.Date; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -28,7 +29,7 @@ /** * ������ */ - private LocalDateTime time; + private Date time; /** * ������ diff --git a/screen-job/src/main/java/com/moral/api/entity/Sensor.java b/screen-job/src/main/java/com/moral/api/entity/Sensor.java index d53e725..aa2e3ec 100644 --- a/screen-job/src/main/java/com/moral/api/entity/Sensor.java +++ b/screen-job/src/main/java/com/moral/api/entity/Sensor.java @@ -3,7 +3,6 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.baomidou.mybatisplus.annotation.TableId; -import java.time.LocalDateTime; import java.io.Serializable; import java.util.Date; diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistoryMonthlyMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistoryMonthlyMapper.java new file mode 100644 index 0000000..304188b --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/HistoryMonthlyMapper.java @@ -0,0 +1,21 @@ +package com.moral.api.mapper; + +import java.util.List; +import java.util.Map; + +import com.moral.api.entity.HistoryMonthly; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ��������� Mapper ������ + * </p> + * + * @author moral + * @since 2021-07-01 + */ +public interface HistoryMonthlyMapper extends BaseMapper<HistoryMonthly> { + + void insertHistoryMonthly(List<Map<String,Object>> list); + +} diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryMonthlyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryMonthlyService.java new file mode 100644 index 0000000..027d2fa --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/HistoryMonthlyService.java @@ -0,0 +1,18 @@ +package com.moral.api.service; + +import com.moral.api.entity.HistoryMonthly; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * ��������� ��������� + * </p> + * + * @author moral + * @since 2021-07-01 + */ +public interface HistoryMonthlyService extends IService<HistoryMonthly> { + + void insertHistoryMonthly(); + +} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java new file mode 100644 index 0000000..07a109b --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java @@ -0,0 +1,133 @@ +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.HistoryMonthly; +import com.moral.api.entity.Sensor; +import com.moral.api.mapper.HistoryMonthlyMapper; +import com.moral.api.service.HistoryDailyService; +import com.moral.api.service.HistoryMonthlyService; +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-07-01 + */ +@Service +public class HistoryMonthlyServiceImpl extends ServiceImpl<HistoryMonthlyMapper, HistoryMonthly> implements HistoryMonthlyService { + + @Autowired + private HistoryMonthlyMapper historyMonthlyMapper; + + @Autowired + private SensorService sensorService; + + @Autowired + private HistoryDailyService historyDailyService; + + @Override + public void insertHistoryMonthly() { + + Date now = new Date(); + //���������������������1��� + Date start = DateUtils.getFirstDayOfLastMonth(); + //������ + 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); + } + + //O3 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); + }); + + //��������������� + historyMonthlyMapper.insertHistoryMonthly(insertData); + + + } +} 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 index 95bf167..b815c00 100644 --- 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 @@ -86,7 +86,7 @@ jsonMap.put(Constants.SENSOR_CODE_CO, coAvg); } - //CO 90������������������������ + //O3 90������������������������ Object o3Avg = AmendUtils.getO3AvgOfWeek(value); if (o3Avg != null) { jsonMap.put(Constants.SENSOR_CODE_O3, o3Avg); 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 88b63a2..8a272b3 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 @@ -5,6 +5,7 @@ import com.moral.api.service.HistoryDailyService; import com.moral.api.service.HistoryFiveMinutelyService; +import com.moral.api.service.HistoryMonthlyService; import com.moral.api.service.HistoryWeeklyService; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.context.XxlJobHelper; @@ -21,6 +22,9 @@ @Autowired private HistoryWeeklyService historyWeeklyService; + + @Autowired + private HistoryMonthlyService historyMonthlyService; //5������������������ @XxlJob("insertHistoryFiveMinutely") @@ -57,4 +61,16 @@ } return ReturnT.SUCCESS; } + + //��������������� + @XxlJob("insertHistoryMonthly") + public ReturnT insertHistoryMonthly() { + try { + historyMonthlyService.insertHistoryMonthly(); + } catch (Exception e) { + XxlJobHelper.log(e.getMessage()); + return ReturnT.FAIL; + } + return ReturnT.SUCCESS; + } } diff --git a/screen-job/src/main/resources/mapper/HistoryMonthlyMapper.xml b/screen-job/src/main/resources/mapper/HistoryMonthlyMapper.xml new file mode 100644 index 0000000..344a208 --- /dev/null +++ b/screen-job/src/main/resources/mapper/HistoryMonthlyMapper.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.HistoryMonthlyMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.HistoryMonthly"> + <result column="mac" property="mac"/> + <result column="time" property="time"/> + <result column="value" property="value"/> + </resultMap> + + <insert id="insertHistoryMonthly"> + 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 -- Gitblit v1.8.0