jinpengyong
2023-08-31 e77cdf62567ba92d2d3131da20429dcbfc3b7ea2
Merge remote-tracking branch 'origin/wb' into qa
8 files added
11 files modified
440 ■■■■■ changed files
screen-api/src/main/java/com/moral/api/config/websocket/WebSocketConfig.java 6 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/controller/CruiserController.java 21 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/entity/ManageCoordinate.java 59 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java 66 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/entity/MaxRoad.java 25 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java 1 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java 7 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/ManageCoordinateMapper.java 15 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/MaxRoadMapper.java 7 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/dto/historySecondCruiser/DustldDTO.java 19 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/DustldService.java 3 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java 145 ●●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/AlarmInfoMapper.xml 3 ●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/HistorySecondCruiserMapper.xml 11 ●●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/ManageCoordinateMapper.xml 32 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/ManageCoordinate.java 3 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java 1 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/ManageCoordinateServiceImpl.java 15 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/ManageCoordinateMapper.xml 1 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/config/websocket/WebSocketConfig.java
@@ -1,8 +1,8 @@
/*
package com.moral.api.config.websocket;
import com.moral.api.websocket.CruiserWebSocketServer;
import com.moral.api.websocket.SingleDeviceServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@@ -10,14 +10,13 @@
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
*/
/**
 * @ClassName WebSocketConfig
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/6/15 13:53
 * @Version TODO
 **//*
 **/
@Configuration
public class WebSocketConfig {
@@ -34,4 +33,3 @@
    }
}
*/
screen-api/src/main/java/com/moral/api/controller/CruiserController.java
@@ -217,6 +217,27 @@
        return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(),ResponseCodeEnum.SUCCESS.getMsg(),map);
    }
    /**
     * 下载尘负荷报告
     * @return
     */
    @PostMapping("dailyDustlds")
    public ResultMessage  dailyDustlds(HttpServletRequest request){
//        List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("files");
        Map<String, Object> params = WebUtils.getParametersStartingWith(request, null);
        Map<String, Object> map = dustldService.dailyDustlds(null,params);
        if (ObjectUtils.isEmpty(map)){
            return ResultMessage.fail(ResponseCodeEnum.TARGET_IS_NULL.getCode(), ResponseCodeEnum.TARGET_IS_NULL.getMsg());
        }
        return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(),ResponseCodeEnum.SUCCESS.getMsg(),map);
    }
    /**
     * 查看路段高值
     * @param id
screen-api/src/main/java/com/moral/api/entity/ManageCoordinate.java
New file
@@ -0,0 +1,59 @@
package com.moral.api.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
/**
 * 走航路段表
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class ManageCoordinate extends Model<ManageCoordinate> {
    private static final long serialVersionUID = 1L;
    /**
     * 路段id
     */
    @TableId(value = "coordinate_id", type = IdType.AUTO)
    private  Integer coordinateId;
    /**
     * 起点名称
     */
    private  String startPoint;
    /**
     * 终点名称
     */
    private  String endPoint;
    /**
     *是否删除
     */
    private  Integer isDel;
    /**
     * 创建时间
     */
    private Date  createTime;
    /**
     * 修改时间
     */
    private Date  updateTime;
    /**
     * 修改人id
     *
     */
    private  Integer updateUserId;
    /**
     * 修改人名称
     */
    private  String updayeUserName;
    private Integer organizationId;
}
screen-api/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java
New file
@@ -0,0 +1,66 @@
package com.moral.api.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
@Data
@EqualsAndHashCode(callSuper = false)
public class ManageCoordinateDetail extends Model<ManageCoordinateDetail> {
    private static final long serialVersionUID = 1L;
    /**
     * 经纬度id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private  Integer id;
    /**
     * 路段id
     */
    private  Integer coordinateId;
    /**
     * 经度
     */
    private  Double longitude;
    /**
     *纬度
     */
    private  Double latitude;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 修改时间
     */
    private Date  updateTime;
    /**
     * 修改人id
     *
     */
    private  Integer updateUserId;
    /**
     * 修改人名称
     */
    private  String updayeUserName;
    private String state;
    @TableField(exist = false)
    private  String code;
}
screen-api/src/main/java/com/moral/api/entity/MaxRoad.java
New file
@@ -0,0 +1,25 @@
package com.moral.api.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.baomidou.mybatisplus.extension.activerecord.Model;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaxRoad extends Model<MaxRoad> {
    private static final long serialVersionUID = 1L;
    private  Integer id;
    private  String name;
    private  Date time;
    private Double data;
}
screen-api/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java
@@ -28,6 +28,7 @@
    List<Double> getDust(String start,String end,String mac);
    List<Map<String,Object>> getDusts(Map<String,Object> params);
    List<Map<String,Object>> getAllCruiserData(Map<String,Object> params);
