Forráskód Böngészése

将camera模块整合到iron模块,减少冗余

wangxiaofei 3 hónapja
szülő
commit
b6834cfdde
100 módosított fájl, 971 hozzáadás és 1601 törlés
  1. 0 7
      pom.xml
  2. 0 4
      taphole-admin/pom.xml
  3. 0 50
      taphole-camera/pom.xml
  4. 0 279
      taphole-camera/src/main/java/com.sckj.camera/controller/CameraController.java
  5. 0 27
      taphole-camera/src/main/java/com.sckj.camera/model/dto/ResultDTO.java
  6. 0 76
      taphole-camera/src/main/java/com.sckj.camera/model/entity/Camera.java
  7. 0 9
      taphole-camera/src/main/java/com.sckj.camera/model/mapper/CameraMapper.java
  8. 0 434
      taphole-camera/src/main/java/com.sckj.camera/service/CameraServiceImpl.java
  9. 0 103
      taphole-camera/src/main/java/com.sckj.camera/service/FFmpegServiceImpl.java
  10. 0 27
      taphole-camera/src/main/java/com.sckj.camera/util/FlowUtils.java
  11. 1 4
      taphole-device/pom.xml
  12. 0 81
      taphole-device/src/main/java/com/sckj/device/controller/TCameraController.java
  13. 0 82
      taphole-device/src/main/java/com/sckj/device/entity/TCamera.java
  14. 0 12
      taphole-device/src/main/java/com/sckj/device/mapper/TCameraMapper.java
  15. 0 289
      taphole-device/src/main/java/com/sckj/device/service/impl/TCameraServiceImpl.java
  16. 1 1
      taphole-device/src/main/java/com/sckj/device/vo/CameraInfoDTO.java
  17. 23 0
      taphole-iron/pom.xml
  18. 14 24
      taphole-iron/src/main/java/com/sckj/iron/aop/HikCameraAspect.java
  19. 2 2
      taphole-iron/src/main/java/com/sckj/iron/controller/CameraFileController.java
  20. 2 2
      taphole-iron/src/main/java/com/sckj/iron/controller/CameraFlowController.java
  21. 227 10
      taphole-iron/src/main/java/com/sckj/iron/controller/TCameraController.java
  22. 20 0
      taphole-iron/src/main/java/com/sckj/iron/controller/TIronModelController.java
  23. 5 5
      taphole-iron/src/main/java/com/sckj/iron/dto/CameraDTO.java
  24. 3 3
      taphole-iron/src/main/java/com/sckj/iron/dto/CameraInfo.java
  25. 3 3
      taphole-iron/src/main/java/com/sckj/iron/dto/CameraParamInfo.java
  26. 1 1
      taphole-iron/src/main/java/com/sckj/iron/dto/HistoryDTO.java
  27. 33 0
      taphole-iron/src/main/java/com/sckj/iron/dto/ResultDTO.java
  28. 1 3
      taphole-iron/src/main/java/com/sckj/iron/entity/CameraFile.java
  29. 1 3
      taphole-iron/src/main/java/com/sckj/iron/entity/CameraFlow.java
  30. 57 0
      taphole-iron/src/main/java/com/sckj/iron/entity/TIronModel.java
  31. 1 1
      taphole-iron/src/main/java/com/sckj/iron/manager/CameraProperties.java
  32. 5 6
      taphole-iron/src/main/java/com/sckj/iron/manager/HikCameraManager.java
  33. 1 4
      taphole-iron/src/main/java/com/sckj/iron/manager/hik/HCNetSDK.java
  34. 1 1
      taphole-iron/src/main/java/com/sckj/iron/manager/hik/HCNetTools.java
  35. 1 1
      taphole-iron/src/main/java/com/sckj/iron/manager/hik/HCPlayControlEnum.java
  36. 2 2
      taphole-iron/src/main/java/com/sckj/iron/mapper/CameraFileMapper.java
  37. 2 2
      taphole-iron/src/main/java/com/sckj/iron/mapper/CameraFlowMapper.java
  38. 15 0
      taphole-iron/src/main/java/com/sckj/iron/mapper/TIronModelMapper.java
  39. 3 3
      taphole-iron/src/main/java/com/sckj/iron/service/impl/CameraFileServiceImpl.java
  40. 3 4
      taphole-iron/src/main/java/com/sckj/iron/service/impl/CameraFlowServiceImpl.java
  41. 101 0
      taphole-iron/src/main/java/com/sckj/iron/service/impl/FFmpegServiceImpl.java
  42. 368 28
      taphole-iron/src/main/java/com/sckj/iron/service/impl/TCameraServiceImpl.java
  43. 22 0
      taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronModelServiceImpl.java
  44. 50 6
      taphole-iron/src/main/java/com/sckj/iron/socketio/DeviceEventListener.java
  45. 1 1
      taphole-iron/src/main/java/com/sckj/iron/util/HikCameraUtils.java
  46. 1 1
      taphole-iron/src/main/java/com/sckj/iron/util/LocalDateUtils.java
  47. 0 0
      taphole-iron/src/main/resources/jar/FFmpegCommandHandler.jar
  48. 0 0
      taphole-iron/src/main/resources/jar/examples.jar
  49. 0 0
      taphole-iron/src/main/resources/jar/jna.jar
  50. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libAudioIntercom.so
  51. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCAlarm.so
  52. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCCoreDevCfg.so
  53. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCDisplay.so
  54. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCGeneralCfgMgr.so
  55. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCIndustry.so
  56. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCPlayBack.so
  57. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCPreview.so
  58. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCVoiceTalk.so
  59. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libStreamTransClient.so
  60. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libSystemTransform.so
  61. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libanalyzedata.so
  62. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libiconv2.so
  63. 0 0
      taphole-iron/src/main/resources/lib/linux/HCNetSDK_Log_Switch.xml
  64. 0 0
      taphole-iron/src/main/resources/lib/linux/libAudioRender.so
  65. 0 0
      taphole-iron/src/main/resources/lib/linux/libHCCore.so
  66. 0 0
      taphole-iron/src/main/resources/lib/linux/libNPQos.so
  67. 0 0
      taphole-iron/src/main/resources/lib/linux/libPlayCtrl.so
  68. 0 0
      taphole-iron/src/main/resources/lib/linux/libSuperRender.so
  69. 0 0
      taphole-iron/src/main/resources/lib/linux/libcrypto.so
  70. 0 0
      taphole-iron/src/main/resources/lib/linux/libcrypto.so.1.0.0
  71. 0 0
      taphole-iron/src/main/resources/lib/linux/libhcnetsdk.so
  72. 0 0
      taphole-iron/src/main/resources/lib/linux/libhpr.so
  73. 0 0
      taphole-iron/src/main/resources/lib/linux/libopenal.so.1
  74. 0 0
      taphole-iron/src/main/resources/lib/linux/libssl.so
  75. 0 0
      taphole-iron/src/main/resources/lib/linux/libz.so
  76. 0 0
      taphole-iron/src/main/resources/lib/win/AudioRender.dll
  77. 0 0
      taphole-iron/src/main/resources/lib/win/HCCore.dll
  78. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDK.dll
  79. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/AnalyzeData.dll
  80. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/AudioIntercom.dll
  81. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/AudioRender.dll
  82. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCAlarm.dll
  83. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCAlarm.lib
  84. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCCoreDevCfg.dll
  85. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCDisplay.dll
  86. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCGeneralCfgMgr.dll
  87. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCGeneralCfgMgr.lib
  88. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCIndustry.dll
  89. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCPlayBack.dll
  90. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCPreview.dll
  91. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCPreview.lib
  92. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCVoiceTalk.dll
  93. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/OpenAL32.dll
  94. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/StreamTransClient.dll
  95. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/SystemTransform.dll
  96. 0 0
      taphole-iron/src/main/resources/lib/win/HCNetSDKCom/libiconv2.dll
  97. 0 0
      taphole-iron/src/main/resources/lib/win/PlayCtrl.dll
  98. 0 0
      taphole-iron/src/main/resources/lib/win/SuperRender.dll
  99. 0 0
      taphole-iron/src/main/resources/lib/win/hlog.dll
  100. 0 0
      taphole-iron/src/main/resources/lib/win/hpr.dll

+ 0 - 7
pom.xml

@@ -14,7 +14,6 @@
         <module>taphole-front</module>
         <module>taphole-common</module>
         <module>taphole-generator</module>
-        <module>taphole-camera</module>
         <module>taphole-device</module>
         <module>taphole-warn</module>
         <module>taphole-iron</module>
@@ -362,12 +361,6 @@
 
             <dependency>
                 <groupId>com.sckj</groupId>
-                <artifactId>taphole-camera</artifactId>
-                <version>${taphole.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>com.sckj</groupId>
                 <artifactId>taphole-device</artifactId>
                 <version>${taphole.version}</version>
             </dependency>

+ 0 - 4
taphole-admin/pom.xml

@@ -54,10 +54,6 @@
             <artifactId>quartz</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>com.sckj</groupId>
-            <artifactId>taphole-camera</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>com.sckj</groupId>

+ 0 - 50
taphole-camera/pom.xml

@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-    <parent>
-        <artifactId>taphole-java</artifactId>
-        <groupId>com.sckj</groupId>
-        <version>1.0.0</version>
-    </parent>
-
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>taphole-camera</artifactId>
-    <description>
-        摄像头模块
-    </description>
-
-    <!-- 项目管理 -->
-    <dependencies>
-        <!-- 公共依赖 -->
-        <dependency>
-            <groupId>com.sckj</groupId>
-            <artifactId>taphole-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cc.eguid</groupId>
-            <artifactId>FFmpegCommandManager</artifactId>
-            <version>1.0.0</version>
-            <scope>system</scope>
-            <systemPath>${project.basedir}/src/main/resources/jar/FFmpegCommandHandler.jar</systemPath>
-        </dependency>
-
-        <dependency>
-            <groupId>com.sun.jna</groupId>
-            <artifactId>jna</artifactId>
-            <version>1.7.0</version>
-            <scope>system</scope>
-            <systemPath>${project.basedir}/src/main/resources/jar/jna.jar</systemPath>
-        </dependency>
-
-        <dependency>
-            <groupId>com.sun.jna.examples</groupId>
-            <artifactId>jna</artifactId>
-            <version>1.7.1</version>
-            <scope>system</scope>
-            <systemPath>${project.basedir}/src/main/resources/jar/examples.jar</systemPath>
-        </dependency>
-    </dependencies>
-
-</project>

+ 0 - 279
taphole-camera/src/main/java/com.sckj.camera/controller/CameraController.java

@@ -1,279 +0,0 @@
-package com.sckj.camera.controller;
-
-import com.github.pagehelper.PageHelper;
-import com.sckj.camera.model.dto.CameraDTO;
-import com.sckj.camera.model.dto.HistoryDTO;
-import com.sckj.camera.model.dto.ResultDTO;
-import com.sckj.camera.model.entity.Camera;
-import com.sckj.camera.service.CameraServiceImpl;
-import com.sckj.camera.util.LocalDateUtils;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.validate.commons.PageValidate;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.format.annotation.DateTimeFormat;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Date;
-import java.util.List;
-
-@Api(tags = "相机设备")
-@RestController
-@RequestMapping(value = "api/camera")
-public class CameraController {
-
-    @Autowired
-    private CameraServiceImpl cameraService;
-
-
-    @ApiOperation("相机设备分页信息")
-    @PostMapping("/list")
-    public AjaxResult list(@Validated PageValidate pageValidate,
-                           @Validated Camera camera) {
-        PageHelper.startPage(pageValidate.getPageNo(), pageValidate.getPageSize());
-        return AjaxResult.success(cameraService.list());
-    }
-
-    @ApiOperation("查询相机设备")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "cameraId", value = "相机设备Id", paramType = "query", dataType = "Long"),
-    })
-    @PostMapping("/detail")
-    public AjaxResult detail(Long cameraId) {
-        return AjaxResult.success(cameraService.getById(cameraId));
-    }
-
-
-    //@Log(title = "文章分类新增")
-    @ApiOperation("相机信息新增")
-    @PostMapping("/add")
-    public AjaxResult add(@Validated @RequestBody Camera camera) {
-        cameraService.add(camera);
-        return AjaxResult.success();
-    }
-
-    @ApiOperation("相机信息编辑")
-    @PostMapping("/edit")
-    public AjaxResult edit(@Validated @RequestBody Camera camera) {
-        cameraService.edit(camera);
-        return AjaxResult.success();
-    }
-
-    @ApiOperation("相机信息删除")
-    @PostMapping("/del")
-    public AjaxResult del(@RequestBody Long id) {
-        cameraService.removeById(id);
-        return AjaxResult.success();
-    }
-
-    @ApiOperation("已启用相机信息查询")
-    @PostMapping("/enabledCameraMsg")
-    public AjaxResult enabledCameraMsg() {
-        return cameraService.enabledCameraMsg();
-    }
-
-    @ApiOperation("相机全局参数配置")
-    @PostMapping("/cameraConfig")
-    public AjaxResult cameraConfig(@RequestBody Long duration) {
-        return cameraService.cameraConfig(duration.toString());
-    }
-
-    @ApiOperation("相机状态切换")
-    @PostMapping("/statusChange")
-    public AjaxResult statusChange(@RequestBody Long id) {
-        return cameraService.statusChange(id);
-    }
-
-
-    @ApiOperation("获取设备通道信息")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long")
-    })
-    @PostMapping("/getChannel")
-    public AjaxResult getChannel(Long id) {
-        CameraDTO cameraDTO = new CameraDTO();
-        cameraDTO.setId(id);
-        ResultDTO result = cameraService.getChannel(cameraDTO);
-        return AjaxResult.success(result);
-    }
-
-    @ApiOperation("所有可用摄像头推流")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long")
-    })
-    @PostMapping("/startTranscodeList")
-    public AjaxResult startTranscodeList() {
-//        CameraDTO cameraDTO = new CameraDTO();
-//        cameraDTO.setId(id);
-        List<ResultDTO> result = cameraService.startTranscodeList();
-        return AjaxResult.success(result);
-    }
-
-    @ApiOperation("开始推流")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long")
-    })
-    @PostMapping("/startTranscode")
-    public AjaxResult startTranscode(Long id) {
-        CameraDTO cameraDTO = new CameraDTO();
-        cameraDTO.setId(id);
-        ResultDTO result = cameraService.startTranscode(cameraDTO);
-        return AjaxResult.success(result);
-    }
-
-    /**
-     * 回放推流
-     *
-     * @param id 相机id
-     * @return ResultDTO
-     */
-    @ApiOperation("回放推流")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long"),
-            @ApiImplicitParam(name = "startTime", value = "起始时间", paramType = "query", dataType = "Date"),
-            @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "Date")
-    })
-    @PostMapping("/startBackTranscode")
-    public AjaxResult startBackTranscode(Long id,
-                                         @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
-                                         @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime) {
-        CameraDTO cameraDTO = new CameraDTO();
-        cameraDTO.setId(id);
-
-        cameraDTO.setHistoryDTO(new HistoryDTO(LocalDateUtils.dateToLocalDateTime(startTime), LocalDateUtils.dateToLocalDateTime(endTime)));
-        ResultDTO result = cameraService.startBackTranscode(cameraDTO);
-        return AjaxResult.success(result);
-    }
-
-    /**
-     * 抓图
-     *
-     * @return ResultDTO
-     */
-    @ApiOperation("抓图")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long"),
-    })
-    @PostMapping("/catchPic")
-    public AjaxResult catchPic(Long id) {
-        CameraDTO cameraDTO = new CameraDTO();
-        cameraDTO.setId(id);
-        ResultDTO result = cameraService.catchPic(cameraDTO);
-        return AjaxResult.success(result);
-    }
-
-    /**
-     * 视频下载
-     *
-     * @return ResultDTO
-     */
-    @ApiOperation("视频下载")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long"),
-            @ApiImplicitParam(name = "startTime", value = "起始时间", paramType = "query", dataType = "Date"),
-            @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "Date")
-    })
-    @GetMapping("/downloadVideo")
-    public AjaxResult downloadVideo(Long id,
-                                    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
-                                    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime) {
-        CameraDTO cameraDTO = new CameraDTO();
-        cameraDTO.setId(id);
-        cameraDTO.setHistoryDTO(new HistoryDTO(LocalDateUtils.dateToLocalDateTime(startTime), LocalDateUtils.dateToLocalDateTime(endTime)));
-        ResultDTO result = cameraService.downloadBack(cameraDTO);
-        return AjaxResult.success(result);
-    }
-
-    /**
-     * 获取录像文件信息
-     *
-     * @return ResultDTO
-     */
-    @ApiOperation("获取录像文件信息")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long"),
-            @ApiImplicitParam(name = "startTime", value = "起始时间", paramType = "query", dataType = "Date"),
-            @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "Date")
-    })
-    @GetMapping("/getVideoFileList")
-    public AjaxResult getVideoFileList(Long id,
-                                       @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
-                                       @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime) {
-        CameraDTO cameraDTO = new CameraDTO();
-        cameraDTO.setId(id);
-        cameraDTO.setHistoryDTO(new HistoryDTO(LocalDateUtils.dateToLocalDateTime(startTime), LocalDateUtils.dateToLocalDateTime(endTime)));
-        ResultDTO result = cameraService.getVideoFileList(cameraDTO);
-        return AjaxResult.success(result);
-    }
-
-    /**
-     * 关闭ffmpeg进程
-     *
-     * @param id 相机id
-     * @return Boolean
-     */
-    @ApiOperation("关闭进程")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", value = "FlowId", paramType = "query", dataType = "Long")
-    })
-    @PostMapping("/stopRtmp")
-    public AjaxResult stopRtmp(Long id) {
-        Boolean result = cameraService.stopRtmp(id);
-        return AjaxResult.success(result);
-    }
-
-    /**
-     * 关闭ffmpeg进程
-     *
-     * @param taskName 相机id
-     * @return Boolean
-     */
-    @ApiOperation("任务名关闭进程")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "taskName", value = "taskName", paramType = "query", dataType = "String")
-    })
-    @PostMapping("/stopRtmpByTaskName")
-    public AjaxResult stopRtmpByTaskName(String taskName) {
-        Boolean result = cameraService.stopRtmpByTaskName(taskName);
-        return AjaxResult.success(result);
-    }
-
-    /**
-     * 关闭ffmpeg进程
-     *
-     * @param ip 摄像机IP
-     * @return Boolean
-     */
-    @ApiOperation("IP关闭进程")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "ip", value = "ip", paramType = "query", dataType = "String")
-    })
-    @PostMapping("/stopRtmpByIP")
-    public AjaxResult stopRtmpByIP(String ip) {
-        Boolean result = cameraService.stopRtmpByIP(ip);
-        return AjaxResult.success(result);
-    }
-
-
-    /**
-     * 获取录像文件信息
-     *
-     * @return ResultDTO
-     */
-    @ApiOperation("获取摄像机状态")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long"),
-    })
-    @GetMapping("/getState")
-    public AjaxResult getState(Long id) {
-        CameraDTO cameraDTO = new CameraDTO();
-        cameraDTO.setId(id);
-        Integer result = cameraService.getState(cameraDTO);
-        return AjaxResult.success("成功", result);
-    }
-
-}

