kaiyu
2020-10-19 a0d0ad8de7ac244aa29d1ca84d13b90e74729e33
增加获取六参五分钟平均值接口
1 files deleted
3 files added
5 files modified
539 ■■■■■ changed files
src/main/java/com/moral/common/bean/ResultBean.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/WebController.java 125 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/HistoryMinutelyService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java 13 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/util/DateUtil.java 179 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/webSocketServer/BSTestWebsocketServer.java 26 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/webSocketServer/BSWebsocketServer.java 173 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/HistoryFiveMinutelyMapper.xml 12 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/common/bean/ResultBean.java
@@ -12,6 +12,7 @@
    public static final int FAIL = 0;
    public static final int SUCCESS = 1;
    public static final int NO_PERMISSION = 2;
    private String message;
    private Integer code;
    private Integer errno;
src/main/java/com/moral/controller/WebController.java
@@ -10,20 +10,20 @@
import com.moral.entity.MonitorPoint;
import com.moral.entity.Organization;
import com.moral.service.*;
import com.moral.util.DateUtil;
import com.moral.util.LatLngTransformation;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import jdk.nashorn.internal.runtime.logging.Logger;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import static com.moral.common.util.WebUtils.getParametersStartingWith;
@@ -56,6 +56,13 @@
        return "test success!";
    }
    /**
    * @Description: 登陆接口
            * @Param: [parameters]
            * @return: java.util.Map<java.lang.String,java.lang.Object>
            * @Author: 下雨听风
            * @Date: 2020/10/19
            */
    @PostMapping("login")
    public Map<String, Object> login(@RequestBody Map<String, Object> parameters) {
        Map<String, Object> resultMap = new HashMap<String, Object>();
@@ -73,6 +80,13 @@
        return resultMap;
    }
    /**
    * @Description: 退出接口
            * @Param: [request]
            * @return: java.util.Map<java.lang.String,java.lang.Object>
            * @Author: 下雨听风
            * @Date: 2020/10/19
            */
    @UserLoginToken
    @PostMapping("logout")
    public Map<String, Object> logout(HttpServletRequest request) {
@@ -84,6 +98,13 @@
        return resultMap;
    }
    /**
    * @Description:
            * @Param: [request]
            * @return: java.util.Map<java.lang.String,java.lang.Object>
            * @Author: 下雨听风
            * @Date: 2020/10/19
            */
    @UserLoginToken
    @GetMapping("getAccountInfo")
    public Map<String, Object> getAccountInfo(HttpServletRequest request) {
@@ -141,6 +162,13 @@
    }
    /**
    * @Description: 获取传感器平均值
            * @Param: [request]
            * @return: com.moral.common.bean.ResultBean<java.util.List<java.util.Map<java.lang.String,java.lang.Object>>>
            * @Author: 下雨听风
            * @Date: 2020/10/19
            */
    @UserLoginToken
    @GetMapping("report_avg_datas")
    public ResultBean<List<Map<String, Object>>> getMonitorPointOrDeviceAvgData(HttpServletRequest request)
@@ -163,6 +191,13 @@
        return new ResultBean<List<Map<String, Object>>>(list);
    }
    /**
    * @Description: 获取某个站点设备信息
            * @Param: [request]
            * @return: com.moral.common.bean.ResultBean<java.util.List<com.moral.entity.MonitorPoint>>
            * @Author: 下雨听风
            * @Date: 2020/10/19
            */
    @UserLoginToken
    @GetMapping("monitorpoints-devices")
    public ResultBean<List<MonitorPoint>> getMonitorPointsAndDevicesByRegion(HttpServletRequest request)