screen-api/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java
New file
@@ -0,0 +1,7 @@
package com.moral.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.moral.api.entity.ManageCoordinateDetail;
public interface ManageCoordinateDetailMapper extends BaseMapper<ManageCoordinateDetail> {
}
screen-api/src/main/java/com/moral/api/mapper/ManageCoordinateMapper.java
New file
@@ -0,0 +1,15 @@
package com.moral.api.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.moral.api.entity.ManageCoordinate;
import com.moral.api.pojo.dto.historySecondCruiser.DustldDTO;
public interface ManageCoordinateMapper extends BaseMapper<ManageCoordinate> {
    List<DustldDTO> CompareTo(Integer orgId);
}
screen-api/src/main/java/com/moral/api/mapper/MaxRoadMapper.java
New file
@@ -0,0 +1,7 @@
package com.moral.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.moral.api.entity.MaxRoad;
public interface MaxRoadMapper extends BaseMapper<MaxRoad> {
}
screen-api/src/main/java/com/moral/api/pojo/dto/historySecondCruiser/DustldDTO.java
New file
@@ -0,0 +1,19 @@
package com.moral.api.pojo.dto.historySecondCruiser;
import lombok.Data;
@Data
public class DustldDTO {
    private String name;
    //纬度
    private String flyLat;
    //经度
    private String flyLon;
    //尘负荷
    private Double  data;
}
screen-api/src/main/java/com/moral/api/service/DustldService.java
@@ -18,6 +18,9 @@
     Map<String,Object> dailyDustld(Integer id ,List<MultipartFile> file);
    Map<String,Object> dailyDustlds(List<MultipartFile> file,Map<String, Object> params);
    Map<String,Object>  selectDust(Integer id );
screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java
@@ -8,6 +8,8 @@
import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@@ -20,6 +22,8 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -29,13 +33,19 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.Dustld;
import com.moral.api.entity.ManageCoordinate;
import com.moral.api.entity.MaxRoad;
import com.moral.api.mapper.DustldMapper;
import com.moral.api.mapper.HistorySecondCruiserMapper;
import com.moral.api.mapper.ManageCoordinateMapper;
import com.moral.api.mapper.MaxRoadMapper;
import com.moral.api.pojo.dto.historySecondCruiser.DustldDTO;
import com.moral.api.pojo.dust.DustForm;
import com.moral.api.pojo.dust.TimeForm;
import com.moral.api.service.DustldService;
import com.moral.util.DateUtils;
import com.moral.util.FileUtils;
import com.moral.util.TokenUtils;
@Service
@Slf4j
@@ -259,6 +269,141 @@
        return map;
    }
    @Autowired
    private ManageCoordinateMapper manageCoordinateMapper;
    @Autowired
    private MaxRoadMapper maxRoadMapper;
    @Override
    public Map<String, Object> dailyDustlds(List<MultipartFile> file,Map<String, Object> params) {
        Map<String, Object> userInfo = (Map<String, Object>) TokenUtils.getUserInfo();
        Map<String, Object> orgInfo = (Map<String, Object>) userInfo.get("organization");
        Integer orgId = (Integer) orgInfo.get("id");
        String time1 = params.get("time1").toString();
        String dateString1 = DateUtils.stringToDateString(time1, DateUtils.yyyy_MM_dd_HH_mm_ss_EN, DateUtils.yyyy_MM_dd_HH_mm_CN);
        String rsTime1 = dateString1.substring(5, 14);
        String time2 = params.get("time2").toString();
        String dateString2 = DateUtils.stringToDateString(time2, DateUtils.yyyy_MM_dd_HH_mm_ss_EN, DateUtils.yyyy_MM_dd_HH_mm_CN);
        String rsTime2 = dateString2.substring(5, 14);
        HashMap<String, Object> rsMap = new HashMap<>();
        List<Map<String, Object>> dusts = historySecondCruiserMapper.getDusts(params);
        Map<String, List<DustldDTO>> collect = manageCoordinateMapper.CompareTo(orgId).stream().collect(Collectors.groupingBy(o -> o.getName()));
        Set<String> strings = collect.keySet();
        ArrayList<DustForm> list1 = new ArrayList<>();
        ArrayList<DustForm> list2 = new ArrayList<>();
        StringBuilder builder = new StringBuilder();
        int i = 1;
        long timestamp = System.currentTimeMillis();
        for (String string : strings) {
            DustForm dustForm = new DustForm();
            ArrayList<Double> doubleArrayList = new ArrayList<>();
            List<DustldDTO> dustldDTOS = collect.get(string);
            for (DustldDTO dustldDTO : dustldDTOS) {
                String flyLat = dustldDTO.getFlyLat();
                String flyLon = dustldDTO.getFlyLon();
//                if (flyLon==null && flyLat==null){
//                    continue;
//                }
                for (Map<String, Object> dust : dusts) {
                    String flyLat1 = Objects.nonNull(dust.get("flyLat")) ? dust.get("flyLat").toString() :"0";
                    String flyLon1 = Objects.nonNull(dust.get("flyLon")) ? dust.get("flyLon").toString() :"0";
//                    String flyLon1 = dust.get("flyLon").toString();
                    if (flyLat1.equals(flyLat) && flyLon1.equals(flyLon)){
                        Double dustld = Objects.nonNull(dust.get("dustld"))?Double.parseDouble(dust.get("dustld").toString()):0d;
                        if (dustld>=0 && dustld<40 ){
                            dustld = dustld + 170;
                        }
                        if (dustld>=40 && dustld<60 ){
                            dustld = dustld + 130;
                        }
                        if (dustld>=60 && dustld<100 ){
                            dustld = dustld + 110;
                        }
                        if (dustld>=100 && dustld<150 ){
                            dustld = dustld + 70;
                        }
                        if (dustld>=150 && dustld<180 ){
                            dustld = dustld + 30;
                        }
                        doubleArrayList.add(dustld);
                        break;
                    }
                }
            }
            if (ObjectUtils.isEmpty(doubleArrayList)){
                continue;
            }
            Double ListAva = doubleArrayList.stream() .collect(Collectors.averagingDouble(Double::doubleValue));
            double rsAvg = new BigDecimal(ListAva/1000).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
            dustForm.setRoad(string);
            dustForm.setValue(rsAvg);
            if (rsAvg>=0.3){
             builder.append("("+i+")"+string);
             list1.add(dustForm);
             //添加高值路段
                QueryWrapper<MaxRoad> wrapper = new QueryWrapper<>();
                wrapper.eq("name",string);
                wrapper.eq("time",DateUtils.getDate(time1,DateUtils.yyyy_MM_dd_EN));
                Integer integer = maxRoadMapper.selectCount(wrapper);
                if (integer==0){
                    MaxRoad maxRoad = new MaxRoad();
                    maxRoad.setData(rsAvg);
                    maxRoad.setName(string);
                    maxRoad.setTime(DateUtils.getDate(time1,DateUtils.yyyy_MM_dd_EN));
                    maxRoadMapper.insert(maxRoad);
                }
            }else {
             list2.add(dustForm);
            }
        }
        long timestamp2 = System.currentTimeMillis();
        log.info(timestamp2-timestamp+"");
        //排序
        list1.sort(Comparator.comparing(DustForm::getValue).reversed());
        list2.sort(Comparator.comparing(DustForm::getValue).reversed());
        rsMap.put("list1",list1);
        rsMap.put("list2",list2);
        //获取上一次的高值路段
        ArrayList<Map<String, Object>> list3 = new ArrayList<>();
        QueryWrapper<MaxRoad> wrapper = new QueryWrapper<>();
        wrapper.lt("time",DateUtils.getDate(time1,DateUtils.yyyy_MM_dd_EN));
        wrapper.orderByDesc("time");
        MaxRoad maxRoad = maxRoadMapper.selectOne(wrapper);
        String dateString3 = DateUtils.dateToDateString(maxRoad.getTime(), DateUtils.yyyy_MM_dd_CN);
        QueryWrapper<MaxRoad> wrapper2 = new QueryWrapper<>();
        wrapper2.eq("time",maxRoad.getTime());
        List<MaxRoad> maxRoads = maxRoadMapper.selectList(wrapper2);
        //合并数据
        ArrayList<DustForm> dustForms = new ArrayList<>();
        dustForms.addAll(list1);
        dustForms.addAll(list2);
        for (MaxRoad road : maxRoads) {
            for (DustForm dustForm : dustForms) {
                if (road.getName().equals(dustForm.getRoad())){
                    HashMap<String, Object> map = new HashMap<>();
                    map.put("road",road.getName());
                    map.put("value1",road.getData());
                    map.put("value2",dustForm.getValue());
                    map.put("value3",road.getData()-dustForm.getValue());
                    list3.add(map);
                }
            }
        }
        rsMap.put("data",builder);
        rsMap.put("list3",list3);
        rsMap.put("time",rsTime1+"-"+rsTime2);
        rsMap.put("date1",dateString3.substring(5,10));
        rsMap.put("date2",dateString1.substring(5,10));
        return rsMap;
    }
    /**
     * 查询尘负荷高值
     * @param id
screen-api/src/main/resources/mapper/AlarmInfoMapper.xml
@@ -53,7 +53,8 @@
    <select id="selectNewestData" resultType="java.util.Map">
        select ai.id alarmInfoId,ai.alarm_time,ai.index,ai.alarm_type,ai.alarm_information,d.id deviceId,d.name deviceName,d.longitude,d.latitude
        from alarm_info ai, device d
        where ai.alarm_time = (SELECT max(DATE_FORMAT(alarm_time,'%Y-%m-%d')) from alarm_info limit 1) and   d.id = ai.device_id and ai.device_id in
        where
        DATE_FORMAT(ai.alarm_time,'%Y-%m-%d') = (SELECT DATE_FORMAT(max( alarm_time),'%Y-%m-%d') from alarm_info limit 1) and   d.id = ai.device_id and ai.device_id in
        (select t.id from device t
                              inner JOIN monitor_point p on p.id = t.monitor_point_id and p.is_delete = 0
screen-api/src/main/resources/mapper/HistorySecondCruiserMapper.xml
@@ -67,4 +67,15 @@
        AND `time` <![CDATA[>=]]> #{time1}
        AND `time` <![CDATA[<=]]> #{time2}
    </select>
    <select id="getDusts" resultType="java.util.Map">
        SELECT
            value ->>'$.flylat' as flyLat,value ->>'$.flylon' as flyLon,value ->>'$.dustld' as dustld,
            `time`
        FROM `history_second_cruiser`
        WHERE mac = #{mac}
          AND `time` <![CDATA[>=]]> #{time1}
          AND `time` <![CDATA[<=]]> #{time2}
    </select>
</mapper>
screen-api/src/main/resources/mapper/ManageCoordinateMapper.xml
New file
@@ -0,0 +1,32 @@
<?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.ManageCoordinateMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.moral.api.entity.ManageCoordinate">
        <id column="coordinate_id" property="coordinateId" />
        <result column="start_point" property="startPoint" />
        <result column="end_point" property="endPoint" />
        <result column="is_del" property="isDel" />
        <result column="create_time" property="createTime" />
        <result column="update_time" property="updateTime" />
        <result column="update_user_id" property="updateUserId" />
        <result column="updaye_user_name" property="updayeUserName" />
        <result column="organization_id" property="organizationId" />
    </resultMap>
    <select id="CompareTo" resultType="com.moral.api.pojo.dto.historySecondCruiser.DustldDTO">
        SELECT
            mc.start_point as name ,
            md.longitude as flyLon,
            md.latitude as  flyLat
        FROM
            manage_coordinate AS mc
                LEFT JOIN manage_coordinate_detail AS md ON mc.coordinate_id = md.coordinate_id
        WHERE
            mc.is_del =0
        and mc.organization_id=#{orgId}
    </select>
</mapper>
screen-manage/src/main/java/com/moral/api/entity/ManageCoordinate.java
@@ -54,4 +54,7 @@
     * 修改人名称
     */
    private  String updayeUserName;
    private  Integer organizationId;
}
screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java
@@ -108,6 +108,7 @@
            String id = map.get("id").toString();
            if (id.equals("71")){
                log.warn(id, msg);
                ack.acknowledge();
                return;
            }
