lizijie
2021-09-03 659b91b554ba5e98b6fffa045231f5aa3fb4ab9e
因子默认单位添加;角色、菜单更新
10 files added
2 files modified
423 ■■■■■ changed files
screen-common/src/main/java/com/moral/constant/Constants.java 2 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/HistorySecondCruiser.java 56 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/HistorySecondUav.java 56 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java 47 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java 16 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/mapper/HistorySecondUavMapper.java 16 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java 21 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/HistorySecondUavService.java 21 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java 80 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java 80 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/HistorySecondCruiserMapper.xml 14 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/HistorySecondUavMapper.xml 14 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/constant/Constants.java
@@ -207,7 +207,7 @@
    /*
     * 特殊设备数据批次
     * */
    public static final String SENSOR_CODE_SPECIAL_BATCH = "a00000";
    public static final String SENSOR_CODE_SPECIAL_BATCH = "PORRST";
    /*
     * 字典表走航车设备类型
screen-manage/src/main/java/com/moral/api/entity/HistorySecondCruiser.java
New file
@@ -0,0 +1,56 @@
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;
/**
 * <p>
 * 走航车秒数据表
 * </p>
 *
 * @author moral
 * @since 2021-09-02
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class HistorySecondCruiser extends Model<HistorySecondCruiser> {
    private static final long serialVersionUID = 1L;
    /**
     * 设备mac
     */
    private String mac;
    /**
     * 数据时间
     */
    private Date time;
    /**
     * 数据
     */
    private String value;
    /**
     * 此数据所属组织id
     */
    private Integer organizationId;
    /**
     * 数据批次
     */
    private Date batch;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
screen-manage/src/main/java/com/moral/api/entity/HistorySecondUav.java
New file
@@ -0,0 +1,56 @@
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;
/**
 * <p>
 * 无人机秒数据表
 * </p>
 *
 * @author moral
 * @since 2021-09-02
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class HistorySecondUav extends Model<HistorySecondUav> {
    private static final long serialVersionUID = 1L;
    /**
     * 设备mac
     */
    private String mac;
    /**
     * 数据时间
     */
    private Date time;
    /**
     * 数据
     */
    private String value;
    /**
     * 此数据所属组织id
     */
    private Integer organizationId;
    /**
     * 数据批次
     */
    private Date batch;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java
