‘liusuyi’
2023-06-29 c422623743896020d819972e20895aea1896f823
井管理增加关联相机字段
已添加4个文件
已修改6个文件
283 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GuideTask.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/PriorityQueueExample.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/RadarAlarmData.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarmpoints/well/domain/ArdAlarmpointsWell.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/constant/CamPriority.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/alarmpoints/ArdAlarmpointsWellMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-ard.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.ruoyi.alarm.globalAlarm.domain;
import com.ruoyi.alarm.globalAlarm.service.impl.GuideTask;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
/**
 * @Description:
 * @ClassName: PriorityQueue
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´06月29日11:18
 * @Version: 1.0
 **/
public class GuidePriorityQueue {
    /**
     * ç›¸æœºé˜Ÿåˆ—,每个相机一个优先级队列
     */
    public static Map<String, java.util.PriorityQueue<GuideTask>> cameraQueueMap = new HashMap<>();
    /**
     * åˆ›å»ºä¸€ä¸ªè‡ªå®šä¹‰çš„æ¯”较器,根据优先级属性进行比较
     */
    public static Comparator<GuideTask> getComparator() {
        Comparator<GuideTask> PriorityDescCom = Comparator.comparingInt(GuideTask::getPriority).reversed();
        Comparator<GuideTask> NumDescCom = Comparator.comparingInt(GuideTask::getNum).reversed();
        Comparator<GuideTask> alarmTimeAscCom = Comparator.comparing(GuideTask::getAlarmTime);
        Comparator<GuideTask> Comparator = PriorityDescCom.thenComparing(NumDescCom).thenComparing(alarmTimeAscCom);
        return Comparator;
    }
}
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -7,6 +7,7 @@
import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmData;
import com.ruoyi.alarm.globalAlarm.service.IGlobalAlarmService;
import com.ruoyi.alarm.radarAlarm.domain.ArdAlarmRadar;
import com.ruoyi.alarm.radarAlarm.domain.RadarAlarmData;
import com.ruoyi.alarm.radarAlarm.mapper.ArdAlarmRadarMapper;
import com.ruoyi.alarm.stealAlarm.domain.ArdAlarmStealelec;
import com.ruoyi.alarm.stealAlarm.mapper.ArdAlarmStealelecMapper;
@@ -214,17 +215,11 @@
    @Async("alarmExecutor")
    public void receiveAlarm(String topic, String message) {
        try {
            String simpleUUID = IdUtils.simpleUUID();
            switch (topic) {
                case "stealelec":
                    //region å¤„理盗电报警
                    ArdAlarmStealelec ardAlarmStealelec = JSONObject.parseObject(message, ArdAlarmStealelec.class);
                    ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(ardAlarmStealelec.getDescribe());
                    if (well != null) {
                        ardAlarmStealelec.setLongitude(well.getLongitude());
                        ardAlarmStealelec.setLatitude(well.getLatitude());
                        ardAlarmStealelec.setAltitude(well.getAltitude());
                    }
                    ArdAlarmStealelec existe = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId());
                    if (StringUtils.isNotNull(existe)) {
                        return;
@@ -232,6 +227,11 @@
                    int aas = ardAlarmStealelecMapper.insertArdAlarmStealelec(ardAlarmStealelec);
                    if (aas > 0) {
                        log.info("stealelec入库成功:" + ardAlarmStealelec);
                        ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(ardAlarmStealelec.getDescribe());
                        if (well != null) {
                            ardAlarmStealelec.setLongitude(well.getLongitude());
                            ardAlarmStealelec.setLatitude(well.getLatitude());
                            ardAlarmStealelec.setAltitude(well.getAltitude());
                        //引导录像
                        CameraCmd cmd = new CameraCmd();
                        cmd.setRecordBucketName("record");
@@ -239,11 +239,15 @@
                        cmd.setOperator("sys_steal_elec");
                        cmd.setExpired(30);
                        cmd.setTargetPosition(new double[]{well.getLongitude(), well.getLatitude(), well.getAltitude()});
                        String url = guideCamera(cmd);
                            boolean res = guideCamera(cmd);
                            if (res) {
                                String url = alarmToRecord(cmd);
                        if (StringUtils.isNotEmpty(url)) {
                            //更新录像
                            ardAlarmStealelec.setRecordUrl(url);
                            ardAlarmStealelecMapper.updateArdAlarmStealelec(ardAlarmStealelec);
                                }
                            }
                        }
                    }
                    //endregion
@@ -251,7 +255,7 @@
                case "tube":
                    //region å¤„理管线泄露报警
                    ArdAlarmTube ardAlarmTube = JSONObject.parseObject(message, ArdAlarmTube.class);
                    ardAlarmTube.setId(simpleUUID);
                    ardAlarmTube.setId(IdUtils.simpleUUID());
                    ArdTubesDetails atd = new ArdTubesDetails();
                    atd.setReelNumber(ardAlarmTube.getTubeId());
                    List<ArdTubesDetails> ardTubesDetails = ardTubesDetailsMapper.selectArdTubesDetailsList(atd);
@@ -279,11 +283,14 @@
                        cmd.setOperator("sys_tube_leak");
                        cmd.setExpired(30);
                        cmd.setTargetPosition(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude(), ardAlarmTube.getAltitude()});
                        String url = guideCamera(cmd);
                        //更新录像
                        boolean res = guideCamera(cmd);
                        if (res) {
                            String url = alarmToRecord(cmd);
                        if (StringUtils.isNotEmpty(url)) {
                                //更新录像
                            ardAlarmTube.setRecordUrl(url);
                            ardAlarmTubeMapper.updateArdAlarmTube(ardAlarmTube);
                            }
                        }
                    }
                    //endregion
@@ -291,7 +298,7 @@
                case "camera":
                    //region å¤„理通用光电报警
                    ArdAlarmCamera ardAlarmCamera = JSONObject.parseObject(message, ArdAlarmCamera.class);
                    ardAlarmCamera.setId(simpleUUID);
                    ardAlarmCamera.setId(IdUtils.simpleUUID());
                    int aac = ardAlarmCameraMapper.insertArdAlarmCamera(ardAlarmCamera);
                    if (aac > 0) {
                        log.debug("camera入库成功:" + ardAlarmCamera);
@@ -302,23 +309,45 @@
                        cmd.setOperator("sys_camera");
                        cmd.setExpired(30);
                        cmd.setTargetPosition(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()});
                        String url = guideCamera(cmd);
                        //更新录像
                        boolean res = guideCamera(cmd);
                        if (res) {
                            String url = alarmToRecord(cmd);
                        if (StringUtils.isNotEmpty(url)) {
                                //更新录像
                            ardAlarmCamera.setRecordUrl(url);
                            ardAlarmCameraMapper.updateArdAlarmCamera(ardAlarmCamera);
                            }
                        }
                    }
                    //endregion
                    break;
                case "radar":
                    //region å¤„理雷达报警
                    ArdAlarmRadar ardAlarmRadar = JSONObject.parseObject(message, ArdAlarmRadar.class);
                    ardAlarmRadar.setId(simpleUUID);
                    RadarAlarmData radarAlarmData = JSONObject.parseObject(message, RadarAlarmData.class);
                    List<ArdAlarmRadar> ardAlarmRadars = radarAlarmData.getArdAlarmRadars();
                    Map<String, Object> readyGuide = new HashMap<>();
                    for (ArdAlarmRadar ardAlarmRadar : ardAlarmRadars) {
                        ardAlarmRadar.setId(IdUtils.simpleUUID());
                        ardAlarmRadar.setAlarmTime(radarAlarmData.getAlarmTime());
                    int aar = ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
                    if (aar > 0) {
                        log.debug("radar入库成功:" + ardAlarmRadar);
                    }
                        readyGuide.put(ardAlarmRadar.getName(), ardAlarmRadar);//每个报警点取出一条报警
                    }
                    //获取每个报警点关联的相机
                    //先找报警雷达塔上的相机
                    CameraCmd cmd = new CameraCmd();
                    cmd.setCameraId("1");
                    cmd.setChannelNum(1);
                    boolean b = guideCamera(cmd);
                    //再找报警点关联的相机
                    cmd.setCameraId("2");
                    cmd.setChannelNum(1);
                    boolean b1 = guideCamera(cmd);
                    //endregion
                    break;
            }
