From fa6f4b0a47403007f8b76cf646deb4378abf3a32 Mon Sep 17 00:00:00 2001 From: zhonghua1 Date: Thu, 1 Jan 2026 07:24:30 +0800 Subject: [PATCH] =?UTF-8?q?=20=E8=AE=A1=E7=AE=97=E5=BD=95=E9=9F=B3?= =?UTF-8?q?=E6=97=B6=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rj/controller/AudioFileController.java | 50 ++++++++++++++++--- .../controller/AudioManagementController.java | 12 +++++ 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/rj/controller/AudioFileController.java b/src/main/java/com/rj/controller/AudioFileController.java index e2ec513..a19fb2f 100644 --- a/src/main/java/com/rj/controller/AudioFileController.java +++ b/src/main/java/com/rj/controller/AudioFileController.java @@ -1215,7 +1215,17 @@ public class AudioFileController { segment.getId(), segment.getParentId(), segment.getDeviceNo(), segment.getAudioFileOriginalName()); // 如果文件名包含结束标志,修改主记录为结束状态 if(segment.getAudioFileOriginalName().contains("-Z")){ + + LambdaQueryWrapper audioQuery = new LambdaQueryWrapper<>(); + audioQuery.eq(AudioManagementSegments::getParentId, deviceManagement.getId()) ; // 按创建时间倒序 + List segmentsList = audioManagementSegmentsService.list(audioQuery); + BigDecimal total = new BigDecimal(0); + segmentsList.forEach(segment2 ->{ + total.add(segment2.getDuration());//分钟 + }); + AudioManagement audioManagement = new AudioManagement(); + audioManagement.setDuration(total); audioManagement.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_IN_SERVICE); audioManagement.setUpdateTime(LocalDateTime.now()); serviceManager.getAudioManagementService().save(audioManagement); @@ -1421,7 +1431,7 @@ public class AudioFileController { /** * 解析时间字符串 - * 支持多种格式:ISO格式、标准格式等 + * 支持多种格式:ISO格式、标准格式、yyMMddHHmmss格式等 * * @param timeStr 时间字符串 * @return LocalDateTime对象 @@ -1431,25 +1441,34 @@ public class AudioFileController { return null; } + String trimmedTimeStr = timeStr.trim(); + try { + // 首先检测是否为新的时间格式:yyMMddHHmmss (12位数字) + if (trimmedTimeStr.matches("^\\d{12}$")) { + // 解析 yyMMddHHmmss 格式 + return LocalDateTime.parse(trimmedTimeStr, + java.time.format.DateTimeFormatter.ofPattern("yyMMddHHmmss")); + } + // 检测是否包含时区信息 - boolean hasTimezone = timeStr.endsWith("Z") || - timeStr.matches(".*[+-]\\d{2}:\\d{2}(?:\\d{2})?$"); + boolean hasTimezone = trimmedTimeStr.endsWith("Z") || + trimmedTimeStr.matches(".*[+-]\\d{2}:\\d{2}(?:\\d{2})?$"); if (hasTimezone) { // 处理带时区的时间 java.time.ZonedDateTime zonedDateTime; - if (timeStr.endsWith("Z")) { - zonedDateTime = java.time.ZonedDateTime.parse(timeStr.replace("Z", "+00:00")) + if (trimmedTimeStr.endsWith("Z")) { + zonedDateTime = java.time.ZonedDateTime.parse(trimmedTimeStr.replace("Z", "+00:00")) .withZoneSameInstant(TimeZoneUtils.getZoneId()); } else { - zonedDateTime = java.time.ZonedDateTime.parse(timeStr) + zonedDateTime = java.time.ZonedDateTime.parse(trimmedTimeStr) .withZoneSameInstant(TimeZoneUtils.getZoneId()); } return zonedDateTime.toLocalDateTime(); } else { // 处理不带时区的时间 - String cleanTimeStr = timeStr; + String cleanTimeStr = trimmedTimeStr; if (cleanTimeStr.contains("T")) { cleanTimeStr = cleanTimeStr.replace("T", " "); } @@ -1758,7 +1777,16 @@ public class AudioFileController { // 计算时间差(天数) long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(audio.getUpdateTime(), now); if (daysBetween >= 1) { + LambdaQueryWrapper audioQuery2 = new LambdaQueryWrapper<>(); + audioQuery2.eq(AudioManagementSegments::getParentId, audio.getId()) ; // 关联这个id的所有录音片段 + List segmentsList = audioManagementSegmentsService.list(audioQuery2); + BigDecimal total = new BigDecimal(0); + segmentsList.forEach(segment2 ->{ //计算录音时长 + total.add(segment2.getDuration());//分钟 + }); + audio.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_SERVICE_FINISH); + audio.setDuration(total); serviceManager.getAudioManagementService().updateById(audio); log.info("更新audio_management记录状态为服务结束,ID: {}, updateTime: {}, 距离现在: {}天", audio.getId(), audio.getUpdateTime(), daysBetween); @@ -1776,7 +1804,13 @@ public class AudioFileController { } else { // 如果找到(一条或多条),取最新的一条记录 audioManagementId = audioList.get(0).getId(); - + for (AudioManagement audio : audioList) { + if (!audio.getId().equals(audioManagementId) ) { + audio.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_SERVICE_FINISH); + audio.setUpdateTime(LocalDateTime.now()); + serviceManager.getAudioManagementService().updateById(audio); + } + } log.info("找到audio_management记录,ID: {} , 共{}条记录", audioManagementId , audioList.size()); } diff --git a/src/main/java/com/rj/controller/AudioManagementController.java b/src/main/java/com/rj/controller/AudioManagementController.java index 84f1ffc..f6dd56b 100644 --- a/src/main/java/com/rj/controller/AudioManagementController.java +++ b/src/main/java/com/rj/controller/AudioManagementController.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.rj.common.AudioManagementConstants; import com.rj.common.DataEnrichmentUtil; import com.rj.entity.AudioManagement; +import com.rj.entity.AudioManagementSegments; import com.rj.service.IAudioManagementService; import com.rj.service.IFileUploadService; import com.rj.service.MinIOService; @@ -426,6 +427,8 @@ public class AudioManagementController { return ResponseEntity.internalServerError().body(result); } } + @Autowired + private com.rj.service.IAudioManagementSegmentsService audioManagementSegmentsService; /** * 更新录音信息 @@ -442,10 +445,19 @@ public class AudioManagementController { result.put("message", "录音ID不能为空"); return ResponseEntity.badRequest().body(result); } + LambdaQueryWrapper audioQuery = new LambdaQueryWrapper<>(); + audioQuery.eq(AudioManagementSegments::getParentId, audioManagement.getId()) ; // 关联这个id的所有录音片段 + List segmentsList = audioManagementSegmentsService.list(audioQuery); + BigDecimal total = new BigDecimal(0); + segmentsList.forEach(segment2 ->{ + total.add(segment2.getDuration());//分钟 + }); + AudioManagement audio = new AudioManagement(); audio.setUpdateTime(LocalDateTime.now()); audio.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_SERVICE_FINISH); audio.setId(audioManagement.getId()); + audio.setDuration(total); boolean success = audioManagementService.updateById(audio); if (success) {