‘liusuyi’
2023-07-01 ef0ed9877417b7efb3a6ec72121bee56720f6939
优化提交
已修改10个文件
311 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -29,23 +29,20 @@
import com.ruoyi.utils.tools.GisTool;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.utils.tube.GeoPoint;
import com.ruoyi.utils.tube.TubeTools;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
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.PriorityBlockingQueue;
import java.util.stream.Collectors;
/**
 * @Description: 全局报警业务
@@ -76,8 +73,6 @@
    private ISysConfigService configService;
    @Resource
    private ArdCamerasMapper ardCamerasMapper;
    @Resource
    private IHikClientService hikClientService;
    @Resource
    private RedisCache redisCache;
    @Resource
@@ -137,8 +132,7 @@
                                    .setCount(ardAlarmStealelec.getCount())
                                    .setTotal(ardAlarmStealelec.getTotal());
                            return globalAlarmData;
                        })
                        .collect(Collectors.toList());
                        }).collect(Collectors.toList());
            case 1002:
                List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectListAllByCommand(refreshTime);
                return ardAlarmCameras.stream()
@@ -152,8 +146,7 @@
                                    .setCount(ardAlarmCamera.getCount())
                                    .setTotal(ardAlarmCamera.getTotal());
                            return globalAlarmData;
                        })
                        .collect(Collectors.toList());
                        }).collect(Collectors.toList());
            case 1003:
                List<ArdAlarmRadar> ardAlarmRadars = ardAlarmRadarMapper.selectListAllByCommand(refreshTime, "运动目标检测");
                return ardAlarmRadars.stream()
@@ -167,8 +160,7 @@
                                    .setCount(ardAlarmRadar.getCount())
                                    .setTotal(ardAlarmRadar.getTotal());
                            return globalAlarmData;
                        })
                        .collect(Collectors.toList());
                        }).collect(Collectors.toList());
            case 1004:
                ardAlarmRadars = ardAlarmRadarMapper.selectListAllByCommand(refreshTime, "热源检测");
                return ardAlarmRadars.stream()
@@ -182,8 +174,7 @@
                                    .setCount(ardAlarmRadar.getCount())
                                    .setTotal(ardAlarmRadar.getTotal());
                            return globalAlarmData;
                        })
                        .collect(Collectors.toList());
                        }).collect(Collectors.toList());
            case 1014:
                List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectListAllByCommand(refreshTime);
                return ardAlarmTubes.stream()
@@ -198,8 +189,7 @@
                                    .setCount(ardAlarmTube.getCount())
                                    .setTotal(ardAlarmTube.getTotal());
                            return globalAlarmData;
                        })
                        .collect(Collectors.toList());
                        }).collect(Collectors.toList());
            default:
                return null;
        }
@@ -224,38 +214,33 @@
                aas.setParams(params);
                aas.setPageNum(pageNum);
                aas.setPageSize(pageSize);
                List<ArdAlarmStealelec> ardAlarmStealelecs = ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas);
                return ardAlarmStealelecs;
                return ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas);
            case 1002:
                ArdAlarmCamera aac = new ArdAlarmCamera();
                aac.setParams(params);
                aac.setPageNum(pageNum);
                aac.setPageSize(pageSize);
                List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectArdAlarmCameraList(aac);
                return ardAlarmCameras;
                return ardAlarmCameraMapper.selectArdAlarmCameraList(aac);
            case 1003:
                ArdAlarmRadar aar = new ArdAlarmRadar();
                aar.setParams(params);
                aar.setPageNum(pageNum);
                aar.setPageSize(pageSize);
                aar.setAlarmType("运动目标检测");
                List<ArdAlarmRadar> ardAlarmRadar = ardAlarmRadarMapper.selectArdAlarmRadarList(aar);
                return ardAlarmRadar;
                return ardAlarmRadarMapper.selectArdAlarmRadarList(aar);
            case 1004:
                ArdAlarmRadar aarr = new ArdAlarmRadar();
                aarr.setParams(params);
                aarr.setPageNum(pageNum);
                aarr.setPageSize(pageSize);
                aarr.setAlarmType("热源检测");
                List<ArdAlarmRadar> ardAlarmRadarr = ardAlarmRadarMapper.selectArdAlarmRadarList(aarr);
                return ardAlarmRadarr;
                return ardAlarmRadarMapper.selectArdAlarmRadarList(aarr);
            case 1014:
                ArdAlarmTube aat = new ArdAlarmTube();
                aat.setParams(params);
                aat.setPageNum(pageNum);
                aat.setPageSize(pageSize);
                List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectArdAlarmTubeList(aat);
                return ardAlarmTubes;
                return ardAlarmTubeMapper.selectArdAlarmTubeList(aat);
        }
        return null;
    }
@@ -277,7 +262,7 @@
                if (StringUtils.isNotNull(ardAlarmStealelec)) {
                    String describe = ardAlarmStealelec.getDescribe();
                    String startTime = fmt.format(ardAlarmStealelec.getStartTime());
                    int i = ardAlarmStealelecMapper.updateViewTimeByDescribe(describe, startTime, DateUtils.getTime());
                    ardAlarmStealelecMapper.updateViewTimeByDescribe(describe, startTime, DateUtils.getTime());
                    return ardAlarmStealelec;
                }
            case 1014:
@@ -285,7 +270,7 @@
                if (StringUtils.isNotNull(ardAlarmTube)) {
                    String tubeId = ardAlarmTube.getTubeId();
                    String alarmTime = fmt.format(ardAlarmTube.getAlarmTime());
                    int i = ardAlarmTubeMapper.updateViewTimeByTubeId(tubeId, alarmTime, DateUtils.getTime());
                    ardAlarmTubeMapper.updateViewTimeByTubeId(tubeId, alarmTime, DateUtils.getTime());
                    return ardAlarmTube;
                }
            default:
@@ -423,7 +408,6 @@
                            if (count >= 3) {
                                ardAlarmRadar.setGuideFlag(1);
                                ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
                                //获取雷达所在塔上的大光电
                                String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
                                if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
@@ -532,4 +516,37 @@
        return minDistanceCameraId;
    }
    public static void main(String[] args) {
        Comparator<Obj> PriorityDescCom = Comparator.comparingInt(Obj::getPriority).reversed();
        Comparator<Obj> NumDescCom = Comparator.comparingInt(Obj::getNum).reversed();
        Comparator<Obj> receiveTimeAscCom = Comparator.comparing(Obj::getAlarmTime);
        Comparator<Obj> comparator = PriorityDescCom.thenComparing(NumDescCom).thenComparing(receiveTimeAscCom);
        PriorityBlockingQueue<Obj> priorityQueue = new PriorityBlockingQueue<>(1000,comparator);
        priorityQueue.add(new Obj(999,1,"2023-07-01 16:00:01"));
        priorityQueue.add(new Obj(999,2,"2023-07-01 16:00:01"));
        priorityQueue.add(new Obj(999,3,"2023-07-01 16:00:01"));
        List<Obj> elements = new ArrayList<>(priorityQueue);
        elements.sort(priorityQueue.comparator());  // 使用队列的比较器进行排序
        for (Obj task : elements) {
            log.info("正在排队【priority】" + task.getPriority()+"【num】" + task.getNum() + "【alarmTime】" + task.getAlarmTime());
        }
        log.info("===================================================================");
        priorityQueue.add(new Obj(999,5,"2023-07-01 16:00:01"));
        PriorityBlockingQueue queue = new PriorityBlockingQueue<>(priorityQueue);
        while (priorityQueue.size() > 0) {
            Obj task = priorityQueue.poll();
            log.info("正在排队【priority】" + task.getPriority()+"【num】" + task.getNum() + "【alarmTime】" + task.getAlarmTime());
        }
    }
    @Data
    @AllArgsConstructor
    static class Obj
    {
        Integer priority;
        Integer num;
        String alarmTime;
    }
}
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
@@ -41,22 +41,19 @@
            cmd.setOperator(guideTask.getAlarmType());
            cmd.setExpired(30);
            cmd.setRecordBucketName("record");
            cmd.setRecordObjectName("alarm");
            cmd.setRecordObjectName("alarm_"+guideTask.getAlarmId());
            log.debug("开始引导");
            boolean guideRes = hikClientService.guideTargetPosition(cmd);
            if (guideRes) {
                log.debug("引导成功");
                hikClientService.controlLock(cmd);//上锁
                cmd.setEnable(true);//开始录像
                hikClientService.recordToMinio(cmd);//开始录像
                hikClientService.recordStart(cmd);//开始录像
                try {
                    Thread.sleep(30000);
                } catch (InterruptedException e) {
                    log.info("当前任务ID"+guideTask.getAlarmId()+"线程被终止");
                }
                cmd.setEnable(false);//停止录像
                cmd.setUploadMinio(true);//上传minio
                String url = hikClientService.recordToMinio(cmd);//停止录像返回url
                String url = hikClientService.recordStopToMinio(cmd);//停止录像返回url
                if (StringUtils.isNotEmpty(url)) {
                    switch (guideTask.getAlarmType()) {
                        case "sys_tube_leak":
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java
@@ -13,8 +13,7 @@
 * @author ard
 * @date 2023-06-28
 */