@@ -329,14 +358,13 @@
    /**
     * @描述 å¼•导最近的大光电指向目标
     * @参数 [targetPosition]
     * @返回值 java.lang.String
     * @参数 [cmd]
     * @返回值 boolean
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/6/15 11:55
     * @创建时间 2023/6/28 16:34
     * @修改人和其它信息
     */
    private String guideCamera(CameraCmd cmd) {
        String url = "";
    private boolean guideCamera(CameraCmd cmd) {
        try {
            String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime");
            //获取所有大光电
@@ -362,20 +390,43 @@
                log.debug("查找到最近光电:" + minDistanceCameraId + ",尝试引导");
                if (guideMap.get(minDistanceCameraId).equals(0)) {
                    log.debug("该光电未开启报警引导");
                    return "";
                    return false;
                }
                //引导光电
                cmd.setCameraId(minDistanceCameraId);
                cmd.setChannelNum(ArdTool.getChannelBydayNightTime(dayNightTime));
                boolean guideRes = hikClientService.guideTargetPosition(cmd);
                if (guideRes) {
                return guideRes;
            } else {
                log.debug("未查找到最近光电");
                return false;
            }
        } catch (Exception ex) {
            log.error("引导异常:" + ex.getMessage());
            return false;
        }
    }
    /**
     * @描述 æŠ¥è­¦å½•像
     * @参数 [cmd]
     * @返回值 java.lang.String
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/6/28 16:33
     * @修改人和其它信息
     */
    public String alarmToRecord(CameraCmd cmd) {
        String url = "";
        try {
                    log.debug("引导成功,尝试录像");
            String cameraId = cmd.getCameraId();
                    hikClientService.controlLock(cmd);//上锁
                    cmd.setEnable(true);//开始录像
                    hikClientService.recordToMinio(cmd);//开始录像
                    GlobalVariable.threadMap.put(minDistanceCameraId, Thread.currentThread().getName());//将相机id与当前处理线程名称绑定
            GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());//将相机id与当前处理线程名称绑定
                    Thread.sleep(cmd.getExpired() * 1000);//录像时长
                    String thread = GlobalVariable.threadMap.get(minDistanceCameraId);
            String thread = GlobalVariable.threadMap.get(cameraId);
                    String currentThread = Thread.currentThread().getName();
                    //判断相机绑定线程是否是当前线程,如果是,停止录像,如果不是,说明相机被其他线程抢占,不停止录像
                    if (thread.equals(currentThread)) {
@@ -383,12 +434,8 @@
                        cmd.setUploadMinio(true);//上传minio
                        url = hikClientService.recordToMinio(cmd);//停止录像返回url
                    }
                }
            } else {
                log.debug("未查找到最近光电");
            }
        } catch (Exception ex) {
            log.error("引导异常:" + ex.getMessage());
            log.error("录像异常:" + ex.getMessage());
        }
        return url;
    }
