package com.example.unusualsounds; import static com.baidubce.auth.SignOptions.DEFAULT; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson2.JSON; import com.baidubce.http.HttpMethodName; import com.example.unusualsounds.common.utils.BaiDuUtils; import com.example.unusualsounds.common.utils.DateUtils; import com.example.unusualsounds.common.utils.RedisUtils; import com.example.unusualsounds.common.utils.UUID; import com.example.unusualsounds.framework.minio.MinioUtil; import com.example.unusualsounds.project.device.entity.vo.SoundSensorsQueryVo; import com.example.unusualsounds.project.vox.entity.AlarmReports; import com.example.unusualsounds.project.vox.entity.Alarms; import com.example.unusualsounds.project.vox.entity.VoiceTicketLogs; import com.example.unusualsounds.project.vox.service.impl.*; import com.example.unusualsounds.web.jsonobj.CameraDTO; import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.ResponseEntity; import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.baidubce.auth.BceCredentials; import com.baidubce.auth.BceV1Signer; import com.baidubce.auth.DefaultBceCredentials; import com.baidubce.internal.InternalRequest; import com.baidubce.util.JsonUtils; import java.net.URI; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.stream.Collectors; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; @SpringBootTest @Slf4j class UnusualSoundsApplicationTests { /** * 请求地址 */ public static String endpoint = "http://10.68.204.52:8412"; /** * AK, 从 idaas console获取 */ public static String ak = "fd01ec4de8724d71bb764190f202929c"; /** * SK, 从 idaas console获取 */ public static String sk = "f44a391cadcc42f98167e7e42086514f"; /** * 请求路径前缀,如果能够直接请求一见后端服务的地址,则置为空 */ public static String uriPathPrefix = "/api/spi"; /** * 测试百度AKSK */ @Test void testAKSK(){ String uri = "/v1/devices"; // 请求参数中携带 Map paramsMap = new HashMap<>(); paramsMap.put("pageNo", "1"); paramsMap.put("pageSize", "10"); // 部门id,根据用户id自己获取 // paramsMap.put("deptID", "xxxx"); ResponseEntity response = BaiDuUtils.sendRequest(uri, HttpMethodName.GET, null, paramsMap, String.class, ak, sk, endpoint, uriPathPrefix); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); } @Test void contextLoads() { // System.out.println("进行修复视频:"); // repairIncompleteVideo(); // 定义日志字符串 String log = "[segment @ 0000011bc2a04d00] Opening 'D:\\tmp\\data\\vox\\output-2025-02-14_17-36-408da58aa6-50d8-45cd-ac09-f393e0ae3f7e.mp4' for writing"; Pattern pattern = Pattern.compile("Opening '([^']+\\.mp4)'"); Matcher matcher = pattern.matcher(log); // 查找匹配 if (matcher.find()) { // 获取匹配到的文件路径 String filePath = matcher.group(1); System.out.println("Found file path: " + filePath); } else { System.out.println("No match found."); } } /** * ffmpeg修复视频文件 */ private void repairIncompleteVideo() { // 使用FFmpeg修复视频,这里假设我们需要确保视频和音频流正确封装 List command = Arrays.asList( "D:\\file\\ffmpeg\\ffmpeg.exe", "-i", "D:\\tmp\\data\\vox\\output-2025-02-14_14-20-581d6c0f9f-daeb-41a6-b072-30fcddeee451.mp4", "-c", "copy", "-movflags", "+faststart", "-fflags", "+genpts", "D:\\tmp\\data\\vox\\output-2025-02-14_14-20-581d6c0f9f-daeb-41a6-b072-30fcddeee451.mp4".replace(".mp4", "_repaired.mp4") ); ProcessBuilder pb = new ProcessBuilder(command) .redirectErrorStream(true); try { Process repairProcess = pb.start(); int exitCode = repairProcess.waitFor(); if (exitCode == 0) { log.info("视频文件 已成功修复"); } else { log.error("视频文件 修复失败"); } } catch (IOException | InterruptedException e) { log.error("视频文件修复过程中出现异常", e); } } @Autowired private VoxServiceImpl voxService; @Test void testGetDeviceInfo(){ // CameraDTO cameraDTO = voxService.checkDevice("2c04027ed02e4d539ccdd568441dbd32"); // System.out.println(cameraDTO.toString()); String getOrganization = voxService.getGetOrganization(); System.out.println(getOrganization); } @Autowired private AlarmReportsServiceImpl alarmReportsService; @Test void testRedis(){ // RedisUtils.set("test","123",10, TimeUnit.HOURS); // System.out.println("获取:"+RedisUtils.get("test")); // System.out.println("是否存在:"+RedisUtils.exists("test")); List alarmReports = alarmReportsService.getBaseMapper().selectList(null); alarmReports.forEach(alarmReports1 -> { System.out.println("-->"+alarmReports1.toString());}); } @Autowired private AlarmsServiceImpl alarmsServiceImpl; @Test void testAlarms(){ Alarms alarms = new Alarms.Builder().build(); alarms.setUuid(UUID.generateUUIDWithoutHyphens()); alarms.setDescription("测试报警,设备异音"); RedisUtils.setForeverKey(alarms.getUuid(),alarms); Object o = RedisUtils.get(alarms.getUuid()); Alarms alarms1 = JSON.parseObject(o.toString(), Alarms.class); System.out.println("redis返回:"+alarms1.toString()); } @Autowired private EdgeOrganizationServiceImpl organizationService; @Test void testOrganization(){ // HashMap organizations = organizationService.getOrganizations(); // // organizations.forEach((k,v)->{ // System.out.println("key:"+k+" value:"+v); // }); // ResponseEntity response = BaiDuUtils.sendRequest("/v1/configurations", // HttpMethodName.GET, null, null, String.class, ak, sk, endpoint, uriPathPrefix); // // if(response.getStatusCode().is2xxSuccessful()){ // System.out.println("成功"); // System.out.println(JSON.parseObject(response.getBody()).toString()); // } String uuid1= UUID.generateUUIDv5("testVideo.mp4"); String uuid2= UUID.generateUUIDv5("testVideo.mp4"); String uuid3= UUID.generateUUIDv5("testVideo.mp4"); System.out.println("uuid1:"+UUID.removeHyphens(uuid1)); System.out.println("uuid2:"+uuid2); System.out.println("uuid3:"+uuid3); } @Autowired private VoiceTicketLogsServiceImpl voiceTicketLogsServiceImpl; @Test void testTickets(){ HashMap hashMap = new HashMap<>(); hashMap.put("29f01235ec1141608c099c63db0af4c6","623080afe45446d9a0088d3c2bd78c2b_设备异音测试"); hashMap.put("e093da78edab47bca5b99b4dcc9cf990","623080afe45446d9a0088d3c2bd78c2b_设备异音测试"); hashMap.put("109e8b333bf1443087f7dae80c52713b","2c04012ed02e4d53aqq1d5684584bd34_人声呼救测试"); hashMap.put("3a91aab4f2a94a8189793849e3d15b11","622080afe45446d9a0088d3c2bd78c2b_人声呼救测试"); List voiceTicketLogs = voiceTicketLogsServiceImpl.contrastTasks(hashMap); voiceTicketLogs.forEach(voicetask -> { System.out.println("->:"+voicetask.toString()); }); List collect = voiceTicketLogs.stream() .map(voicetask -> { return voicetask.getDeviceUuid() + "_" + voicetask.getSkillName(); }).collect(Collectors.toList()); collect.forEach(s -> System.out.println("需要停止的工单:"+s)); } /** * */ @Test void TestAlarmsPost(){ String uri = "/v1/alarms/list"; String body = "{\"pageSize\":40,\"pageNo\":1,\"isRobotAlarm\":false,\"type\":\"camera|voice\",\"skillID\":[],\"status\":[\"pending\",\"processed\"],\"startTimestamp\":1740585600,\"endTimestamp\":1741190399,\"deptID\":\"452b784fe34d42b1b3700b6aeb648e1e\"}"; ResponseEntity response = BaiDuUtils.sendRequest(uri,HttpMethodName.POST,JSON.parse(body),null,String.class, ak, sk, endpoint, uriPathPrefix); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); } @Autowired private MinioUtil minioUtil; @Test void testMinioDownload(){ String url = "http://10.68.208.94:8412/spi/minio/windmill/store/video-stream/2025-02-21/6DbTa7S709testVideo.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20250305%2Fbj%2Fs3%2Faws4_request&X-Amz-Date=20250305T055218Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=0199c107bd76e1aab9c54ab3083a7d9216df28a196c12abcedf3e91a8f4f7d84"; String save = "D:\\tmp\\6DbTa7S709testVideo.mp4"; String regex = "^.*/([^/?]+)(?:\\\\?.*)?$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(url); if (matcher.find()) { System.out.println(matcher.group(1)); } // File file = HttpUtil.downloadFileFromUrl(url, new File(save)); // if(file.exists()){ // System.out.println("下载成功"); // }else { // System.out.println("下载失败"); // } } }