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