//            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
screen-manage/src/main/java/com/moral/api/service/impl/ManageCoordinateServiceImpl.java
@@ -12,10 +12,16 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.api.entity.ManageCoordinate;
import com.moral.api.entity.ManageCoordinateDetail;
import com.moral.api.entity.SpecialDevice;
import com.moral.api.mapper.DeviceMapper;
import com.moral.api.mapper.ManageCoordinateDetailMapper;
import com.moral.api.mapper.ManageCoordinateMapper;
import com.moral.api.mapper.SpecialDeviceMapper;
import com.moral.api.service.DeviceService;
import com.moral.api.service.ManageCoordinateDetailService;
import com.moral.api.service.ManageCoordinateService;
import com.moral.api.service.SpecialDeviceService;
import com.moral.util.TokenUtils;
@Service
@@ -25,7 +31,7 @@
    private ManageCoordinateMapper manageCoordinateMapper;
    @Autowired
    private ManageCoordinateDetailMapper manageCoordinateDetailMapper;
    private SpecialDeviceMapper specialDeviceMapper;
    /**
     * 新增路段
@@ -34,6 +40,12 @@
     */
    @Override
    public Integer interCoordinate(Map<String, Object> params) {
//        String mac = params.get("mac").toString();
        String mac ="p5dnd7a0243625";
        QueryWrapper<SpecialDevice> wrapper = new QueryWrapper<>();
        wrapper.eq("mac",mac);
        wrapper.eq("is_delete","0");
        SpecialDevice specialDevice = specialDeviceMapper.selectOne(wrapper);
        String startPoint = params.get("startPoint").toString();
        String endPoint = params.get("endPoint").toString();
        QueryWrapper<ManageCoordinate> queryWrapper = new QueryWrapper<>();
@@ -49,6 +61,7 @@
        manageCoordinate.setStartPoint(startPoint);
        manageCoordinate.setEndPoint(endPoint);
        manageCoordinate.setIsDel(0);
        manageCoordinate.setOrganizationId(specialDevice.getOrganizationId());
        int code = manageCoordinateMapper.insert(manageCoordinate);
        return code;
    }
screen-manage/src/main/resources/mapper/ManageCoordinateMapper.xml
@@ -12,6 +12,7 @@
        <result column="update_time" property="updateTime" />
        <result column="update_user_id" property="updateUserId" />
        <result column="updaye_user_name" property="updayeUserName" />
        <result column="organization_id" property="organizationId" />
    </resultMap>