顾问服务结束,按键结束(在ai工牌上按结束键), 超时结束(超过一天自动结束)

This commit is contained in:
zhonghua1
2026-01-01 06:43:13 +08:00
parent f0957485e0
commit 4917fbcc3a

View File

@@ -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数据