public interface ArdAlarmRadarMapper
{
public interface ArdAlarmRadarMapper {
    /**
     * 查询雷达报警
     * 
@@ -64,18 +63,19 @@
    public int deleteArdAlarmRadarByIds(String[] ids);
    public List<ArdAlarmRadar> selectListAllByCommand(@Param("refreshTime")String refreshTime,@Param("alarmType")String alarmType);
    int selectCountByAlarmTime(@Param("refreshTime")String refreshTime,@Param("alarmType")String alarmType);
    /**
     * 通过雷达id找到关联塔上的大光电id
     *
     */
     String getCameraByRadar(String radarId);
     /**
      *  查找5分钟内引导过的记录
      * */
     */
     public ArdAlarmRadar getArdAlarmRadarWithGuide(ArdAlarmRadar ardAlarmRadar);
     public int getArdAlarmRadarWithNotGuide(@Param("ardAlarmRadar")ArdAlarmRadar ardAlarmRadar, @Param("guideTime")Date guideTime);
}
ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java
@@ -3,11 +3,8 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
import com.ruoyi.alarmpoints.well.service.IArdAlarmpointsWellService;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -26,7 +23,6 @@
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
@@ -39,6 +39,4 @@
    String recordBucketName;
    /*录像文件名称*/
    String recordObjectName;
    /*是否上传minio*/
    boolean isUploadMinio;
}
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -2,8 +2,6 @@
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import java.io.IOException;
import java.util.Map;
/**
@@ -35,7 +33,7 @@
    boolean setFocusPos(CameraCmd cmd);
    //获取聚焦值
    Map getFocusPos(CameraCmd cmd);
    Map<String,Object> getFocusPos(CameraCmd cmd);
    //设置预置位
    boolean setPreset(CameraCmd cmd);
@@ -93,9 +91,16 @@
    //手动录像
    String record(CameraCmd cmd);
    //手动录像
    String recordToMinio(CameraCmd cmd);
    //引导目标位置
    boolean guideTargetPosition(CameraCmd cmd);
    //开始录像
    void recordStart(CameraCmd cmd);
    //停止录像-上传minio-返回录像url
    String recordStopToMinio(CameraCmd cmd);
    //停止录像-不上传minio
    void recordStopNotToMinio(CameraCmd cmd);
}
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -2,7 +2,6 @@
import com.ruoyi.common.annotation.SdkOperate;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
@@ -20,11 +19,9 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import sun.misc.BASE64Encoder;
import javax.annotation.Resource;
import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.ByteBuffer;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
@@ -618,9 +615,9 @@
        NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
        m_ptzPosCurrent.wAction = 1;
        try {
            String p = String.valueOf((int) ((double) ptz.get("p") * 10));
            String t = String.valueOf((int) ((double) ptz.get("t") * 10));
            String z = String.valueOf((int) ((double) ptz.get("z") * 10));
            String p = String.valueOf((int) (ptz.get("p") * 10));
            String t = String.valueOf((int) (ptz.get("t") * 10));
            String z = String.valueOf((int) (ptz.get("z") * 10));
            m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16));
            m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16));
            m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16));
@@ -745,8 +742,7 @@
            return -1;
        } else {
            netDvrPtzLockcfg.read();
            int byWorkMode = netDvrPtzLockcfg.byWorkMode;
            return byWorkMode;
            return netDvrPtzLockcfg.byWorkMode;
        }
    }
@@ -871,7 +867,6 @@
        if (!bool) {
            int code = hCNetSDK.NET_DVR_GetLastError();
            log.info("设置透雾失败,请稍后重试" + code);
            return false;
        }
        log.info("设置透雾成功");
        return bool;
@@ -920,7 +915,6 @@
        if (!bool) {
            int code = hCNetSDK.NET_DVR_GetLastError();
            log.info("设置夜视失败,请稍后重试" + code);
            return false;
        }
        log.info("设置夜视成功");
        return bool;
@@ -967,7 +961,6 @@
        if (!bool) {
            int code = hCNetSDK.NET_DVR_GetLastError();
            log.info("设置聚焦模式失败,请稍后重试" + code);
            return false;
        }
        log.info("设置聚焦模式成功");
        return bool;
@@ -1010,7 +1003,7 @@
            return false;
        }
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        Integer dwStop;
        int dwStop;
        if (enable) {
            dwStop = 0;//开启
        } else {
@@ -1020,7 +1013,6 @@
        if (!bool) {
            int code = hCNetSDK.NET_DVR_GetLastError();
            log.info("设置云台加热失败,请稍后重试" + code);
            return false;
        }
        log.info("设置云台加热成功");
        return bool;
@@ -1064,7 +1056,6 @@
        if (!bool) {
            int code = hCNetSDK.NET_DVR_GetLastError();
            log.info("设置镜头除冰失败,请稍后重试" + code);
            return false;
        }
        log.info("设置镜头除冰成功");
        return bool;
@@ -1073,7 +1064,7 @@
    /**
     * 截图 返给前端
     *
     * @param cmd
     * @param cmd 相机命令
     */
    public String captureJPEGPicture(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
@@ -1100,41 +1091,11 @@
        boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
        log.info("-----------这里开始图片存入内存----------" + is);
        BASE64Encoder encoder = new BASE64Encoder();
        String png_base64 = encoder.encodeBuffer(jpegBuffer);//转换成base64串
        png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
        log.info("-----------处理完成截图数据----------");
        return png_base64;
//        ByteArrayInputStream in = new ByteArrayInputStream(jpegBuffer.array(), 0, a.getValue());
//        OutputStream outputStream = null;
//        try {
//            //1、设置response 响应头 //设置页面不缓存,清空buffer
//            response.reset();
//            //字符编码
//            response.setCharacterEncoding("UTF-8");
//            //二进制传输数据
//            response.setContentType("multipart/form-data");
//            //设置响应头
//            response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpeg", "UTF-8"));
//
//            outputStream = response.getOutputStream();
//            // LoginUser loginUser = LoginContext.me().getLoginUser();
//            waterMarkUtil.markImageByIO("", in, outputStream, null, "jpeg");
//            outputStream.flush();
//        } catch (Exception e) {
//            e.printStackTrace();
//            log.error("抓图失败,请稍后重试");
//        } finally {
//            try {
//                outputStream.close();
//            } catch (IOException e) {
//                log.error("抓图失败,请稍后重试");
//            }
//        }
    }
    /**
@@ -1264,16 +1225,6 @@
                    GlobalVariable.previewMap.remove(cameraId);
                }
                log.info("录像停止");
                //存入minio
                String BucketName = cmd.getRecordBucketName();
                String ObjectName = cmd.getRecordObjectName();
                String ContentType = "video/MP4";
                FileInputStream stream = new FileInputStream(path);
                boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType);
                if (b) {
                    url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName);
                    log.info("上传文件成功!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName);
                }
            }
            return url;
        } catch (Exception ex) {
@@ -1283,14 +1234,13 @@
    }
    @Override
    public String recordToMinio(CameraCmd cmd) {
    public void recordStart(CameraCmd cmd) {
        try {
            String cameraId = cmd.getCameraId();
            Integer channelNum = cmd.getChannelNum();
            String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
            boolean enable = cmd.isEnable();
            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                return "";
                return;
            }
            Integer userId = GlobalVariable.loginMap.get(cameraId);
            //强制I帧结构体对象
@@ -1313,7 +1263,6 @@
            previewinfo.bBlocked = 0;//0- 非阻塞取流,1-阻塞取流
            previewinfo.byNPQMode = 0;//NPQ模式:0-直连模式,1-过流媒体模式
            previewinfo.write();
            if (enable) {
                if (GlobalVariable.previewMap.containsKey(cameraId)) {
                    Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
                    hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
@@ -1323,17 +1272,54 @@
                int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
                if (lRealHandle == -1) {
                    log.error("取流失败" + hCNetSDK.NET_DVR_GetLastError());
                    return "";
                return;
                }
                log.debug("取流成功");
                GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
                GlobalVariable.previewMap.put(cameraId, lRealHandle);
                if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) {
                    log.error("保存视频文件到临时文件夹失败 错误码为:  " + hCNetSDK.NET_DVR_GetLastError());
                    return "";
                return;
                }
                log.debug("录像开始");
            } else {
        } catch (Exception ex) {
            log.error("开始录像异常" + ex.getMessage());
        }
    }
    @Override
    public String recordStopToMinio(CameraCmd cmd) {
        String url = "";
        try {
            String cameraId = cmd.getCameraId();
            Integer channelNum = cmd.getChannelNum();
            String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                return "";
            }
            Integer userId = GlobalVariable.loginMap.get(cameraId);
            //region 强制I帧
            HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //新建结构体对象
            netDvrIFrame.read();
            netDvrIFrame.dwChannel = channelNum;//因为上文代码中设置了通道号,按照上文中的设置
            netDvrIFrame.byStreamType = 0;
            netDvrIFrame.dwSize = netDvrIFrame.size();
            netDvrIFrame.write();
            if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
                log.error("强制I帧 错误码为:  " + hCNetSDK.NET_DVR_GetLastError());
            }
            //endregion
            //region 预览参数
            NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
            previewinfo.read();
            previewinfo.lChannel = channelNum;
            previewinfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-三码流,3-虚拟码流,以此类推
            previewinfo.dwLinkMode = 0;//连接方式:0-TCP方式,1-UDP方式,2-多播方式,3-RTP方式,4-RTP/RTSP,5-RTP/HTTP,6-HRUDP(可靠传输),7-RTSP/HTTPS,8-NPQ
            previewinfo.hPlayWnd = null;//播放窗口的句柄,为NULL表示不解码显示。
            previewinfo.bBlocked = 0;//0- 非阻塞取流,1-阻塞取流
            previewinfo.byNPQMode = 0;//NPQ模式:0-直连模式,1-过流媒体模式
            previewinfo.write();
            //endregion
                if (GlobalVariable.previewMap.containsKey(cameraId)) {
                    Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
                    hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
@@ -1345,21 +1331,57 @@
                String ObjectName = cmd.getRecordObjectName();
                String ContentType = "video/MP4";
                FileInputStream stream = new FileInputStream(path);
                String simpleUUID = IdUtils.simpleUUID();
                String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
                String recordName = cameraId + "/" + time + "/" + ObjectName + "_" + simpleUUID + ".mp4";
            String recordName = cameraId + "/" + time + "/" + ObjectName + ".mp4";
                boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
                if (b) {
                    String url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName;
                url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName;
                    log.debug("上传文件成功!" + url);
            }
                    return url;
                }
            }
            return "";
        } catch (Exception ex) {
            log.error("录像异常" + ex.getMessage());
            return "";
        }
    }
    @Override
    public void recordStopNotToMinio(CameraCmd cmd) {
        try {
            String cameraId = cmd.getCameraId();
            Integer channelNum = cmd.getChannelNum();
            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                return;
            }
            Integer userId = GlobalVariable.loginMap.get(cameraId);
            //强制I帧结构体对象
            HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //新建结构体对象
            netDvrIFrame.read();
            netDvrIFrame.dwChannel = channelNum;//因为上文代码中设置了通道号,按照上文中的设置
            netDvrIFrame.byStreamType = 0;
            netDvrIFrame.dwSize = netDvrIFrame.size();
            netDvrIFrame.write();
            if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
                log.error("强制I帧 错误码为:  " + hCNetSDK.NET_DVR_GetLastError());
            }
            //预览参数
            NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
            previewinfo.read();
            previewinfo.lChannel = channelNum;
            previewinfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-三码流,3-虚拟码流,以此类推
            previewinfo.dwLinkMode = 0;//连接方式:0-TCP方式,1-UDP方式,2-多播方式,3-RTP方式,4-RTP/RTSP,5-RTP/HTTP,6-HRUDP(可靠传输),7-RTSP/HTTPS,8-NPQ
            previewinfo.hPlayWnd = null;//播放窗口的句柄,为NULL表示不解码显示。
            previewinfo.bBlocked = 0;//0- 非阻塞取流,1-阻塞取流
            previewinfo.byNPQMode = 0;//NPQ模式:0-直连模式,1-过流媒体模式
            previewinfo.write();
            if (GlobalVariable.previewMap.containsKey(cameraId)) {
                Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
                hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
                GlobalVariable.previewMap.remove(cameraId);
            }
            log.debug("录像停止");
        } catch (Exception ex) {
            log.error("录像停止异常" + ex.getMessage());
        }
    }
}
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java
@@ -18,7 +18,6 @@
/**
 *   图片水印工具类
 *
 */
