计算录音时长

This commit is contained in:
zhonghua1
2026-01-01 07:24:30 +08:00
parent 4917fbcc3a
commit fa6f4b0a47
2 changed files with 54 additions and 8 deletions

View File

@@ -1215,7 +1215,17 @@ public class AudioFileController {
segment.getId(), segment.getParentId(), segment.getDeviceNo(), segment.getAudioFileOriginalName()); segment.getId(), segment.getParentId(), segment.getDeviceNo(), segment.getAudioFileOriginalName());
// 如果文件名包含结束标志,修改主记录为结束状态 // 如果文件名包含结束标志,修改主记录为结束状态
if(segment.getAudioFileOriginalName().contains("-Z")){ if(segment.getAudioFileOriginalName().contains("-Z")){
LambdaQueryWrapper<AudioManagementSegments> audioQuery = new LambdaQueryWrapper<>();
audioQuery.eq(AudioManagementSegments::getParentId, deviceManagement.getId()) ; // 按创建时间倒序
List<AudioManagementSegments> segmentsList = audioManagementSegmentsService.list(audioQuery);
BigDecimal total = new BigDecimal(0);
segmentsList.forEach(segment2 ->{
total.add(segment2.getDuration());//分钟
});
AudioManagement audioManagement = new AudioManagement(); AudioManagement audioManagement = new AudioManagement();
audioManagement.setDuration(total);
audioManagement.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_IN_SERVICE); audioManagement.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_IN_SERVICE);
audioManagement.setUpdateTime(LocalDateTime.now()); audioManagement.setUpdateTime(LocalDateTime.now());
serviceManager.getAudioManagementService().save(audioManagement); serviceManager.getAudioManagementService().save(audioManagement);
@@ -1421,7 +1431,7 @@ public class AudioFileController {
/** /**
* 解析时间字符串 * 解析时间字符串
* 支持多种格式ISO格式、标准格式等 * 支持多种格式ISO格式、标准格式、yyMMddHHmmss格式
* *
* @param timeStr 时间字符串 * @param timeStr 时间字符串
* @return LocalDateTime对象 * @return LocalDateTime对象
@@ -1431,25 +1441,34 @@ public class AudioFileController {
return null; return null;
} }
String trimmedTimeStr = timeStr.trim();
try { try {
// 首先检测是否为新的时间格式yyMMddHHmmss (12位数字)
if (trimmedTimeStr.matches("^\\d{12}$")) {
// 解析 yyMMddHHmmss 格式
return LocalDateTime.parse(trimmedTimeStr,
java.time.format.DateTimeFormatter.ofPattern("yyMMddHHmmss"));
}
// 检测是否包含时区信息 // 检测是否包含时区信息
boolean hasTimezone = timeStr.endsWith("Z") || boolean hasTimezone = trimmedTimeStr.endsWith("Z") ||
timeStr.matches(".*[+-]\\d{2}:\\d{2}(?:\\d{2})?$"); trimmedTimeStr.matches(".*[+-]\\d{2}:\\d{2}(?:\\d{2})?$");
if (hasTimezone) { if (hasTimezone) {
// 处理带时区的时间 // 处理带时区的时间
java.time.ZonedDateTime zonedDateTime; java.time.ZonedDateTime zonedDateTime;
if (timeStr.endsWith("Z")) { if (trimmedTimeStr.endsWith("Z")) {
zonedDateTime = java.time.ZonedDateTime.parse(timeStr.replace("Z", "+00:00")) zonedDateTime = java.time.ZonedDateTime.parse(trimmedTimeStr.replace("Z", "+00:00"))
.withZoneSameInstant(TimeZoneUtils.getZoneId()); .withZoneSameInstant(TimeZoneUtils.getZoneId());
} else { } else {
zonedDateTime = java.time.ZonedDateTime.parse(timeStr) zonedDateTime = java.time.ZonedDateTime.parse(trimmedTimeStr)
.withZoneSameInstant(TimeZoneUtils.getZoneId()); .withZoneSameInstant(TimeZoneUtils.getZoneId());
} }
return zonedDateTime.toLocalDateTime(); return zonedDateTime.toLocalDateTime();
} else { } else {
// 处理不带时区的时间 // 处理不带时区的时间
String cleanTimeStr = timeStr; String cleanTimeStr = trimmedTimeStr;
if (cleanTimeStr.contains("T")) { if (cleanTimeStr.contains("T")) {
cleanTimeStr = cleanTimeStr.replace("T", " "); cleanTimeStr = cleanTimeStr.replace("T", " ");
} }
@@ -1758,7 +1777,16 @@ public class AudioFileController {
// 计算时间差(天数) // 计算时间差(天数)
long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(audio.getUpdateTime(), now); long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(audio.getUpdateTime(), now);
if (daysBetween >= 1) { if (daysBetween >= 1) {
LambdaQueryWrapper<AudioManagementSegments> audioQuery2 = new LambdaQueryWrapper<>();
audioQuery2.eq(AudioManagementSegments::getParentId, audio.getId()) ; // 关联这个id的所有录音片段
List<AudioManagementSegments> segmentsList = audioManagementSegmentsService.list(audioQuery2);
BigDecimal total = new BigDecimal(0);
segmentsList.forEach(segment2 ->{ //计算录音时长
total.add(segment2.getDuration());//分钟
});
audio.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_SERVICE_FINISH); audio.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_SERVICE_FINISH);
audio.setDuration(total);
serviceManager.getAudioManagementService().updateById(audio); serviceManager.getAudioManagementService().updateById(audio);
log.info("更新audio_management记录状态为服务结束ID: {}, updateTime: {}, 距离现在: {}天", log.info("更新audio_management记录状态为服务结束ID: {}, updateTime: {}, 距离现在: {}天",
audio.getId(), audio.getUpdateTime(), daysBetween); audio.getId(), audio.getUpdateTime(), daysBetween);
@@ -1776,7 +1804,13 @@ public class AudioFileController {
} else { } else {
// 如果找到(一条或多条),取最新的一条记录 // 如果找到(一条或多条),取最新的一条记录
audioManagementId = audioList.get(0).getId(); 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: {} , 共{}条记录", log.info("找到audio_management记录ID: {} , 共{}条记录",
audioManagementId , audioList.size()); audioManagementId , audioList.size());
} }

View File

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rj.common.AudioManagementConstants; import com.rj.common.AudioManagementConstants;
import com.rj.common.DataEnrichmentUtil; import com.rj.common.DataEnrichmentUtil;
import com.rj.entity.AudioManagement; import com.rj.entity.AudioManagement;
import com.rj.entity.AudioManagementSegments;
import com.rj.service.IAudioManagementService; import com.rj.service.IAudioManagementService;
import com.rj.service.IFileUploadService; import com.rj.service.IFileUploadService;
import com.rj.service.MinIOService; import com.rj.service.MinIOService;
@@ -426,6 +427,8 @@ public class AudioManagementController {
return ResponseEntity.internalServerError().body(result); return ResponseEntity.internalServerError().body(result);
} }
} }
@Autowired
private com.rj.service.IAudioManagementSegmentsService audioManagementSegmentsService;
/** /**
* 更新录音信息 * 更新录音信息
@@ -442,10 +445,19 @@ public class AudioManagementController {
result.put("message", "录音ID不能为空"); result.put("message", "录音ID不能为空");
return ResponseEntity.badRequest().body(result); return ResponseEntity.badRequest().body(result);
} }
LambdaQueryWrapper<AudioManagementSegments> audioQuery = new LambdaQueryWrapper<>();
audioQuery.eq(AudioManagementSegments::getParentId, audioManagement.getId()) ; // 关联这个id的所有录音片段
List<AudioManagementSegments> segmentsList = audioManagementSegmentsService.list(audioQuery);
BigDecimal total = new BigDecimal(0);
segmentsList.forEach(segment2 ->{
total.add(segment2.getDuration());//分钟
});
AudioManagement audio = new AudioManagement(); AudioManagement audio = new AudioManagement();
audio.setUpdateTime(LocalDateTime.now()); audio.setUpdateTime(LocalDateTime.now());
audio.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_SERVICE_FINISH); audio.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_SERVICE_FINISH);
audio.setId(audioManagement.getId()); audio.setId(audioManagement.getId());
audio.setDuration(total);
boolean success = audioManagementService.updateById(audio); boolean success = audioManagementService.updateById(audio);
if (success) { if (success) {