提交 13f7f44b 作者: 洪东保

生成纪要代码改动

debug
父级 b862d807
......@@ -204,6 +204,7 @@ public class CmeetingJob {
// 不能用status筛选,因为可能线程执行一般服务终止,status状态没变
List<MeetingInfo> meetingInfoList =
meetingInfoService.list(new LambdaQueryWrapper<MeetingInfo>()
.isNotNull(MeetingInfo::getMeetingRecordId)
.eq(MeetingInfo::getEmailPushAccess, Boolean.TRUE)
.eq(MeetingInfo::getIsGenerated, Boolean.FALSE)
.eq(MeetingInfo::getGenerateRetry, Boolean.FALSE)
......@@ -258,6 +259,7 @@ public class CmeetingJob {
//查出所有早于一小时前的,邮件推送失败且未重试过的会议
List<MeetingInfo> meetingInfoList =
meetingInfoService.list(new LambdaQueryWrapper<MeetingInfo>()
.isNotNull(MeetingInfo::getMeetingRecordId)
.eq(MeetingInfo::getEmailPushAccess, Boolean.TRUE)
.eq(MeetingInfo::getIsGenerated, Boolean.TRUE)
.eq(MeetingInfo::getIsPushed, Boolean.FALSE)
......
......@@ -133,7 +133,7 @@ public class FileProcessTask {
MeetingInfo meetingInfo = meetingInfoMapper.selectOne(new LambdaQueryWrapper<MeetingInfo>()
.eq(MeetingInfo::getMeetingRecordId, meetingRecordId));
if (meetingInfo.getIsGenerated()) {
log.warn("Generating is down, meetingId: {}, subMeetingId: {}", meetingInfo.getMeetingId(), meetingInfo.getSubMeetingId());
log.warn("Generating is down, meetingRecordId: {}", meetingRecordId);
return;
}
if (!meetingInfo.getEmailPushAccess()) {
......@@ -274,8 +274,8 @@ public class FileProcessTask {
}
}
if(StringUtils.isEmpty(recordTextBuffer.toString().replaceAll("\\n","").trim())){
log.info("获取的转录文本为空,跳过纪要生成,meetingId:{},fileRecordId:{}",meetingId,recordFileIdList.toString());
processLogService.log(meetingId,subMeetingId,"获取的转录文本为空,跳过纪要生成");
log.info("获取的转录文本为空,跳过纪要生成,meetingRecordId:{}", meetingRecordId);
processLogService.log(meetingId,subMeetingId,meetingRecordId+"获取的转录文本为空,跳过纪要生成");
status = MeetingState.EMPTY.getCode();
throw new RuntimeException("获取的转录文本为空,跳过纪要生成");
}
......@@ -292,7 +292,7 @@ public class FileProcessTask {
String toUserCode = tidWidRelations.get(meetingInfo.getHostUid());
if(!tidWidRelations.containsKey(hostUid)){
log.info("用户{}暂未关联企微信息,无法生成纪要文件",hostUid);
processLogService.log(meetingId,subMeetingId,"用户"+hostUid+"暂未关联企微信息,无法生成纪要文件");
processLogService.log(meetingId,subMeetingId,meetingRecordId+"用户"+hostUid+"暂未关联企微信息,无法生成纪要文件");
continue;
}
String processedResult = null;
......@@ -300,22 +300,29 @@ public class FileProcessTask {
//判断本次纪要有模板生成权限
if(!authorizedUserMap.containsKey(template.getId())){
log.info("模板{}暂未授权给任意对象",template.getName());
processLogService.log(meetingId,subMeetingId,"模板"+template.getName()+"暂未授权给任意对象");
processLogService.log(meetingId,subMeetingId,meetingRecordId+"模板"+template.getName()+"暂未授权给任意对象");
continue;
}
List<String> authorizedUserIds = authorizedUserMap.get(template.getId());
if(!authorizedUserIds.contains(tidWidRelations.get(hostUid))){
log.info("用户{}暂无模板{}权限",hostUid,template.getName());
processLogService.log(meetingId,subMeetingId,"用户"+hostUid+"暂无模板"+template.getName()+"权限");
processLogService.log(meetingId,subMeetingId,meetingRecordId+"用户"+hostUid+"暂无模板"+template.getName()+"权限");
continue;
}else{
log.info("用户{}允许应用模板{}",hostUid,template.getName());
processLogService.log(meetingId,subMeetingId,"用户"+hostUid+"允许应用模板"+template.getName());
processLogService.log(meetingId,subMeetingId,meetingRecordId+"用户"+hostUid+"允许应用模板"+template.getName());
}
//暂时让所有模板共用一个提示词,两个模板输出同样的结果
if(StringUtils.isEmpty(processedResult)){
processedResult = processWithClaude(recordTextBuffer.toString(),meetingDate,participantNames,template.getPrompt());
LLMResult llmResult = processWithClaude(recordTextBuffer.toString(), meetingDate, participantNames, template.getPrompt());
if (llmResult.success) {
processedResult = llmResult.respond;
} else if (llmResult.reason.equals("会议记录 过短,退出")) {
status = MeetingState.EMPTY.getCode();
throw new RuntimeException("会议记录 过短,退出");
}
}
log.info("meetingRecordId: {},结果长度:{}", meetingRecordId, processedResult.length());
String minutesPath = saveResult(processedResult, recordTextBuffer.toString(), meetingInfo,toUserCode, template);
try(InputStream is = new FileInputStream(minutesPath)){
......@@ -330,13 +337,13 @@ public class FileProcessTask {
}
}
if(CollectionUtils.isEmpty(attachments)){
log.info("用户{}暂无任何模板权限,纪要生成失败",hostUid);
log.info("meetingRecordId:{}用户{}暂无任何模板权限,纪要生成失败", meetingRecordId, hostUid);
isSuccess = false;
continue;
}
if(!tidWidRelations.containsKey(meetingInfo.getHostUid())){
log.error("邮件推送重试失败: 主持人对应关系未配置。meetingId {}", meetingId);
processLogService.log(meetingId,subMeetingId,"邮件推送重试失败: 主持人对应关系未配置。meetingId "+meetingId);
log.error("邮件推送重试失败: 主持人对应关系未配置。meetingRecordId {}", meetingRecordId);
processLogService.log(meetingId,subMeetingId,"邮件推送重试失败: 主持人对应关系未配置。meetingRecordId:"+meetingRecordId);
continue;
}
EmailPush emailPushBuilder = EmailPush.builder()
......@@ -357,7 +364,7 @@ public class FileProcessTask {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
processLogService.log(meetingId,subMeetingId,sw.toString());
processLogService.log(meetingId,subMeetingId,meetingRecordId + sw.toString());
// 异常处理
retryCount++;
if (retryCount > MAX_RETRY) {
......@@ -367,6 +374,7 @@ public class FileProcessTask {
meetingInfoMapper.update(null,
new LambdaUpdateWrapper<MeetingInfo>()
.eq(MeetingInfo::getMeetingRecordId, meetingRecordId)
.set(MeetingInfo::getStatus, MeetingState.GENERATE_ERROR.getCode())
.set(MeetingInfo::getGenerateRetry,Boolean.TRUE));
} else {
meetingInfoMapper.update(null,
......@@ -460,7 +468,7 @@ public class FileProcessTask {
* @param prompt 提示词
* @return
*/
private String processWithClaude(String textContent, String meetingDate,String participantNames, String prompt) {
private LLMResult processWithClaude(String textContent, String meetingDate,String participantNames, String prompt) {
// //将文件传送给大模型处理
String model = llmApiModel;
LLMConfig baseLLM = new LLMConfig(model,
......@@ -468,10 +476,11 @@ public class FileProcessTask {
"Bearer " + llmApiToken,
llmApiMaxTokens);
LLMResult llmResult = MeetingProcess.processMeeting(prompt, textContent,meetingDate,participantNames, baseLLM, new ArrayList<>());
if (llmResult.success) {
return llmResult.respond;
}
throw new RuntimeException(llmResult.reason);
return llmResult;
// if (llmResult.success) {
// return llmResult.respond;
// }
// throw new RuntimeException(llmResult.reason);
// DebugOutputTool.println(llmResult.respond);
}
......
......@@ -218,7 +218,8 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,T
boolean flag = true;
if (CollUtil.isNotEmpty(meetingIds)) {
for (TencentMeetingVO.SimpleMeetingInfo meetingInfo : meetingIds) {
if (meetingInfo.getMeetingRecordId().equals(meetingRecordId)) {
String meetingRecordIdTemp = meetingInfo.getMeetingRecordId();
if (meetingRecordIdTemp != null && meetingRecordIdTemp.equals(meetingRecordId)) {
flag = false;
break;
}
......
......@@ -117,7 +117,7 @@ tencent:
aesKey: agy6ALUePp34lljWz1uIQWa7yQq3dgxxQNmfaN9GROm
base-save-path: E:/save/ #会议纪要临时文件存储路径
search-scope: 2 #腾会转录文件拉取时间范围,查询过去n天的记录
search-end-time: '2025-07-30 23:59:59' #此时间之前的数据不拉取
search-end-time: '2025-11-26 22:59:59' #此时间之前的数据不拉取
email:
sender: ${EMAIL_SENDER}
......
......@@ -33,6 +33,6 @@
</foreach>
</insert>
<select id="getAllMeetingIds" resultType="com.cmeeting.vo.TencentMeetingVO$SimpleMeetingInfo">
select meeting_id,meeting_record_id,sub_meeting_id,record_file_id from cmt_meeting_info order by sync_time limit 10000;
select meeting_id,meeting_record_id,sub_meeting_id,record_file_id from cmt_meeting_info order by sync_time desc limit 20000;
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论