优化:修改未读消息入库前判断不存在则插入
取消:程序自动拉起redis/mediamtx/minio,中间件全部服务化
增加:流媒体vtdu详情接口
已修改5个文件
已删除1个文件
249 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/cmd/startup.java 220 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/META-INF/spring.factories 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java
@@ -67,4 +67,6 @@
    public ArdCallUnreadMessages  getUnreadMessage(@Param("sessionId") String sessionId, @Param("targetId")String targetId);
    public int totalUnReadCount(String userId);
    int selectCountByUserIdAndSessionId(@Param("userId")String userId,@Param("sessionId") String sessionId);
}
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
@@ -78,7 +78,6 @@
    @Override
    public int insertArdCallHistory(ArdCallHistory ardCallHistory) {
        ardCallHistory.setId(IdUtils.simpleUUID());
        ardCallHistory.setCreateTime(DateUtils.getNowDate());
        ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(ardCallHistory.getSessionId());
@@ -90,7 +89,10 @@
                ardCallUnreadMessages.setUserId(ardCallHistory.getTargetId());
                ardCallUnreadMessages.setSessionId(ardCallHistory.getSessionId());
                ardCallUnreadMessages.setUnreadCount(1);
                ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
                int rows = ardCallUnreadMessagesMapper.selectCountByUserIdAndSessionId(ardCallUnreadMessages.getUserId(), ardCallUnreadMessages.getSessionId());
                if (rows == 0) {
                    ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
                }
            } else {
                ardCallUnreadMessages.setUnreadCount(ardCallUnreadMessages.getUnreadCount() + 1);
                ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
@@ -124,7 +126,10 @@
                        ardCallUnreadMessages.setUserId(groupUser.getUserId());
                        ardCallUnreadMessages.setSessionId(ardCallHistory.getSessionId());
                        ardCallUnreadMessages.setUnreadCount(1);
                        ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
                        int rows = ardCallUnreadMessagesMapper.selectCountByUserIdAndSessionId(ardCallUnreadMessages.getUserId(), ardCallUnreadMessages.getSessionId());
                        if (rows == 0) {
                            ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
                        }
                    } else {
                        ardCallUnreadMessages.setUnreadCount(ardCallUnreadMessages.getUnreadCount() + 1);
                        ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
ard-work/src/main/java/com/ruoyi/cmd/startup.java
@@ -29,122 +29,122 @@
 **/
@Slf4j(topic = "cmd")
@Component
public class startup implements ApplicationContextInitializer {
public class startup{
    //minio
    String minioName = "minio.exe";
    @Value("${minio.accessKey}")
    String accessKey;
    @Value("${minio.secretKey}")
    String secretKey;
    @Value("${minio.path}")
    String path;
    @Value("${minio.enabled}")
    Boolean minioEnabled;
    //mediamtx
    String mediamtxName = "mediamtx.exe";
    @Value("${mediamtx.enabled}")
    Boolean mediamtxEnabled;
    //redis
    String redisName = "redis-server.exe";
//    //minio
//    String minioName = "minio.exe";
//    @Value("${minio.accessKey}")
//    String accessKey;
//    @Value("${minio.secretKey}")
//    String secretKey;
//    @Value("${minio.path}")
//    String path;
//    @Value("${minio.enabled}")
//    Boolean minioEnabled;
//
//    //mediamtx
//    String mediamtxName = "mediamtx.exe";
//    @Value("${mediamtx.enabled}")
//    Boolean mediamtxEnabled;
//    //redis
//    String redisName = "redis-server.exe";
    /**
     * ç¨‹åºåˆå§‹åŒ–启动redis
     * åˆ˜è‹ä¹‰
     * 2023/9/22 10:38:41
     */
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        if (Platform.isWindows()) {
            String workingDir = System.getProperty("user.dir") + File.separator + "server" + File.separator + "redis";
            String exePath = workingDir +File.separator+ redisName;
            List<String> cmd = new ArrayList<>();
            cmd.add(exePath);
            if (CmdUtils.isProcessRunning(redisName)) {
                // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
                CmdUtils.stopProcess(redisName);
            }
            // å¯åŠ¨åŽå°è¿›ç¨‹
            CmdUtils.commandStart(workingDir, redisName, cmd, null);
            // å¯åЍcmd窗口
            //String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"};
            //CmdUtils.commandStart(command);
        }
    }
//    @Override
//    public void initialize(ConfigurableApplicationContext applicationContext) {
//        if (Platform.isWindows()) {
//            String workingDir = System.getProperty("user.dir") + File.separator + "server" + File.separator + "redis";
//            String exePath = workingDir +File.separator+ redisName;
//            List<String> cmd = new ArrayList<>();
//            cmd.add(exePath);
//            if (CmdUtils.isProcessRunning(redisName)) {
//                // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
//                CmdUtils.stopProcess(redisName);
//            }
//            // å¯åŠ¨åŽå°è¿›ç¨‹
//            CmdUtils.commandStart(workingDir, redisName, cmd, null);
//            // å¯åЍcmd窗口
//            //String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"};
//            //CmdUtils.commandStart(command);
//        }
//    }
    @PostConstruct
    @Order(1)
    public void init() {
        if (minioEnabled) {
            log.info("初始化启动minio");
            if (Platform.isWindows()) {
                String workingDir = System.getProperty("user.dir") + File.separator + "server" + File.separator + "minio";
                String exePath = workingDir + File.separator + minioName;
                Map<String, String> env = new HashMap<>();
                env.put("MINIO_ROOT_USER", accessKey);
                env.put("MINIO_ROOT_PASSWORD", secretKey);
                List<String> cmd = new ArrayList<>();
                cmd.add(exePath);
                cmd.add("server");
                cmd.add(path);
                cmd.add("--console-address=0.0.0.0:9000");
                cmd.add("--address=0.0.0.0:9001");
                if (CmdUtils.isProcessRunning(minioName)) {
                    // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
                    CmdUtils.stopProcess(minioName);
                }
                // å¯åŠ¨åŽå°è¿›ç¨‹
                CmdUtils.commandStart(workingDir, minioName, cmd, env);
                // å¯åЍcmd窗口
                //String[] command = {"cmd", "/c", "start", exePath};
                //CmdUtils.commandStart(command);
            }
        }
        if (mediamtxEnabled) {
            log.info("初始化启动mediaMTX");
            if (Platform.isWindows()) {
                String workingDir = System.getProperty("user.dir") + File.separator + "server" + File.separator + "mediamtx";
                String exePath = workingDir + File.separator + mediamtxName;
                String ymlPath = workingDir + File.separator + "mediamtx.yml";
                List<String> cmd = new ArrayList<>();
                cmd.add(exePath);
               // cmd.add(ymlPath);
                if (CmdUtils.isProcessRunning(mediamtxName)) {
                    // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
                    CmdUtils.stopProcess(mediamtxName);
                }
                // å¯åŠ¨åŽå°è¿›ç¨‹
                CmdUtils.commandStart(workingDir, mediamtxName, cmd, null);
                // å¯åЍcmd窗口
                //String[] command = {"cmd","/c","start",exePath,ymlPath};
                //CmdUtils.commandStart(command);
            }
        }
    }
    @PreDestroy
    public void destroy() {
        if (minioEnabled) {
            log.info("销毁minio");
            if (CmdUtils.isProcessRunning(minioName)) {
                // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
                CmdUtils.stopProcess(minioName);
            }
        }
        if (mediamtxEnabled) {
            log.info("销毁mediaMtx");
            if (CmdUtils.isProcessRunning(mediamtxName)) {
                // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
                CmdUtils.stopProcess(mediamtxName);
            }
        }
        if (true) {
            log.info("销毁redis");
            if (CmdUtils.isProcessRunning(redisName)) {
                // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
                CmdUtils.stopProcess(redisName);
            }
        }
    }
//    @PostConstruct
//    @Order(1)
//    public void init() {
//        if (minioEnabled) {
//            log.info("初始化启动minio");
//            if (Platform.isWindows()) {
//                String workingDir = System.getProperty("user.dir") + File.separator + "server" + File.separator + "minio";
//                String exePath = workingDir + File.separator + minioName;
//                Map<String, String> env = new HashMap<>();
//                env.put("MINIO_ROOT_USER", accessKey);
//                env.put("MINIO_ROOT_PASSWORD", secretKey);
//                List<String> cmd = new ArrayList<>();
//                cmd.add(exePath);
//                cmd.add("server");
//                cmd.add(path);
//                cmd.add("--console-address=0.0.0.0:9000");
//                cmd.add("--address=0.0.0.0:9001");
//                if (CmdUtils.isProcessRunning(minioName)) {
//                    // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
//                    CmdUtils.stopProcess(minioName);
//                }
//                // å¯åŠ¨åŽå°è¿›ç¨‹
//                CmdUtils.commandStart(workingDir, minioName, cmd, env);
//                // å¯åЍcmd窗口
//                //String[] command = {"cmd", "/c", "start", exePath};
//                //CmdUtils.commandStart(command);
//            }
//        }
//        if (mediamtxEnabled) {
//            log.info("初始化启动mediaMTX");
//            if (Platform.isWindows()) {
//                String workingDir = System.getProperty("user.dir") + File.separator + "server" + File.separator + "mediamtx";
//                String exePath = workingDir + File.separator + mediamtxName;
//                String ymlPath = workingDir + File.separator + "mediamtx.yml";
//                List<String> cmd = new ArrayList<>();
//                cmd.add(exePath);
//               // cmd.add(ymlPath);
//                if (CmdUtils.isProcessRunning(mediamtxName)) {
//                    // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
//                    CmdUtils.stopProcess(mediamtxName);
//                }
//                // å¯åŠ¨åŽå°è¿›ç¨‹
//                CmdUtils.commandStart(workingDir, mediamtxName, cmd, null);
//                // å¯åЍcmd窗口
//                //String[] command = {"cmd","/c","start",exePath,ymlPath};
//                //CmdUtils.commandStart(command);
//            }
//        }
//    }
//
//    @PreDestroy
//    public void destroy() {
//        if (minioEnabled) {
//            log.info("销毁minio");
//            if (CmdUtils.isProcessRunning(minioName)) {
//                // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
//                CmdUtils.stopProcess(minioName);
//            }
//        }
//        if (mediamtxEnabled) {
//            log.info("销毁mediaMtx");
//            if (CmdUtils.isProcessRunning(mediamtxName)) {
//                // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
//                CmdUtils.stopProcess(mediamtxName);
//            }
//        }
//        if (true) {
//            log.info("销毁redis");
//            if (CmdUtils.isProcessRunning(redisName)) {
//                // è¿›ç¨‹å·²ç»åœ¨è¿è¡Œï¼Œç»“束该进程
//                CmdUtils.stopProcess(redisName);
//            }
//        }
//    }
}
ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java
@@ -10,6 +10,8 @@
import com.ruoyi.device.camera.service.ICameraSdkService;
import com.ruoyi.media.service.IMediaService;
import com.ruoyi.media.service.impl.MediaServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -35,6 +37,7 @@
 * @author ard
 * @date 2023-08-29
 */
@Api(tags = "流媒体管理")
@RestController
@RequestMapping("/vtdu/media")
public class VtduController extends BaseController {
@@ -79,6 +82,7 @@
    /**
     * èŽ·å–æµåª’ä½“ç®¡ç†è¯¦ç»†ä¿¡æ¯
     */
    @ApiOperation(value = "获取流媒体管理详细信息")
    @PreAuthorize("@ss.hasPermi('vtdu:media:query')")
    @GetMapping(value = "/{name}")
    public AjaxResult getInfo(@PathVariable("name") String name) {
ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml
@@ -42,7 +42,6 @@
            <if test="sessionId != null">#{sessionId},</if>
            <if test="unreadCount != null">#{unreadCount},</if>
        </trim>
        ON CONFLICT (session_id, user_id) DO NOTHING
    </insert>
    <update id="updateArdCallUnreadMessages" parameterType="ArdCallUnreadMessages">
@@ -72,6 +71,14 @@
          and session_id = #{sessionId}
    </select>
    <select id="totalUnReadCount" resultType="Integer">
        select sum(unread_count) from ard_call_unread_messages where user_id = #{userId }
        select COALESCE(SUM(unread_count), 0)
        from ard_call_unread_messages
        where user_id = #{userId }
    </select>
    <select id="selectCountByUserIdAndSessionId" resultType="Integer">
        SELECT count(*)
        FROM ard_call_unread_messages
        WHERE user_id = #{userId }
          AND session_id = #{sessionId}
    </select>
</mapper>
ruoyi-admin/src/main/resources/META-INF/spring.factories
ÎļþÒÑɾ³ý