@@ -172,6 +207,13 @@
        return new ResultBean<List<MonitorPoint>>(monitorPoints);
    }
    /**
    * @Description: 获取坐标接口,前端用于建点
            * @Param: [request]
            * @return: com.moral.common.bean.ResultBean<java.util.List<com.moral.entity.Device>>
            * @Author: 下雨听风
            * @Date: 2020/10/19
            */
   /* @UserLoginToken*/
    @GetMapping("coordinates")
    public ResultBean<List<Device>> getDeviceCoordinatesAndState(HttpServletRequest request){
@@ -179,4 +221,79 @@
        ParameterUtils.getRegionType4RegionCode(parameters);
        return new ResultBean<List<Device>>(deviceService.queryDevice(parameters));
    }
    /**
    * @Description: 根据monitorId获取该站点下每一台设备具体传感器的五分钟平均值
            * @Param: []
            * @return: com.moral.common.bean.ResultBean<java.util.Map<java.lang.String,java.lang.Object>>
            * @Author: 下雨听风
            * @Date: 2020/10/19
            */
    @GetMapping("fiveMinuteAvgData")
    public ResultBean<List<Map<String, Object>>> getSensorFiveMinuteAvgData(HttpServletRequest request){
        //获取参数,传感器和monitorpointId
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        if((!parameters.containsKey("sensorKey"))||(!parameters.containsKey("monitorPointId")))
            return  ResultBean.fail("参数为null");
        String sensorKey = (String) parameters.get("sensorKey");
        Integer monitorPointId = Integer.parseInt((String) parameters.get("monitorPointId"));
        //根据monitorpointId获取该站点下所有设备mac集合
        List<Device> devices = deviceService.getDevicesByMonitorPointId(monitorPointId);
        if(ObjectUtils.isEmpty(devices))
            return ResultBean.fail("站点下无设备或monitorPointId错误");
        List<String> macs = new ArrayList<>();
        devices.forEach(p->{
            macs.add(p.getMac());
        });
        //根据时间和mac号集合以及传感器参数查询五分钟平均数据
        Map<String, Object> timeAndYearMonth = getTimeAndYearMonthForFiveMinuteData();
        String time= (String) timeAndYearMonth.get("time");
        String yearAndMonth = (String) timeAndYearMonth.get("yearAndMonth");
        parameters.put("time",time);
        parameters.put("yearAndMonth",yearAndMonth);
        parameters.put("macs",macs);
        List<Map<String, Object>> datas = historyMinutelyService.getFiveMinutesDataByMacsAndTime(parameters);
        return new ResultBean<List<Map<String, Object>>>(datas);
    }
    /**
    * @Description: 根据当前时间判断要获取五分钟平均数据在数据库中的时间
            * @Param: []
            * @return: java.lang.String
            * @Author: 下雨听风
            * @Date: 2020/10/19
            */
    private Map<String, Object> getTimeAndYearMonthForFiveMinuteData() {
        Map<String, Object> map = new HashMap<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        String minute = DateUtil.getMinute(date);
        String year = "";
        String month = "";
        String yearAndMonth = "";
        String startTime = "";
        Integer endMinute = Integer.parseInt(String.valueOf(minute.charAt(minute.length() - 1)));
        if (endMinute >= 5) {
            StringBuilder time = new StringBuilder(sdf.format(date));
            startTime = time.replace(15, 19, "0:00").toString();
        } else {
            date = DateUtil.rollMinute(date, -5);
            StringBuilder time = new StringBuilder(sdf.format(date));
            startTime = time.replace(15, 19, "5:00").toString();
        }
        year = DateUtil.getYear(date);
        month = DateUtil.getMonth(date);
        yearAndMonth = year + month;
        map.put("time", startTime);
        map.put("yearAndMonth", yearAndMonth);
        return map;
    }
}
src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java
New file
@@ -0,0 +1,8 @@
package com.moral.mapper;
import java.util.List;
import java.util.Map;
public interface HistoryFiveMinutelyMapper {
    List<Map<String,Object>> getFiveMinutesDataByMacsAndTime(Map<String,Object> parameters);
}
src/main/java/com/moral/service/HistoryMinutelyService.java
@@ -38,4 +38,6 @@
    List<Map<String, Object>> getMultiDeviceSensorData(Map<String, Object> parameters) throws Exception;
    List<Map<String,Object>> getFiveMinutesDataByMacsAndTime(Map<String,Object> parameters);
}
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -1,5 +1,6 @@
package com.moral.service.impl;
import com.moral.mapper.*;
import io.swagger.models.auth.In;
import java.math.BigDecimal;
@@ -103,6 +104,14 @@
    @Resource
    private MonitorPointMapper monitorPointMapper;
    @Resource
    HistoryFiveMinutelyMapper historyFiveMinutelyMapper;
    @Override
    public List<Map<String, Object>> getFiveMinutesDataByMacsAndTime(Map<String, Object> parameters) {
        ValidateUtil.notNull(parameters,"查询五分钟数据参数为空");
        return historyFiveMinutelyMapper.getFiveMinutesDataByMacsAndTime(parameters);
    }
    @Override
    public Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters) {
@@ -911,11 +920,11 @@
                }*/
                values.add(value);
            }
            System.out.println(data);
        }
        return null;
    }
}
src/main/java/com/moral/util/DateUtil.java
New file
@@ -0,0 +1,179 @@
package com.moral.util;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
    /**
            * 英文简写(默认)如:2010-12-01
            */
    public static String FORMAT_SHORT = "yyyy-MM-dd";
    /**
     * 英文全称  如:2010-12-01 23:15:06
     */
    public static String FORMAT_LONG = "yyyy-MM-dd HH:mm:ss";
    /**
     * 精确到毫秒的完整时间    如:yyyy-MM-dd HH:mm:ss.S
     */
    public static String FORMAT_FULL = "yyyy-MM-dd HH:mm:ss.S";
    /**
     * 中文简写  如:2010年12月01日
     */
    public static String FORMAT_SHORT_CN = "yyyy年MM月dd";
    /**
     * 中文全称  如:2010年12月01日  23时15分06秒
     */
    public static String FORMAT_LONG_CN = "yyyy年MM月dd日  HH时mm分ss秒";
    /**
     * 精确到毫秒的完整中文时间
     */
    public static String FORMAT_FULL_CN = "yyyy年MM月dd日  HH时mm分ss秒SSS毫秒";
    public static void main(String[] args) {
        Date date = rollMinute(new Date(), -2);
        System.out.println(date);
    }
    /**
     * 获取当前时间
     */
    public static String getTimeString() {
        SimpleDateFormat df = new SimpleDateFormat(FORMAT_SHORT_CN);
        Calendar calendar = Calendar.getInstance();
        return df.format(calendar.getTime());
    }
    /**
     * 获取日期年份
     * @param date 日期
     * @return
     */
    public static String getYear(Date date) {
        SimpleDateFormat df = new SimpleDateFormat(FORMAT_FULL);
        return df.format(date).substring(0, 4);
    }
    /**
     * 功能描述:返回月
     *
     * @param date
     *            Date 日期
     * @return 返回月份
     */
    public static String getMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int Month = calendar.get(Calendar.MONTH);
        Month++;
        String str = String.valueOf(Month);
        return str = str.length()==1?"0".concat(str):str;
    }
    /**
     * 功能描述:返回日期
     *
     * @param date
     *            Date 日期
     * @return 返回日份
     */
    public static int getDay(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }
    /**
     * 功能描述:返回小时
     *
     * @param date
     *            日期
     * @return 返回小时
     */
    public static int getHour(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.HOUR_OF_DAY);
    }
    /**
     * 功能描述:返回分
     *
     * @param date
     *            日期
     * @return 返回分钟
     */
    public static String getMinute(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int minute = calendar.get(Calendar.MINUTE);
        String str = String.valueOf(minute);
        return str = str.length()==1?"0".concat(str):str;
    }
    /**
     * 返回秒钟
     *
     * @param date
     *            Date 日期
     * @return 返回秒钟
     */
    public static int getSecond(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.SECOND);
    }
    /**
     * 功能描述:返回毫
     *
     * @param date
     *            日期
     * @return 返回毫
     */
    public static long getMillis(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.getTimeInMillis();
    }
    /**
     * 功能描述:对时间进行分钟的加减
     *
     * @param
     *
     * @return 返回日期类型
     */
    public static Date rollMinute(Date d, int minute) {
        return new Date(d.getTime() + minute * 60 * 1000);
    }
    /**
     * 前/后?月
     *
     * @param d
     * @param mon
     * @return
     */
    public static Date rollMon(Date d, int mon) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        cal.add(Calendar.MONTH, mon);
        return cal.getTime();
    }
    //获得过去i天的年月日
    public static String getOldTime(int i){
        Long time=System.currentTimeMillis();
        Long time1=time-(1000 * 60 * 60 * 24 * i);
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String sd = sdf.format(new Date(Long.parseLong(String.valueOf(time1))));
        String s=sd.substring(0,10);
        return s;
    }
}
src/main/java/com/moral/webSocketServer/BSTestWebsocketServer.java
@@ -24,15 +24,15 @@
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@ServerEndpoint("/web/testWebSocket/{param}")
@ServerEndpoint("/web/WebSocket/{param}")
@Component
/**
/**
* @Description: 用于测试的websocket
        * @Param:
        * @return:
        * @Param:
        * @return:
        * @Author: 下雨听风
        * @Date: 2020/9/30
        */
        */
