‘liusuyi’
2023-06-13 6b68dddf393b885698d48760c8e1972d574e30c4
增加报警查询接口
增加报警查看接口
已添加2个文件
已修改17个文件
已删除1个文件
443 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/controller/GlobalAlarmController.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GlobalAlarmCondition.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GlobalAlarmData.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/GlobalAlarmServiceImpl.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/IGlobalAlarmService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/controller/ardAlarmStealElecController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/domain/ArdAlarmStealelec.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/mapper/ArdAlarmStealelecMapper.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/service/IStealElecAlarmService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/service/impl/IStealElecAlarmServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/service/impl/ArdAlarmTubeServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/tube/TubeTools.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/stealAlarm/ArdAlarmStealelecMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/controller/GlobalAlarmController.java
@@ -1,9 +1,12 @@
package com.ruoyi.alarm.globalAlarm.controller;
import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmCondition;
import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmData;
import com.ruoyi.alarm.globalAlarm.service.IGlobalAlarmService;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
@@ -19,7 +22,7 @@
 * @Version: 1.0
 **/
@RestController
@RequestMapping("/ardAlarmLog")
@RequestMapping("/ardAlarm")
@Api(tags = "报警数据汇总接口")
@Anonymous
public class GlobalAlarmController {
@@ -27,10 +30,16 @@
    @Resource
    IGlobalAlarmService globalAlarmService;
    @PostMapping("/selectAlarmLog")
    @PostMapping("/List")
    @ApiOperation(value = "报警查询接口",notes = "这里包含了所有报警类型的数据")
    public List<Object>  selectAlarmLog(@RequestBody GlobalAlarmCondition condition) {
        List<Object> result = globalAlarmService.selectAlarmLogs(condition);
        return result;
    public AjaxResult selectAlarmLog(@RequestBody GlobalAlarmCondition condition) {
        List<GlobalAlarmData> result = globalAlarmService.selectAlarmLogs(condition);
        return AjaxResult.success(result);
    }
    @PostMapping("/view")
    @ApiOperation(value = "查看报警接口",notes = "指定查看某个报警数据")
    public AjaxResult  viewAlarmLog(@RequestBody GlobalAlarmCondition condition) {
        Object result = globalAlarmService.updateAlarmViewTime(condition);
        return AjaxResult.success(result);
    }
}
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GlobalAlarmCondition.java
@@ -1,10 +1,11 @@
package com.ruoyi.alarm.globalAlarm.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
@@ -20,4 +21,5 @@
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "报警类型", name = "command", notes = "用来区分报警类型的标记", required = true)
    Integer command;
    String id;
}
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GlobalAlarmData.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.alarm.globalAlarm.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
/**
 * @Description: å…¨å±€æŠ¥è­¦å®žä½“
 * @ClassName: GlobalAlarmData
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´06月13日13:20
 * @Version: 1.0
 **/
@Data
@Accessors(chain = true)
public class GlobalAlarmData {
    String id;
    String name;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    Date alarmTime;
    Double longitude;
    Double latitude;
    Double altitude;
    Integer count;//未读数
    Integer total;//总数
}
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/GlobalAlarmServiceImpl.java
ÎļþÒÑɾ³ý
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/IGlobalAlarmService.java
@@ -1,18 +1,19 @@
package com.ruoyi.alarm.globalAlarm.service;
import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmCondition;
import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmData;
import java.util.List;
/**
 * @ClassName: globalAlarmService
 * @Description:
 * @Description: å…¨å±€æŠ¥è­¦å¤„理业务接口
 * @Author: Administrator
 * @Date: 2023å¹´03月10日 11:02
 * @Version: 1.0
 **/
public interface IGlobalAlarmService {
    public List<Object> selectAlarmLogs(GlobalAlarmCondition condition);
    public List<GlobalAlarmData> selectAlarmLogs(GlobalAlarmCondition condition);
    Object updateAlarmViewTime(GlobalAlarmCondition condition);
    public void receiveAlarm(String topic,String message);
}
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
package com.ruoyi.alarm.globalAlarm.service.impl;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmCondition;
import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmData;
import com.ruoyi.alarm.globalAlarm.service.IGlobalAlarmService;
import com.ruoyi.alarm.stealAlarm.domain.ArdAlarmStealelec;
import com.ruoyi.alarm.stealAlarm.mapper.ArdAlarmStealelecMapper;
import com.ruoyi.alarm.tubeAlarm.domain.ArdAlarmTube;
import com.ruoyi.alarm.tubeAlarm.mapper.ArdAlarmTubeMapper;
import com.ruoyi.alarm.tubeAlarm.service.IArdAlarmTubeService;
import com.ruoyi.alarmpoints.tube.domain.ArdTubes;
import com.ruoyi.alarmpoints.tube.domain.ArdTubesDetails;
import com.ruoyi.alarmpoints.tube.mapper.ArdTubesDetailsMapper;
import com.ruoyi.alarmpoints.tube.mapper.ArdTubesMapper;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.UUID;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.utils.tube.GeoPoint;
import com.ruoyi.utils.tube.TubeTools;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;
/**
 * @ClassName: globalAlarmServiceImpl
 * @Description:
 * @Author: Administrator
 * @Date: 2023å¹´03月10日 11:03
 * @Version: 1.0
 **/
