From d4f6ec39b7e0421757a6b9d1a68b1c4610ea2e8c Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 14 三月 2024 14:54:20 +0800
Subject: [PATCH] 优化CivilCode缓存

---
 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java |   60 +++++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 41 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
old mode 100644
new mode 100755
index 7a8732c..9dd4c3d
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.genersoft.iot.vmp.conf.DynamicTask;
 import com.genersoft.iot.vmp.conf.exception.ControllerException;
+import com.genersoft.iot.vmp.conf.security.JwtUtils;
 import com.genersoft.iot.vmp.gb28181.bean.Device;
 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
 import com.genersoft.iot.vmp.gb28181.bean.SyncStatus;
@@ -14,6 +15,7 @@
 import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
 import com.genersoft.iot.vmp.service.IDeviceChannelService;
 import com.genersoft.iot.vmp.service.IDeviceService;
+import com.genersoft.iot.vmp.service.IInviteStreamService;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
 import com.genersoft.iot.vmp.vmanager.bean.BaseTree;
@@ -22,8 +24,10 @@
 import com.github.pagehelper.PageInfo;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.apache.commons.compress.utils.IOUtils;
+import org.apache.ibatis.annotations.Options;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +38,7 @@
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.context.request.async.DeferredResult;
 
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import javax.sip.InvalidArgumentException;
 import javax.sip.SipException;
@@ -61,6 +66,9 @@
 
 	@Autowired
 	private IRedisCatchStorage redisCatchStorage;
+
+	@Autowired
+	private IInviteStreamService inviteStreamService;
 	
 	@Autowired
 	private SIPCommander cmder;
@@ -79,7 +87,7 @@
 	 * @param deviceId 鍥芥爣ID
 	 * @return 鍥芥爣璁惧
 	 */