+ 0 - 27
taphole-camera/src/main/java/com.sckj.camera/model/dto/ResultDTO.java

@@ -1,27 +0,0 @@
-package com.sckj.camera.model.dto;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-@Data
-@AllArgsConstructor
-public class ResultDTO {
-
-    private String taskName;
-    private Object result;
-    private String rtmpUrl;
-    private String flvUrl;
-    private String hlsUrl;
-    private String rtspUrl;
-    private String webrtcUrl;
-
-    public ResultDTO() {}
-
-    public ResultDTO(String taskName,String result,String rtmpUrl) {
-        this.taskName = taskName;
-        this.result = result;
-        this.rtmpUrl = rtmpUrl;
-    }
-     
-
-}

+ 0 - 76
taphole-camera/src/main/java/com.sckj.camera/model/entity/Camera.java

@@ -1,76 +0,0 @@
-package com.sckj.camera.model.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.sckj.common.entity.BaseEntity;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import java.util.Date;
-
-@TableName(value = "t_camera")
-@Data
-@ApiModel("计划任务实体")
-public class Camera extends BaseEntity {
-    //主键id
-    @TableId(type = IdType.AUTO)
-    @NotBlank(message = "主键")
-    private Long id;
-
-    //设备编号(或者序列号之类的)
-    @NotBlank(message = "设备编号不能为空")
-    @ApiModelProperty("设备编号")
-    private String no;
-
-    //登录用户名
-    @ApiModelProperty("登录用户名")
-    private String account;
-
-    //登录密码
-    @ApiModelProperty("登录密码")
-    private String password;
-
-    //ip地址
-    @NotBlank(message = "ip地址不能为空")
-    @ApiModelProperty("ip地址")
-    private String ip;
-
-    //端口
-    @NotBlank(message = "端口号不能为空")
-    @ApiModelProperty("端口号")
-    private String port;
-
-    //设备名称
-    @NotBlank(message = "设备名称不能为空")
-    private String name;
-
-    //设备型号
-    @NotBlank(message = "设备型号不能为空")
-    @ApiModelProperty("设备型号")
-    private String model;
-
-    //安装位置
-    @NotBlank(message = "安装位置不能为空")
-    @ApiModelProperty("安装位置")
-    private String location;
-
-    //设备启用标志
-    private String status;
-
-    //所属录像机id
-    private Long vcrId;
-
-    //设备类型(1-摄像头 2-NVR录像机)
-    private Integer type;
-
-    //品牌 (1-海康,目前只有海康)
-    private String brand;
-
-    //显示顺序
-    private Integer sort;
-
-}

+ 0 - 9
taphole-camera/src/main/java/com.sckj.camera/model/mapper/CameraMapper.java

@@ -1,9 +0,0 @@
-package com.sckj.camera.model.mapper;
-
-
-import com.sckj.camera.model.entity.Camera;
-import com.sckj.common.core.basics.IBaseMapper;
-
-public interface CameraMapper   extends IBaseMapper<Camera> {
-
-}

+ 0 - 434
taphole-camera/src/main/java/com.sckj.camera/service/CameraServiceImpl.java

@@ -1,434 +0,0 @@
-package com.sckj.camera.service;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.sckj.camera.hik.HCNetTools;
-import com.sckj.camera.manager.CameraProperties;
-import com.sckj.camera.manager.HikCameraManager;
-import com.sckj.camera.model.dto.CameraDTO;
-import com.sckj.camera.model.dto.ResultDTO;
-import com.sckj.camera.model.entity.Camera;
-import com.sckj.camera.model.entity.CameraFile;
-import com.sckj.camera.model.entity.CameraFlow;
-import com.sckj.camera.model.mapper.CameraMapper;
-import com.sckj.camera.util.FlowUtils;
-import com.sckj.camera.util.HikCameraUtils;
-import com.sckj.common.aop.CameraLogin;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.exception.OperateException;
-import com.sckj.common.util.UrlUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.RequestBody;
-
-import javax.annotation.Resource;
-import java.io.File;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-
-import static com.sckj.common.util.ConfigUtils.set;
-
-@Service
-public class CameraServiceImpl extends ServiceImpl<CameraMapper, Camera> {
-
-    private final Logger logger = LoggerFactory.getLogger(CameraServiceImpl.class);
-
-    @Autowired
-    private CameraFlowServiceImpl flowService;
-
-    @Autowired
-    private FFmpegServiceImpl ffmpegService;
-
-    @Autowired
-    private CameraFileServiceImpl cameraFileService;
-
-    @Autowired
-    private HikCameraManager hikCameraManager;
-
-    @Resource
-    private CameraProperties cameraProperties;
-
-    public void add(Camera camera) {
-        save(camera);
-    }
-
-
-    public void edit(Camera camera) {
-        updateById(camera);
-    }
-
-    public AjaxResult enabledCameraMsg() {
-        String[] status = new String[]{"1", "2"};
-        List<Camera> cameraList = baseMapper.selectList(
-                new QueryWrapper<Camera>().in("status", status).orderByDesc("id"));
-        return AjaxResult.success(cameraList);
-    }
-
-    public AjaxResult cameraConfig(@RequestBody String duration) {
-        set("camera", "duration", duration);
-        return AjaxResult.success();
-    }
-
-    public AjaxResult statusChange(Long id) {
-        Camera camera = baseMapper.selectOne(
-                new QueryWrapper<Camera>()
-                        .eq("id", id)
-                        .last("limit 1"));
-        if (camera == null) {
-            return AjaxResult.failed("该相机不存在");
-        }
-        camera.setStatus(camera.getStatus().equals("1") ? "2" : "1");
-        updateById(camera);
-        return AjaxResult.success("相机状态切换成功");
-    }
-
-    @CameraLogin
-    public ResultDTO getChannel(CameraDTO cameraDTO) {
-        ResultDTO resultDTO = new ResultDTO();
-        StringBuilder str = new StringBuilder();
-        for (int i = 0; i < cameraDTO.getChannelList().size(); i++) {
-            if (i == cameraDTO.getChannelList().size() - 1) {
-                str.append(cameraDTO.getChannelList().get(i));
-            } else {
-                str.append(cameraDTO.getChannelList().get(i)).append("&");
-            }
-        }
-        resultDTO.setResult(str.toString());
-        System.out.println(cameraProperties);
-        return resultDTO;
-    }
-
-    /**
-     * 所有可用摄像头开始推流(rtsp->rtmp)
-     *
-     * @param
-     * @return ResultDTO
-     */
-    //@PostConstruct
-    public List<ResultDTO> startTranscodeList() {
-        logger.info("自动开启视频推送");
-        QueryWrapper<Camera> queryWrapper = new QueryWrapper<>();
-        //排除禁用的设备
-        queryWrapper.lambda().ne(Camera::getStatus, "0").eq(Camera::getType, "1");
-
-        List<Camera> cameraList = list(queryWrapper);
-        if (ObjectUtils.isEmpty(cameraList)) {
-            return null;
-        }
-        List<ResultDTO> resultDTOList = new ArrayList<>();
-        for (Camera camera : cameraList) {
-            ResultDTO resultDTO = new ResultDTO();
-            CameraDTO cameraDTO = new CameraDTO();
-            BeanUtils.copyProperties(camera, cameraDTO);
-            HCNetTools hcNetTools = new HCNetTools();
-            int userId = hcNetTools.deviceLogin(camera.getIp(), camera.getPort(), camera.getAccount(), camera.getPassword());
-            if (userId > -1) {
-                //登录成功
-                List<String> channelNumberList = hcNetTools.getChannelNumber();
-                if (ObjectUtils.isEmpty(channelNumberList)) {
-                    resultDTO.setResult("通道获取失败");
-                } else {
-                    int channelNumber = HikCameraUtils.analyzeChannel(channelNumberList.get(0));
-                    String appName = cameraDTO.getAccount() + cameraDTO.getIp().replace(".", "");
-                    String channelNumberStr = channelNumber + "02"; //新通道(2012年之后设备,02代表子码流)
-                    String rtspName = "rtsp://" + cameraDTO.getAccount() + ":" + cameraDTO.getPassword() + "@" + cameraDTO.getIp() + ":554/" + channelNumberStr + "?transportmode=unicast"; //新码流
-                    pushStream(cameraDTO, appName, rtspName);
-                }
-            } else {
-                resultDTO.setResult("login failed");
-            }
-            resultDTOList.add(resultDTO);
-        }
-        return resultDTOList;
-    }
-
-    /***
-     * 推送即时视频并保存到本地
-     * @param cameraDTO
-     * @param appName
-     * @param rtspName
-     * @return
-     */
-    private ResultDTO pushStream(CameraDTO cameraDTO, String appName, String rtspName) {
-        ResultDTO resultDTO = new ResultDTO();
-        String rtmpUrl = "rtmp://" + cameraProperties.getRtmp().getRtmphost() + "/live/" + appName; //rtmp链
-        String flvUrl = "http://" + cameraProperties.getRtmp().getHttphost() + "/live/" + appName + ".live.flv"; //live-flv链
-        String hlsUrl = "http://" + cameraProperties.getRtmp().getHttphost() + "/live/" + appName + "/hls.m3u8"; //hls链
-
-        CameraFlow cameraFlow = flowService.findByRtmpUrl(rtmpUrl);
-        if (cameraFlow != null) {
-            //终止推流
-            ffmpegService.stopTranscoding(appName);
-            //删除流路径
-            flowService.removeById(cameraFlow.getId());
-        }
-
-
-        //开始推流
-        String taskName = ffmpegService.startTranscoding(appName, rtspName, rtmpUrl);
-
-        if (ObjectUtils.isNotEmpty(taskName)) {
-            resultDTO.setTaskName(taskName);
-            resultDTO.setResult("success");
-            resultDTO.setRtmpUrl(rtmpUrl);
-            resultDTO.setFlvUrl(flvUrl);
-            resultDTO.setHlsUrl(hlsUrl);
-
-            cameraFlow = new CameraFlow();
-            cameraFlow.setCameraId(cameraDTO.getId());
-            cameraFlow.setTaskName(taskName);
-            cameraFlow.setFlowType(FlowUtils.FlowType.HIK.ordinal());
-            cameraFlow.setRtsp(rtspName);
-            cameraFlow.setRtmp(rtmpUrl);
-            cameraFlow.setFlv(flvUrl);
-            cameraFlow.setHls(hlsUrl);
-            cameraFlow.setClient(1);
-            cameraFlow.setCreateTime(new Date());
-            cameraFlow.setUpdateTime(new Date());
-            flowService.save(cameraFlow);
-        } else {
-            resultDTO.setResult("failed");
-        }
-        return resultDTO;
-    }
-
-    /**
-     * 开始推流(rtsp->rtmp)
-     *
-     * @param cameraDTO 相机信息
-     * @return ResultDTO
-     */
-    @CameraLogin
-    public ResultDTO startTranscode(CameraDTO cameraDTO) {
-        ResultDTO resultDTO = new ResultDTO();
-        if (ObjectUtils.isEmpty(cameraDTO)) {
-            resultDTO.setResult("未找到该设备");
-            return resultDTO;
-        }
-        String channelNumberStr = cameraDTO.getChannelNumber() + "02"; //新通道(2012年之后设备,02代表子码流)
-        String rtspName = "rtsp://" + cameraDTO.getAccount() + ":" + cameraDTO.getPassword() + "@" + cameraDTO.getIp() + ":554/" + channelNumberStr + "?transportmode=unicast"; //新码流
-        resultDTO.setRtspUrl(rtspName);
-        resultDTO.setWebrtcUrl("http://" + cameraProperties.getRtmp().getWebrtchost());
-        return resultDTO;
-    }
-
-    /**
-     * 回放推流
-     *
-     * @param cameraDTO 相机信息
-     * @return ResultDTO
-     */
-    @CameraLogin(type = CameraLogin.Operation.BACK_STREAM)
-    public ResultDTO startBackTranscode(CameraDTO cameraDTO) {
-        ResultDTO resultDTO = new ResultDTO();
-
-        String startTime, endTime;
-
-        DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyyMMdd't'HHmmss'z'");
-        if (cameraDTO.getHistoryDTO().getEndTime() != null) {
-            startTime = sdf.format(cameraDTO.getHistoryDTO().getStartTime());
-            endTime = sdf.format(cameraDTO.getHistoryDTO().getEndTime());
-        } else {
-            startTime = sdf.format(cameraDTO.getHistoryDTO().getStartTime());
-            endTime = null;
-        }
-        if (cameraDTO.getType() == 1) {
-            //摄像机
-            //appName = "history" + cameraDTO.getVcr().getAccount() + cameraDTO.getVcr().getIp().replace(".", "") + "to" + cameraDTO.getIp().replace(".", "") + "start" + startTime + "end" + endTime;
-        } else {
-            throw new OperateException("目前只支持带有录像机的回放数据");
-            //NVR
-        }
-        //未推流
-        String channelNumberStr = cameraDTO.getChannelNumber() + "01"; //回放流只有主码流
-        String rtspName = "rtsp://";
-        if (endTime != null) {
-            rtspName += cameraDTO.getVcr().getAccount() + ":" + cameraDTO.getVcr().getPassword() + "@" + cameraDTO.getVcr().getIp() + ":554/Streaming/tracks/" + channelNumberStr + "?starttime=" + startTime + "&endtime=" + endTime;
-        } else {
-            rtspName += cameraDTO.getVcr().getAccount() + ":" + cameraDTO.getVcr().getPassword() + "@" + cameraDTO.getVcr().getIp() + ":554/Streaming/tracks/" + channelNumberStr + "?starttime=" + startTime;
-        }
-        resultDTO.setRtspUrl(rtspName);
-        resultDTO.setWebrtcUrl("http://" + cameraProperties.getRtmp().getWebrtchost());
-        return resultDTO;
-    }
-
-    /**
-     * 抓图
-     *
-     * @param cameraDTO 相机信息
-     */
-    @CameraLogin(type = CameraLogin.Operation.CATCH_PICTURE)
-    public ResultDTO catchPic(CameraDTO cameraDTO) {
-        ResultDTO resultDTO = new ResultDTO();
-        if (ObjectUtils.isEmpty(cameraDTO)) {
-            resultDTO.setResult("未找到设备");
-            return resultDTO;
-        }
-
-        String pathName;
-        if (cameraDTO.getType() == 1) {
-            //摄像机
-            pathName = cameraDTO.getIp().replace(".", "");
-        } else {
-            //NVR
-            resultDTO.setResult("NVR设备不支持抓图");
-            return resultDTO;
-        }
-
-        HCNetTools hcTool = cameraDTO.getHcTool();
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
-        String name = dtf.format(LocalDateTime.now()) + ".jpg";
-        String path = "/picture/" + pathName + "/";
-        String filePath = cameraProperties.getFilepath() + path + name;
-        cameraFileService.pathCreator(cameraProperties.getFilepath() + path);
-        CameraFile cameraFile = cameraFileService.saveFileInfo(name, path, 0L, "1");
-        boolean success = hcTool.getDVRPic(cameraDTO.getChannelNumber(), filePath);
-        cameraFile.setUpdateTime(new Date());
-        long size = new File(filePath).length();
-        if (success && size > 0) {
-            resultDTO.setResult(UrlUtils.toAbsoluteUrl(path + name));
-            cameraFile.setStatus("1");
-        } else {
-            cameraFile.setStatus("2");
-        }
-        cameraFileService.updateById(cameraFile);
-        return resultDTO;
-    }
-
-    /**
-     * 视频回放下载
-     *
-     * @param cameraDTO
-     */
-    @CameraLogin(type = CameraLogin.Operation.VIDEO_DOWNLOAD)
-    public ResultDTO downloadBack(CameraDTO cameraDTO) {
-        ResultDTO resultDTO = new ResultDTO();
-        String pathName;
-        if (cameraDTO.getType() == 1) {
-            //摄像机
-            pathName = cameraDTO.getIp().replace(".", "");
-        } else {
-            //NVR
-            throw new OperateException("不支持视频回放下载");
-        }
-
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
-        String name = dtf.format(cameraDTO.getHistoryDTO().getStartTime()) + "TO" + dtf.format(cameraDTO.getHistoryDTO().getEndTime()) + ".mp4";
-        String path = "/video/" + pathName + "/";
-        cameraFileService.pathCreator(cameraProperties.getFilepath() + path);
-        Integer fileId = cameraFileService.findByPathAndName(path, name);
-        if (fileId > 0) {
-            resultDTO.setResult(fileId.toString());
-            return resultDTO;
-        }
-        hikCameraManager.downloadVideoAsync(cameraDTO, path, name, cameraDTO.getChannelNumber() + 32);
-        resultDTO.setResult(UrlUtils.toAbsoluteUrl(path + name));
-        return resultDTO;
-    }
-
-
-    /**
-     * 获取视频列表
-     *
-     * @param cameraDTO
-     * @return
-     */
-    @CameraLogin(type = CameraLogin.Operation.VIDEO_DOWNLOAD)
-    public ResultDTO getVideoFileList(CameraDTO cameraDTO) {
-        ResultDTO resultDTO = new ResultDTO();
-
-        if (cameraDTO != null) {
-//            int channelNumber = 1;
-//            if (cameraDTO.getType() == 1) {
-//                //摄像机
-//                channelNumber = HikCameraUtils.analyzeChannel(cameraDTO.getChannelList().get(0));
-//            } else {
-//                //NVR
-//                channelNumber = HikCameraUtils.getIpcChannel(cameraDTO.getChannelList(), cameraDTO.getIpcAddress());
-//                channelNumber = channelNumber + 32; //远程录像的通道号从33开始
-//            }
-            HCNetTools hcTool = cameraDTO.getHcTool();
-            List<HashMap<String, String>> map = hcTool.getVideoFileList(cameraDTO.getHistoryDTO().getStartTime(), cameraDTO.getHistoryDTO().getEndTime(), cameraDTO.getChannelNumber() + 32);
-            resultDTO.setResult(map);
-            return resultDTO;
-        } else {
-            resultDTO.setResult("未找到设备");
-            return resultDTO;
-        }
-    }
-
-    /**
-     * 停止推流
-     *
-     * @param id 相机id
-     */
-    public Boolean stopRtmp(Long id) {
-        if (id == null) {
-            return true;
-        }
-        CameraFlow camera = flowService.getById(id);
-        if (camera != null) {
-            return ffmpegService.stopTranscoding(camera.getTaskName());
-        } else {
-            return true;
-        }
-    }
-
-    /**
-     * 停止推流
-     *
-     * @param taskName 执行任务名
-     */
-    public Boolean stopRtmpByTaskName(String taskName) {
-        if (ObjectUtils.isEmpty(taskName)) {
-            return true;
-        }
-        return ffmpegService.stopTranscoding(taskName);
-    }
-
-    /**
-     * 停止推流
-     *
-     * @param ip 执行任务名
-     */
-    public Boolean stopRtmpByIP(String ip) {
-        if (ObjectUtils.isEmpty(ip)) {
-            return false;
-        }
-        QueryWrapper<CameraFlow> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().likeLeft(CameraFlow::getTaskName, ip.replace(".", ""));
-        List<CameraFlow> list = flowService.list(queryWrapper);
-        if (ObjectUtils.isEmpty(list)) {
-            return false;
-        }
-        return ffmpegService.stopTranscoding(list.get(0).getTaskName());
-    }
-
-    @CameraLogin(type = CameraLogin.Operation.CATCH_PICTURE)
-    public Integer getState(CameraDTO cameraDTO) {
-        if (ObjectUtils.isEmpty(cameraDTO.getHcTool())) {
-            return null;
-        }
-        return cameraDTO.getHcTool().getState();
-    }
-
-
-//    @PreDestroy
-//    public void closeRealStream() {
-//        logger.info("关闭推送流");
-//        for (CameraFlow cameraFlow : flowService.list()) {
-//            String taskName = cameraFlow.getTaskName();
-//            ffmpegService.stopTranscoding(taskName);
-//        }
-//    }
-
-
-}