@Service
@Slf4j(topic = "mqtt")
public class GlobalAlarmServiceImpl implements IGlobalAlarmService {
    @Resource
    ArdAlarmStealelecMapper ardAlarmStealelecMapper;
    @Resource
    IArdAlarmTubeService ardAlarmTubeService;
    @Resource
    ArdTubesMapper ardTubesMapper;
    @Resource
    ArdTubesDetailsMapper ardTubesDetailsMapper;
    @Resource
    private ISysConfigService configService;
    @Override
    public List<GlobalAlarmData> selectAlarmLogs(GlobalAlarmCondition condition) {
        String refreshTime = configService.selectConfigByKey("refreshTime");
        switch (condition.getCommand()) {
            case 1001:
                List<ArdAlarmStealelec> ardAlarmStealelecs = ardAlarmStealelecMapper.selectAllByCommandArdAlarmStealelecList(refreshTime);
                return ardAlarmStealelecs.stream()
                        .map(ardAlarmStealelec -> {
                            GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                                    .setId(ardAlarmStealelec.getId())
                                    .setName(ardAlarmStealelec.getDescribe())
                                    .setAlarmTime(ardAlarmStealelec.getStartTime())
                                    .setLongitude(ardAlarmStealelec.getLongitude())
                                    .setLatitude(ardAlarmStealelec.getLatitude())
                                    .setAltitude(ardAlarmStealelec.getAltitude())
                                    .setCount(ardAlarmStealelec.getCount())
                                    .setTotal(ardAlarmStealelec.getTotal());
                            return globalAlarmData;
                        })
                        .collect(Collectors.toList());
            default:
                return null;
        }
    }
    @Override
    public Object updateAlarmViewTime(GlobalAlarmCondition condition) {
        SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        switch (condition.getCommand()) {
            case 1001:
                String id = condition.getId();
                ArdAlarmStealelec ardAlarmStealelec = ardAlarmStealelecMapper.selectByPrimaryKey(id);
                if(StringUtils.isNotNull(ardAlarmStealelec)) {
                    String describe = ardAlarmStealelec.getDescribe();
                    String startTime = fmt.format(ardAlarmStealelec.getStartTime());
                    int i = ardAlarmStealelecMapper.updateViewTimeByDescribe(describe, startTime, DateUtils.getTime());
                    return ardAlarmStealelec;
                }
            default: return null;
        }
    }
    @Override
    @Async("alarmExecutor")
    public void receiveAlarm(String topic, String message) {
        switch (topic) {
            case "tube":
                ArdAlarmTube ardAlarmTube = JSONObject.parseObject(message, ArdAlarmTube.class);
                ardAlarmTube.setId(UUID.randomUUID().toString().replace("-", ""));
                ArdTubesDetails atd = new ArdTubesDetails();
                atd.setReelNumber(ardAlarmTube.getTubeId());
                List<ArdTubesDetails> ardTubesDetails = ardTubesDetailsMapper.selectArdTubesDetailsList(atd);
                if (ardTubesDetails.size() > 0) {
                    String tubeId = ardTubesDetails.get(0).getTubeId();
                    ArdTubes ardTubes = ardTubesMapper.selectArdTubesById(tubeId);
                    ardAlarmTube.setTubeName(ardTubes.getName());
                    ardAlarmTube.setColor(ardTubes.getColor());
                    ardAlarmTube.setPipeDiameter(ardTubes.getPipeDiameter());
                    ardAlarmTube.setTubeType(ardTubes.getType());
                    GeoPoint geoPoint = TubeTools.CalculateCoordinates(ardTubesDetails, ardAlarmTube.getPosition());
                    if (StringUtils.isNotNull(geoPoint)) {
                        ardAlarmTube.setLongitude(geoPoint.getLongitude());
                        ardAlarmTube.setLatitude(geoPoint.getLatitude());
                        ardAlarmTube.setAltitude(geoPoint.getAltitude());
                    }
                }
                int i = ardAlarmTubeService.insertArdAlarmTube(ardAlarmTube);
                if (i > 0) {
                    log.info("入库成功:" + ardAlarmTube.toString());
                }
                break;
        }
    }
}
ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/controller/ardAlarmStealElecController.java
@@ -20,14 +20,5 @@
@Anonymous
public class ardAlarmStealElecController {
    @Resource
    IStealElecAlarmService IStealElecAlarmService;
    @GetMapping("/updateViewState")
    String updateViewState() {
        String describe = "注采901班X2-10-3E7";
        String currentTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        int i = IStealElecAlarmService.updateViewTimeByDescribe(describe, currentTime);
        return "更新成功" + i;
    }
}
ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/domain/ArdAlarmStealelec.java
@@ -1,5 +1,6 @@
package com.ruoyi.alarm.stealAlarm.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
@@ -45,11 +46,13 @@
     * æŠ¥è­¦å¼€å§‹æ—¶é—´
     */
    @Excel(name = "报警开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;
    /**
     * æŠ¥è­¦ç»“束时间
     */
    @Excel(name = "报警结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endTime;
    /**
@@ -79,11 +82,16 @@
    @Excel(name = "纬度")
    private double latitude;
    /**
     * é«˜å±‚
     */
    @Excel(name = "高层")
    private double altitude;
    /**
     * æŠ¥è­¦æ€»æ•°
     */
    private String total;
    private Integer total;
    /**
     * æœªè¯»æŠ¥è­¦æ•°é‡
     */
    private String count;
    private Integer count;
}
ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/mapper/ArdAlarmStealelecMapper.java
@@ -3,6 +3,8 @@
import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmCondition;
import com.ruoyi.alarm.stealAlarm.domain.ArdAlarmStealelec;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
@@ -11,5 +13,6 @@
    ArdAlarmStealelec selectByPrimaryKey(String id);
    List<ArdAlarmStealelec> selectRealByCondition(@Param("refreshTime")String refreshTime,@Param("deptId")Long deptId);
    List<ArdAlarmStealelec> selectHistoryByCondition(GlobalAlarmCondition condition);
    int updateViewTimeByDescribe(@Param("describe")String describe,@Param("viewTime")String viewTime);
    List<ArdAlarmStealelec> selectAllByCommandArdAlarmStealelecList(@Param("refreshTime")String refreshTime);
    int updateViewTimeByDescribe(@Param("describe")String describe,@Param("alarmTime") String alarmTime,@Param("viewTime") String viewTime);
}
ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/service/IStealElecAlarmService.java
@@ -2,6 +2,7 @@
import com.ruoyi.alarm.stealAlarm.domain.ArdAlarmStealelec;
import java.util.Date;
import java.util.List;
@@ -15,5 +16,5 @@
public interface IStealElecAlarmService {
    void getAlarmByApi();
    List<ArdAlarmStealelec> getRealAlarm(Long deptId);
    int updateViewTimeByDescribe(String describe,String DirectLE);
    int updateViewTimeByDescribe(String describe, String alarmTime, String viewTime);
}
ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/service/impl/IStealElecAlarmServiceImpl.java
@@ -121,7 +121,7 @@
     * @修改人和其它信息
     */
    @Override
    public int updateViewTimeByDescribe(String describe, String viewTime) {
        return ardAlarmStealelecMapper.updateViewTimeByDescribe(describe, viewTime);
    public int updateViewTimeByDescribe(String describe, String alarmTime,String viewTime) {
        return ardAlarmStealelecMapper.updateViewTimeByDescribe(describe,alarmTime, viewTime);
    }
}
ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/service/impl/ArdAlarmTubeServiceImpl.java
@@ -4,9 +4,8 @@
import com.ruoyi.alarm.tubeAlarm.mapper.ArdAlarmTubeMapper;
import com.ruoyi.alarm.tubeAlarm.service.IArdAlarmTubeService;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@@ -18,7 +17,7 @@
 */
