‘liusuyi’
2023-12-09 6b4a4baa1048b1ed148580802ab06a78bbbd3db7
报警引导增加优先井配置ptz引导
已添加2个文件
已修改13个文件
531 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/global/domain/GuideDataDto.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/global/domain/GuidePTZ.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/global/domain/GuideTask.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/radar/domain/ArdAlarmRadarFire.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/radar/domain/ArdAlarmRadarMove.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/radar/domain/ArdAlarmRadarPump.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/steal/service/impl/IStealElecAlarmServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarmpoints/well/domain/ArdAlarmpointsWell.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/alarmpoints/ArdAlarmpointsWellMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/logback.xml 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/global/domain/GuideDataDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.alarm.global.domain;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
/**
 * @Description: å¼•导数据实体
 * @ClassName: GuideDataDto
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´12月09日11:37:58
 **/
@Data
@Accessors(chain = true)
public class GuideDataDto {
    String radarId;
    String name;
    String cameraId;
    String alarmId;
    String alarmType;
    Date receiveTime;
    Integer num;
    Integer recordSn;
    double[] targetPosition;
    GuidePTZ guidePTZ;
}
ard-work/src/main/java/com/ruoyi/alarm/global/domain/GuidePTZ.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.alarm.global.domain;
import lombok.Data;
import lombok.experimental.Accessors;
/**
 * @Description:
 * @ClassName: GuidePTZ
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´12月09日10:13:28
 **/
@Data
@Accessors(chain = true)
public class GuidePTZ {
    /** å¼•导P值 */
    private Double P;
    /** å¼•导T值 */
    private Double T;
    /** å¼•导Z值 */
    private Double Z;
}
ard-work/src/main/java/com/ruoyi/alarm/global/domain/GuideTask.java
@@ -53,4 +53,8 @@
     * å¼•导目标经纬度
     */
    double[] targetPosition;
    /** å¼•导PTZ值 */
    private GuidePTZ guidePTZ;
}
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
@@ -11,10 +11,7 @@
import com.ruoyi.alarm.digitization3.mapper.ArdAlarmDigitization3Mapper;
import com.ruoyi.alarm.external.domain.ArdAlarmExternal;
import com.ruoyi.alarm.external.mapper.ArdAlarmExternalMapper;
import com.ruoyi.alarm.global.domain.GlobalAlarmCondition;
import com.ruoyi.alarm.global.domain.GlobalAlarmData;
import com.ruoyi.alarm.global.domain.GuidePriorityQueue;
import com.ruoyi.alarm.global.domain.GuideTask;
import com.ruoyi.alarm.global.domain.*;
import com.ruoyi.alarm.global.service.IGlobalAlarmService;
import com.ruoyi.alarm.radar.domain.*;
import com.ruoyi.alarm.radar.mapper.ArdAlarmRadarFireMapper;
@@ -35,13 +32,11 @@
import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.domain.entity.SysConfig;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.ConfigUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.external.domain.ArdEquipExternal;
import com.ruoyi.device.external.mapper.ArdEquipExternalMapper;
import com.ruoyi.device.radar.mapper.ArdEquipRadarMapper;
@@ -54,14 +49,12 @@
import com.ruoyi.utils.tube.GeoPoint;
import com.ruoyi.utils.tube.TubeTools;
import lombok.extern.slf4j.Slf4j;
import org.gavaghan.geodesy.GlobalCoordinates;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -73,7 +66,7 @@
 * @Version: 1.0
 **/
@Service
@Slf4j(topic = "mqtt")
@Slf4j(topic = "alarm")
public class GlobalAlarmServiceImpl implements IGlobalAlarmService {
    //region ä¾èµ–注入
    @Resource
@@ -1039,9 +1032,17 @@
                            return;
                        }
                        double[] coordinate = new double[]{longitude, latitude};
                        String nearbyCameraId = getNearbyCamera(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()});
                        if (StringUtils.isNotEmpty(nearbyCameraId)) {
                            messagesEnqueued(nearbyCameraId, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getCreateTime(), 1, 1, coordinate);
                        String cameraId = getCameraByNear(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()});
                        if (StringUtils.isNotEmpty(cameraId)) {
                            GuideDataDto guideDataDto = new GuideDataDto()
                                    .setAlarmId(cameraId)
                                    .setAlarmId(ardAlarmTube.getId())
                                    .setAlarmType("sys_tube_leak")
                                    .setReceiveTime(ardAlarmTube.getCreateTime())
                                    .setNum(1)
                                    .setRecordSn(1)
                                    .setTargetPosition(coordinate);
                            messagesEnqueued(guideDataDto);
                        }
                        //endregion
                    }