public class BSTestWebsocketServer {
    public static DeviceService deviceService;
@@ -116,17 +116,17 @@
            channel.basicConsume(queue, false, new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    //对从MQ中取出的数据做转换,并且发送风速到客户端
                    //对从MQ中取出的数据做转换,并且发送风速到客户端
                    Map message = (Map) JSON.parse((String) JSON.parse(new String(body)));
                    sendWindInfo(message);
                    //判断是否接收到客户端发送的mac,如果接收到则返回指定mac设备信息
                    if(mac!=null&&(!mac.equals(0)))
                        sendDeviceInfo(message,deviceMap);
                    //手动确认
                    channel.basicAck(envelope.getDeliveryTag(), true);
                    //判断socket是否已经断开
                    if (!webSocketMap.containsKey(accountId)) {
                        RabbitMQUtils.closeConnectionChannel(connection, channel);
@@ -171,13 +171,13 @@
        }
    }
    /**
    /**
    * @Description: 从客户端连接到socket就一直开始发送风向数据
            * @Param: [param]
            * @return: void
            * @Author: 陈凯裕
            * @Date: 2020/9/30
            */
            */
    private void sendWindInfo(Map<String, Object> param) {
        try {
            Map<String, Object> map = new HashMap<>();
@@ -191,13 +191,13 @@
        }
    }
    /**
    /**
    * @Description: 接收前端mac以及accountid,传送前端指定mac号的设备信息
            * @Param: [param]
            * @return: void
            * @Author: 陈凯裕
            * @Date: 2020/9/30
            */
            */
    private void sendDeviceInfo(Map<String, Object> param,Map<String,Device> deviceMap) {
        String deviceMac = (String) param.get("mac");
        if (mac.equals(deviceMac)) {
src/main/java/com/moral/webSocketServer/BSWebsocketServer.java
File was deleted
src/main/resources/mapper/HistoryFiveMinutelyMapper.xml
New file
@@ -0,0 +1,12 @@
<?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.mapper.HistoryFiveMinutelyMapper">
    <select id="getFiveMinutesDataByMacsAndTime" resultType="map">
        SELECT h.mac,json->'$.${sensorKey}' as #{sensorKey}
        from history_five_minutely_${yearAndMonth} h
        where time = #{time} and mac IN
        <foreach collection="macs" separator="," open="(" close=")" item="mac">
            #{mac}
        </foreach>
    </select>
</mapper>