@@ -1,5 +1,6 @@
package com.moral.api.kafka.consumer;
import com.moral.api.service.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,10 +15,6 @@
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.moral.api.service.DeviceService;
import com.moral.api.service.HistoryHourlyService;
import com.moral.api.service.HistoryMinutelyService;
import com.moral.api.service.HistorySecondSpecialService;
import com.moral.constant.KafkaConstants;
import com.moral.constant.RedisConstants;
@@ -43,8 +40,14 @@
    @Autowired
    private HistorySecondSpecialService historySecondSpecialService;
    @Autowired
    private HistorySecondCruiserService historySecondCruiserService;
    @Autowired
    private HistorySecondUavService historySecondUavService;
    //分钟数据
    @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, containerFactory = "insertListenerContainerFactory")
    //@KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, containerFactory = "insertListenerContainerFactory")
    public void listenMinute(ConsumerRecord<String, String> record, Acknowledgment ack) {
        String msg = record.value();
        try {
@@ -83,7 +86,7 @@
    }
    //小时数据
    @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, containerFactory = "insertListenerContainerFactory")
    //@KafkaListener(topics = KafkaConstants.TOPIC_HOUR, containerFactory = "insertListenerContainerFactory")
    public void listenHour(ConsumerRecord<String, String> record, Acknowledgment ack) {
        String msg = record.value();
        try {
@@ -122,7 +125,7 @@
    }
    //秒数据,修改设备状态,缓存最新秒数据
    @KafkaListener(topics = KafkaConstants.TOPIC_SECOND, containerFactory = "stateListenerContainerFactory")
    //@KafkaListener(topics = KafkaConstants.TOPIC_SECOND, containerFactory = "stateListenerContainerFactory")
    public void listenSecond(ConsumerRecord<String, String> record) {
        String msg = record.value();
        try {
@@ -150,9 +153,35 @@
        }
    }
    //特殊设备秒数据
    //无人机秒数据
    @KafkaListener(topics = KafkaConstants.UAV_TOPIC_SECOND, groupId = KafkaConstants.GROUP_INSERT, containerFactory = "insertListenerContainerFactory")
    public void listenSecondSpecial(ConsumerRecord<String, String> record, Acknowledgment ack) {
        String msg = record.value();
        System.out.println(msg);
        try {
            Map<String, Object> data = JSON.parseObject(msg, Map.class);
            Object mac = data.get("mac");
            Object time = data.get("DataTime");
            if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) {
                log.warn("some properties is null, param{}", msg);
                ack.acknowledge();
                return;
            }
            //数据过滤
            data.remove("time");
            data.remove("entryTime");
            historySecondUavService.insertHistorySecond(data);
            ack.acknowledge();
        } catch (Exception e) {
            log.error("param{}" + msg);
        }
    }
    //走航车秒数据
    @KafkaListener(topics = KafkaConstants.CRUISER_TOPIC_SECOND, groupId = KafkaConstants.GROUP_INSERT, containerFactory = "insertListenerContainerFactory")
    public void listenSecondCruiser(ConsumerRecord<String, String> record, Acknowledgment ack) {
        String msg = record.value();
        try {
            Map<String, Object> data = JSON.parseObject(msg, Map.class);
@@ -168,7 +197,7 @@
            data.remove("time");
            data.remove("entryTime");
            historySecondSpecialService.insertHistorySecond(data);
            historySecondCruiserService.insertHistorySecond(data);
            ack.acknowledge();
        } catch (Exception e) {
            log.error("param{}" + msg);
screen-manage/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java
New file
@@ -0,0 +1,16 @@
package com.moral.api.mapper;
import com.moral.api.entity.HistorySecondCruiser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * <p>
 * 走航车秒数据表 Mapper 接口
 * </p>
 *
 * @author moral
 * @since 2021-09-02
 */
public interface HistorySecondCruiserMapper extends BaseMapper<HistorySecondCruiser> {
}
screen-manage/src/main/java/com/moral/api/mapper/HistorySecondUavMapper.java
New file
@@ -0,0 +1,16 @@
package com.moral.api.mapper;
import com.moral.api.entity.HistorySecondUav;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * <p>
 * 无人机秒数据表 Mapper 接口
 * </p>
 *
 * @author moral
 * @since 2021-09-02
 */
public interface HistorySecondUavMapper extends BaseMapper<HistorySecondUav> {
}
screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java
New file
@@ -0,0 +1,21 @@
package com.moral.api.service;
import com.moral.api.entity.HistorySecondCruiser;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Map;
/**
 * <p>
 * 走航车秒数据表 服务类
 * </p>
 *
 * @author moral
 * @since 2021-09-02
 */
public interface HistorySecondCruiserService extends IService<HistorySecondCruiser> {
    //秒数据insert
    void insertHistorySecond(Map<String, Object> data);
}
screen-manage/src/main/java/com/moral/api/service/HistorySecondUavService.java
New file
@@ -0,0 +1,21 @@
package com.moral.api.service;
import com.moral.api.entity.HistorySecondUav;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Map;
/**
 * <p>
 * 无人机秒数据表 服务类
 * </p>
 *
 * @author moral
 * @since 2021-09-02
 */
public interface HistorySecondUavService extends IService<HistorySecondUav> {
    //秒数据insert
    void insertHistorySecond(Map<String, Object> data);
}
screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java
New file
@@ -0,0 +1,80 @@
package com.moral.api.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.moral.api.entity.HistorySecondCruiser;
import com.moral.api.entity.Sensor;
import com.moral.api.entity.SpecialDevice;
import com.moral.api.mapper.HistorySecondCruiserMapper;
import com.moral.api.service.DeviceService;
import com.moral.api.service.HistorySecondCruiserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
import com.moral.constant.RedisConstants;
import com.moral.util.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * <p>
 * 走航车秒数据表 服务实现类
 * </p>
 *
 * @author moral
 * @since 2021-09-02
 */
@Service
public class HistorySecondCruiserServiceImpl extends ServiceImpl<HistorySecondCruiserMapper, HistorySecondCruiser> implements HistorySecondCruiserService {
    @Autowired
    private HistorySecondCruiserMapper historySecondCruiserMapper;
    @Autowired
    private DeviceService deviceService;
    @Autowired
    private RedisTemplate redisTemplate;
    @Override
    public void insertHistorySecond(Map<String, Object> data) {
        Date batchTime = DateUtils.getDate((String) data.remove(Constants.SENSOR_CODE_SPECIAL_BATCH), DateUtils.yyyyMMddHHmmss_EN);
        Date time = DateUtils.getDate((String) data.get("DataTime"), DateUtils.yyyyMMddHHmmss_EN);
        String mac = data.get("mac").toString();
        //根据mac从redis中获取因子
        SpecialDevice specialDevice = (SpecialDevice) redisTemplate.opsForHash().get(RedisConstants.SPECIAL_DEVICE_INFO, mac);
        List<Sensor> sensors = specialDevice.getVersion().getSensors();
        //过滤因子
        data = data.entrySet().stream()
                .filter(m -> {
                    boolean flag = false;
                    String key = m.getKey();
                    if (!"mac".equals(key) && !"DataTime".equals(key)) {
                        for (Sensor sensor : sensors) {
                            if (sensor.getCode().equals(key)) {
                                flag = true;
                                break;
                            }
                        }
                        return flag;
                    }
                    return true;
                }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
        //数据校准
        data = deviceService.adjustSpecialDeviceData(data);
        HistorySecondCruiser historySecondCruiser = new HistorySecondCruiser();
        historySecondCruiser.setMac(mac);
        historySecondCruiser.setTime(time);
        historySecondCruiser.setValue(JSONObject.toJSONString(data));
        historySecondCruiser.setOrganizationId(specialDevice.getOrganizationId());
        historySecondCruiser.setBatch(batchTime);
        historySecondCruiserMapper.insert(historySecondCruiser);
    }
}
screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java
New file
@@ -0,0 +1,80 @@
package com.moral.api.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.moral.api.entity.HistorySecondUav;
import com.moral.api.entity.Sensor;
import com.moral.api.entity.SpecialDevice;
import com.moral.api.mapper.HistorySecondUavMapper;
import com.moral.api.service.DeviceService;
import com.moral.api.service.HistorySecondUavService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
import com.moral.constant.RedisConstants;
import com.moral.util.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * <p>
 * 无人机秒数据表 服务实现类
 * </p>
 *
 * @author moral
 * @since 2021-09-02
 */
@Service
public class HistorySecondUavServiceImpl extends ServiceImpl<HistorySecondUavMapper, HistorySecondUav> implements HistorySecondUavService {
    @Autowired
    private HistorySecondUavMapper historySecondUavMapper;
    @Autowired
    private DeviceService deviceService;
    @Autowired
    private RedisTemplate redisTemplate;
    @Override
    public void insertHistorySecond(Map<String, Object> data) {
        Date batchTime = DateUtils.getDate((String) data.remove(Constants.SENSOR_CODE_SPECIAL_BATCH), DateUtils.yyyyMMddHHmmss_EN);
        Date time = DateUtils.getDate((String) data.get("DataTime"), DateUtils.yyyyMMddHHmmss_EN);
        String mac = data.get("mac").toString();
        //根据mac从redis中获取因子
        SpecialDevice specialDevice = (SpecialDevice) redisTemplate.opsForHash().get(RedisConstants.SPECIAL_DEVICE_INFO, mac);
        List<Sensor> sensors = specialDevice.getVersion().getSensors();
        //过滤因子
        data = data.entrySet().stream()
                .filter(m -> {
                    boolean flag = false;
                    String key = m.getKey();
                    if (!"mac".equals(key) && !"DataTime".equals(key)) {
                        for (Sensor sensor : sensors) {
                            if (sensor.getCode().equals(key)) {
                                flag = true;
                                break;
                            }
                        }
                        return flag;
                    }
                    return true;
                }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
        //数据校准
        data = deviceService.adjustSpecialDeviceData(data);
        HistorySecondUav historySecondUav = new HistorySecondUav();
        historySecondUav.setMac(mac);
        historySecondUav.setTime(time);
        historySecondUav.setValue(JSONObject.toJSONString(data));
        historySecondUav.setOrganizationId(specialDevice.getOrganizationId());
        historySecondUav.setBatch(batchTime);
        historySecondUavMapper.insert(historySecondUav);
    }
}
screen-manage/src/main/resources/mapper/HistorySecondCruiserMapper.xml
New file
@@ -0,0 +1,14 @@
<?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.HistorySecondCruiserMapper">
        <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="com.moral.api.entity.HistorySecondCruiser">
                    <result column="mac" property="mac" />
                    <result column="time" property="time" />
                    <result column="value" property="value" />
                    <result column="organization_id" property="organizationId" />
                    <result column="batch" property="batch" />
        </resultMap>
</mapper>
screen-manage/src/main/resources/mapper/HistorySecondUavMapper.xml
New file
@@ -0,0 +1,14 @@
<?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.HistorySecondUavMapper">
        <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="com.moral.api.entity.HistorySecondUav">
                    <result column="mac" property="mac" />
                    <result column="time" property="time" />
                    <result column="value" property="value" />
                    <result column="organization_id" property="organizationId" />
                    <result column="batch" property="batch" />
        </resultMap>
</mapper>