@@ -420,6 +467,14 @@
        return map;
    }
    /**
     * @描述 åŽ†å²æŠ¥è­¦æŸ¥è¯¢
     * @参数 [command, beginTime, endTime, pageNum, pageSize]
     * @返回值 java.lang.Object
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/6/28 13:30
     * @修改人和其它信息
     */
    @Override
    public Object selectAlarmList(Integer command, String beginTime, String endTime, Integer pageNum, Integer pageSize) {
        Map<String, Object> params = new HashMap<>();
@@ -465,28 +520,6 @@
                return ardAlarmTubes;
        }
        return null;
    }
    public static void main(String[] args) {
        // ç»™å®šåæ ‡ A
        double Ax = 0;
        double Ay = 0;
        // ç»™å®šè§’度(以度为单位)
        double angle = 45;
        // ç»™å®šè·ç¦»
        double distance = 1.414;
        // å°†è§’度转换为弧度
        double radians = Math.toRadians(angle);
        // è®¡ç®— B åæ ‡
        double Bx = Ax + distance * Math.cos(radians);
        double By = Ay + distance * Math.sin(radians);
        // è¾“出结果
        System.out.println("坐标 B: (" + Bx + ", " + By + ")");
    }
}
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GuideTask.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.alarm.globalAlarm.service.impl;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
 * @Description: å¼•导任务
 * @ClassName: GuideTask
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´06月29日11:05
 * @Version: 1.0
 **/
@Data
@AllArgsConstructor
public class GuideTask {
    String alarmId;
    String alarmType;
    Integer priority;
    String alarmTime;
    Integer num;
}
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/PriorityQueueExample.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.ruoyi.alarm.globalAlarm.service.impl;
import com.ruoyi.alarm.globalAlarm.domain.GuidePriorityQueue;
import java.util.Comparator;
import java.util.PriorityQueue;
/**
 * @Description:
 * @ClassName: PriorityQueueExample
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´06月29日10:41
 * @Version: 1.0
 **/
