顾问服务结束,按键结束(在ai工牌上按结束键), 超时结束(超过一天自动结束)
This commit is contained in:
@@ -177,7 +177,7 @@ public class AudioFileController {
|
|||||||
return ResponseEntity.ok(result);
|
return ResponseEntity.ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 7. 处理业务逻辑
|
// 7. 处理业务逻辑 ,保存文件, 上传
|
||||||
ProcessResult processResult = processByDataType(dataType, requestBody, file, request);
|
ProcessResult processResult = processByDataType(dataType, requestBody, file, request);
|
||||||
|
|
||||||
// 8. 构建并返回响应
|
// 8. 构建并返回响应
|
||||||
@@ -331,13 +331,13 @@ public class AudioFileController {
|
|||||||
HttpServletRequest request) {
|
HttpServletRequest request) {
|
||||||
log.info("检测到数据类型Audio----------开始处理--------------------");
|
log.info("检测到数据类型Audio----------开始处理--------------------");
|
||||||
|
|
||||||
// 再次尝试获取文件(如果之前没有获取到)
|
// 再次尝试获取文件(如果之前没有获取到),没有保存
|
||||||
MultipartFile audioFile = extractFileFromMultipartRequest(request, file);
|
MultipartFile audioFile = extractFileFromMultipartRequest(request, file);
|
||||||
|
|
||||||
// 关联上传的文件到audio_management表
|
// 关联上传的文件到audio_management表
|
||||||
associateAudioManagement(requestBody);
|
associateAudioManagement(requestBody);
|
||||||
|
|
||||||
// 处理Audio数据
|
// 处理Audio数据 验证文件、保存文件到本地、保存信息到数据库
|
||||||
Map<String, Object> processResult = handleAudioDataType(requestBody, audioFile);
|
Map<String, Object> processResult = handleAudioDataType(requestBody, audioFile);
|
||||||
|
|
||||||
log.info("检测到数据类型Audio-----------处理结束-------------------");
|
log.info("检测到数据类型Audio-----------处理结束-------------------");
|
||||||
@@ -1213,7 +1213,13 @@ public class AudioFileController {
|
|||||||
audioManagementSegmentsService.save(segment);
|
audioManagementSegmentsService.save(segment);
|
||||||
log.info("音频分段记录保存成功,ID: {}, 父录音ID: {}, 设备号: {}, 文件名: {}",
|
log.info("音频分段记录保存成功,ID: {}, 父录音ID: {}, 设备号: {}, 文件名: {}",
|
||||||
segment.getId(), segment.getParentId(), segment.getDeviceNo(), segment.getAudioFileOriginalName());
|
segment.getId(), segment.getParentId(), segment.getDeviceNo(), segment.getAudioFileOriginalName());
|
||||||
|
// 如果文件名包含结束标志,修改主记录为结束状态
|
||||||
|
if(segment.getAudioFileOriginalName().contains("-Z")){
|
||||||
|
AudioManagement audioManagement = new AudioManagement();
|
||||||
|
audioManagement.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_IN_SERVICE);
|
||||||
|
audioManagement.setUpdateTime(LocalDateTime.now());
|
||||||
|
serviceManager.getAudioManagementService().save(audioManagement);
|
||||||
|
}
|
||||||
// 13. 标记为已保存,避免重复保存
|
// 13. 标记为已保存,避免重复保存
|
||||||
requestBody.put(segmentSavedKey, true);
|
requestBody.put(segmentSavedKey, true);
|
||||||
|
|
||||||
@@ -1736,39 +1742,43 @@ public class AudioFileController {
|
|||||||
log.warn("deviceManagement中的tenantId为空,无法设置租户上下文");
|
log.warn("deviceManagement中的tenantId为空,无法设置租户上下文");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 通过bind_user_id去SalesManagement表查询sales_name和login_account(作为sales_phone)
|
|
||||||
LambdaQueryWrapper<SalesManagement> salesQuery = new LambdaQueryWrapper<>();
|
|
||||||
salesQuery.eq(SalesManagement::getLoginAccount, deviceManagement.getSalesPhone());
|
|
||||||
SalesManagement salesManagement = serviceManager.getSalesManagementService().getOne(salesQuery);
|
|
||||||
|
|
||||||
if (salesManagement == null) {
|
|
||||||
log.warn("未找到对应的销售人员,getSalesPhone: {}", deviceManagement.getSalesPhone());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String salesName = salesManagement.getSalesName();
|
|
||||||
String salesPhone = salesManagement.getLoginAccount(); // login_account作为sales_phone
|
|
||||||
|
|
||||||
// 3. 根据sales_name和sales_phone去audio_management表查找sync_status='服务中'的记录
|
// 3. 根据sales_name和sales_phone去audio_management表查找sync_status='服务中'的记录
|
||||||
LambdaQueryWrapper<AudioManagement> audioQuery = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<AudioManagement> audioQuery = new LambdaQueryWrapper<>();
|
||||||
audioQuery.eq(AudioManagement::getSalesPhone, salesPhone)
|
audioQuery.eq(AudioManagement::getSalesPhone, deviceManagement.getSalesPhone())
|
||||||
.eq(AudioManagement::getServiceStatus, "服务中")
|
.eq(AudioManagement::getServiceStatus, AudioManagementConstants.SERVICE_STATUS_IN_SERVICE)
|
||||||
.orderByDesc(AudioManagement::getCreateTime); // 按创建时间倒序
|
.orderByDesc(AudioManagement::getCreateTime); // 按创建时间倒序
|
||||||
|
|
||||||
List<AudioManagement> audioList = serviceManager.getAudioManagementService().list(audioQuery);
|
List<AudioManagement> audioList = serviceManager.getAudioManagementService().list(audioQuery);
|
||||||
|
|
||||||
|
// 检查audioList中updateTime大于1天的记录,更新serviceStatus为"服务结束"
|
||||||
|
if (audioList != null && !audioList.isEmpty()) {
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
for (AudioManagement audio : audioList) {
|
||||||
|
if (audio.getUpdateTime() != null) {
|
||||||
|
// 计算时间差(天数)
|
||||||
|
long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(audio.getUpdateTime(), now);
|
||||||
|
if (daysBetween >= 1) {
|
||||||
|
audio.setServiceStatus(AudioManagementConstants.SERVICE_STATUS_SERVICE_FINISH);
|
||||||
|
serviceManager.getAudioManagementService().updateById(audio);
|
||||||
|
log.info("更新audio_management记录状态为服务结束,ID: {}, updateTime: {}, 距离现在: {}天",
|
||||||
|
audio.getId(), audio.getUpdateTime(), daysBetween);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
audioList = serviceManager.getAudioManagementService().list(audioQuery);
|
||||||
String audioManagementId;
|
String audioManagementId;
|
||||||
if (audioList == null || audioList.isEmpty()) {
|
if (audioList == null || audioList.isEmpty()) {
|
||||||
// 如果没找到,插入一条新记录
|
// 如果没找到,插入一条新记录
|
||||||
audioManagementId = createNewAudioManagement(deviceManagement);
|
audioManagementId = createNewAudioManagement(deviceManagement);
|
||||||
log.info("创建新的audio_management记录,ID: {}, sales_name: {}, sales_phone: {}",
|
log.info("创建新的audio_management记录,ID: {} ",
|
||||||
audioManagementId, salesName, salesPhone);
|
audioManagementId );
|
||||||
} else {
|
} else {
|
||||||
// 如果找到(一条或多条),取最新的一条记录
|
// 如果找到(一条或多条),取最新的一条记录
|
||||||
audioManagementId = audioList.get(0).getId();
|
audioManagementId = audioList.get(0).getId();
|
||||||
log.info("找到audio_management记录,ID: {}, sales_name: {}, sales_phone: {}, 共{}条记录",
|
|
||||||
audioManagementId, salesName, salesPhone, audioList.size());
|
log.info("找到audio_management记录,ID: {} , 共{}条记录",
|
||||||
|
audioManagementId , audioList.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 将id设置到requestBody
|
// 将id设置到requestBody
|
||||||
@@ -1856,7 +1866,7 @@ public class AudioFileController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理Audio数据类型(录音推送)
|
* 处理Audio数据类型(录音推送) ,验证文件、保存文件到本地、保存信息到数据库
|
||||||
* 适配新的数据结构:dataType="Audio",数据在data字段中
|
* 适配新的数据结构:dataType="Audio",数据在data字段中
|
||||||
* 同时兼容旧的数据结构(数据直接在requestBody中)
|
* 同时兼容旧的数据结构(数据直接在requestBody中)
|
||||||
*
|
*
|
||||||
@@ -1871,14 +1881,16 @@ public class AudioFileController {
|
|||||||
// 1. 提取并解析data字段(新数据结构)
|
// 1. 提取并解析data字段(新数据结构)
|
||||||
Map<String, Object> dataFromDataField = extractDataField(requestBody);
|
Map<String, Object> dataFromDataField = extractDataField(requestBody);
|
||||||
|
|
||||||
// 2. 判断使用新数据结构还是旧数据结构
|
// 2. 判断使用新数据结构还是旧数据结构 , 保存文件到本地 ,记录到数据库
|
||||||
if (isLegacyDataStructure(dataFromDataField)) {
|
if (isLegacyDataStructure(dataFromDataField)) {
|
||||||
log.info("检测到旧数据结构,使用requestBody作为processedData");
|
log.info("检测到旧数据结构,验证文件、保存文件到本地、保存信息到数据库, 使用requestBody作为processedData");
|
||||||
return processLegacyAudioData(requestBody, file);
|
String deviceNo = extractStringField(requestBody, "deviceNo");
|
||||||
|
String filePath = extractStringField(requestBody, "filePath");
|
||||||
|
return handleAudioUpload(requestBody, requestBody, file, deviceNo, filePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 使用新数据结构处理
|
// 3. 使用新数据结构处理 验证文件、保存文件到本地、保存信息到数据库
|
||||||
log.info("检测到新数据结构,从data字段提取数据");
|
log.info("检测到新数据结构,验证文件、保存文件到本地、保存信息到数据库 ");
|
||||||
return processNewAudioData(requestBody, dataFromDataField, file);
|
return processNewAudioData(requestBody, dataFromDataField, file);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -1935,12 +1947,12 @@ public class AudioFileController {
|
|||||||
* @param file 上传的音频文件
|
* @param file 上传的音频文件
|
||||||
* @return 处理结果
|
* @return 处理结果
|
||||||
*/
|
*/
|
||||||
private Map<String, Object> processLegacyAudioData(Map<String, Object> requestBody, MultipartFile file) {
|
// private Map<String, Object> processLegacyAudioData(Map<String, Object> requestBody, MultipartFile file) {
|
||||||
String deviceNo = extractStringField(requestBody, "deviceNo");
|
// String deviceNo = extractStringField(requestBody, "deviceNo");
|
||||||
String filePath = extractStringField(requestBody, "filePath");
|
// String filePath = extractStringField(requestBody, "filePath");
|
||||||
|
//
|
||||||
return handleAudioUpload(requestBody, requestBody, file, deviceNo, filePath);
|
// return handleAudioUpload(requestBody, requestBody, file, deviceNo, filePath);
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理新数据结构的Audio数据
|
* 处理新数据结构的Audio数据
|
||||||
|
|||||||
Reference in New Issue
Block a user