+ 0 - 103
taphole-camera/src/main/java/com.sckj.camera/service/FFmpegServiceImpl.java

@@ -1,103 +0,0 @@
-package com.sckj.camera.service;
-
-import cc.eguid.FFmpegCommandManager.FFmpegManager;
-import cc.eguid.FFmpegCommandManager.FFmpegManagerImpl;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.PostConstruct;
-import java.util.HashMap;
-import java.util.Map;
-
-@Service
-public class FFmpegServiceImpl {
-
-    private FFmpegManager manager;
-
-    @PostConstruct
-    public void init() {
-        manager = new FFmpegManagerImpl();
-    }
-
-    /**
-     * 开始推流
-     * @param appName 进程名称,为相机ip去"."
-     * @param rtspName rtsp流
-     * @param rtmpName rtmp流
-     * @return String
-     */
-    public String startTranscoding(String appName, String rtspName, String rtmpName)  {
-        if(taskerIsRun(appName)) {
-            return appName; //如果进程存在,则直接返回进程名
-        }
-        // 执行任务,id就是appName,如果执行失败返回为null
-        String start = manager.start(appName,"ffmpeg -i " + rtspName + "  -probesize 5000000 -analyzeduration 5000000   -max_delay 5000000  -threads 10 -c copy -f flv " + rtmpName);
-        return start;
-    }
-
-    /**
-     * 开始记录
-     * @param appName 进程名称
-     * @param rtmpUrl rtmp流
-     */
-    public String startRecord(String appName, String rtmpUrl, String filePath) {
-        return manager.start("recordTo" + appName,"ffmpeg -y -i " + rtmpUrl + " -c copy -f flv " + filePath);
-    }
-
-    /**
-     * 关闭进程
-     * @param tasker 进程名称
-     * @return boolean
-     */
-    public boolean stopTranscoding(String tasker){
-        if(!taskerIsRun(tasker)) {
-            return true;
-        }
-        return manager.stop(tasker);
-    }
-
-    /**
-     * 判断当前推流进程是否存在
-     * @param appName 进程名称
-     * @return 进程名称,为"0"时表示进程不存在
-     */
-    public boolean taskerIsRun(String appName){
-        if(manager == null){
-            manager = new FFmpegManagerImpl();
-        }
-        return (manager.queryAll().size()>0 && manager.query(appName) != null);
-    }
-
-
-    /**
-     * 下载是屁
-     * @param appName 进程名称,为相机ip去"."
-     * @param rtspName rtsp流
-     * @param videoPath 文件路径
-     * @return String
-     */
-    public String downloadVideo(String appName, String rtspName, String videoPath)  {
-        if(taskerIsRun(appName)) {
-            return appName; //如果进程存在,则直接返回进程名
-        }
-        // 执行任务,id就是appName,如果执行失败返回为null
-        String start = manager.start(appName,"ffmpeg -i rtsp://" + rtspName + " " + videoPath);
-        return start;
-    }
-
-    /**
-     * 抓图
-     * @param appName 进程名称,为相机ip去"."
-     * @param rtspName rtsp流
-     * @param picPath 文件路径
-     * @return String
-     */
-    public String catchPicture(String appName, String rtspName, String picPath)  {
-        if(taskerIsRun(appName)) {
-            return appName; //如果进程存在,则直接返回进程名
-        }
-        // 执行任务,id就是appName,如果执行失败返回为null
-        String start = manager.start(appName,"ffmpeg -i rtsp://" + rtspName + " -frames:v 1 -f image2 " + picPath);
-        return start;
-    }
-
-}  

+ 0 - 27
taphole-camera/src/main/java/com.sckj.camera/util/FlowUtils.java