public class PriorityQueueExample {
    public static void main(String[] args) {
        Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
        // åˆ›å»ºç›¸æœº1的优先级队列,并传入自定义的比较器
        PriorityQueue<GuideTask> queue1 = new PriorityQueue<>(comparator);
        // æ·»åŠ å¯¹è±¡åˆ°é˜Ÿåˆ—ä¸­
        GuideTask task1 = new GuideTask("task1", "radar", 999, "2023-06-29 11:10:00", 1);
        GuideTask task2 = new GuideTask("task2", "radar", 999, "2023-06-29 11:11:00", 2);
        GuideTask task3 = new GuideTask("task3", "radar", 999, "2023-06-29 11:12:00", 1);
        GuideTask task4 = new GuideTask("task4", "radar", 888, "2023-06-29 11:13:00", 3);
        queue1.add(task1);
        queue1.add(task2);
        queue1.add(task3);
        queue1.add(task4);
        GuidePriorityQueue.cameraQueueMap.put("相机1", queue1);
        for (String camera :  GuidePriorityQueue.cameraQueueMap.keySet()) {
            PriorityQueue<GuideTask> queue =  GuidePriorityQueue.cameraQueueMap.get(camera);
            // ä¾æ¬¡å–出队列中的对象并打印
            while (!queue.isEmpty()) {
                GuideTask obj = queue.poll();
                System.out.println(obj.getAlarmId() + " - Priority: " + obj.getPriority() + "- Num:" + obj.getNum() + "- time-" + obj.getAlarmTime());
            }
        }
    }
}
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java
@@ -1,10 +1,10 @@
package com.ruoyi.alarm.radarAlarm.domain;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
@@ -70,4 +70,6 @@
     */
    private Integer count;
}
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/RadarAlarmData.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.alarm.radarAlarm.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * @Description:
 * @ClassName: radarAlarmInfos
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´06月28日13:48
 * @Version: 1.0
 **/
@Data
public class RadarAlarmData {
    /** æŠ¥è­¦æ—¶é—´ */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "报警时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date alarmTime;
    private List<ArdAlarmRadar> ardAlarmRadars;
}
ard-work/src/main/java/com/ruoyi/alarmpoints/well/domain/ArdAlarmpointsWell.java
@@ -93,4 +93,7 @@
    /** ç”¨æˆ·id */
    private String userId;
    /** å…³è”相机ID */
    private String cameraId;
}
ard-work/src/main/java/com/ruoyi/constant/CamPriority.java
@@ -1,7 +1,10 @@
package com.ruoyi.constant;
import com.ruoyi.alarm.globalAlarm.service.impl.GuideTask;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
/**
 * @Description: ç›¸æœºæŽ§åˆ¶ä¼˜å…ˆçº§
@@ -11,6 +14,7 @@
 * @Version: 1.0
 **/
public class CamPriority {
    public static Map<String,Object> priorityMap=new HashMap<>();
    static {
        priorityMap.put("sys_radar_fire",999);//雷达防火报警
ard-work/src/main/resources/mapper/alarmpoints/ArdAlarmpointsWellMapper.xml
@@ -28,6 +28,7 @@
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="cameraId" column="camera_id"/>
    </resultMap>
    <sql id="selectArdAlarmpointsWellVo">
@@ -53,7 +54,8 @@
               c.create_by,
               c.create_time,
               c.update_by,
               c.update_time
               c.update_time,
               c.camera_id
        from ard_alarmpoints_well 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
@@ -115,6 +117,7 @@
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="cameraId != null">camera_id,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
@@ -140,6 +143,7 @@
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="cameraId != null">#{cameraId},</if>
        </trim>
    </insert>
@@ -168,6 +172,7 @@
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="cameraId != null">camera_id = #{cameraId},</if>
        </trim>
         where well_id = #{wellId}
    </update>
ruoyi-admin/src/main/resources/application-ard.yml
@@ -20,7 +20,7 @@
  clientId: m3
  username: admin
  password: xzx12345
  topic: tube,stealelec
  topic: tube,stealelec,radar
  timeout: 100
  keepalive: 60
  enabled: true