From 0f9ecda1919beb1e8fbbca0f669ac86badf70806 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 10 四月 2025 14:47:42 +0800
Subject: [PATCH] 优化推流和拉流功能及关闭逻辑

---
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CarServiceImpl.java |   44 +++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CarServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CarServiceImpl.java
index 5931356..240dc19 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CarServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CarServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgRegisterClient;
@@ -18,6 +19,8 @@
 import com.ruoyi.system.service.ICarTypeService;
 import com.ruoyi.system.service.IDriverService;
 import com.ruoyi.system.service.IEnterpriseService;
+import com.ruoyi.system.util.JavaCVStreamUtil;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
@@ -35,6 +38,9 @@
  */
 @Service
 public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarService {
+	
+	@Value("${live.output.path}")
+	private String outputPath;
 	
 	@Resource
 	private UPExgMsgRegisterClient upExgMsgRegisterClient;
@@ -121,22 +127,50 @@
 	public void taskUpdateCarStatus() {
 		List<Car> list = this.list();
 		for (Car car : list) {
+			LambdaUpdateWrapper<Car> updateWrapper = new LambdaUpdateWrapper<>();
 			GnssDataVo gnssDataVo = (GnssDataVo) redisTemplate.opsForValue().get("location:" + car.getVehicleNumber());
 			if (null == gnssDataVo) {
-				car.setStatus(1);
+				if (car.getStatus() == 1) {
+					updateWrapper.set(Car::getDownlineTime, LocalDateTime.now());
+				}
+				updateWrapper.set(Car::getStatus, 4);
+				this.update(updateWrapper);
 			} else {
 				String dateTime = gnssDataVo.getDate() + " " + gnssDataVo.getTime();
 				LocalDateTime localDateTime = LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
 				long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));
 				if (System.currentTimeMillis() / 1000 > second + 60) {
-					car.setStatus(4);
+					if (car.getStatus() == 1) {
+						updateWrapper.set(Car::getDownlineTime, LocalDateTime.now());
+					}
+					updateWrapper.set(Car::getStatus, 4);
+					this.update(updateWrapper);
 				} else {
-					car.setStatus(1);
+					if (car.getStatus() != 1) {
+						updateWrapper.set(Car::getDownlineTime, null);
+						updateWrapper.set(Car::getOnlineTime, LocalDateTime.now());
+					}
+					updateWrapper.set(Car::getStatus, 1);
+					this.update(updateWrapper);
 				}
 			}
 		}
-		if (list.size() > 0) {
-			this.updateBatchById(list);
+	}
+	
+	
+	/**
+	 * 检测视频播放,清除没有播放的视频流
+	 */
+	@Override
+	public void taskPlayDetection() {
+		List<Car> list = this.list();
+		for (Car car : list) {
+			if(!redisTemplate.hasKey("live:" + car.getId())){
+				String folderPath = outputPath + "hls\\" + car.getVehicleNumber();
+				JavaCVStreamUtil.close(car.getId(), folderPath);
+			}
 		}
 	}
+
+
 }

--
Gitblit v1.7.1