@@ -1,27 +0,0 @@
-package com.sckj.camera.util;
-
-import java.io.IOException;
-import java.net.Socket;
-
-public class FlowUtils {
-    public enum FlowType {
-        NONE,HIK,GB
-    }
-
-    public static boolean isRTMPServerRunning(String rtmpUrl) {
-        try {
-            // 提取 RTMP 服务器的主机和端口
-//            String host = rtmpUrl.split("/")[2].split(":")[0];
-//            int port = Integer.parseInt(rtmpUrl.split("/")[2].split(":")[1]);
-            String host = rtmpUrl.split(":")[0];
-            int port = Integer.parseInt(rtmpUrl.split(":")[1]);
-            // 尝试连接到 RTMP 服务器
-            Socket socket = new Socket(host, port);
-            socket.close();
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-
-}

+ 1 - 4
taphole-device/pom.xml

@@ -31,10 +31,7 @@
             <artifactId>velocity-engine-core</artifactId>
             <version>2.3</version>
         </dependency>
-        <dependency>
-            <groupId>com.sckj</groupId>
-            <artifactId>taphole-camera</artifactId>
-        </dependency>
+
     </dependencies>
 
 </project>

+ 0 - 81
taphole-device/src/main/java/com/sckj/device/controller/TCameraController.java

@@ -1,81 +0,0 @@
-//package com.sckj.device.controller;
-//
-//import com.sckj.common.aop.Log;
-//import com.sckj.common.core.AjaxResult;
-//import com.sckj.common.core.PageResult;
-//import com.sckj.common.validate.commons.IdValidate;
-//import com.sckj.common.validate.commons.PageValidate;
-//import com.sckj.common.validator.annotation.IDMust;
-//import com.sckj.device.service.impl.TCameraServiceImpl;
-//import com.sckj.device.validate.TCameraCreateValidate;
-//import com.sckj.device.validate.TCameraSearchValidate;
-//import com.sckj.device.validate.TCameraUpdateValidate;
-//import com.sckj.device.vo.TCameraDetailVo;
-//import com.sckj.device.vo.TCameraListedVo;
-//import io.swagger.annotations.Api;
-//import io.swagger.annotations.ApiOperation;
-//import org.springframework.validation.annotation.Validated;
-//import org.springframework.web.bind.annotation.*;
-//
-//import javax.annotation.Resource;
-//import java.util.List;
-//
-//@RestController
-//@RequestMapping("api/cameraDevice")
-//@Api(tags = "摄像头管理")
-//public class TCameraController {
-//
-//    @Resource
-//    TCameraServiceImpl iTCameraService;
-//
-//    @GetMapping("/list")
-//    @ApiOperation(value="摄像头列表")
-//    public AjaxResult<PageResult<TCameraListedVo>> list(@Validated PageValidate pageValidate,
-//                                                     @Validated TCameraSearchValidate searchValidate) {
-//        PageResult<TCameraListedVo> list = iTCameraService.list(pageValidate, searchValidate);
-//        return AjaxResult.success(list);
-//    }
-//
-//    @GetMapping("/detail")
-//    @ApiOperation(value="摄像头详情")
-//    public AjaxResult<TCameraDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
-//        TCameraDetailVo detail = iTCameraService.detail(id);
-//        return AjaxResult.success(detail);
-//    }
-//
-//    @Log(title = "摄像头新增")
-//    @PostMapping("/add")
-//    @ApiOperation(value="摄像头新增")
-//    public AjaxResult<Object> add(@Validated @RequestBody TCameraCreateValidate createValidate) {
-//        if (iTCameraService.add(createValidate) == 0){
-//            return AjaxResult.failed("摄像头新增失败");
-//        }
-//        return AjaxResult.success();
-//    }
-//
-//    @Log(title = "摄像头编辑")
-//    @PostMapping("/edit")
-//    @ApiOperation(value="摄像头编辑")
-//    public AjaxResult<Object> edit(@Validated @RequestBody TCameraUpdateValidate updateValidate) {
-//        if (iTCameraService.edit(updateValidate) == 0){
-//            return AjaxResult.failed("摄像头编辑失败");
-//        }
-//        return AjaxResult.success();
-//    }
-//
-//    @Log(title = "摄像头删除")
-//    @PostMapping("/del")
-//    @ApiOperation(value="摄像头删除")
-//    public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
-//        iTCameraService.del(idValidate.getId());
-//        return AjaxResult.success();
-//    }
-//
-//    @Log(title = "摄像头批量删除")
-//    @PostMapping("/del_ex")
-//    @ApiOperation(value="摄像头批量删除")
-//    public AjaxResult<Object> del_ex(@RequestBody List<Long> ids) {
-//        return iTCameraService.del_ex(ids);
-//    }
-//
-//}

+ 0 - 82
taphole-device/src/main/java/com/sckj/device/entity/TCamera.java

@@ -1,82 +0,0 @@
-//package com.sckj.device.entity;
-//
-//import com.baomidou.mybatisplus.annotation.IdType;
-//import com.baomidou.mybatisplus.annotation.TableId;
-//import com.baomidou.mybatisplus.annotation.TableName;
-//import io.swagger.annotations.ApiModel;
-//import io.swagger.annotations.ApiModelProperty;
-//import lombok.Data;
-//
-//import java.io.Serializable;
-//import java.util.Date;
-//import java.util.Date;
-//
-//@Data
-//@ApiModel("摄像头实体")
-//@TableName("t_camera")
-//public class TCamera implements Serializable {
-//
-//    private static final long serialVersionUID = 1L;
-//
-//    @ApiModelProperty(value = "删除标志(1删除 0未删)")
-//    private String delFlag;
-//
-//    @ApiModelProperty(value = "创建人")
-//    private String createBy;
-//
-//    @ApiModelProperty(value = "创建时间")
-//    private Date createTime;
-//
-//    @ApiModelProperty(value = "更新人")
-//    private String updateBy;
-//
-//    @ApiModelProperty(value = "更新时间")
-//    private Date updateTime;
-//
-//    @TableId(value="id", type= IdType.AUTO)
-//    @ApiModelProperty(value = "")
-//    private Long id;
-//
-//    @ApiModelProperty(value = "摄像头编号")
-//    private String no;
-//
-//    @ApiModelProperty(value = "摄像头名称")
-//    private String name;
-//
-//    @ApiModelProperty(value = "摄像头型号")
-//    private String model;
-//
-//    @ApiModelProperty(value = "安装位置")
-//    private String location;
-//
-//    @ApiModelProperty(value = "ip地址")
-//    private String ip;
-//
-//    @ApiModelProperty(value = "端口号")
-//    private String port;
-//
-//    @ApiModelProperty(value = "登录用户名")
-//    private String account;
-//
-//    @ApiModelProperty(value = "登录密码")
-//    private String password;
-//
-//    @ApiModelProperty(value = "设备启用标志(1启用 0停用)")
-//    private String status;
-//
-//    @ApiModelProperty(value = "所属录像机id")
-//    private Long vcrId;
-//
-//    @ApiModelProperty(value = "1-摄像头 2-NVR录像机  ")
-//    private String type;
-//
-//    @ApiModelProperty(value = "品牌(1-海康 0-其他)")
-//    private String brand;
-//
-//    @ApiModelProperty(value = "RTSP端口")
-//    private String portRtsp;
-//
-//    @ApiModelProperty(value = "显示顺序")
-//    private Integer sort;
-//
-//}

+ 0 - 12
taphole-device/src/main/java/com/sckj/device/mapper/TCameraMapper.java

@@ -1,12 +0,0 @@
-//package com.sckj.device.mapper;
-//
-//import com.sckj.common.core.basics.IBaseMapper;
-//import org.apache.ibatis.annotations.Mapper;
-//
-///**
-// * 摄像头Mapper
-// * @author zhanghao
-// */
-//@Mapper
-//public interface TCameraMapper extends IBaseMapper<TCamera> {
-//}

+ 0 - 289
taphole-device/src/main/java/com/sckj/device/service/impl/TCameraServiceImpl.java

@@ -1,289 +0,0 @@
-//package com.sckj.device.service.impl;
-//
-//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-//import com.baomidou.mybatisplus.core.metadata.IPage;
-//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-//import com.sckj.camera.manager.CameraProperties;
-//import com.sckj.common.TapholeAdminThreadLocal;
-//import com.sckj.common.core.AjaxResult;
-//import com.sckj.common.exception.OperateException;
-//import com.sckj.common.validate.commons.PageValidate;
-//import com.sckj.device.dto.CameraInfo;
-//import com.sckj.device.dto.CameraParamInfo;
-//import com.sckj.device.validate.TCameraCreateValidate;
-//import com.sckj.device.validate.TCameraUpdateDTO;
-//import com.sckj.device.validate.TCameraUpdateValidate;
-//import com.sckj.device.validate.TCameraSearchValidate;
-//import com.sckj.device.vo.CameraDTO;
-//import com.sckj.device.vo.TCameraListedVo;
-//import com.sckj.device.vo.TCameraDetailVo;
-//import com.sckj.common.core.PageResult;
-//import com.sckj.device.entity.TCamera;
-//import com.sckj.device.mapper.TCameraMapper;
-//import org.apache.commons.lang3.ObjectUtils;
-//import org.springframework.beans.BeanUtils;
-//import org.springframework.stereotype.Service;
-//import org.springframework.transaction.annotation.Transactional;
-//import org.springframework.util.Assert;
-//import org.springframework.util.CollectionUtils;
-//
-//import javax.annotation.Resource;
-//import java.util.*;
-//import java.util.regex.Matcher;
-//import java.util.regex.Pattern;
-//import java.util.stream.Collectors;
-//import java.util.stream.Stream;
-//
-///**
-// * 摄像头实现类
-// *
-// * @author zhanghao
-// */
-//@Service
-//public class TCameraServiceImpl extends ServiceImpl<TCameraMapper, TCamera> {
-//
-//    @Resource
-//    TCameraMapper tCameraMapper;
-//
-//    /**
-//     * 摄像头列表
-//     *
-//     * @param pageValidate   分页参数
-//     * @param searchValidate 搜索参数
-//     * @return PageResult<TCameraListedVo>
-//     * @author zhanghao
-//     */
-//    public PageResult<TCameraListedVo> list(PageValidate pageValidate, TCameraSearchValidate searchValidate) {
-//        Integer page = pageValidate.getPageNo();
-//        Integer limit = pageValidate.getPageSize();
-//
-//        QueryWrapper<TCamera> queryWrapper = new QueryWrapper<>();
-//        queryWrapper.eq("del_flag", "1");
-//        queryWrapper.orderByDesc("id");
-//
-//        tCameraMapper.setSearch(queryWrapper, searchValidate, new String[]{
-//                "=:no:str",
-//                "like:name:str",
-//                "=:model:str",
-//        });
-//
-//        IPage<TCamera> iPage = tCameraMapper.selectPage(new Page<>(page, limit), queryWrapper.eq("type", "1"));
-//
-//        List<TCameraListedVo> list = new LinkedList<>();
-//        for (TCamera item : iPage.getRecords()) {
-//            TCameraListedVo vo = new TCameraListedVo();
-//            BeanUtils.copyProperties(item, vo);
-//            vo.setAddress("rtsp://" + item.getAccount() + ":" + item.getPassword() + "@" + item.getIp() + ":" + item.getPort() + "/102");
-//            list.add(vo);
-//        }
-//
-//        return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
-//    }
-//
-//    /**
-//     * 摄像头详情
-//     *
-//     * @param id 主键参数
-//     * @return TCamera
-//     * @author zhanghao
-//     */
-//    public TCameraDetailVo detail(Integer id) {
-//        TCamera model = tCameraMapper.selectOne(
-//                new QueryWrapper<TCamera>()
-//                        .eq("id", id).eq("del_flag", "1")
-//                        .last("limit 1"));
-//
-//        Assert.notNull(model, "数据不存在");
-//
-//        TCameraDetailVo vo = new TCameraDetailVo();
-//        BeanUtils.copyProperties(model, vo);
-//        return vo;
-//    }
-//
-//    /**
-//     * 摄像头新增
-//     *
-//     * @param createValidate 参数
-//     * @author zhanghao
-//     */
-//    public int add(TCameraCreateValidate createValidate) {
-//        TCamera model = new TCamera();
-//        if (!checkPortAndIp(createValidate.getPort(), createValidate.getIp())) {
-//            return 0;
-//        }
-//        model.setCreateTime(new Date(System.currentTimeMillis()));
-//        model.setCreateBy(String.valueOf(TapholeAdminThreadLocal.getAdminUsername()));
-//        model.setUpdateTime(new Date(System.currentTimeMillis()));
-//        model.setNo(createValidate.getNo());
-//        model.setName(createValidate.getName());
-//        model.setModel(createValidate.getModel());
-//        model.setLocation(createValidate.getLocation());
-//        model.setIp(createValidate.getIp());
-//        model.setPort(createValidate.getPort());
-//        model.setStatus(createValidate.getStatus());
-//        model.setVcrId(createValidate.getVcrId());
-//        model.setType(createValidate.getType());
-//        return tCameraMapper.insert(model);
-//    }
-//
-//    /**
-//     * 摄像头编辑
-//     *
-//     * @param updateValidate 参数
-//     * @author zhanghao
-//     */
-//    public int edit(TCameraUpdateValidate updateValidate) {
-//        TCamera model = tCameraMapper.selectOne(
-//                new QueryWrapper<TCamera>()
-//                        .eq("id", updateValidate.getId())
-//                        .last("limit 1"));
-//
-//        Assert.notNull(model, "数据不存在!");
-//
-//        if (!checkPortAndIp(updateValidate.getPort(), updateValidate.getIp())) {
-//            return 0;
-//        }
-//
-//        model.setUpdateTime(new Date(System.currentTimeMillis()));
-//        model.setUpdateBy(String.valueOf(TapholeAdminThreadLocal.getAdminUsername()));
-//        model.setNo(updateValidate.getNo());
-//        model.setName(updateValidate.getName());
-//        model.setModel(updateValidate.getModel());
-//        model.setLocation(updateValidate.getLocation());
-//        model.setIp(updateValidate.getIp());
-//        model.setPort(updateValidate.getPort());
-//        model.setStatus(updateValidate.getStatus());
-//        model.setVcrId(updateValidate.getVcrId());
-//        return tCameraMapper.updateById(model);
-//    }
-//
-//    public boolean checkPortAndIp(String port, String ip) {
-//        if (Integer.parseInt(port) > 65535 && Integer.parseInt(port) < 0) {
-//            return false;
-//        }
-//        String IP_PATTERN = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
-//        Pattern pattern = Pattern.compile(IP_PATTERN);
-//        Matcher matcher = pattern.matcher(ip);
-//        if (!matcher.matches()) {
-//            return false;
-//        }
-//        return true;
-//    }
-//
-//    /**
-//     * 摄像头删除
-//     *
-//     * @param id 主键ID
-//     * @author zhanghao
-//     */
-//    public void del(Integer id) {
-//        TCamera model = tCameraMapper.selectOne(
-//                new QueryWrapper<TCamera>()
-//                        .eq("id", id)
-//                        .last("limit 1"));
-//
-//        Assert.notNull(model, "数据不存在!");
-//
-//        model.setDelFlag("0");
-//
-//        tCameraMapper.updateById(model);
-//    }
-//
-//    /**
-//     * 摄像头批量删除
-//     *
-//     * @param ids 主键数组
-//     * @author zhanghao
-//     */
-//    public AjaxResult<Object> del_ex(List<Long> ids) {
-//        List<TCamera> models = tCameraMapper.selectList(
-//                new QueryWrapper<TCamera>()
-//                        .in("id", ids));
-//
-//        if (CollectionUtils.isEmpty(models)) {
-//            return AjaxResult.failed("数据不存在");
-//        }
-//        TCamera model = new TCamera();
-//        model.setDelFlag("0");
-//        tCameraMapper.update(model, new QueryWrapper<TCamera>().in("id", ids));
-//        return AjaxResult.success();
-//    }
-//
-//    @Resource
-//    private CameraProperties cameraProperties;
-//
-//
-//    public CameraInfo getCameraInfo() {
-//        List<TCamera> cameraList = lambdaQuery().eq(TCamera::getType, "1").in(TCamera::getStatus, "1", "2").orderByAsc(TCamera::getSort).list();
-//        CameraInfo cameraParamInfo = new CameraInfo();
-//        List<CameraDTO> collect = cameraList.stream().flatMap((item) -> {
-//            CameraDTO dto = new CameraDTO();
-//            BeanUtils.copyProperties(item, dto);
-//            String channelNumberStr = 1 + "02"; //新通道(2012年之后设备,02代表子码流)
-//            String rtspUrl = "rtsp://" + item.getAccount() + ":" + item.getPassword() + "@" + item.getIp() + ":" + item.getPortRtsp() + "/" + channelNumberStr + "?transportmode=unicast"; //新码流
-//            dto.setRtspUrl(rtspUrl);
-//            return Stream.of(dto);
-//        }).collect(Collectors.toList());
-//        cameraParamInfo.setCameraList(collect);
-//
-//        List<CameraDTO> bannerList = new ArrayList<>();
-//        for (CameraDTO cameraDTO : collect) {
-//            if ("2".equals(cameraDTO.getStatus())) {
-//                bannerList.add(cameraDTO);
-//            }
-//        }
-//        cameraParamInfo.setBannerList(collect);
-//        cameraParamInfo.setRtmpUrl("http://" + cameraProperties.getRtmp().getWebrtchost());
-////        map.put("rtmpUrl", "http://" + cameraProperties.getRtmp().getWebrtchost());
-//        return cameraParamInfo;
-//    }
-//
-//    public CameraParamInfo getCameraParamInfo() {
-//        List<TCamera> cameraList = lambdaQuery().eq(TCamera::getType, "1").in(TCamera::getStatus, "1", "2").orderByAsc(TCamera::getSort).list();
-//        CameraParamInfo map = new CameraParamInfo();
-//        List<CameraDTO> collect = cameraList.stream().flatMap((item) -> {
-//            CameraDTO dto = new CameraDTO();
-//            BeanUtils.copyProperties(item, dto);
-//            return Stream.of(dto);
-//        }).collect(Collectors.toList());
-//
-//        List<CameraDTO> normalList = new ArrayList<>();
-//        List<CameraDTO> bannerList = new ArrayList<>();
-//
-//        for (CameraDTO cameraDTO : collect) {
-//            if ("1".equals(cameraDTO.getStatus())) {
-//                normalList.add(cameraDTO);
-//            }
-//            if ("2".equals(cameraDTO.getStatus())) {
-//                bannerList.add(cameraDTO);
-//            }
-//        }
-//        map.setNormalList(normalList);
-//        map.setBannerList(bannerList);
-//        return map;
-//    }
-//
-//
-//    @Transactional
-//    public void updateBatchs(List<TCameraUpdateDTO> cameraList) {
-//        for (TCameraUpdateDTO camera : cameraList) {
-//            TCamera queryData = getById(camera.getId());
-//            if (ObjectUtils.isEmpty(queryData)) {
-//                throw new OperateException(String.format("传入的ID不存在:%s", camera.getId()));
-//            }
-//
-//            LambdaUpdateWrapper<TCamera> wrapper = new LambdaUpdateWrapper<>();
-//            wrapper.eq(TCamera::getId, camera.getId());
-//            if (ObjectUtils.isNotEmpty(camera.getStatus())) {
-//                wrapper.set(TCamera::getStatus, camera.getStatus());
-//            }
-//            if (camera.getSort() != null) {
-//                wrapper.set(TCamera::getSort, camera.getSort());
-//            }
-//            update(wrapper);
-//        }
-//    }
-//
-//}

+ 1 - 1
taphole-device/src/main/java/com/sckj/device/vo/CameraDTO.java → taphole-device/src/main/java/com/sckj/device/vo/CameraInfoDTO.java

@@ -6,7 +6,7 @@ import lombok.Data;
 
 @Data
 @ApiModel("摄像头信息")
-public class CameraDTO {
+public class CameraInfoDTO {
     @ApiModelProperty(value = "id")
     private Long id;
 

+ 23 - 0
taphole-iron/pom.xml

@@ -42,6 +42,29 @@
             <groupId>com.sckj</groupId>
             <artifactId>taphole-l2</artifactId>
         </dependency>
+<!--        <dependency>-->
+<!--            <groupId>cc.eguid</groupId>-->
+<!--            <artifactId>FFmpegCommandManager</artifactId>-->
+<!--            <version>1.0.0</version>-->
+<!--            <scope>system</scope>-->
+<!--            <systemPath>${project.basedir}/src/main/resources/jar/FFmpegCommandHandler.jar</systemPath>-->
+<!--        </dependency>-->
+
+        <dependency>
+            <groupId>com.sun.jna</groupId>
+            <artifactId>jna</artifactId>
+            <version>1.7.0</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/jar/jna.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.jna.examples</groupId>
+            <artifactId>jna</artifactId>
+            <version>1.7.1</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/jar/examples.jar</systemPath>
+        </dependency>
     </dependencies>
 
 </project>

+ 14 - 24
taphole-camera/src/main/java/com.sckj.camera/aop/HikCameraAspect.java → taphole-iron/src/main/java/com/sckj/iron/aop/HikCameraAspect.java

@@ -1,16 +1,14 @@
-package com.sckj.camera.aop;
+package com.sckj.iron.aop;
 
 
-import com.sckj.camera.manager.CameraProperties;
-import com.sckj.camera.service.CameraServiceImpl;
-import com.sckj.camera.model.dto.CameraDTO;
-import com.sckj.camera.model.dto.ResultDTO;
-import com.sckj.camera.model.entity.Camera;
-import com.sckj.camera.hik.HCNetTools;
-import com.sckj.camera.util.FlowUtils;
-import com.sckj.camera.util.HikCameraUtils;
 import com.sckj.common.aop.CameraLogin;
 import com.sckj.common.exception.OperateException;
+import com.sckj.iron.dto.CameraDTO;
+import com.sckj.iron.dto.ResultDTO;
+import com.sckj.iron.entity.TCamera;
+import com.sckj.iron.manager.hik.HCNetTools;
+import com.sckj.iron.service.impl.TCameraServiceImpl;
+import com.sckj.iron.util.HikCameraUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
@@ -19,19 +17,14 @@ import org.aspectj.lang.reflect.MethodSignature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.EnableAspectJAutoProxy;
 import org.springframework.core.annotation.AnnotationUtils;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import static com.sckj.common.aop.CameraLogin.Operation.VIDEO_DOWNLOAD;
 
 /**
  * 海康设备登陆AOP切面
@@ -42,10 +35,7 @@ import static com.sckj.common.aop.CameraLogin.Operation.VIDEO_DOWNLOAD;
 public class HikCameraAspect {
 
     @Resource
-    private CameraServiceImpl cameraService;
-
-    @Resource
-    private CameraProperties cameraProperties;
+    private TCameraServiceImpl cameraService;
 
     private final Logger logger = LoggerFactory.getLogger(HikCameraAspect.class);
 
@@ -71,7 +61,7 @@ public class HikCameraAspect {
             return joinPoint.proceed(args);
         }
         CameraDTO cameraDTO = (CameraDTO) args[0];
-        Camera camera = cameraService.getById(cameraDTO.getId());
+        TCamera camera = cameraService.getById(cameraDTO.getId());
         if (camera == null) {
             throw new OperateException("未查询到设备ID为" + cameraDTO.getId() + "的设备");
         }
@@ -79,7 +69,7 @@ public class HikCameraAspect {
         //设备登录
         int code = login(cameraDTO, type);
         args[0] = cameraDTO;
-        logger.info("Camera SDK Login Code:{}",code);
+        logger.info("Camera SDK Login Code:{}", code);
         switch (code) {
             case -1:
                 //注册失败
@@ -93,7 +83,7 @@ public class HikCameraAspect {
             default:
                 int channelNumber = -1;
                 //必须是监控设备
-                if (1 == cameraDTO.getType()) {
+                if ("1".equals(cameraDTO.getType())) {
                     //有VCR录像机
                     if (ObjectUtils.isNotEmpty(cameraDTO.getVcr())) {
                         channelNumber = HikCameraUtils.getIpcChannel(cameraDTO.getChannelList(), cameraDTO.getIp());
@@ -106,7 +96,7 @@ public class HikCameraAspect {
                 cameraDTO.setChannelNumber(channelNumber);
                 //执行注解方法体的代码,此时还不能注销设备,因为一但注销,耗时操作就被迫终止
                 result = joinPoint.proceed(args);
-               break;
+                break;
         }
         return result;
     }
@@ -147,7 +137,7 @@ public class HikCameraAspect {
                 regSuc = hcTool.deviceLogin(cameraDTO.getIp(), cameraDTO.getPort(), cameraDTO.getAccount(), cameraDTO.getPassword());
                 break;
             default:
-                Camera vcr = cameraService.getById(cameraDTO.getVcrId());
+                TCamera vcr = cameraService.getById(cameraDTO.getVcrId());
                 if (ObjectUtils.isEmpty(vcr)) {
                     throw new OperateException("设备ID为" + cameraDTO.getId() + "请配置有效的录像机ID");
                 }
@@ -161,7 +151,7 @@ public class HikCameraAspect {
         }
 
         List<String> channelList = hcTool.getChannelNumber();
-        if(ObjectUtils.isEmpty(channelList)){
+        if (ObjectUtils.isEmpty(channelList)) {
             return -2;
         }
         cameraDTO.setChannelList(channelList);

+ 2 - 2
taphole-camera/src/main/java/com.sckj.camera/controller/CameraFileController.java → taphole-iron/src/main/java/com/sckj/iron/controller/CameraFileController.java

@@ -1,7 +1,7 @@
-package com.sckj.camera.controller;
+package com.sckj.iron.controller;
 
-import com.sckj.camera.service.CameraFileServiceImpl;
 import com.sckj.common.core.AjaxResult;
+import com.sckj.iron.service.impl.CameraFileServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;

+ 2 - 2
taphole-camera/src/main/java/com.sckj.camera/controller/CameraFlowController.java → taphole-iron/src/main/java/com/sckj/iron/controller/CameraFlowController.java

@@ -1,7 +1,7 @@
-package com.sckj.camera.controller;
+package com.sckj.iron.controller;
 
-import com.sckj.camera.service.CameraFlowServiceImpl;
 import com.sckj.common.core.AjaxResult;
+import com.sckj.iron.service.impl.CameraFlowServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;

+ 227 - 10
taphole-iron/src/main/java/com/sckj/iron/controller/TCameraController.java

@@ -11,33 +11,249 @@ import com.sckj.device.validate.TCameraSearchValidate;
 import com.sckj.device.validate.TCameraUpdateValidate;
 import com.sckj.device.vo.TCameraDetailVo;
 import com.sckj.device.vo.TCameraListedVo;
+import com.sckj.iron.dto.CameraDTO;
+import com.sckj.iron.dto.HistoryDTO;
+import com.sckj.iron.dto.ResultDTO;
 import com.sckj.iron.service.impl.TCameraServiceImpl;
+import com.sckj.iron.util.LocalDateUtils;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 
 @RestController
-@RequestMapping("api/cameraDevice")
+@RequestMapping("api/camera")
 @Api(tags = "摄像头管理")
 public class TCameraController {
 
     @Resource
     TCameraServiceImpl iTCameraService;
 
+
+    @ApiOperation("已启用相机信息查询")
+    @PostMapping("/enabledCameraMsg")
+    public AjaxResult enabledCameraMsg() {
+        return iTCameraService.enabledCameraMsg();
+    }
+
+    @ApiOperation("相机全局参数配置")
+    @PostMapping("/cameraConfig")
+    public AjaxResult cameraConfig(@RequestBody Long duration) {
+        return iTCameraService.cameraConfig(duration.toString());
+    }
+
+    @ApiOperation("相机状态切换")
+    @PostMapping("/statusChange")
+    public AjaxResult statusChange(@RequestBody Long id) {
+        return iTCameraService.statusChange(id);
+    }
+
+
+    @ApiOperation("获取设备通道信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long")
+    })
+    @PostMapping("/getChannel")
+    public AjaxResult getChannel(Long id) {
+        CameraDTO cameraDTO = new CameraDTO();
+        cameraDTO.setId(id);
+        ResultDTO result = iTCameraService.getChannel(cameraDTO);
+        return AjaxResult.success(result);
+    }
+
+    @ApiOperation("所有可用摄像头推流")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long")
+    })
+    @PostMapping("/startTranscodeList")
+    public AjaxResult startTranscodeList() {
+//        CameraDTO cameraDTO = new CameraDTO();
+//        cameraDTO.setId(id);
+        List<ResultDTO> result = iTCameraService.startTranscodeList();
+        return AjaxResult.success(result);
+    }
+
+    @ApiOperation("开始推流")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long")
+    })
+    @PostMapping("/startTranscode")
+    public AjaxResult startTranscode(Long id) {
+        CameraDTO cameraDTO = new CameraDTO();
+        cameraDTO.setId(id);
+        ResultDTO result = iTCameraService.startTranscode(cameraDTO);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 回放推流
+     *
+     * @param id 相机id
+     * @return ResultDTO
+     */
+    @ApiOperation("回放推流")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long"),
+            @ApiImplicitParam(name = "startTime", value = "起始时间", paramType = "query", dataType = "Date"),
+            @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "Date")
+    })
+    @PostMapping("/startBackTranscode")
+    public AjaxResult startBackTranscode(Long id,
+                                         @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
+                                         @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime) {
+        CameraDTO cameraDTO = new CameraDTO();
+        cameraDTO.setId(id);
+
+        cameraDTO.setHistoryDTO(new HistoryDTO(LocalDateUtils.dateToLocalDateTime(startTime), LocalDateUtils.dateToLocalDateTime(endTime)));
+        ResultDTO result = iTCameraService.startBackTranscode(cameraDTO);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 抓图
+     *
+     * @return ResultDTO
+     */
+    @ApiOperation("抓图")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long"),
+    })
+    @PostMapping("/catchPic")
+    public AjaxResult catchPic(Long id) {
+        CameraDTO cameraDTO = new CameraDTO();
+        cameraDTO.setId(id);
+        ResultDTO result = iTCameraService.catchPic(cameraDTO);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 视频下载
+     *
+     * @return ResultDTO
+     */
+    @ApiOperation("视频下载")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long"),
+            @ApiImplicitParam(name = "startTime", value = "起始时间", paramType = "query", dataType = "Date"),
+            @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "Date")
+    })
+    @GetMapping("/downloadVideo")
+    public AjaxResult downloadVideo(Long id,
+                                    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
+                                    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime) {
+        CameraDTO cameraDTO = new CameraDTO();
+        cameraDTO.setId(id);
+        cameraDTO.setHistoryDTO(new HistoryDTO(LocalDateUtils.dateToLocalDateTime(startTime), LocalDateUtils.dateToLocalDateTime(endTime)));
+        ResultDTO result = iTCameraService.downloadBack(cameraDTO);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 获取录像文件信息
+     *
+     * @return ResultDTO
+     */
+    @ApiOperation("获取录像文件信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long"),
+            @ApiImplicitParam(name = "startTime", value = "起始时间", paramType = "query", dataType = "Date"),
+            @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "Date")
+    })
+    @GetMapping("/getVideoFileList")
+    public AjaxResult getVideoFileList(Long id,
+                                       @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
+                                       @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime) {
+        CameraDTO cameraDTO = new CameraDTO();
+        cameraDTO.setId(id);
+        cameraDTO.setHistoryDTO(new HistoryDTO(LocalDateUtils.dateToLocalDateTime(startTime), LocalDateUtils.dateToLocalDateTime(endTime)));
+        ResultDTO result = iTCameraService.getVideoFileList(cameraDTO);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 关闭ffmpeg进程
+     *
+     * @param id 相机id
+     * @return Boolean
+     */
+    @ApiOperation("关闭进程")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "FlowId", paramType = "query", dataType = "Long")
+    })
+    @PostMapping("/stopRtmp")
+    public AjaxResult stopRtmp(Long id) {
+        Boolean result = iTCameraService.stopRtmp(id);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 关闭ffmpeg进程
+     *
+     * @param taskName 相机id
+     * @return Boolean
+     */
+    @ApiOperation("任务名关闭进程")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "taskName", value = "taskName", paramType = "query", dataType = "String")
+    })
+    @PostMapping("/stopRtmpByTaskName")
+    public AjaxResult stopRtmpByTaskName(String taskName) {
+        Boolean result = iTCameraService.stopRtmpByTaskName(taskName);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 关闭ffmpeg进程
+     *
+     * @param ip 摄像机IP
+     * @return Boolean
+     */
+    @ApiOperation("IP关闭进程")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ip", value = "ip", paramType = "query", dataType = "String")
+    })
+    @PostMapping("/stopRtmpByIP")
+    public AjaxResult stopRtmpByIP(String ip) {
+        Boolean result = iTCameraService.stopRtmpByIP(ip);
+        return AjaxResult.success(result);
+    }
+
+
+    /**
+     * 获取录像文件信息
+     *
+     * @return ResultDTO
+     */
+    @ApiOperation("获取摄像机状态")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "设备id", paramType = "query", dataType = "Long"),
+    })
+    @GetMapping("/getState")
+    public AjaxResult getState(Long id) {
+        CameraDTO cameraDTO = new CameraDTO();
+        cameraDTO.setId(id);
+        Integer result = iTCameraService.getState(cameraDTO);
+        return AjaxResult.success("成功", result);
+    }
+
+
     @GetMapping("/list")
