计算录音时长
This commit is contained in:
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user