-	@Operation(summary = "鏌ヨ鍥芥爣璁惧")
+	@Operation(summary = "鏌ヨ鍥芥爣璁惧", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	@GetMapping("/devices/{deviceId}")
 	public Device devices(@PathVariable String deviceId){
@@ -93,12 +101,14 @@
 	 * @param count 姣忛〉鏌ヨ鏁伴噺
 	 * @return 鍒嗛〉鍥芥爣鍒楄〃
 	 */
-	@Operation(summary = "鍒嗛〉鏌ヨ鍥芥爣璁惧")
+	@Operation(summary = "鍒嗛〉鏌ヨ鍥芥爣璁惧", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "page", description = "褰撳墠椤�", required = true)
 	@Parameter(name = "count", description = "姣忛〉鏌ヨ鏁伴噺", required = true)
 	@GetMapping("/devices")
+	@Options()
 	public PageInfo<Device> devices(int page, int count){
-		
+//		if (page == null) page = 0;
+//		if (count == null) count = 20;
 		return storager.queryVideoDeviceList(page, count,null);
 	}
 
@@ -115,7 +125,7 @@
 	 * @return 閫氶亾鍒楄〃
 	 */
 	@GetMapping("/devices/{deviceId}/channels")
-	@Operation(summary = "鍒嗛〉鏌ヨ閫氶亾")
+	@Operation(summary = "鍒嗛〉鏌ヨ閫氶亾", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	@Parameter(name = "page", description = "褰撳墠椤�", required = true)
 	@Parameter(name = "count", description = "姣忛〉鏌ヨ鏁伴噺", required = true)
@@ -141,7 +151,7 @@
 	 * @param deviceId 璁惧id
 	 * @return
 	 */
-	@Operation(summary = "鍚屾璁惧閫氶亾")
+	@Operation(summary = "鍚屾璁惧閫氶亾", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	@GetMapping("/devices/{deviceId}/sync")
 	public WVPResult<SyncStatus> devicesSync(@PathVariable String deviceId){
@@ -169,7 +179,7 @@
 	 * @param deviceId 璁惧id
 	 * @return
 	 */
-	@Operation(summary = "绉婚櫎璁惧")
+	@Operation(summary = "绉婚櫎璁惧", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	@DeleteMapping("/devices/{deviceId}/delete")
 	public String delete(@PathVariable String deviceId){
@@ -181,7 +191,7 @@
 		// 娓呴櫎redis璁板綍
 		boolean isSuccess = deviceService.delete(deviceId);
 		if (isSuccess) {
-			redisCatchStorage.clearCatchByDeviceId(deviceId);
+			inviteStreamService.clearInviteInfo(deviceId);
 			// 鍋滄姝よ澶囩殑璁㈤槄鏇存柊
 			Set<String> allKeys = dynamicTask.getAllKeys();
 			for (String key : allKeys) {
@@ -189,7 +199,7 @@
 					Runnable runnable = dynamicTask.get(key);
 					if (runnable instanceof ISubscribeTask) {
 						ISubscribeTask subscribeTask = (ISubscribeTask) runnable;
-						subscribeTask.stop();
+						subscribeTask.stop(null);
 					}
 					dynamicTask.stop(key);
 				}
@@ -214,7 +224,7 @@
 	 * @param channelType 閫氶亾绫诲瀷
 	 * @return 瀛愰�氶亾鍒楄〃
 	 */
-	@Operation(summary = "鍒嗛〉鏌ヨ瀛愮洰褰曢�氶亾")
+	@Operation(summary = "鍒嗛〉鏌ヨ瀛愮洰褰曢�氶亾", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	@Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true)
 	@Parameter(name = "page", description = "褰撳墠椤�", required = true)
@@ -246,12 +256,20 @@
 	 * @param channel 閫氶亾
 	 * @return
 	 */
-	@Operation(summary = "鏇存柊閫氶亾淇℃伅")
+	@Operation(summary = "鏇存柊閫氶亾淇℃伅", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	@Parameter(name = "channel", description = "閫氶亾淇℃伅", required = true)
 	@PostMapping("/channel/update/{deviceId}")
 	public void updateChannel(@PathVariable String deviceId,DeviceChannel channel){
 		deviceChannelService.updateChannel(deviceId, channel);
+	}
+
+	@Operation(summary = "淇敼閫氶亾鐨勭爜娴佺被鍨�", security = @SecurityRequirement(name = JwtUtils.HEADER))
+	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
+	@Parameter(name = "channel", description = "閫氶亾淇℃伅", required = true)
+	@PostMapping("/channel/stream/identification/update/")
+	public void updateChannelStreamIdentification(DeviceChannel channel){
+		deviceChannelService.updateChannelStreamIdentification(channel);
 	}
 
 	/**
@@ -260,7 +278,7 @@
 	 * @param streamMode 鏁版嵁娴佷紶杈撴ā寮�
 	 * @return
 	 */
-	@Operation(summary = "淇敼鏁版嵁娴佷紶杈撴ā寮�")
+	@Operation(summary = "淇敼鏁版嵁娴佷紶杈撴ā寮�", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	@Parameter(name = "streamMode", description = "鏁版嵁娴佷紶杈撴ā寮�, 鍙栧�硷細" +
 			"UDP锛坲dp浼犺緭锛夛紝TCP-ACTIVE锛坱cp涓诲姩妯″紡,鏆備笉鏀寔锛夛紝TCP-PASSIVE锛坱cp琚姩妯″紡锛�", required = true)
@@ -276,7 +294,7 @@
 	 * @param device 璁惧淇℃伅
 	 * @return
 	 */
-	@Operation(summary = "娣诲姞璁惧淇℃伅")
+	@Operation(summary = "娣诲姞璁惧淇℃伅", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "device", description = "璁惧", required = true)
 	@PostMapping("/device/add/")
 	public void addDevice(Device device){
@@ -298,7 +316,7 @@
 	 * @param device 璁惧淇℃伅
 	 * @return
 	 */
-	@Operation(summary = "鏇存柊璁惧淇℃伅")
+	@Operation(summary = "鏇存柊璁惧淇℃伅", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "device", description = "璁惧", required = true)
 	@PostMapping("/device/update/")
 	public void updateDevice(Device device){
@@ -313,7 +331,7 @@
 	 * 
 	 * @param deviceId 璁惧id
 	 */
-	@Operation(summary = "璁惧鐘舵�佹煡璇�")
+	@Operation(summary = "璁惧鐘舵�佹煡璇�", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	@GetMapping("/devices/{deviceId}/status")
 	public DeferredResult<ResponseEntity<String>> deviceStatusApi(@PathVariable String deviceId) {
@@ -364,7 +382,7 @@
 	 * @param endTime		鎶ヨ鍙戠敓缁堟鏃堕棿锛堝彲閫夛級
 	 * @return				true = 鍛戒护鍙戦�佹垚鍔�
 	 */
-	@Operation(summary = "璁惧鐘舵�佹煡璇�")
+	@Operation(summary = "璁惧鎶ヨ鏌ヨ", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	@Parameter(name = "startPriority", description = "鎶ヨ璧峰绾у埆")
 	@Parameter(name = "endPriority", description = "鎶ヨ缁堟绾у埆")
@@ -414,7 +432,7 @@
 
 
 	@GetMapping("/{deviceId}/sync_status")
-	@Operation(summary = "鑾峰彇閫氶亾鍚屾杩涘害")
+	@Operation(summary = "鑾峰彇閫氶亾鍚屾杩涘害", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	public WVPResult<SyncStatus> getSyncStatus(@PathVariable String deviceId) {
 		SyncStatus channelSyncStatus = deviceService.getChannelSyncStatus(deviceId);
@@ -434,7 +452,7 @@
 	}
 
 	@GetMapping("/{deviceId}/subscribe_info")
-	@Operation(summary = "鑾峰彇璁惧鐨勮闃呯姸鎬�")
+	@Operation(summary = "鑾峰彇璁惧鐨勮闃呯姸鎬�", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	public WVPResult<Map<String, Integer>> getSubscribeInfo(@PathVariable String deviceId) {
 		Set<String> allKeys = dynamicTask.getAllKeys();
@@ -459,12 +477,16 @@
 	@Operation(summary = "璇锋眰鎴浘")
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	@Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true)
-	public void getSnap(HttpServletResponse resp, @PathVariable String deviceId, @PathVariable String channelId) {
+	@Parameter(name = "mark", description = "鏍囪瘑", required = false)
+	public void getSnap(HttpServletResponse resp, @PathVariable String deviceId, @PathVariable String channelId, @RequestParam(required = false) String mark) {
 
 		try {
-			final InputStream in = Files.newInputStream(new File("snap" + File.separator + deviceId + "_" + channelId + ".jpg").toPath());
+			final InputStream in = Files.newInputStream(new File("snap" + File.separator + deviceId + "_" + channelId + (mark == null? ".jpg": ("_" + mark + ".jpg"))).toPath());
 			resp.setContentType(MediaType.IMAGE_PNG_VALUE);
+			ServletOutputStream outputStream = resp.getOutputStream();
 			IOUtils.copy(in, resp.getOutputStream());
+			in.close();
+			outputStream.close();
 		} catch (IOException e) {
 			resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
 		}

--
Gitblit v1.8.0