@Service
public class ArdAlarmTubeServiceImpl implements IArdAlarmTubeService {
    @Autowired
    @Resource
    private ArdAlarmTubeMapper ardAlarmTubeMapper;
    /**
ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
@@ -152,10 +152,18 @@
     */
    @Excel(name = "视场角")
    private Double camFov;
    /**
     * æœ€å¤§å¯è§†è·ç¦»
     */
    @Excel(name = "最大可视距离")
    private String camMaxVisibleDistance;
    /**
     * æ‰€å±žå¡”ID
     */
    private String towerId;
    /**
     * ç™»å½•ID
     */
ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java
@@ -94,7 +94,7 @@
    public @ResponseBody
    AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) {
        cmd.setOperator(SecurityUtils.getUserId());
        return toAjax(sdk.PTZControlWithSpeed(cmd));
        return toAjax(sdk.pTZControlWithSpeed(cmd));
    }
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -29,7 +29,7 @@
    boolean isOnLine(CameraCmd cmd);
    //云台控制
    boolean PTZControlWithSpeed(CameraCmd cmd);
    boolean pTZControlWithSpeed(CameraCmd cmd);
    //设置聚焦值
    boolean setFocusPos(CameraCmd cmd);
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -267,7 +267,7 @@
     */
    @Override
    @SdkOperate
    public boolean PTZControlWithSpeed(CameraCmd cmd) {
    public boolean pTZControlWithSpeed(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        boolean enable = cmd.isEnable();
        Integer channelNum = cmd.getChannelNum();
ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
@@ -1,6 +1,6 @@
package com.ruoyi.utils.mqtt;
import com.ruoyi.alarm.globalAlarm.service.GlobalAlarmServiceImpl;
import com.ruoyi.alarm.globalAlarm.service.impl.GlobalAlarmServiceImpl;
import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.*;
ard-work/src/main/java/com/ruoyi/utils/tube/TubeTools.java
@@ -2,6 +2,9 @@
import com.ruoyi.alarmpoints.tube.domain.ArdTubesDetails;
import lombok.extern.slf4j.Slf4j;
import org.gavaghan.geodesy.Ellipsoid;
import org.gavaghan.geodesy.GeodeticCalculator;
import org.gavaghan.geodesy.GlobalCoordinates;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.Comparator;
@@ -20,22 +23,22 @@
public class TubeTools {
    public static void main(String[] args) {
        // å‡è®¾ç»™å®šçš„三个坐标点 A、B、C
        double x1 = 124.939903268;
        double y1 = 46.684520056;
        double x2 = 124.94049634327537;
        double y2 = 46.68442539350505;
        double x3 = 124.940552075;
        double y3 = 46.684416498;
        GeoPoint pointA = new GeoPoint(124.939903268, 46.684520056, 143.3 - 0.73);
        GeoPoint pointB = new GeoPoint(124.94034787826001, 46.68444909044429, 144.12232823014708);
        GeoPoint pointC = new GeoPoint(124.940552075, 46.684416498, 144.5 - 0.81);
        double distance = getDistance(x1, y1, x3, y3);
        log.debug("总距离:" + distance);
        double distance1 = getDistance(x1, y1, x2, y2);
        log.debug("距离起点距离:" + distance1);
        double distance2 = getDistance(x2, y2, x3, y3);
        log.debug("距离终点距离:" + distance2);
        double distance = getDistance(pointA, pointC);
        double diffAC = pointA.getAltitude() - pointC.getAltitude();
        log.info("AC总距离:" + distance + " AC高度差:" + diffAC);
        double distance1 = getDistance(pointA, pointB);
        double diffAB = pointA.getAltitude() - pointB.getAltitude();
        log.info("AB距离:" + distance1 + " AB高度差:" + diffAB);
        double distance2 = getDistance(pointB, pointC);
        double diffBC = pointB.getAltitude() - pointC.getAltitude();
        log.info("BC距离:" + distance2 + " BC高度差:" + diffBC);
        // è®¡ç®—斜率
        double slope1 = (y2 - y1) / (x2 - x1);
        double slope2 = (y3 - y2) / (x3 - x2);
        double slope1 = (pointB.getLatitude() - pointA.getLatitude()) / (pointB.getLongitude() - pointA.getLongitude());
        double slope2 = (pointC.getLatitude() - pointB.getLatitude()) / (pointC.getLongitude() - pointB.getLongitude());
        // è®¾ç½®æ–œçŽ‡å·®å€¼çš„é˜ˆå€¼
        double threshold = 0.000001;
@@ -57,21 +60,19 @@
     * @修改人和其它信息
     */
    public static GeoPoint CalculateCoordinates(List<ArdTubesDetails> ardTubesDetails, Integer alarmPointDistance) {
            try {
                Comparator<ArdTubesDetails> comparator = Comparator.comparingInt(person -> Integer.parseInt(person.getInflectionPointNumber())); // ä½¿ç”¨Collections.sort方法进行排序
                Collections.sort(ardTubesDetails, comparator);
                double x = ardTubesDetails.get(0).getLongitude();
                double y = ardTubesDetails.get(0).getLatitude();
                GeoPoint point0 = new GeoPoint(ardTubesDetails.get(0).getLongitude(), ardTubesDetails.get(0).getLatitude(), ardTubesDetails.get(0).getAltitude() - ardTubesDetails.get(0).getDepth());
                TreeMap<Integer, Double> distanceMap = new TreeMap<>();
                TreeMap<Integer, Object> tubeMap = new TreeMap<>();
                double distance = 0.0;
                for (ArdTubesDetails atd : ardTubesDetails) {
                    distance += getDistance(x, y, atd.getLongitude(), atd.getLatitude());
                    GeoPoint point = new GeoPoint(atd.getLongitude(), atd.getLatitude(), atd.getAltitude() - atd.getDepth());
                    distance += getDistance(point, point0);
                    distanceMap.put(Integer.parseInt(atd.getInflectionPointNumber()), distance);
                    tubeMap.put(Integer.parseInt(atd.getInflectionPointNumber()), atd);
                    x = atd.getLongitude();
                    y = atd.getLatitude();
                    point0 = point;
                }
                Integer num = 0;
                double tempDistance = 0.0;
@@ -184,35 +185,19 @@
        return angle;
    }
    private static final double EARTH_RADIUS = 6378.137; // 6378.137为地球半径(单位:千米)
    /**
     * æ ¹æ®ç»çº¬åº¦ï¼Œè®¡ç®—两点间的距离
     *
     * @param longitude1 ç¬¬ä¸€ä¸ªç‚¹çš„经度
     * @param latitude1  ç¬¬ä¸€ä¸ªç‚¹çš„纬度
     * @param longitude2 ç¬¬äºŒä¸ªç‚¹çš„经度
     * @param latitude2  ç¬¬äºŒä¸ªç‚¹çš„纬度
     * @return è¿”回距离 å•位千米
     * @param GeoPoint pa ç¬¬ä¸€ä¸ªç‚¹
     * @param GeoPoint  pb ç¬¬äºŒä¸ªç‚¹
     * @return è¿”回距离 å•位米
     */
    private static double getDistance(double longitude1, double latitude1, double longitude2, double latitude2) {
        // çº¬åº¦
        double lat1 = Math.toRadians(latitude1);
        double lat2 = Math.toRadians(latitude2);
        // ç»åº¦
        double lng1 = Math.toRadians(longitude1);
        double lng2 = Math.toRadians(longitude2);
        // çº¬åº¦ä¹‹å·®
        double a = lat1 - lat2;
        // ç»åº¦ä¹‹å·®
        double b = lng1 - lng2;
        // è®¡ç®—两点距离的公式
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
                Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
        // å¼§é•¿ä¹˜åœ°çƒåŠå¾„, è¿”回单位: åƒç±³
        s = s * EARTH_RADIUS;
        //System.out.println("距离"+s);
        return s * 1000;
    public static GeodeticCalculator geodeticCalculator = new GeodeticCalculator();
    public static double getDistance(GeoPoint pa, GeoPoint pb) {
        GlobalCoordinates source = new GlobalCoordinates(pa.getLatitude(), pa.getLongitude());
        GlobalCoordinates target = new GlobalCoordinates(pb.getLatitude(), pb.getLongitude());
        double distance = geodeticCalculator.calculateGeodeticCurve(Ellipsoid.WGS84, source, target).getEllipsoidalDistance();
        double res = Math.sqrt(Math.pow(pa.getAltitude() - pb.getAltitude(), 2) + Math.pow(distance, 2));
        return res;
    }
}
ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
@@ -30,6 +30,7 @@
        <result property="loginId" column="login_id"/>
        <result property="operatorId" column="operator_id"/>
        <result property="operatorExpired" column="operator_expired"/>
        <result property="camMaxVisibleDistance"    column="cam_max_visible_distance"    />
    </resultMap>
    <sql id="selectArdCamerasVo">
@@ -56,7 +57,8 @@
               c.cam_depth,
               c.cam_fov,
               c.operator_id,
               c.operator_expired
               c.operator_expired,
               c.cam_max_visible_distance
        from ard_cameras c
                 left join sys_dept d on d.dept_id = c.dept_id
                 left join sys_user u on u.user_id = c.user_id
@@ -89,6 +91,7 @@
            <if test="camAspectratio != null ">and c.cam_aspectratio = #{camAspectratio}</if>
            <if test="camDepth != null ">and c.cam_depth = #{camDepth}</if>
            <if test="camFov != null ">and c.cam_fov = #{camFov}</if>
            <if test="camMaxVisibleDistance != null ">and c.cam_max_visible_distance = #{camMaxVisibleDistance}</if>
            <if test="loginId != null ">and c.login_id = #{loginId}</if>
            <!-- æ•°æ®èŒƒå›´è¿‡æ»¤ -->
            ${params.dataScope}
@@ -121,6 +124,7 @@
            <if test="camAspectratio != null ">and c.cam_aspectratio = #{camAspectratio}</if>
            <if test="camDepth != null ">and c.cam_depth = #{camDepth}</if>
            <if test="camFov != null ">and c.cam_fov = #{camFov}</if>
            <if test="camMaxVisibleDistance != null ">and c.cam_max_visible_distance = #{camMaxVisibleDistance}</if>
            <if test="loginId != null ">and c.login_id = #{loginId}</if>
        </where>
    </select>
@@ -152,6 +156,7 @@
            <if test="camAspectratio != null">cam_aspectratio,</if>
            <if test="camDepth != null">cam_depth,</if>
            <if test="camFov != null">cam_fov,</if>
            <if test="camMaxVisibleDistance != null ">cam_max_visible_distance,</if>
            <if test="loginId != null">login_id,</if>
            <if test="deptId != null">dept_id,</if>
            <if test="userId != null">user_id,</if>
@@ -181,6 +186,7 @@
            <if test="camAspectratio != null">#{camAspectratio},</if>
            <if test="camDepth != null">#{camDepth},</if>
            <if test="camFov != null">#{camFov},</if>
            <if test="camMaxVisibleDistance != null ">#{camMaxVisibleDistance},</if>
            <if test="loginId != null">#{loginId},</if>
            <if test="deptId != null">#{deptId},</if>
            <if test="userId != null">#{userId},</if>
@@ -213,6 +219,7 @@
            <if test="camAspectratio != null">cam_aspectratio = #{camAspectratio},</if>
            <if test="camDepth != null">cam_depth = #{camDepth},</if>
            <if test="camFov != null">cam_fov = #{camFov},</if>
            <if test="camMaxVisibleDistance != null ">cam_max_visible_distance = #{camMaxVisibleDistance},</if>
            <if test="loginId != null">login_id = #{loginId},</if>
            <if test="deptId != null">dept_id = #{deptId},</if>
            <if test="userId != null">user_id = #{userId},</if>
ard-work/src/main/resources/mapper/stealAlarm/ArdAlarmStealelecMapper.xml
@@ -40,6 +40,24 @@
            </if>
        </where>
    </select>
    <select id="selectAllByCommandArdAlarmStealelecList" resultMap="BaseResultMap">
        SELECT T.*
        FROM (
                 SELECT aas.ID,
                        aas.DESCRIBE,
                        aas.start_time,
                        aas.longitude,
                        aas.latitude,
                        aas.altitude,
                        ROW_NUMBER() OVER ( PARTITION BY aas.DESCRIBE ORDER BY aas.start_time DESC ) AS rn, COUNT(CASE WHEN aas.view_time IS NULL THEN 1 END) OVER ( PARTITION BY aas.DESCRIBE ) AS COUNT,
                    COUNT ( aas.start_time ) OVER ( PARTITION BY DESCRIBE ) AS total
                 FROM
                     ard_alarm_stealelec aas
                 WHERE
                     aas.start_time >= ( CURRENT_TIMESTAMP - INTERVAL '%${refreshTime}%' MINUTE )
             ) T
        WHERE T.rn = 1
    </select>
    <select id="selectRealByCondition" resultMap="BaseResultMap">
        SELECT aas.*, A.COUNT, A.total
        FROM (
@@ -61,10 +79,11 @@
                 LEFT JOIN ard_alarm_stealelec aas ON A.ID = aas.ID
        ORDER BY aas.start_time DESC LIMIT 50
    </select>
    <update id="updateViewTimeByDescribe" parameterType="java.lang.String">
    <update id="updateViewTimeByDescribe" parameterType="String">
        update ard_alarm_stealelec
        set view_time=#{viewTime}
        where describe = #{describe}
          and start_time&lt;=#{alarmTime}
          and view_time is null
    </update>
    <insert id="insert" parameterType="ArdAlarmStealelec">