public class waterMarkUtil {
@@ -31,7 +30,7 @@
    // 水印文字字体
    private static final Font font = new Font("宋体", Font.BOLD, 30);
    // 水印文字颜色
    private static final Color color = Color.white;
    private static final Color color = Color.blue;
    /**
     * 给图片添加水印文字
@@ -152,15 +151,14 @@
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        String srcImgPath = "G:\\data\\pic\\7aad76110e7c478598da6b82d7446246.jpeg";
        String text = "synjones";
        // 给图片添加水印文字
        //markImage(text, srcImgPath, "G:\\data\\pic\\微信截图水印.png");
        // 给图片添加水印文字,水印文字旋转-45
        markImage(text, srcImgPath, "G:\\data\\pic\\7aad76110e7c478598da6b82d7446246水印.png", 45);
        System.out.println("给图片添加水印文字完毕");
}
//    public static void main(String[] args) {
//        String srcImgPath = "D:\\testSmile.jpg";
//        String text = "JCccc";
//        // 给图片添加水印文字
//        markImage(text, srcImgPath, "D:\\testSmileWithMark.jpg");
//        // 给图片添加水印文字,水印文字旋转-45
//        markImage(text, srcImgPath, "D:\\testSmileWithMarkRotate.jpg", -45);
//        System.out.println("给图片添加水印文字完毕");
//    }
}
ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -6,6 +6,7 @@
import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
@@ -453,8 +454,7 @@
                    boolean setTargetPosition = hikClientService.guideTargetPosition(cmd);
                    if (setTargetPosition) {
                        /*控制相机巡检成功,开始录像*/
                        cmd.setEnable(true);//启动录像
                        hikClientService.recordToMinio(cmd);
                        hikClientService.recordStart(cmd);
                    } else {
                        /*控制失败,当前步骤启动时间置null*/
                        ardVideoInspectTask.setCurrentStepStartTime("");
@@ -541,11 +541,9 @@
                cmd.setCameraId(cameraId);
                cmd.setChannelNum(channel);
                cmd.setOperator("sys_patrol_inspect");
                cmd.setEnable(false);//停止录像
                cmd.setRecordBucketName("record");
                cmd.setRecordObjectName("inspect");
                cmd.setUploadMinio(true);
                String url=  hikClientService.recordToMinio(cmd);
                cmd.setRecordObjectName("inspect_"+ IdUtils.fastSimpleUUID());
                String url=  hikClientService.recordStopToMinio(cmd);
                /*插入巡检记录*/
                ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord();
                ardVideoInspectRecord.setStepId(step.getId());
ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java
@@ -77,9 +77,7 @@
            CameraCmd cmd = new CameraCmd();
            cmd.setCameraId(ardVideoInspectTask.getCameraId());
            cmd.setChannelNum(ardVideoInspectTask.getChannel());
            cmd.setEnable(false);//停止录像
            cmd.setUploadMinio(false);
            hikClientService.recordToMinio(cmd);
            hikClientService.recordStopNotToMinio(cmd);
            GlobalVariable.previewMap.remove(cameraId);
        }
        /*停止任务*/