src/main/java/com/moral/common/bean/ResultBean.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/controller/WebController.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/HistoryMinutelyService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/util/DateUtil.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/webSocketServer/BSTestWebsocketServer.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/webSocketServer/BSWebsocketServer.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/HistoryFiveMinutelyMapper.xml | ●●●●● 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>