-    @ApiOperation(value="摄像头列表")
+    @ApiOperation(value = "摄像头列表")
     public AjaxResult<PageResult<TCameraListedVo>> list(@Validated PageValidate pageValidate,
-                                                     @Validated TCameraSearchValidate searchValidate) {
+                                                        @Validated TCameraSearchValidate searchValidate) {
         PageResult<TCameraListedVo> list = iTCameraService.list(pageValidate, searchValidate);
         return AjaxResult.success(list);
     }
 
     @GetMapping("/detail")
-    @ApiOperation(value="摄像头详情")
+    @ApiOperation(value = "摄像头详情")
     public AjaxResult<TCameraDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
         TCameraDetailVo detail = iTCameraService.detail(id);
         return AjaxResult.success(detail);
@@ -45,9 +261,9 @@ public class TCameraController {
 
     @Log(title = "摄像头新增")
     @PostMapping("/add")
-    @ApiOperation(value="摄像头新增")
+    @ApiOperation(value = "摄像头新增")
     public AjaxResult<Object> add(@Validated @RequestBody TCameraCreateValidate createValidate) {
-        if (iTCameraService.add(createValidate) == 0){
+        if (iTCameraService.add(createValidate) == 0) {
             return AjaxResult.failed("摄像头新增失败");
         }
         return AjaxResult.success();
@@ -55,9 +271,9 @@ public class TCameraController {
 
     @Log(title = "摄像头编辑")
     @PostMapping("/edit")
-    @ApiOperation(value="摄像头编辑")
+    @ApiOperation(value = "摄像头编辑")
     public AjaxResult<Object> edit(@Validated @RequestBody TCameraUpdateValidate updateValidate) {
-        if (iTCameraService.edit(updateValidate) == 0){
+        if (iTCameraService.edit(updateValidate) == 0) {
             return AjaxResult.failed("摄像头编辑失败");
         }
         return AjaxResult.success();
@@ -65,7 +281,7 @@ public class TCameraController {
 
     @Log(title = "摄像头删除")
     @PostMapping("/del")
-    @ApiOperation(value="摄像头删除")
+    @ApiOperation(value = "摄像头删除")
     public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
         iTCameraService.del(idValidate.getId());
         return AjaxResult.success();
@@ -73,9 +289,10 @@ public class TCameraController {
 
     @Log(title = "摄像头批量删除")
     @PostMapping("/del_ex")
-    @ApiOperation(value="摄像头批量删除")
+    @ApiOperation(value = "摄像头批量删除")
     public AjaxResult<Object> del_ex(@RequestBody List<Long> ids) {
         return iTCameraService.del_ex(ids);
     }
 
+
 }

+ 20 - 0
taphole-iron/src/main/java/com/sckj/iron/controller/TIronModelController.java

@@ -0,0 +1,20 @@
+package com.sckj.iron.controller;
+
+import com.sckj.iron.service.impl.TIronModelServiceImpl;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("api/param")
+@Api(tags = "参数设定管理")
+public class TIronModelController {
+
+    @Resource
+    TIronModelServiceImpl ironModelService;
+
+
+
+}

+ 5 - 5
taphole-camera/src/main/java/com.sckj.camera/model/dto/CameraDTO.java → taphole-iron/src/main/java/com/sckj/iron/dto/CameraDTO.java

@@ -1,14 +1,14 @@
-package com.sckj.camera.model.dto;
+package com.sckj.iron.dto;
 
 
-import com.sckj.camera.hik.HCNetTools;
-import com.sckj.camera.model.entity.Camera;
+import com.sckj.iron.entity.TCamera;
+import com.sckj.iron.manager.hik.HCNetTools;
 import lombok.Data;
 
 import java.util.List;
 
 @Data
-public class CameraDTO extends Camera {
+public class CameraDTO extends TCamera {
 
     private List<String> channelList;
 
@@ -20,7 +20,7 @@ public class CameraDTO extends Camera {
     private int channelNumber;
 
     //所属的VCR
-    private Camera vcr;
+    private TCamera vcr;
 
     private String taskName;
 

+ 3 - 3
taphole-iron/src/main/java/com/sckj/iron/dto/CameraInfo.java

@@ -1,6 +1,6 @@
 package com.sckj.iron.dto;
 
-import com.sckj.device.vo.CameraDTO;
+import com.sckj.device.vo.CameraInfoDTO;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import lombok.Data;
@@ -11,10 +11,10 @@ import java.util.List;
 @ApiOperation("摄像头信息")
 public class CameraInfo {
     @ApiModelProperty("轮播列表")
-    private List<CameraDTO> bannerList;
+    private List<CameraInfoDTO> bannerList;
 
     @ApiModelProperty("摄像头列表")
-    private List<CameraDTO> cameraList;
+    private List<CameraInfoDTO> cameraList;
 
     @ApiModelProperty("RTC播放地址")
     private String rtcUrl;

+ 3 - 3
taphole-iron/src/main/java/com/sckj/iron/dto/CameraParamInfo.java

@@ -1,6 +1,6 @@
 package com.sckj.iron.dto;
 
-import com.sckj.device.vo.CameraDTO;
+import com.sckj.device.vo.CameraInfoDTO;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import lombok.Data;
@@ -11,10 +11,10 @@ import java.util.List;
 @ApiOperation("摄像头参数信息")
 public class CameraParamInfo {
     @ApiModelProperty("轮播列表")
-    private List<CameraDTO> bannerList;
+    private List<CameraInfoDTO> bannerList;
 
     @ApiModelProperty("正常列表")
-    private List<CameraDTO> normalList;
+    private List<CameraInfoDTO> normalList;
 
 
     @ApiModelProperty("摄像头轮播时长参数")

+ 1 - 1
taphole-camera/src/main/java/com.sckj.camera/model/dto/HistoryDTO.java → taphole-iron/src/main/java/com/sckj/iron/dto/HistoryDTO.java

@@ -1,4 +1,4 @@
-package com.sckj.camera.model.dto;
+package com.sckj.iron.dto;
 
 
 import java.time.LocalDateTime;

+ 33 - 0
taphole-iron/src/main/java/com/sckj/iron/dto/ResultDTO.java

@@ -0,0 +1,33 @@
+package com.sckj.iron.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class ResultDTO {
+
+    private String taskName;
+    private Object result;
+//    private String rtmpUrl;
+//    private String flvUrl;
+//    private String hlsUrl;
+    private String rtspUrl;
+    private String webrtcUrl;
+
+    public ResultDTO() {}
+
+    public ResultDTO(String taskName,String result,String rtspUrl) {
+        this.taskName = taskName;
+        this.result = result;
+        this.rtspUrl = rtspUrl;
+    }
+    public ResultDTO(String taskName,String result,String rtspUrl,String webrtcUrl) {
+        this.taskName = taskName;
+        this.result = result;
+        this.rtspUrl = rtspUrl;
+        this.webrtcUrl = webrtcUrl;
+    }
+
+
+}

+ 1 - 3
taphole-camera/src/main/java/com.sckj.camera/model/entity/CameraFile.java → taphole-iron/src/main/java/com/sckj/iron/entity/CameraFile.java

@@ -1,4 +1,4 @@
-package com.sckj.camera.model.entity;
+package com.sckj.iron.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -7,8 +7,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.sckj.common.entity.BaseEntity;
 import lombok.Data;
 
-import java.util.Date;
-
 @TableName(value = "t_camera_file")
 @Data
 public class CameraFile extends BaseEntity {

+ 1 - 3
taphole-camera/src/main/java/com.sckj.camera/model/entity/CameraFlow.java → taphole-iron/src/main/java/com/sckj/iron/entity/CameraFlow.java

@@ -1,4 +1,4 @@
-package com.sckj.camera.model.entity;
+package com.sckj.iron.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -7,8 +7,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.sckj.common.entity.BaseEntity;
 import lombok.Data;
 
-import java.util.Date;
-
 @TableName(value = "t_camera_flow")
 @Data
 public class CameraFlow extends BaseEntity {

+ 57 - 0
taphole-iron/src/main/java/com/sckj/iron/entity/TIronModel.java

@@ -0,0 +1,57 @@
+package com.sckj.iron.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@ApiModel("出铁相关模型")
+@TableName("t_iron_model")
+public class TIronModel implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "铁口区域编号")
+    private Long tapholeId;
+
+    @ApiModelProperty(value = "锅炉编号")
+    private Long boilerId;
+
+    @ApiModelProperty(value = "参数名称")
+    private String modelName;
+
+    @ApiModelProperty(value = "参数值")
+    private String modelExpression;
+
+    @ApiModelProperty(value = "参数说明")
+    private String modelDesc;
+
+    @ApiModelProperty(value = "状态(1正常 0停用)")
+    private String status;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+}

+ 1 - 1
taphole-camera/src/main/java/com.sckj.camera/manager/CameraProperties.java → taphole-iron/src/main/java/com/sckj/iron/manager/CameraProperties.java

@@ -1,4 +1,4 @@
-package com.sckj.camera.manager;
+package com.sckj.iron.manager;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;

+ 5 - 6
taphole-camera/src/main/java/com.sckj.camera/manager/HikCameraManager.java → taphole-iron/src/main/java/com/sckj/iron/manager/HikCameraManager.java

@@ -1,9 +1,9 @@
-package com.sckj.camera.manager;
+package com.sckj.iron.manager;
 
-import com.sckj.camera.hik.HCNetTools;
-import com.sckj.camera.model.dto.CameraDTO;
-import com.sckj.camera.model.entity.CameraFile;
-import com.sckj.camera.service.CameraFileServiceImpl;
+import com.sckj.iron.dto.CameraDTO;
+import com.sckj.iron.manager.hik.HCNetTools;
+import com.sckj.iron.entity.CameraFile;
+import com.sckj.iron.service.impl.CameraFileServiceImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,7 +12,6 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
-import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.time.LocalDateTime;

+ 1 - 4
taphole-camera/src/main/java/com.sckj.camera/hik/HCNetSDK.java → taphole-iron/src/main/java/com/sckj/iron/manager/hik/HCNetSDK.java

@@ -9,7 +9,7 @@
  * Created on 2009-9-14, 19:31:34
  */
 
-package com.sckj.camera.hik;
+package com.sckj.iron.manager.hik;
 
 
 import com.sun.jna.*;
@@ -19,10 +19,7 @@ import com.sun.jna.examples.win32.W32API.HWND;
 import com.sun.jna.ptr.ByteByReference;
 import com.sun.jna.ptr.IntByReference;
 import com.sun.jna.ptr.ShortByReference;
-import com.sun.jna.win32.StdCallLibrary;
-import org.springframework.core.io.ClassPathResource;
 
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;

+ 1 - 1
taphole-camera/src/main/java/com.sckj.camera/hik/HCNetTools.java → taphole-iron/src/main/java/com/sckj/iron/manager/hik/HCNetTools.java

@@ -1,4 +1,4 @@
-package com.sckj.camera.hik;
+package com.sckj.iron.manager.hik;
 
 import com.sun.jna.Pointer;
 import com.sun.jna.ptr.ByteByReference;

+ 1 - 1
taphole-camera/src/main/java/com.sckj.camera/hik/HCPlayControlEnum.java → taphole-iron/src/main/java/com/sckj/iron/manager/hik/HCPlayControlEnum.java

@@ -1,4 +1,4 @@
-package com.sckj.camera.hik;
+package com.sckj.iron.manager.hik;
 
 public enum HCPlayControlEnum {
     ZOOM_IN(HCNetSDK.ZOOM_IN, "焦距变大"),

+ 2 - 2
taphole-camera/src/main/java/com.sckj.camera/model/mapper/CameraFileMapper.java → taphole-iron/src/main/java/com/sckj/iron/mapper/CameraFileMapper.java

@@ -1,6 +1,6 @@
-package com.sckj.camera.model.mapper;
+package com.sckj.iron.mapper;
 
-import com.sckj.camera.model.entity.CameraFile;
+import com.sckj.iron.entity.CameraFile;
 import com.sckj.common.core.basics.IBaseMapper;
 
 public interface CameraFileMapper extends IBaseMapper<CameraFile> {

+ 2 - 2
taphole-camera/src/main/java/com.sckj.camera/model/mapper/CameraFlowMapper.java → taphole-iron/src/main/java/com/sckj/iron/mapper/CameraFlowMapper.java

@@ -1,7 +1,7 @@
-package com.sckj.camera.model.mapper;
+package com.sckj.iron.mapper;
 
 
-import com.sckj.camera.model.entity.CameraFlow;
+import com.sckj.iron.entity.CameraFlow;
 import com.sckj.common.core.basics.IBaseMapper;
 
 public interface CameraFlowMapper  extends IBaseMapper<CameraFlow> {

+ 15 - 0
taphole-iron/src/main/java/com/sckj/iron/mapper/TIronModelMapper.java

@@ -0,0 +1,15 @@
+package com.sckj.iron.mapper;
+
+import com.sckj.common.core.basics.IBaseMapper;
+import com.sckj.iron.entity.TIronModel;
+import com.sckj.iron.entity.TIronParam;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 参数设定Mapper
+ * @author zhnaghao
+ */
+@Mapper
+public interface TIronModelMapper extends IBaseMapper<TIronModel> {
+
+}

+ 3 - 3
taphole-camera/src/main/java/com.sckj.camera/service/CameraFileServiceImpl.java → taphole-iron/src/main/java/com/sckj/iron/service/impl/CameraFileServiceImpl.java

@@ -1,9 +1,9 @@
-package com.sckj.camera.service;
+package com.sckj.iron.service.impl;
 
 import com.aliyun.oss.ServiceException;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.sckj.camera.model.entity.CameraFile;
-import com.sckj.camera.model.mapper.CameraFileMapper;
+import com.sckj.iron.entity.CameraFile;
+import com.sckj.iron.mapper.CameraFileMapper;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;

+ 3 - 4
taphole-camera/src/main/java/com.sckj.camera/service/CameraFlowServiceImpl.java → taphole-iron/src/main/java/com/sckj/iron/service/impl/CameraFlowServiceImpl.java

@@ -1,11 +1,10 @@
-package com.sckj.camera.service;
+package com.sckj.iron.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.sckj.camera.model.entity.CameraFlow;
-import com.sckj.camera.model.mapper.CameraFlowMapper;
+import com.sckj.iron.entity.CameraFlow;
+import com.sckj.iron.mapper.CameraFlowMapper;
 import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;

+ 101 - 0
taphole-iron/src/main/java/com/sckj/iron/service/impl/FFmpegServiceImpl.java

@@ -0,0 +1,101 @@
+//package com.sckj.iron.service.impl;
+//
+//import cc.eguid.FFmpegCommandManager.FFmpegManager;
+//import cc.eguid.FFmpegCommandManager.FFmpegManagerImpl;
+//import org.springframework.stereotype.Service;
+//
+//import javax.annotation.PostConstruct;
+//
+//@Service
+//public class FFmpegServiceImpl {
+//
+//    private FFmpegManager manager;
+//
+//    @PostConstruct
+//    public void init() {
+//        manager = new FFmpegManagerImpl();
+//    }
+//
+//    /**
+//     * 开始推流
+//     * @param appName 进程名称,为相机ip去"."
+//     * @param rtspName rtsp流
+//     * @param rtmpName rtmp流
+//     * @return String
+//     */
+//    public String startTranscoding(String appName, String rtspName, String rtmpName)  {
+//        if(taskerIsRun(appName)) {
+//            return appName; //如果进程存在,则直接返回进程名
+//        }
+//        // 执行任务,id就是appName,如果执行失败返回为null
+//        String start = manager.start(appName,"ffmpeg -i " + rtspName + "  -probesize 5000000 -analyzeduration 5000000   -max_delay 5000000  -threads 10 -c copy -f flv " + rtmpName);
+//        return start;
+//    }
+//
+//    /**
+//     * 开始记录
+//     * @param appName 进程名称
+//     * @param rtmpUrl rtmp流
+//     */
+//    public String startRecord(String appName, String rtmpUrl, String filePath) {
+//        return manager.start("recordTo" + appName,"ffmpeg -y -i " + rtmpUrl + " -c copy -f flv " + filePath);
+//    }
+//
+//    /**
+//     * 关闭进程
+//     * @param tasker 进程名称
+//     * @return boolean
+//     */
+//    public boolean stopTranscoding(String tasker){
+//        if(!taskerIsRun(tasker)) {
+//            return true;
+//        }
+//        return manager.stop(tasker);
+//    }
+//
+//    /**
+//     * 判断当前推流进程是否存在
+//     * @param appName 进程名称
+//     * @return 进程名称,为"0"时表示进程不存在
+//     */
+//    public boolean taskerIsRun(String appName){
+//        if(manager == null){
+//            manager = new FFmpegManagerImpl();
+//        }
+//        return (manager.queryAll().size()>0 && manager.query(appName) != null);
+//    }
+//
+//
+//    /**
+//     * 下载是屁
+//     * @param appName 进程名称,为相机ip去"."
+//     * @param rtspName rtsp流
+//     * @param videoPath 文件路径
+//     * @return String
+//     */
+//    public String downloadVideo(String appName, String rtspName, String videoPath)  {
+//        if(taskerIsRun(appName)) {
+//            return appName; //如果进程存在,则直接返回进程名
+//        }
+//        // 执行任务,id就是appName,如果执行失败返回为null
+//        String start = manager.start(appName,"ffmpeg -i rtsp://" + rtspName + " " + videoPath);
+//        return start;
+//    }
+//
+//    /**
+//     * 抓图
+//     * @param appName 进程名称,为相机ip去"."
+//     * @param rtspName rtsp流
+//     * @param picPath 文件路径
+//     * @return String
+//     */
+//    public String catchPicture(String appName, String rtspName, String picPath)  {
+//        if(taskerIsRun(appName)) {
+//            return appName; //如果进程存在,则直接返回进程名
+//        }
+//        // 执行任务,id就是appName,如果执行失败返回为null
+//        String start = manager.start(appName,"ffmpeg -i rtsp://" + rtspName + " -frames:v 1 -f image2 " + picPath);
+//        return start;
+//    }
+//
+//}

+ 368 - 28
taphole-iron/src/main/java/com/sckj/iron/service/impl/TCameraServiceImpl.java

@@ -5,52 +5,78 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.sckj.camera.manager.CameraProperties;
 import com.sckj.common.TapholeAdminThreadLocal;
+import com.sckj.common.aop.CameraLogin;
 import com.sckj.common.core.AjaxResult;
 import com.sckj.common.core.PageResult;
 import com.sckj.common.exception.OperateException;
+import com.sckj.common.util.UrlUtils;
+import com.sckj.common.util.YmlUtils;
 import com.sckj.common.validate.commons.PageValidate;
 import com.sckj.device.validate.TCameraCreateValidate;
 import com.sckj.device.validate.TCameraSearchValidate;
 import com.sckj.device.validate.TCameraUpdateDTO;
 import com.sckj.device.validate.TCameraUpdateValidate;
-import com.sckj.device.vo.CameraDTO;
+import com.sckj.device.vo.CameraInfoDTO;
 import com.sckj.device.vo.TCameraDetailVo;
 import com.sckj.device.vo.TCameraListedVo;
+import com.sckj.iron.dto.CameraDTO;
 import com.sckj.iron.dto.CameraInfo;
 import com.sckj.iron.dto.CameraParamInfo;
+import com.sckj.iron.dto.ResultDTO;
+import com.sckj.iron.entity.CameraFile;
+import com.sckj.iron.entity.CameraFlow;
 import com.sckj.iron.entity.TCamera;
 import com.sckj.iron.entity.TIronParam;
+import com.sckj.iron.manager.HikCameraManager;
+import com.sckj.iron.manager.hik.HCNetTools;
 import com.sckj.iron.mapper.TCameraMapper;
+import com.sckj.iron.util.HikCameraUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
+import java.io.File;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import static com.sckj.common.util.ConfigUtils.set;
+
 /**
  * 摄像头实现类
  *
  * @author zhanghao
  */
 @Service
+@Slf4j
 public class TCameraServiceImpl extends ServiceImpl<TCameraMapper, TCamera> {
 
     @Resource
     TCameraMapper tCameraMapper;
 
+    @Resource
+    private CameraFlowServiceImpl flowService;
+
+    @Resource
+    private CameraFileServiceImpl cameraFileService;
+
+    @Resource
+    private HikCameraManager hikCameraManager;
+
+    @Resource
+    TIronParamServiceImpl ironParamService;
+
     /**
      * 摄像头列表
      *
@@ -215,18 +241,11 @@ public class TCameraServiceImpl extends ServiceImpl<TCameraMapper, TCamera> {
         return AjaxResult.success();
     }
 
-    @Resource
-    private CameraProperties cameraProperties;
-
-    @Resource
-    TIronParamServiceImpl ironParamService;
-
-
     public CameraInfo getCameraInfo() {
         List<TCamera> cameraList = lambdaQuery().eq(TCamera::getType, "1").in(TCamera::getStatus, "1", "2").orderByAsc(TCamera::getSort).list();
         CameraInfo cameraParamInfo = new CameraInfo();
-        List<CameraDTO> collect = cameraList.stream().flatMap((item) -> {
-            CameraDTO dto = new CameraDTO();
+        List<CameraInfoDTO> collect = cameraList.stream().flatMap((item) -> {
+            CameraInfoDTO dto = new CameraInfoDTO();
             BeanUtils.copyProperties(item, dto);
             String channelNumberStr = 1 + "02"; //新通道(2012年之后设备,02代表子码流)
             String rtspUrl = "rtsp://" + item.getAccount() + ":" + item.getPassword() + "@" + item.getIp() + ":" + item.getPortRtsp() + "/" + channelNumberStr + "?transportmode=unicast"; //新码流
@@ -235,10 +254,10 @@ public class TCameraServiceImpl extends ServiceImpl<TCameraMapper, TCamera> {
         }).collect(Collectors.toList());
         cameraParamInfo.setCameraList(collect);
 
-        List<CameraDTO> bannerList = new ArrayList<>();
-        for (CameraDTO cameraDTO : collect) {
-            if ("2".equals(cameraDTO.getStatus())) {
-                bannerList.add(cameraDTO);
+        List<CameraInfoDTO> bannerList = new ArrayList<>();
+        for (CameraInfoDTO cameraInfoDTO : collect) {
+            if ("2".equals(cameraInfoDTO.getStatus())) {
+                bannerList.add(cameraInfoDTO);
             }
         }
         cameraParamInfo.setBannerList(bannerList);
@@ -252,21 +271,21 @@ public class TCameraServiceImpl extends ServiceImpl<TCameraMapper, TCamera> {
     public CameraParamInfo getCameraParamInfo() {
         List<TCamera> cameraList = lambdaQuery().eq(TCamera::getType, "1").in(TCamera::getStatus, "1", "2").orderByAsc(TCamera::getSort).list();
         CameraParamInfo map = new CameraParamInfo();
-        List<CameraDTO> collect = cameraList.stream().flatMap((item) -> {
-            CameraDTO dto = new CameraDTO();
+        List<CameraInfoDTO> collect = cameraList.stream().flatMap((item) -> {
+            CameraInfoDTO dto = new CameraInfoDTO();
             BeanUtils.copyProperties(item, dto);
             return Stream.of(dto);
         }).collect(Collectors.toList());
 
-        List<CameraDTO> normalList = new ArrayList<>();
-        List<CameraDTO> bannerList = new ArrayList<>();
+        List<CameraInfoDTO> normalList = new ArrayList<>();
+        List<CameraInfoDTO> bannerList = new ArrayList<>();
 
-        for (CameraDTO cameraDTO : collect) {
-            if ("1".equals(cameraDTO.getStatus())) {
-                normalList.add(cameraDTO);
+        for (CameraInfoDTO cameraInfoDTO : collect) {
+            if ("1".equals(cameraInfoDTO.getStatus())) {
+                normalList.add(cameraInfoDTO);
             }
-            if ("2".equals(cameraDTO.getStatus())) {
-                bannerList.add(cameraDTO);
+            if ("2".equals(cameraInfoDTO.getStatus())) {
+                bannerList.add(cameraInfoDTO);
             }
         }
         map.setNormalList(normalList);
@@ -295,4 +314,325 @@ public class TCameraServiceImpl extends ServiceImpl<TCameraMapper, TCamera> {
         }
     }
 
+
+    public AjaxResult enabledCameraMsg() {
+        String[] status = new String[]{"1", "2"};
+        List<TCamera> cameraList = baseMapper.selectList(
+                new QueryWrapper<TCamera>().in("status", status).orderByDesc("id"));
+        return AjaxResult.success(cameraList);
+    }
+
+    public AjaxResult cameraConfig(@RequestBody String duration) {
+        set("camera", "duration", duration);
+        return AjaxResult.success();
+    }
+
+    public AjaxResult statusChange(Long id) {
+        TCamera camera = baseMapper.selectOne(
+                new QueryWrapper<TCamera>()
+                        .eq("id", id)
+                        .last("limit 1"));
+        if (camera == null) {
+            return AjaxResult.failed("该相机不存在");
+        }
+        camera.setStatus(camera.getStatus().equals("1") ? "2" : "1");
+        updateById(camera);
+        return AjaxResult.success("相机状态切换成功");
+    }
+
+    @CameraLogin
+    public ResultDTO getChannel(CameraDTO cameraDTO) {
+        ResultDTO resultDTO = new ResultDTO();
+        StringBuilder str = new StringBuilder();
+        for (int i = 0; i < cameraDTO.getChannelList().size(); i++) {
+            if (i == cameraDTO.getChannelList().size() - 1) {
+                str.append(cameraDTO.getChannelList().get(i));
+            } else {
+                str.append(cameraDTO.getChannelList().get(i)).append("&");
+            }
+        }
+        resultDTO.setResult(str.toString());
+        return resultDTO;
+    }
+
+    /**
+     * 所有可用摄像头开始推流(rtsp->rtmp)
+     *
+     * @param
+     * @return ResultDTO
+     */
+    //@PostConstruct
+    public List<ResultDTO> startTranscodeList() {
+        log.info("自动开启视频推送");
+        QueryWrapper<TCamera> queryWrapper = new QueryWrapper<>();
+        //排除禁用的设备
+        queryWrapper.lambda().ne(TCamera::getStatus, "0").eq(TCamera::getType, "1");
+
+        List<TCamera> cameraList = list(queryWrapper);
+        if (ObjectUtils.isEmpty(cameraList)) {
+            return null;
+        }
+        List<ResultDTO> resultDTOList = new ArrayList<>();
+        for (TCamera camera : cameraList) {
+            ResultDTO resultDTO = new ResultDTO();
+            CameraDTO cameraDTO = new CameraDTO();
+            BeanUtils.copyProperties(camera, cameraDTO);
+            HCNetTools hcNetTools = new HCNetTools();
+            int userId = hcNetTools.deviceLogin(camera.getIp(), camera.getPort(), camera.getAccount(), camera.getPassword());
+            if (userId > -1) {
+                //登录成功
+                List<String> channelNumberList = hcNetTools.getChannelNumber();
+                if (ObjectUtils.isEmpty(channelNumberList)) {
+                    resultDTO.setResult("通道获取失败");
+                } else {
+                    int channelNumber = HikCameraUtils.analyzeChannel(channelNumberList.get(0));
+                    String appName = cameraDTO.getAccount() + cameraDTO.getIp().replace(".", "");
+                    String channelNumberStr = channelNumber + "02"; //新通道(2012年之后设备,02代表子码流)
+                    String rtspName = "rtsp://" + cameraDTO.getAccount() + ":" + cameraDTO.getPassword() + "@" + cameraDTO.getIp() + ":" + cameraDTO.getPortRtsp() + "/" + channelNumberStr + "?transportmode=unicast"; //新码流
+
+                }
+            } else {
+                resultDTO.setResult("login failed");
+            }
+            resultDTOList.add(resultDTO);
+        }
+        return resultDTOList;
+    }
+
+    /**
+     * 开始推流(rtsp->rtmp)
+     *
+     * @param cameraDTO 相机信息
+     * @return ResultDTO
+     */
+    @CameraLogin
+    public ResultDTO startTranscode(CameraDTO cameraDTO) {
+        ResultDTO resultDTO = new ResultDTO();
+        if (ObjectUtils.isEmpty(cameraDTO)) {
+            resultDTO.setResult("未找到该设备");
+            return resultDTO;
+        }
+        String channelNumberStr = cameraDTO.getChannelNumber() + "02"; //新通道(2012年之后设备,02代表子码流)
+        String rtspName = "rtsp://" + cameraDTO.getAccount() + ":" + cameraDTO.getPassword() + "@" + cameraDTO.getIp() + ":" + cameraDTO.getPortRtsp() + "/" + channelNumberStr + "?transportmode=unicast"; //新码流
+        resultDTO.setRtspUrl(rtspName);
+        TIronParam webrtc = ironParamService.lambdaQuery().eq(TIronParam::getParamName, "webrtc_url").one();
+        resultDTO.setWebrtcUrl(webrtc.getParamValue());
+        return resultDTO;
+    }
+
+    /**
+     * 回放推流
+     *
+     * @param cameraDTO 相机信息
+     * @return ResultDTO
+     */
+    @CameraLogin(type = CameraLogin.Operation.BACK_STREAM)
+    public ResultDTO startBackTranscode(CameraDTO cameraDTO) {
+        ResultDTO resultDTO = new ResultDTO();
+
+        String startTime, endTime;
+
+        DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyyMMdd't'HHmmss'z'");
+        if (cameraDTO.getHistoryDTO().getEndTime() != null) {
+            startTime = sdf.format(cameraDTO.getHistoryDTO().getStartTime());
+            endTime = sdf.format(cameraDTO.getHistoryDTO().getEndTime());
+        } else {
+            startTime = sdf.format(cameraDTO.getHistoryDTO().getStartTime());
+            endTime = null;
+        }
+        if ("1".equals(cameraDTO.getType())) {
+            //摄像机
+            //appName = "history" + cameraDTO.getVcr().getAccount() + cameraDTO.getVcr().getIp().replace(".", "") + "to" + cameraDTO.getIp().replace(".", "") + "start" + startTime + "end" + endTime;
+        } else {
+            throw new OperateException("目前只支持带有录像机的回放数据");
+            //NVR
+        }
+        //未推流
+        String channelNumberStr = cameraDTO.getChannelNumber() + "01"; //回放流只有主码流
+        String rtspName = "rtsp://";
+        if (endTime != null) {
+            rtspName += cameraDTO.getVcr().getAccount() + ":" + cameraDTO.getVcr().getPassword() + "@" + cameraDTO.getVcr().getIp() + ":" + cameraDTO.getPortRtsp() + "/Streaming/tracks/" + channelNumberStr + "?starttime=" + startTime + "&endtime=" + endTime;
+        } else {
+            rtspName += cameraDTO.getVcr().getAccount() + ":" + cameraDTO.getVcr().getPassword() + "@" + cameraDTO.getVcr().getIp() + ":" + cameraDTO.getPortRtsp() + "/Streaming/tracks/" + channelNumberStr + "?starttime=" + startTime;
+        }
+        resultDTO.setRtspUrl(rtspName);
+        TIronParam webrtc = ironParamService.lambdaQuery().eq(TIronParam::getParamName, "webrtc_url").one();
+        resultDTO.setWebrtcUrl(webrtc.getParamValue());
+        return resultDTO;
+    }
+
+    /**
+     * 抓图
+     *
+     * @param cameraDTO 相机信息
+     */
+    @CameraLogin(type = CameraLogin.Operation.CATCH_PICTURE)
+    public ResultDTO catchPic(CameraDTO cameraDTO) {
+        ResultDTO resultDTO = new ResultDTO();
+        if (ObjectUtils.isEmpty(cameraDTO)) {
+            resultDTO.setResult("未找到设备");
+            return resultDTO;
+        }
+
+        String pathName;
+        if ("1".equals(cameraDTO.getType())) {
+            //摄像机
+            pathName = cameraDTO.getIp().replace(".", "");
+        } else {
+            //NVR
+            resultDTO.setResult("NVR设备不支持抓图");
+            return resultDTO;
+        }
+
+        HCNetTools hcTool = cameraDTO.getHcTool();
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        String name = dtf.format(LocalDateTime.now()) + ".jpg";
+        String path = "/picture/" + pathName + "/";
+        String filePath = YmlUtils.get("like.upload-directory") + path + name;
+        cameraFileService.pathCreator(YmlUtils.get("like.upload-directory") + path);
+        CameraFile cameraFile = cameraFileService.saveFileInfo(name, path, 0L, "1");
+        boolean success = hcTool.getDVRPic(cameraDTO.getChannelNumber(), filePath);
+        cameraFile.setUpdateTime(new Date());
+        long size = new File(filePath).length();
+        if (success && size > 0) {
+            resultDTO.setResult(UrlUtils.toAbsoluteUrl(path + name));
+            cameraFile.setStatus("1");
+        } else {
+            cameraFile.setStatus("2");
+        }
+        cameraFileService.updateById(cameraFile);
+        return resultDTO;
+    }
+
+    /**
+     * 视频回放下载
+     *
+     * @param cameraDTO
+     */
+    @CameraLogin(type = CameraLogin.Operation.VIDEO_DOWNLOAD)
+    public ResultDTO downloadBack(CameraDTO cameraDTO) {
+        ResultDTO resultDTO = new ResultDTO();
+        String pathName;
+        if ("1".equals(cameraDTO.getType())) {
+            //摄像机
+            pathName = cameraDTO.getIp().replace(".", "");
+        } else {
+            //NVR
+            throw new OperateException("不支持视频回放下载");
+        }
+
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        String name = dtf.format(cameraDTO.getHistoryDTO().getStartTime()) + "TO" + dtf.format(cameraDTO.getHistoryDTO().getEndTime()) + ".mp4";
+        String path = "/video/" + pathName + "/";
+        cameraFileService.pathCreator(YmlUtils.get("like.upload-directory") + path);
+        Integer fileId = cameraFileService.findByPathAndName(path, name);
+        if (fileId > 0) {
+            resultDTO.setResult(fileId.toString());
+            return resultDTO;
+        }
+        hikCameraManager.downloadVideoAsync(cameraDTO, path, name, cameraDTO.getChannelNumber() + 32);
+        resultDTO.setResult(UrlUtils.toAbsoluteUrl(path + name));
+        return resultDTO;
+    }
+
+
+    /**
+     * 获取视频列表
+     *
+     * @param cameraDTO
+     * @return
+     */
+    @CameraLogin(type = CameraLogin.Operation.VIDEO_DOWNLOAD)
+    public ResultDTO getVideoFileList(CameraDTO cameraDTO) {
+        ResultDTO resultDTO = new ResultDTO();
+
+        if (cameraDTO != null) {
+//            int channelNumber = 1;
+//            if (cameraDTO.getType() == 1) {
+//                //摄像机
+//                channelNumber = HikCameraUtils.analyzeChannel(cameraDTO.getChannelList().get(0));
+//            } else {
+//                //NVR
+//                channelNumber = HikCameraUtils.getIpcChannel(cameraDTO.getChannelList(), cameraDTO.getIpcAddress());
+//                channelNumber = channelNumber + 32; //远程录像的通道号从33开始
+//            }
+            HCNetTools hcTool = cameraDTO.getHcTool();
+            List<HashMap<String, String>> map = hcTool.getVideoFileList(cameraDTO.getHistoryDTO().getStartTime(), cameraDTO.getHistoryDTO().getEndTime(), cameraDTO.getChannelNumber() + 32);
+            resultDTO.setResult(map);
+            return resultDTO;
+        } else {
+            resultDTO.setResult("未找到设备");
+            return resultDTO;
+        }
+    }
+
+    /**
+     * 停止推流
+     *
+     * @param id 相机id
+     */
+    public Boolean stopRtmp(Long id) {
+        if (id == null) {
+            return true;
+        }
+        CameraFlow camera = flowService.getById(id);
+        if (camera != null) {
+//            return ffmpegService.stopTranscoding(camera.getTaskName());
+            return Boolean.FALSE;
+        } else {
+            return true;
+        }
+    }
+
+    /**
+     * 停止推流
+     *
+     * @param taskName 执行任务名
+     */
+    public Boolean stopRtmpByTaskName(String taskName) {
+        if (ObjectUtils.isEmpty(taskName)) {
+            return true;
+        }
+//        return ffmpegService.stopTranscoding(taskName);
+        return Boolean.FALSE;
+    }
+
+    /**
+     * 停止推流
+     *
+     * @param ip 执行任务名
+     */
+    public Boolean stopRtmpByIP(String ip) {
+        if (ObjectUtils.isEmpty(ip)) {
+            return false;
+        }
+        QueryWrapper<CameraFlow> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().likeLeft(CameraFlow::getTaskName, ip.replace(".", ""));
+        List<CameraFlow> list = flowService.list(queryWrapper);
+        if (ObjectUtils.isEmpty(list)) {
+            return false;
+        }
+//        return ffmpegService.stopTranscoding(list.get(0).getTaskName());
+        return Boolean.FALSE;
+    }
+
+    @CameraLogin(type = CameraLogin.Operation.CATCH_PICTURE)
+    public Integer getState(CameraDTO cameraDTO) {
+        if (ObjectUtils.isEmpty(cameraDTO.getHcTool())) {
+            return null;
+        }
+        return cameraDTO.getHcTool().getState();
+    }
+
+
+//    @PreDestroy
+//    public void closeRealStream() {
+//        logger.info("关闭推送流");
+//        for (CameraFlow cameraFlow : flowService.list()) {
+//            String taskName = cameraFlow.getTaskName();
+//            ffmpegService.stopTranscoding(taskName);
+//        }
+//    }
+
+
 }

+ 22 - 0
taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronModelServiceImpl.java

@@ -0,0 +1,22 @@
+package com.sckj.iron.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckj.iron.entity.TIronModel;
+import com.sckj.iron.mapper.TIronModelMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 参数设定实现类
+ *
+ * @author zhnaghao
+ */
+@Service
+public class TIronModelServiceImpl extends ServiceImpl<TIronModelMapper, TIronModel> {
+
+    @Resource
+    TIronModelMapper tIronModelMapper;
+
+
+}

+ 50 - 6
taphole-iron/src/main/java/com/sckj/iron/socketio/DeviceEventListener.java

@@ -3,7 +3,7 @@ package com.sckj.iron.socketio;
 import com.corundumstudio.socketio.SocketIOClient;
 import com.corundumstudio.socketio.annotation.OnEvent;
 import com.google.common.eventbus.Subscribe;
-import com.sckj.camera.util.LocalDateUtils;
+import com.sckj.iron.util.LocalDateUtils;
 import com.sckj.common.config.GlobalConfig;
 import com.sckj.common.eventbus.EventListener;
 import com.sckj.common.manager.ScheduledTaskManager;
@@ -17,18 +17,19 @@ import com.sckj.iron.dto.IronTimeNoDTO;
 import com.sckj.iron.dto.RealtimeData;
 import com.sckj.iron.dto.WarnData;
 import com.sckj.iron.entity.TIronData;
+import com.sckj.iron.entity.TIronModel;
 import com.sckj.iron.entity.TIronParam;
 import com.sckj.iron.service.impl.*;
 import com.sckj.iron.vo.IronStepVO;
+import com.sckj.l2.dto.L2Data;
+import com.sckj.l2.dto.L2Material;
 import com.sckj.l2.entity.TL2Data;
 import com.sckj.l2.entity.TL2Material;
 import com.sckj.l2.service.impl.L2DataServiceImpl;
 import com.sckj.l2.service.impl.TL2DataServiceImpl;
 import com.sckj.l2.service.impl.TL2MaterialServiceImpl;
-import com.sckj.l2.dto.L2Data;
-import com.sckj.l2.dto.L2Material;
-import com.sckj.opc.entity.OPCData;
 import com.sckj.opc.dauaservice.OPCDAServiceImpl;
+import com.sckj.opc.entity.OPCData;
 import com.sckj.opc.service.OPCDataServiceImpl;
 import com.sckj.opc.utils.CustomUtil;
 import com.sckj.warn.entity.TAudio;
@@ -43,6 +44,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.web.ServerProperties;
 import org.springframework.boot.context.event.ApplicationStartedEvent;
 import org.springframework.context.ApplicationListener;
+import org.springframework.expression.Expression;
 import org.springframework.expression.spel.standard.SpelExpressionParser;
 import org.springframework.expression.spel.support.StandardEvaluationContext;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@@ -113,6 +115,9 @@ public class DeviceEventListener extends EventListener implements ApplicationLis
     @Resource
     OPCDAServiceImpl opcdaService;
 
+    @Resource
+    TIronModelServiceImpl ironModelService;
+
 
     //炉前申请出铁
     private static final String STEP_LQCT = "lqct";
@@ -271,8 +276,22 @@ public class DeviceEventListener extends EventListener implements ApplicationLis
         });
         mSteps = ironStepService.getTreeSteps();
         updateParams();
+        updateModels();
+    }
+
+
+    //打泥量选择公式
+    private TIronModel modelHitMud;
+
+    /***
+     * 更新模型
+     */
+    private void updateModels() {
+        modelHitMud = ironModelService.getById(1);
+
     }
 
+
     /***
      * 更新参数
      */
@@ -524,7 +543,28 @@ public class DeviceEventListener extends EventListener implements ApplicationLis
         //打泥量公式关联因素:铁口深度、钻杆直径、
         //调用打泥量模型,计算预计使用多少打泥量进行堵口
         scheduledTaskManager.addTask(TaskNameConstants.TASKNAME_HIT_MUD, ScheduledTimeConstants.HIT_MUD_DELAY, ScheduledTimeConstants.HIT_MUD_PERIOD, TimeUnit.SECONDS, () -> {
-            log.info("堵口预警:{},speed1:{},speed2:{},STANDARD_SPEED:{}", speed1, speed2, TaskNameConstants.TASKNAME_HIT_MUD);
+            log.info("堵口预警:{},speed1:{},speed2:{},", speed1, speed2);
+
+            TL2Data tappingData = tl2DataService.getTappingData();
+            if (ObjectUtils.isNotEmpty(tappingData) && ObjectUtils.isNotEmpty(modelHitMud)) {
+                try {
+                    String modelExpression = modelHitMud.getModelExpression();
+                    SpelExpressionParser parser = new SpelExpressionParser();
+                    Expression expression = parser.parseExpression(modelExpression);
+                    StandardEvaluationContext context = new StandardEvaluationContext();
+                    // 设置占位符对应的值
+                    context.setVariable("openDepth", tappingData.getOpenDepth());
+                    context.setVariable("ironWeight", tappingData.getTheoryWeight());
+                    context.setVariable("ironCosttime", mSecondsElapsed.get() / 60);
+                    context.setVariable("ironSpeed", speed1.compareTo(speed2) > 0 ? speed1 : speed2);
+                    String result = (String) expression.getValue(context);
+                    log.info("openDepth:{},ironWeight: {}", tappingData.getOpenDepth(), tappingData.getTheoryWeight());
+                    log.info("ironCosttime(min): {},ironSpeed: {}", mSecondsElapsed.get() / 60, speed1.compareTo(speed2) > 0 ? speed1 : speed2);
+                    log.info("打泥量计算公式:{},结果: {}", modelExpression, result);
+                } catch (Exception e) {
+
+                }
+            }
 
             //计算打泥量
             //计算理论铁量= 矿批 × 综合品位 × 1.06,其中矿批是指L2中的干量
@@ -625,7 +665,7 @@ public class DeviceEventListener extends EventListener implements ApplicationLis
                 mRealtimeData.put(IRON_TEMP, realtimeData);
 
             } else if (opcData.getPointName().contains(L1TagConstants.TAG_CAR11) || opcData.getPointName().contains(L1TagConstants.TAG_CAR12)) {
-//            1TH-1号车受铁速度
+                //1TH-1号车受铁速度
                 RealtimeData realtimeData = new RealtimeData();
                 realtimeData.setValue(opcData.getData());
                 realtimeData.setUnit("t/s");
@@ -996,10 +1036,14 @@ public class DeviceEventListener extends EventListener implements ApplicationLis
             case "1":
                 mSteps = ironStepService.getTreeSteps();
                 log.info("流程步骤数据刷新:{}", LocalDateTime.now());
+                PushData.send2Operation(mSteps, ironLoading1.get());
                 break;
             case "2":
                 updateParams();
                 break;
+            case "3":
+                updateModels();
+                break;
             default:
                 break;
         }

+ 1 - 1
taphole-camera/src/main/java/com.sckj.camera/util/HikCameraUtils.java → taphole-iron/src/main/java/com/sckj/iron/util/HikCameraUtils.java

@@ -1,4 +1,4 @@
-package com.sckj.camera.util;
+package com.sckj.iron.util;
 
 import org.apache.commons.lang3.StringUtils;
 

+ 1 - 1
taphole-camera/src/main/java/com.sckj.camera/util/LocalDateUtils.java → taphole-iron/src/main/java/com/sckj/iron/util/LocalDateUtils.java

@@ -1,4 +1,4 @@
-package com.sckj.camera.util;
+package com.sckj.iron.util;
 
 import java.time.*;
 import java.time.format.DateTimeFormatter;

+ 0 - 0
taphole-camera/src/main/resources/jar/FFmpegCommandHandler.jar → taphole-iron/src/main/resources/jar/FFmpegCommandHandler.jar


+ 0 - 0
taphole-camera/src/main/resources/jar/examples.jar → taphole-iron/src/main/resources/jar/examples.jar


+ 0 - 0
taphole-camera/src/main/resources/jar/jna.jar → taphole-iron/src/main/resources/jar/jna.jar


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libAudioIntercom.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libAudioIntercom.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libHCAlarm.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCAlarm.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libHCCoreDevCfg.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCCoreDevCfg.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libHCDisplay.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCDisplay.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libHCGeneralCfgMgr.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCGeneralCfgMgr.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libHCIndustry.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCIndustry.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libHCPlayBack.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCPlayBack.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libHCPreview.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCPreview.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libHCVoiceTalk.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libHCVoiceTalk.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libStreamTransClient.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libStreamTransClient.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libSystemTransform.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libSystemTransform.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libanalyzedata.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libanalyzedata.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDKCom/libiconv2.so → taphole-iron/src/main/resources/lib/linux/HCNetSDKCom/libiconv2.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/HCNetSDK_Log_Switch.xml → taphole-iron/src/main/resources/lib/linux/HCNetSDK_Log_Switch.xml


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libAudioRender.so → taphole-iron/src/main/resources/lib/linux/libAudioRender.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libHCCore.so → taphole-iron/src/main/resources/lib/linux/libHCCore.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libNPQos.so → taphole-iron/src/main/resources/lib/linux/libNPQos.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libPlayCtrl.so → taphole-iron/src/main/resources/lib/linux/libPlayCtrl.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libSuperRender.so → taphole-iron/src/main/resources/lib/linux/libSuperRender.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libcrypto.so → taphole-iron/src/main/resources/lib/linux/libcrypto.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libcrypto.so.1.0.0 → taphole-iron/src/main/resources/lib/linux/libcrypto.so.1.0.0


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libhcnetsdk.so → taphole-iron/src/main/resources/lib/linux/libhcnetsdk.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libhpr.so → taphole-iron/src/main/resources/lib/linux/libhpr.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libopenal.so.1 → taphole-iron/src/main/resources/lib/linux/libopenal.so.1


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libssl.so → taphole-iron/src/main/resources/lib/linux/libssl.so


+ 0 - 0
taphole-camera/src/main/resources/lib/linux/libz.so → taphole-iron/src/main/resources/lib/linux/libz.so


+ 0 - 0
taphole-camera/src/main/resources/lib/win/AudioRender.dll → taphole-iron/src/main/resources/lib/win/AudioRender.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCCore.dll → taphole-iron/src/main/resources/lib/win/HCCore.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDK.dll → taphole-iron/src/main/resources/lib/win/HCNetSDK.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/AnalyzeData.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/AnalyzeData.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/AudioIntercom.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/AudioIntercom.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/AudioRender.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/AudioRender.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/HCAlarm.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCAlarm.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/HCAlarm.lib → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCAlarm.lib


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/HCCoreDevCfg.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCCoreDevCfg.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/HCDisplay.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCDisplay.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/HCGeneralCfgMgr.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCGeneralCfgMgr.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/HCGeneralCfgMgr.lib → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCGeneralCfgMgr.lib


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/HCIndustry.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCIndustry.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/HCPlayBack.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCPlayBack.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/HCPreview.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCPreview.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/HCPreview.lib → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCPreview.lib


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/HCVoiceTalk.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/HCVoiceTalk.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/OpenAL32.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/OpenAL32.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/StreamTransClient.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/StreamTransClient.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/SystemTransform.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/SystemTransform.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/HCNetSDKCom/libiconv2.dll → taphole-iron/src/main/resources/lib/win/HCNetSDKCom/libiconv2.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/PlayCtrl.dll → taphole-iron/src/main/resources/lib/win/PlayCtrl.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/SuperRender.dll → taphole-iron/src/main/resources/lib/win/SuperRender.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/hlog.dll → taphole-iron/src/main/resources/lib/win/hlog.dll


+ 0 - 0
taphole-camera/src/main/resources/lib/win/hpr.dll → taphole-iron/src/main/resources/lib/win/hpr.dll


Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott