计算录音时长
This commit is contained in:
@@ -1215,7 +1215,17 @@ public class AudioFileController {
|
||||
segment.getId(), segment.getParentId(), segment.getDeviceNo(), segment.getAudioFileOriginalName());
|
||||
// 如果文件名包含结束标志,修改主记录为结束状态
|
||||
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.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<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.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());
|
||||
}
|
||||
|
||||
@@ -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<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();
|
||||
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) {
|
||||
|
||||
Reference in New Issue
Block a user