screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java
@@ -1,9 +1,9 @@ package com.moral.api.mapper; import java.util.List; import java.util.Map; import com.moral.api.entity.HistoryHourly; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> @@ -13,10 +13,16 @@ * @author moral * @since 2021-06-28 */ public interface HistoryHourlyMapper extends BaseMapper<HistoryHourly> { public interface HistoryHourlyMapper { void createTable(String timeUnits); void insertHistoryHourly(List<HistoryHourly> list); Integer selectCountByTime(Map<String, Object> params); List<Map<String, Object>> selectDailyData(Map<String, Object> params); } screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java
@@ -1,7 +1,7 @@ package com.moral.api.service; import com.moral.api.entity.HistoryHourly; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; import java.util.Map; /** * <p> @@ -11,9 +11,15 @@ * @author moral * @since 2021-06-28 */ public interface HistoryHourlyService extends IService<HistoryHourly> { public interface HistoryHourlyService { //小时表创建 void createTable(String timeUnits); //缺失小时数据补充 void insertHistoryHourly(); //从分钟表统计天数据 List<Map<String, Object>> selectDailyData(Map<String, Object> params); } screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java
@@ -3,7 +3,6 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.HistoryDaily; import com.moral.api.entity.HistoryHourly; import com.moral.api.entity.Sensor; import com.moral.api.mapper.HistoryDailyMapper; import com.moral.api.service.HistoryDailyService; @@ -63,9 +62,13 @@ List<Sensor> sensors = sensorService.list(sensorQueryWrapper); //获取所有设备小时数据 QueryWrapper<HistoryHourly> historyHourlyQueryWrapper = new QueryWrapper<>(); historyHourlyQueryWrapper.ge("time", DateUtils.dateToDateString(start)).le("time", DateUtils.dateToDateString(end)); List<Map<String, Object>> dailyData = historyHourlyService.listMaps(historyHourlyQueryWrapper); Map<String, Object> prop = new HashMap<>(); String timeUnits = DateUtils.dateToDateString(start, DateUtils.yyyyMM_EN); prop.put("timeUnits", timeUnits); prop.put("start", DateUtils.dateToDateString(start)); prop.put("end", DateUtils.dateToDateString(end)); List<Map<String, Object>> dailyData = historyHourlyService.selectDailyData(prop); if (dailyData.size() == 0) { return; } screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
@@ -7,7 +7,6 @@ import com.moral.api.mapper.HistoryHourlyMapper; import com.moral.api.mapper.HistoryMinutelyMapper; import com.moral.api.service.HistoryHourlyService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.service.SensorService; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; @@ -39,7 +38,7 @@ * @since 2021-06-28 */ @Service public class HistoryHourlyServiceImpl extends ServiceImpl<HistoryHourlyMapper, HistoryHourly> implements HistoryHourlyService { public class HistoryHourlyServiceImpl implements HistoryHourlyService { @Autowired private HistoryHourlyMapper historyHourlyMapper; @@ -54,6 +53,11 @@ private SensorService sensorService; @Override public void createTable(String timeUnits) { historyHourlyMapper.createTable(timeUnits); } @Override public void insertHistoryHourly() { //时间格式化:yyyy-MM-dd HH:mm String format = DateUtils.yyyy_MM_dd_HH_EN; @@ -64,16 +68,18 @@ Date now = new Date(); String time = DateUtils.dateToDateString(now, format) + ":00:00"; QueryWrapper<HistoryHourly> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("time", time); //查询数据库当前小时的条数,如果比macs小,说明需要数据补充 Integer count = historyHourlyMapper.selectCount(queryWrapper); if (macs.size() > count) { Map<String, Object> prop = new HashMap<>(); prop.put("timeUnits", DateUtils.getDateStringOfMon(0, DateUtils.yyyyMM_EN)); prop.put("time", time); Integer count = historyHourlyMapper.selectCountByTime(prop); if (macs.size() <= count) { return; } else { macs.removeIf(mac -> { queryWrapper.clear(); queryWrapper.eq("time", time); queryWrapper.eq("mac", mac); Integer num = historyHourlyMapper.selectCount(queryWrapper); prop.put("mac", mac); Integer num = historyHourlyMapper.selectCountByTime(prop); return num != 0; }); } @@ -213,4 +219,9 @@ //存入小时表 historyHourlyMapper.insertHistoryHourly(insertData); } @Override public List<Map<String, Object>> selectDailyData(Map<String, Object> params) { return historyHourlyMapper.selectDailyData(params); } } screen-job/src/main/java/com/moral/api/task/CreateTableTask.java
@@ -4,6 +4,7 @@ import org.springframework.stereotype.Component; import com.moral.api.service.HistoryFiveMinutelyService; import com.moral.api.service.HistoryHourlyService; import com.moral.api.service.HistoryMinutelyService; import com.moral.constant.Constants; import com.moral.util.DateUtils; @@ -19,6 +20,9 @@ @Autowired private HistoryMinutelyService historyMinutelyService; @Autowired private HistoryHourlyService historyHourlyService; //分钟表创建任务 @@ -49,4 +53,20 @@ } return ReturnT.SUCCESS; } //小时表创建任务 @XxlJob("createHistoryHourlyTable") public ReturnT createHistoryHourlyTable() { String timeUnits = DateUtils.getDateStringOfMon(1, DateUtils.yyyyMM_EN); try { //已校准小时表 historyHourlyService.createTable(timeUnits); //未校准小时表 historyHourlyService.createTable(timeUnits + "_" + Constants.UN_ADJUST); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } } screen-job/src/main/resources/mapper/HistoryHourlyMapper.xml
@@ -2,13 +2,14 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.moral.api.mapper.HistoryHourlyMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.moral.api.entity.HistoryHourly"> <result column="mac" property="mac"/> <result column="time" property="time"/> <result column="value" property="value"/> <result column="version" property="version"/> </resultMap> <update id="createTable" parameterType="String"> CREATE TABLE IF NOT EXISTS `history_hourly_${timeUnits}` ( `mac` VARCHAR (20) DEFAULT NULL COMMENT '设备mac', `time` datetime DEFAULT NULL COMMENT '数据时间', `value` json DEFAULT NULL COMMENT '数据', KEY `idx_mac_time` (`mac`,`time`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '小时数据表' </update> <insert id="insertHistoryHourly"> INSERT INTO history_hourly VALUES @@ -16,4 +17,18 @@ (#{item.mac}, #{item.time}, #{item.value}, #{item.version}) </foreach> </insert> <select id="selectCountByTime" resultType="java.lang.Integer"> SELECT COUNT(1) FROM history_hourly_${timeUnits} WHERE `time` = #{time} <if test="mac != null"> AND mac = #{mac} </if> </select> <select id="selectDailyData" resultType="java.util.Map"> SELECT mac, `value` FROM history_hourly_${timeUnits} WHERE `time` <![CDATA[>=]]> #{start} AND `time` <![CDATA[<]]> #{end} </select> </mapper> screen-manage/src/main/java/com/moral/api/controller/OrganizationLayoutController.java
@@ -56,4 +56,18 @@ organizationLayoutService.setUp(map,organizationLayouts); return ResultMessage.ok(); } @RequestMapping(value = "getLayoutByMac", method = RequestMethod.GET) @ResponseBody public ResultMessage getLayoutByMac(HttpServletRequest request){ Map<String,Object> parameters = WebUtils.getParametersStartingWith(request,null); if (ObjectUtils.isEmpty(parameters.get("mac"))){ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } Map<String,Object> resultMap = organizationLayoutService.getLayoutByMac(parameters.get("mac").toString()); if (ObjectUtils.isEmpty(resultMap)){ return null; } return ResultMessage.ok(resultMap); } } screen-manage/src/main/java/com/moral/api/service/OrganizationLayoutService.java
@@ -22,4 +22,14 @@ @Transactional void setUp(Map map,List<OrganizationLayout> list); /** *@Description: 通过Mac获取页面布局 *@Param: [map] *@return: java.util.Map<java.lang.String,java.lang.Object> *@Author: lizijie *@Date: 2021/8/30 8:54 **/ @Transactional Map<String, Object> getLayoutByMac(String mac); } screen-manage/src/main/java/com/moral/api/service/impl/OrganizationLayoutServiceImpl.java
@@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.moral.api.entity.Device; import com.moral.api.entity.OrganizationLayout; import com.moral.api.mapper.DeviceMapper; import com.moral.api.mapper.OrganizationLayoutMapper; import com.moral.api.service.OrganizationLayoutService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -16,6 +18,7 @@ import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -32,6 +35,9 @@ @Autowired(required = false) private OrganizationLayoutMapper organizationLayoutMapper; @Autowired(required = false) private DeviceMapper deviceMapper; @Autowired private LogUtils logUtils; @@ -71,7 +77,7 @@ content = content +organizationLayout.getId()+" "; } content = content+";"; logUtils.saveOperationForManage(request,content,Constants.INSERT_OPERATE_TYPE); logUtils.saveOperationForManage(request,content,Constants.DELETE_OPERATE_TYPE); } if (!ObjectUtils.isEmpty(list) && list.size()>0){ organizationLayoutMapper.insertList(list); @@ -89,4 +95,75 @@ logUtils.saveOperationForManage(request,contentInsert,Constants.INSERT_OPERATE_TYPE); } } @Transactional @Override public Map<String, Object> getLayoutByMac(String mac) { QueryWrapper<Device> wrapper_device = new QueryWrapper<>(); wrapper_device.eq("is_delete",Constants.NOT_DELETE); wrapper_device.eq("mac",mac); Device device = deviceMapper.selectOne(wrapper_device); if (ObjectUtils.isEmpty(device)){ return null; } int organizationId = device.getOrganizationId(); int versionId = device.getDeviceVersionId(); QueryWrapper<OrganizationLayout> wrapper_organizationLayout = new QueryWrapper<>(); wrapper_organizationLayout.eq("organization_id",organizationId); wrapper_organizationLayout.eq("version_id",versionId); wrapper_organizationLayout.eq("is_delete",Constants.NOT_DELETE); List<OrganizationLayout> organizationLayouts = organizationLayoutMapper.selectList(wrapper_organizationLayout); if (ObjectUtils.isEmpty(organizationLayouts) || organizationLayouts.size()==0){ return null; } Map<String, Object> resultMap = new HashMap<>(); List<OrganizationLayout> chartSensorKeyList = new ArrayList<>(); List<OrganizationLayout> coreMonitorItemsList = new ArrayList<>(); List<OrganizationLayout> defaultMonitorItemsList = new ArrayList<>(); List<OrganizationLayout> fixedMonitorItemsList = new ArrayList<>(); for (OrganizationLayout organizationgLayout:organizationLayouts) { if (organizationgLayout.getPosition().equals("chartSensorKey")){ chartSensorKeyList.add(organizationgLayout); } if (organizationgLayout.getPosition().equals("coreMonitorItems")){ coreMonitorItemsList.add(organizationgLayout); } if (organizationgLayout.getPosition().equals("defaultMonitorItems")){ defaultMonitorItemsList.add(organizationgLayout); } if (organizationgLayout.getPosition().equals("fixedMonitorItems")){ fixedMonitorItemsList.add(organizationgLayout); } } chartSensorKeyList = sort(chartSensorKeyList); coreMonitorItemsList = sort(coreMonitorItemsList); defaultMonitorItemsList = sort(defaultMonitorItemsList); fixedMonitorItemsList = sort(fixedMonitorItemsList); resultMap.put("chartSensorKey",chartSensorKeyList); resultMap.put("coreMonitorItems",coreMonitorItemsList); resultMap.put("defaultMonitorItems",defaultMonitorItemsList); resultMap.put("fixedMonitorItems",fixedMonitorItemsList); return resultMap; } private List<OrganizationLayout> sort(List<OrganizationLayout> list){ if (list.size() < 0){ return list; } OrganizationLayout temp = null; int j; for (int i = 1; i<list.size(); i++){ temp = list.get(i); for (j=i-1; j>=0; j--){ if (list.get(j).getPositionIndex()>temp.getPositionIndex()){ list.set(j+1,list.get(j)); }else { break; } } System.out.println(list.get(0)); list.set(j+1,temp); } return list; } }