@@ -1061,7 +1062,7 @@
                case "radar":
                    //region å¤„理雷达报警
                    String mergeTime = ConfigUtils.getConfigValue("radarMergeTime");
                    Integer radarMergeTime= mergeTime==null||"".equals(mergeTime)?10:Integer.valueOf(mergeTime);
                    Integer radarMergeTime = mergeTime == null || "".equals(mergeTime) ? 10 : Integer.valueOf(mergeTime);
                    RadarAlarmData radarAlarmData = JSONObject.parseObject(message, RadarAlarmData.class);
                    List<ArdAlarmRadar> ardAlarmRadars = radarAlarmData.getArdAlarmRadars();
                    for (ArdAlarmRadar ardAlarmRadar : ardAlarmRadars) {
@@ -1069,13 +1070,16 @@
                        String radarId = radarAlarmData.getRadarId();
                        String alarmpointName = ardAlarmRadar.getName();//兴趣点名称
                        ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(alarmpointName);
                        if(well==null)
                        {
                        if (well == null) {
                            return;
                        }
                        Double guideP = well.getGuideP();
                        Double guideT = well.getGuideT();
                        Double guideZ = well.getGuideZ();
                        Double longitude = well.getLongitude();
                        Double latitude = well.getLatitude();
                        String targetId = ardAlarmRadar.getTargetId();
                        GuidePTZ guidePTZ = new GuidePTZ();
                        switch (ardAlarmRadar.getAlarmType()) {
                            case "运动目标检测":
                                ArdAlarmRadarMove ardAlarmRadarMove = new ArdAlarmRadarMove();
@@ -1089,6 +1093,11 @@
                                ardAlarmRadarMove.setLatitude(latitude);
                                ardAlarmRadarMove.setUpdateTime(radarAlarmData.getAlarmTime());
                                ardAlarmRadarMove.setRadarId(radarId);
                                guidePTZ.setP(guideP);
                                guidePTZ.setT(guideT);
                                guidePTZ.setZ(guideZ);
                                ardAlarmRadarMove.setGuidePTZ(guidePTZ);
                                Date alarmTime = ardAlarmRadarMove.getAlarmTime();
                                //获取当前兴趣点当前雷达的上一条数据
                                ArdAlarmRadarMove lastMoveData = ardAlarmRadarMoveMapper.selectArdAlarmRadarLastData(ardAlarmRadarMove.getName());
@@ -1101,7 +1110,7 @@
                                    //否则比对更新时间
                                    Date lastUpdateTime = lastMoveData.getUpdateTime();
                                    Date lastGuideTime = lastMoveData.getGuideTime();
                                    long secDatePoor = DateUtils.getSecDatePoor(alarmTime,lastUpdateTime);
                                    long secDatePoor = DateUtils.getSecDatePoor(alarmTime, lastUpdateTime);
                                    if (secDatePoor <= radarMergeTime) {
                                        //小于10秒的新数据,更新上一条
                                        ArdAlarmRadarMove updateData = new ArdAlarmRadarMove();
@@ -1109,9 +1118,8 @@
                                        updateData.setUpdateTime(alarmTime);
                                        //判断引导时间超过5分钟再次引导
                                        long secDatePoorGuide = DateUtils.getSecDatePoor(alarmTime,lastGuideTime);
                                        if(secDatePoorGuide>=300)
                                        {
                                        long secDatePoorGuide = DateUtils.getSecDatePoor(alarmTime, lastGuideTime);
                                        if (secDatePoorGuide >= 300) {
                                            updateData.setGuideTime(alarmTime);
                                            radarMoveGuide(ardAlarmRadarMove);//引导
                                        }
@@ -1142,6 +1150,10 @@
                                ardAlarmRadarFire.setAlarmType("热源检测");
                                ardAlarmRadarFire.setLongitude(longitude);
                                ardAlarmRadarFire.setLatitude(latitude);
                                guidePTZ.setP(guideP);
                                guidePTZ.setT(guideT);
                                guidePTZ.setZ(guideZ);
                                ardAlarmRadarFire.setGuidePTZ(guidePTZ);
                                ardAlarmRadarFire.setRadarId(radarId);
                                ardAlarmRadarFire.setUpdateTime(radarAlarmData.getAlarmTime());
                                //
@@ -1155,9 +1167,8 @@
                                } else {
                                    //否则比对更新时间
                                    Date lastUpdateTime = lastFireData.getUpdateTime();
                                    Date lastGuideTime = lastFireData.getGuideTime();
                                    long secDatePoor = DateUtils.getSecDatePoor(alarmTime,lastUpdateTime);
                                    long secDatePoor = DateUtils.getSecDatePoor(alarmTime, lastUpdateTime);
                                    if (secDatePoor <= radarMergeTime) {
                                        //小于10秒的新数据,更新上一条
                                        ArdAlarmRadarFire updateData = new ArdAlarmRadarFire();
@@ -1165,9 +1176,8 @@
                                        updateData.setUpdateTime(alarmTime);
                                        //判断引导时间超过5分钟再次引导
                                        long secDatePoorGuide = DateUtils.getSecDatePoor(alarmTime,lastGuideTime);
                                        if(secDatePoorGuide>=300)
                                        {
                                        long secDatePoorGuide = DateUtils.getSecDatePoor(alarmTime, lastGuideTime);
                                        if (secDatePoorGuide >= 300) {
                                            updateData.setGuideTime(alarmTime);
                                            radarFireGuide(ardAlarmRadarFire);//引导
                                        }
@@ -1191,11 +1201,12 @@
                                ardAlarmRadarPump.setAlarmType("雷达抽油机停机");
                                ardAlarmRadarPump.setUpdateTime(radarAlarmData.getAlarmTime());
                                alarmTime = ardAlarmRadarPump.getAlarmTime();
                                ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(alarmpointName);
                                if (StringUtils.isNotNull(ardAlarmpointsWell)) {
                                    ardAlarmRadarPump.setLongitude(ardAlarmpointsWell.getLongitude());
                                    ardAlarmRadarPump.setLatitude(ardAlarmpointsWell.getLatitude());
                                }
                                ardAlarmRadarPump.setLongitude(well.getLongitude());
                                ardAlarmRadarPump.setLatitude(well.getLatitude());
                                guidePTZ.setP(guideP);
                                guidePTZ.setT(guideT);
                                guidePTZ.setZ(guideZ);
                                ardAlarmRadarPump.setGuidePTZ(guidePTZ);
                                //
                                ArdAlarmRadarPump lastPumpData = ardAlarmRadarPumpMapper.selectArdAlarmRadarLastData(ardAlarmRadarPump.getName());
                                if (lastPumpData == null) {
@@ -1207,16 +1218,15 @@
                                    //否则比对更新时间
                                    Date lastUpdateTime = lastPumpData.getUpdateTime();
                                    Date lastGuideTime = lastPumpData.getGuideTime();
                                    long secDatePoor = DateUtils.getSecDatePoor(alarmTime,lastUpdateTime);
                                    long secDatePoor = DateUtils.getSecDatePoor(alarmTime, lastUpdateTime);
                                    if (secDatePoor <= radarMergeTime) {
                                        //小于10秒的新数据,更新上一条
                                        ArdAlarmRadarPump updateData = new ArdAlarmRadarPump();
                                        updateData.setId(lastPumpData.getId());
                                        updateData.setUpdateTime(alarmTime);
                                        //判断引导时间超过5分钟再次引导
                                        long secDatePoorGuide = DateUtils.getSecDatePoor(alarmTime,lastGuideTime);
                                        if(secDatePoorGuide>=300)
                                        {
                                        long secDatePoorGuide = DateUtils.getSecDatePoor(alarmTime, lastGuideTime);
                                        if (secDatePoorGuide >= 300) {
                                            radarPumpGuide(ardAlarmRadarPump);//引导
                                            updateData.setGuideTime(alarmTime);
                                        }
@@ -1240,10 +1250,10 @@
                    ardAlarmExternal.setCreateTime(new Date());//接收时间
                    //外联防区名称就是兴趣点,查兴趣点坐标
                    String defenseName = ardAlarmExternal.getDefenseName();
                    ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(defenseName);
                    if (StringUtils.isNotNull(ardAlarmpointsWell)) {
                        ardAlarmExternal.setLongitude(ardAlarmpointsWell.getLongitude());
                        ardAlarmExternal.setLatitude(ardAlarmpointsWell.getLatitude());
                    ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(defenseName);
                    if (StringUtils.isNotNull(well)) {
                        ardAlarmExternal.setLongitude(well.getLongitude());
                        ardAlarmExternal.setLatitude(well.getLatitude());
                    }
                    int aae = ardAlarmExternalMapper.insertArdAlarmExternal(ardAlarmExternal);
                    if (aae > 0) {
@@ -1252,10 +1262,23 @@
                        if (StringUtils.isNull(ardAlarmExternal.getLongitude()) || StringUtils.isNull(ardAlarmExternal.getLatitude())) {
                            return;
                        }
                        double[] guideCoordinate = new double[]{ardAlarmExternal.getLongitude(), ardAlarmExternal.getLatitude()};//引导坐标
                        String nearbyCameraId = getNearbyCamera(guideCoordinate);//最近相机ID
                        if (StringUtils.isNotEmpty(nearbyCameraId)) {
                            messagesEnqueued(nearbyCameraId, ardAlarmExternal.getId(), "sys_external", ardAlarmExternal.getCreateTime(), 1, 1, guideCoordinate);
                        double[] coordinate = new double[]{ardAlarmExternal.getLongitude(), ardAlarmExternal.getLatitude()};//引导坐标
                        GuidePTZ guidePTZ = new GuidePTZ()
                                .setP(well.getGuideP())
                                .setT(well.getGuideT())
                                .setZ(well.getGuideZ());
                        String cameraId = getCameraByNear(coordinate);//最近相机ID
                        if (StringUtils.isNotEmpty(cameraId)) {
                            GuideDataDto guideDataDto = new GuideDataDto()
                                    .setAlarmId(cameraId)
                                    .setAlarmId(ardAlarmExternal.getId())
                                    .setAlarmType("sys_external")
                                    .setReceiveTime(ardAlarmExternal.getCreateTime())
                                    .setNum(1)
                                    .setRecordSn(1)
                                    .setTargetPosition(coordinate)
                                    .setGuidePTZ(guidePTZ);
                            messagesEnqueued(guideDataDto);
                        }
                        //endregion
                    }
@@ -1283,10 +1306,18 @@
                        if (StringUtils.isNull(ardAlarmAccess.getLongitude()) || StringUtils.isNull(ardAlarmAccess.getLatitude())) {
                            return;
                        }
                        double[] guideCoordinate = new double[]{ardAlarmAccess.getLongitude(), ardAlarmAccess.getLatitude()};//引导坐标
                        String nearbyCameraId = getNearbyCamera(guideCoordinate);//最近相机ID
                        if (StringUtils.isNotEmpty(nearbyCameraId)) {
                            messagesEnqueued(nearbyCameraId, ardAlarmAccess.getId(), "sys_access_control", ardAlarmAccess.getCreateTime(), 1, 1, guideCoordinate);
                        double[] coordinate = new double[]{ardAlarmAccess.getLongitude(), ardAlarmAccess.getLatitude()};//引导坐标
                        String cameraId = getCameraByNear(coordinate);//最近相机ID
                        if (StringUtils.isNotEmpty(cameraId)) {
                            GuideDataDto guideDataDto = new GuideDataDto()
                                    .setAlarmId(cameraId)
                                    .setAlarmId(ardAlarmAccess.getId())
                                    .setAlarmType("sys_external")
                                    .setReceiveTime(ardAlarmAccess.getCreateTime())
                                    .setNum(1)
                                    .setRecordSn(1)
                                    .setTargetPosition(coordinate);
                            messagesEnqueued(guideDataDto);
                        }
                        //endregion
                    }
@@ -1345,8 +1376,10 @@
     * recordSn å½•像存储位置 1-recordUrl1 2-recordUrl2
     * targetPosition æŠ¥è­¦ç‚¹ä½ç½®åæ ‡
     */
    private void messagesEnqueued(String cameraId, String alarmId, String alarmType, Date receiveTime, Integer num, Integer recordSn, double[] targetPosition) {
    private void messagesEnqueued(GuideDataDto guideDataDto) {
        try {
            String cameraId = guideDataDto.getCameraId();
            String alarmType = guideDataDto.getAlarmType();
            if (!IsEnableGuide(cameraId)) {
                log.info("相机:" + cameraId + "未开启报警引导功能");
                return;
@@ -1356,43 +1389,43 @@
            //相机ID
            guideTask.setCameraId(cameraId);
            //报警类型
            String aType = "";
            switch (alarmType) {
                case "运动目标检测":
                    aType = "sys_radar_move";
                    alarmType = "sys_radar_move";
                    break;
                case "热源检测":
                    aType = "sys_radar_fire";
                    alarmType = "sys_radar_fire";
                    break;
                case "雷达抽油机停机":
                    aType = "sys_radar_pump";
                    break;
                default:
                    aType = alarmType;
                    alarmType = "sys_radar_pump";
                    break;
            }
            guideTask.setAlarmType(aType);
            guideTask.setAlarmType(alarmType);
            //通道(通过日夜时间研判)
            String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime");
            Integer channel = ArdTool.getChannelBydayNightTime(dayNightTime);
            guideTask.setChanNum(channel);
            //报警ID
            guideTask.setAlarmId(alarmId);
            guideTask.setAlarmId(guideDataDto.getAlarmId());
            //接收时间
            guideTask.setReceiveTime(fmt.format(receiveTime));
            guideTask.setReceiveTime(fmt.format(guideDataDto.getReceiveTime()));
            //报警优先级(通过优先级字典)
            String priority = DictUtils.getDictValue("cameras_priority", aType);
            String priority = DictUtils.getDictValue("cameras_priority", alarmType);
            if (StringUtils.isEmpty(priority)) {
                log.debug("未匹配到优先级,请检查优先级字典配置");
                return;
            }
            guideTask.setPriority(Integer.valueOf(priority));
            //报警次数
            guideTask.setNum(num);
            guideTask.setNum(guideDataDto.getNum());
            //录像存储位置
            guideTask.setRecordSn(recordSn);
            guideTask.setRecordSn(guideDataDto.getRecordSn());
            //目标经纬度
            guideTask.setTargetPosition(targetPosition);
            guideTask.setTargetPosition(guideDataDto.getTargetPosition());
            //目标PTZ
            if (guideDataDto.getGuidePTZ() != null) {
                guideTask.setGuidePTZ(guideDataDto.getGuidePTZ());
            }
            //消息入队
            queueManager.addTaskToQueue(cameraId, guideTask);
            //打印队列
@@ -1421,7 +1454,7 @@
    /**
     * èŽ·å–é™„è¿‘å¼€å¯æŠ¥è­¦å¼•å¯¼åŠŸèƒ½å…‰ç”µ
     */
    private String getNearbyCamera(double[] targetPosition) {
    private String getCameraByNear(double[] targetPosition) {
        String minDistanceCameraId = "";
        try {
            //获取所有大光电
@@ -1459,16 +1492,17 @@
        return minDistanceCameraId;
    }
    //雷达获取相机引导入队
    private void radarGuideToQueue(String alarmId, String radarId, String name, String alarmType, Date createTime, double[] coordinate) {
        int index = name.indexOf("(");
        String alarmpointName = name.substring(0, index);
    //获取相机引导入队
    private void getCameraGuideToQueue(GuideDataDto guideDataDto) {
        int index = guideDataDto.getName().indexOf("(");
        String alarmpointName = guideDataDto.getName().substring(0, index);
        //获取雷达所在塔上的大光电
        ArdCameras cameraWithTower = ardEquipRadarMapper.getCameraByRadar(radarId);
        ArdCameras cameraWithTower = ardEquipRadarMapper.getCameraByRadar(guideDataDto.getRadarId());
        if (StringUtils.isNotNull(cameraWithTower)) {
            log.debug("获取到雷达塔上的光电:" + cameraWithTower.getId());
            //如果雷达塔上有光电
            messagesEnqueued(cameraWithTower.getId(), alarmId, alarmType, createTime, 1, 1, coordinate);
            guideDataDto.setCameraId(cameraWithTower.getId());
            messagesEnqueued(guideDataDto);
        } else {
            log.debug("未获取到雷达塔上的光电,无法引导");
        }
@@ -1479,13 +1513,16 @@
            if (cameraId.equals(cameraWithTower.getId())) {
                return;
            }
            log.info("获取到报警点关联的光电:" + cameraId);
            log.debug("获取到报警点关联的光电:" + cameraId);
            //如果报警点关联了光电
            messagesEnqueued(cameraId, alarmId, alarmType, createTime, 1, 2, coordinate);
            guideDataDto.setCameraId(cameraId);
            guideDataDto.setRecordSn(2);//兴趣点光电引导录像存储第二个路径
            messagesEnqueued(guideDataDto);
        } else {
            log.debug("未获取到报警点关联的光电,无法引导");
        }
    }
    //雷达移动引导
    private void radarMoveGuide(ArdAlarmRadarMove ardAlarmRadarMove) {
        log.debug("雷达移动开始引导");
@@ -1495,8 +1532,19 @@
        }
        double[] coordinate = new double[]{ardAlarmRadarMove.getLongitude(), ardAlarmRadarMove.getLatitude()};//报警坐标
        //引导入队
        radarGuideToQueue(ardAlarmRadarMove.getId(), ardAlarmRadarMove.getRadarId(), ardAlarmRadarMove.getName(), ardAlarmRadarMove.getAlarmType(), ardAlarmRadarMove.getCreateTime(), coordinate);//更新
        GuideDataDto guideDataDto = new GuideDataDto()
                .setRadarId( ardAlarmRadarMove.getRadarId())
                .setName(ardAlarmRadarMove.getName())
                .setAlarmId(ardAlarmRadarMove.getId())
                .setAlarmType(ardAlarmRadarMove.getAlarmType())
                .setReceiveTime(ardAlarmRadarMove.getCreateTime())
                .setNum(1)
                .setRecordSn(1)
                .setTargetPosition(coordinate)
                .setGuidePTZ(ardAlarmRadarMove.getGuidePTZ());
        getCameraGuideToQueue(guideDataDto);//获取相机入队
    }
    //雷达防火引导
    private void radarFireGuide(ArdAlarmRadarFire ardAlarmRadarFire) {
        log.debug("雷达防火开始引导");
@@ -1506,8 +1554,19 @@
        }
        double[] coordinate = new double[]{ardAlarmRadarFire.getLongitude(), ardAlarmRadarFire.getLatitude()};//报警坐标
        //引导入队
        radarGuideToQueue(ardAlarmRadarFire.getId(), ardAlarmRadarFire.getRadarId(), ardAlarmRadarFire.getName(), ardAlarmRadarFire.getAlarmType(), ardAlarmRadarFire.getCreateTime(), coordinate);//更新
        GuideDataDto guideDataDto = new GuideDataDto()
                .setRadarId( ardAlarmRadarFire.getRadarId())
                .setName(ardAlarmRadarFire.getName())
                .setAlarmId(ardAlarmRadarFire.getId())
                .setAlarmType(ardAlarmRadarFire.getAlarmType())
                .setReceiveTime(ardAlarmRadarFire.getCreateTime())
                .setNum(1)
                .setRecordSn(1)
                .setTargetPosition(coordinate)
                .setGuidePTZ(ardAlarmRadarFire.getGuidePTZ());
        getCameraGuideToQueue(guideDataDto);//获取相机入队
    }
    //雷达抽油机停机引导
    private void radarPumpGuide(ArdAlarmRadarPump ardAlarmRadarPump) {
        log.debug("雷达抽油机停机开始引导");
@@ -1518,7 +1577,16 @@
        }
        double[] coordinate = new double[]{ardAlarmRadarPump.getLongitude(), ardAlarmRadarPump.getLatitude()};//报警坐标
        //引导入队
        radarGuideToQueue(ardAlarmRadarPump.getId(), ardAlarmRadarPump.getRadarId(), ardAlarmRadarPump.getName(), ardAlarmRadarPump.getAlarmType(), ardAlarmRadarPump.getCreateTime(), coordinate);//更新
        GuideDataDto guideDataDto = new GuideDataDto()
                .setRadarId( ardAlarmRadarPump.getRadarId())
                .setName(ardAlarmRadarPump.getName())
                .setAlarmId(ardAlarmRadarPump.getId())
                .setAlarmType(ardAlarmRadarPump.getAlarmType())
                .setReceiveTime(ardAlarmRadarPump.getCreateTime())
                .setNum(1)
                .setRecordSn(1)
                .setTargetPosition(coordinate)
                .setGuidePTZ(ardAlarmRadarPump.getGuidePTZ());
        getCameraGuideToQueue(guideDataDto);//获取相机入队
    }
}
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java
@@ -20,6 +20,8 @@
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
 * @ClassName QueueTaskExecutor
@@ -57,6 +59,11 @@
            cmd.setOperator(guideTask.getAlarmType());
            cmd.setExpired(30);
            cmd.setRecordBucketName("record");
            Map<String, Double> ptzMap = new HashMap<>();
            ptzMap.put("p", guideTask.getGuidePTZ().getP());
            ptzMap.put("t", guideTask.getGuidePTZ().getT());
            ptzMap.put("z", guideTask.getGuidePTZ().getZ());
            cmd.setPtzMap(ptzMap);
            if (guideTask.getRecordSn().equals(1)) {
                cmd.setRecordObjectName("alarm_" + guideTask.getAlarmId() + "_1");
            } else {
@@ -64,7 +71,13 @@
            }
            log.debug("开始引导");
            boolean guideRes = cameraSdkService.guideTargetPosition(cmd);
            boolean guideRes = false;
            if (cmd.getPtzMap().get("p") != null) {
                //p值存在 ä¼˜å…ˆå¼•导ptz
                guideRes = cameraSdkService.setPtz(cmd);
            } else {
                guideRes = cameraSdkService.guideTargetPosition(cmd);
            }
            if (guideRes) {
                log.debug("引导成功");
                cameraSdkService.controlLock(cmd);//上锁
ard-work/src/main/java/com/ruoyi/alarm/radar/domain/ArdAlarmRadarFire.java
@@ -2,6 +2,7 @@
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.alarm.global.domain.GuidePTZ;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@@ -85,6 +86,8 @@
     */
    private String radarId;
    /** å¼•导PTZ值 */
    private GuidePTZ guidePTZ;
}
ard-work/src/main/java/com/ruoyi/alarm/radar/domain/ArdAlarmRadarMove.java
@@ -2,6 +2,7 @@
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.alarm.global.domain.GuidePTZ;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@@ -85,5 +86,7 @@
    private String RadarId;
    /** å¼•导PTZ值 */
    private GuidePTZ guidePTZ;
}
ard-work/src/main/java/com/ruoyi/alarm/radar/domain/ArdAlarmRadarPump.java
@@ -1,7 +1,9 @@
package com.ruoyi.alarm.radar.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.alarm.global.domain.GuidePTZ;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@@ -10,63 +12,88 @@
/**
 * é›·è¾¾æŠ½æ²¹æœºåœæœºæŠ¥è­¦å¯¹è±¡ ard_alarm_radar_pump
 *
 *
 * @author ard
 * @date 2023-09-02
 */
@Data
public class ArdAlarmRadarPump extends BaseEntity
{
public class ArdAlarmRadarPump extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** è®°å½•ID */
    /**
     * è®°å½•ID
     */
    private String id;
    /** å…´è¶£ç‚¹åç§° */
    /**
     * å…´è¶£ç‚¹åç§°
     */
    @Excel(name = "兴趣点名称")
    private String name;
    /** ç›®æ ‡ID */
    /**
     * ç›®æ ‡ID
     */
    @Excel(name = "目标ID")
    private String targetId;
    /** æŠ¥è­¦ç±»åž‹ */
    /**
     * æŠ¥è­¦ç±»åž‹
     */
    @Excel(name = "报警类型")
    private String alarmType;
    /** æŠ¥è­¦æ—¶é—´ */
    /**
     * æŠ¥è­¦æ—¶é—´
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "报警时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date alarmTime;
    /** ç»åº¦ */
    /**
     * ç»åº¦
     */
    @Excel(name = "经度")
    private Double longitude;
    /** çº¬åº¦ */
    /**
     * çº¬åº¦
     */
    @Excel(name = "纬度")
    private Double latitude;
    /** å¼•导录像1 */
    /**
     * å¼•导录像1
     */
    @Excel(name = "引导录像1")
    private String recordUrl1;
    /** å¼•导录像2 */
    /**
     * å¼•导录像2
     */
    @Excel(name = "引导录像2")
    private String recordUrl2;
    /** æŸ¥çœ‹æ—¶é—´ */
    /**
     * æŸ¥çœ‹æ—¶é—´
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "查看时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date viewTime;
    /** ç”¨æˆ·ID */
    /**
     * ç”¨æˆ·ID
     */
    @Excel(name = "用户ID")
    private String userId;
    /** éƒ¨é—¨ID */
    /**
     * éƒ¨é—¨ID
     */
    @Excel(name = "部门ID")
    private Long deptId;
    /** å¼•导时间 */
    /**
     * å¼•导时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "引导时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date guideTime;
@@ -84,4 +111,9 @@
     * é›·è¾¾ID
     */
    private String radarId;
    /**
     * å¼•导PTZ值
     */
    private GuidePTZ guidePTZ;
}
ard-work/src/main/java/com/ruoyi/alarm/steal/service/impl/IStealElecAlarmServiceImpl.java
@@ -25,7 +25,7 @@
 * @Date 2022/12/26 16:34
 * @Version 1.0
 */
@Slf4j(topic = "stealAlarm")
@Slf4j(topic = "alarm")
@Service
public class IStealElecAlarmServiceImpl implements IStealElecAlarmService {
    @Resource
ard-work/src/main/java/com/ruoyi/alarmpoints/well/domain/ArdAlarmpointsWell.java
@@ -101,6 +101,17 @@
    /** å…³è”相机ID */
    private String cameraId;
    /** å¼•导P值 */
    private Double guideP;
    /** å¼•导T值 */
    private Double guideT;
    /** å¼•导Z值 */
    private Double guideZ;
    @TableField(exist = false)
    private String type;
}
ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.inspect.service.impl;
import java.util.*;
import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
import com.ruoyi.common.utils.DateUtils;
@@ -21,6 +22,7 @@
import com.ruoyi.inspect.mapper.ArdVideoInspectTaskMapper;
import com.ruoyi.inspect.domain.ArdVideoInspectTask;
import com.ruoyi.inspect.service.IArdVideoInspectTaskService;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
@@ -440,9 +442,8 @@
                    targetPositon[2] = ardAlarmpointsWell.getAltitude();
                    /*获取相机坐标*/
                    ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId);
                    if(StringUtils.isNull(cameras))
                    {
                        log.debug("找不到相机:"+cameraId);
                    if (StringUtils.isNull(cameras)) {
                        log.debug("找不到相机:" + cameraId);
                        return;
                    }
                    double[] cameraPositon = new double[3];
@@ -456,7 +457,17 @@
                    cmd.setTargetPosition(targetPositon);
                    cmd.setOperator("sys_patrol_inspect");
                    cmd.setExpired(step.getRecordingTime() * 60);
                    boolean setTargetPosition = cameraSdkService.guideTargetPosition(cmd);
                    Map<String, Double> ptzMap = new HashMap<>();
                    ptzMap.put("p", ardAlarmpointsWell.getGuideP());
                    ptzMap.put("t", ardAlarmpointsWell.getGuideT());
                    ptzMap.put("z", ardAlarmpointsWell.getGuideZ());
                    cmd.setPtzMap(ptzMap);
                    boolean setTargetPosition;
                    if (cmd.getPtzMap().get("p") != null) {
                        setTargetPosition = cameraSdkService.setPtz(cmd);
                    } else {
                        setTargetPosition = cameraSdkService.guideTargetPosition(cmd);
                    }
                    if (setTargetPosition) {
                        /*控制相机巡检成功,开始录像*/
                        cameraSdkService.recordStart(cmd);
@@ -498,9 +509,8 @@
                    targetPositon[2] = ardAlarmpointsWell.getAltitude();
                    /*获取相机坐标*/
                    ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId);
                    if(StringUtils.isNull(cameras))
                    {
                        log.debug("找不到相机:"+cameraId);
                    if (StringUtils.isNull(cameras)) {
                        log.debug("找不到相机:" + cameraId);
                        return;
                    }
                    double[] cameraPositon = new double[3];
@@ -514,7 +524,17 @@
                    cmd.setTargetPosition(targetPositon);
                    cmd.setOperator("sys_patrol_inspect");
                    cmd.setExpired(step.getRecordingTime() * 60);
                    boolean setTargetPosition = cameraSdkService.guideTargetPosition(cmd);
                    Map<String, Double> ptzMap = new HashMap<>();
                    ptzMap.put("p", ardAlarmpointsWell.getGuideP());
                    ptzMap.put("t", ardAlarmpointsWell.getGuideT());
                    ptzMap.put("z", ardAlarmpointsWell.getGuideZ());
                    cmd.setPtzMap(ptzMap);
                    boolean setTargetPosition;
                    if (cmd.getPtzMap().get("p") != null) {
                        setTargetPosition = cameraSdkService.setPtz(cmd);
                    } else {
                        setTargetPosition = cameraSdkService.guideTargetPosition(cmd);
                    }
                    if (!setTargetPosition) {
                        /*控制失败,当前步骤启动时间置null*/
                        ardVideoInspectTask.setCurrentStepStartTime("");
@@ -649,6 +669,7 @@
    /**
     * èŽ·å–ç›¸æœºçš„ç©ºé—²æ—¶æ®µ
     *
     * @param cameraId
     * @return
     */
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -176,6 +176,7 @@
    @Async("loginExecutor")
    public void asyncLogin(ArdCameras camera) {
        try {
            Thread.sleep(100);
            // åˆå§‹åŒ–
            if (!hCNetSDK.NET_DVR_Init()) {
                log.error("SDK初始化失败");
@@ -214,7 +215,7 @@
            //同步登录
            int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
            if (lUserID < 0) {
                log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],错误码:" + hCNetSDK.NET_DVR_GetLastError());
                log.debug("Login Failed ã€ " + camera.getIp() + ":" + camera.getPort() + " ã€‘,Error Code:" + hCNetSDK.NET_DVR_GetLastError());
                camera.setChanNum(0);
                camera.setLoginId(-1);
                camera.setState("0");
@@ -224,7 +225,7 @@
                return;
            }
            log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]");
            log.debug("Login Success ã€ " + camera.getIp() + ":" + camera.getPort() + " ã€‘");
            if (fExceptionCallBack == null) {
                fExceptionCallBack = new ExceptionCallBack();//异常回调
                //设置异常回调函数(可在回调函数中获取设备上下线状态等)
ard-work/src/main/resources/mapper/alarmpoints/ArdAlarmpointsWellMapper.xml
@@ -29,6 +29,9 @@
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="cameraId" column="camera_id"/>
        <result property="guideP" column="guide_p"/>
        <result property="guideT" column="guide_t"/>
        <result property="guideZ" column="guide_z"/>
    </resultMap>
    <resultMap type="ArdAlarmpointsWell" id="wellResult">
@@ -61,7 +64,10 @@
               c.create_time,
               c.update_by,
               c.update_time,
               c.camera_id
               c.camera_id,
               c.guide_p,
               c.guide_t,
               c.guide_z
        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
@@ -127,6 +133,9 @@
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="cameraId != null">camera_id,</if>
            <if test="guideP != null">guide_p,</if>
            <if test="guideT != null">guide_t,</if>
            <if test="guideZ != null">guide_z,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
@@ -153,6 +162,9 @@
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="cameraId != null">#{cameraId},</if>
            <if test="guideP != null">#{guideP},</if>
            <if test="guideT != null">#{guideT},</if>
            <if test="guideZ != null">#{guideZ},</if>
        </trim>
    </insert>
@@ -182,6 +194,9 @@
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="cameraId != null">camera_id = #{cameraId},</if>
            <if test="guideP != null">guide_p = #{guideP},</if>
            <if test="guideT != null">guide_t = #{guideT},</if>
            <if test="guideZ != null">guide_z = #{guideZ},</if>
        </trim>
        where id = #{id}
    </update>
@@ -211,6 +226,9 @@
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="cameraId != null">camera_id = #{cameraId},</if>
            <if test="guideP != null">guide_p = #{guideP},</if>
            <if test="guideT != null">guide_t = #{guideT},</if>
            <if test="guideZ != null">guide_z = #{guideZ},</if>
        </trim>
        where well_id = #{wellId}
    </update>
ruoyi-admin/src/main/resources/logback.xml
@@ -133,19 +133,6 @@
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!--盗电报警日志输出-->
    <appender name="stealAlarm" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/stealAlarm.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--按天回滚daily-->
            <fileNamePattern>${log.path}/stealAlarm.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--日志最大的历史60天-->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!--websocket报警日志输出-->
    <appender name="websocket" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/websocket.log</file>
@@ -263,6 +250,19 @@
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!--报警日志输出-->
    <appender name="alarm" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/alarm.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--按天回滚daily-->
            <fileNamePattern>${log.path}/alarm.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--日志最大的历史60天-->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!-- ç³»ç»Ÿæ¨¡å—日志级别控制  -->
    <logger name="com.ruoyi" level="info"/>
    <!-- Spring日志级别控制  -->
@@ -332,12 +332,12 @@
    <logger name="guideQueue" level="INFO">
        <appender-ref ref="guideQueue"/>
    </logger>
    <!--stealAlarm日志-->
    <logger name="stealAlarm" level="INFO">
        <appender-ref ref="stealAlarm"/>
    </logger>
    <!--stealAlarm日志-->
    <!--websocket日志-->
    <logger name="websocket" level="INFO">
        <appender-ref ref="websocket"/>
    </logger>
    <!--alarm日志-->
    <logger name="alarm" level="INFO">
        <appender-ref ref="alarm"/>
    </logger>
</configuration> 
ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java
@@ -9,22 +9,17 @@
/**
 * å®‰å…¨æœåŠ¡å·¥å…·ç±»
 *
 *
 * @author ruoyi
 */
public class SecurityUtils
{
public class SecurityUtils {
    /**
     * ç”¨æˆ·ID
     **/
    public static String getUserId()
    {
        try
        {
    public static String getUserId() {
        try {
            return getLoginUser().getUserId();
        }
        catch (Exception e)
        {
        } catch (Exception e) {
            throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED);
        }
    }
@@ -32,29 +27,21 @@
    /**
     * èŽ·å–éƒ¨é—¨ID
     **/
    public static Long getDeptId()
    {
        try
        {
    public static Long getDeptId() {
        try {
            return getLoginUser().getDeptId();
        }
        catch (Exception e)
        {
        } catch (Exception e) {
            throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED);
        }
    }
    /**
     * èŽ·å–ç”¨æˆ·è´¦æˆ·
     **/
    public static String getUsername()
    {
        try
        {
    public static String getUsername() {
        try {
            return getLoginUser().getUsername();
        }
        catch (Exception e)
        {
        } catch (Exception e) {
            throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED);
        }
    }
@@ -62,14 +49,10 @@
    /**
     * èŽ·å–ç”¨æˆ·
     **/
    public static LoginUser getLoginUser()
    {
        try
        {
    public static LoginUser getLoginUser() {
        try {
            return (LoginUser) getAuthentication().getPrincipal();
        }
        catch (Exception e)
        {
        } catch (Exception e) {
            throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED);
        }
    }
@@ -77,9 +60,8 @@
    /**
     * èŽ·å–Authentication
     */
    public static Authentication getAuthentication()
    {
        Authentication authentication=   SecurityContextHolder.getContext().getAuthentication();
    public static Authentication getAuthentication() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        return authentication;
    }
@@ -89,8 +71,7 @@
     * @param password å¯†ç 
     * @return åŠ å¯†å­—ç¬¦ä¸²
     */
    public static String encryptPassword(String password)
    {
    public static String encryptPassword(String password) {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        return passwordEncoder.encode(password);
    }
@@ -98,25 +79,23 @@
    /**
     * åˆ¤æ–­å¯†ç æ˜¯å¦ç›¸åŒ
     *
     * @param rawPassword çœŸå®žå¯†ç 
     * @param rawPassword     çœŸå®žå¯†ç 
     * @param encodedPassword åŠ å¯†åŽå­—ç¬¦
     * @return ç»“æžœ
     */
    public static boolean matchesPassword(String rawPassword, String encodedPassword)
    {
    public static boolean matchesPassword(String rawPassword, String encodedPassword) {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        return passwordEncoder.matches(rawPassword, encodedPassword);
    }
    /**
     * æ˜¯å¦ä¸ºç®¡ç†å‘˜
     *
     *
     * @param userId ç”¨æˆ·ID
     * @return ç»“æžœ
     */
    public static boolean isAdmin(String userId)
    {
        boolean k=  userId != null && userId.equals("1");
    public static boolean isAdmin(String userId) {
        boolean k = userId != null && userId.equals("1");
        return k;
    }
}