提交 7d4fd34c 作者: duanxincheng

模板权限控制

父级 102ea6e2
......@@ -92,6 +92,7 @@ public class CmeetingJob {
}
// @Scheduled(fixedRate = 10 * 60 * 1000,initialDelay = 2 * 60 * 1000)
// @Scheduled(fixedRate = 10 * 60 * 1000)
public void execute() {
// 定义时间格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
......@@ -125,10 +126,10 @@ public class CmeetingJob {
}
//获取模板授权的人员
// List<UserDTO.TemplateAuthorizedUserDTO> authorizedUsers = meetingRecordTemplateService.selectAuthorizedUsers();
List<UserDTO.TemplateAuthorizedUserDTO> authorizedUsers = meetingRecordTemplateService.selectAuthorizedUsers();
// 提交处理任务
producer.submitBatchTasks(meetingFiles,Boolean.FALSE);
producer.submitBatchTasks(meetingFiles,authorizedUsers,Boolean.FALSE);
}
......@@ -165,8 +166,11 @@ public class CmeetingJob {
// List<UserDTO> accessUserIds = tecentMeetingService.getAccessUserIds();
//获取模板授权的人员
List<UserDTO.TemplateAuthorizedUserDTO> authorizedUsers = meetingRecordTemplateService.selectAuthorizedUsers();
// 提交处理任务
producer.submitBatchTasks(meetingFiles, Boolean.TRUE);
producer.submitBatchTasks(meetingFiles,authorizedUsers, Boolean.TRUE);
log.info("-------生成纪要重试定时任务结束--------");
} catch (Exception e) {
e.printStackTrace();
......
......@@ -9,6 +9,7 @@ import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.cmeeting.dto.UserDTO;
import com.cmeeting.email.EmailSender;
import com.cmeeting.log.service.ProcessLogService;
import com.cmeeting.mapper.primary.MeetingInfoMapper;
......@@ -87,6 +88,8 @@ public class FileProcessTask {
private EmailSender emailSender;
private MeetingRecordTemplateMapper meetingRecordTemplateMapper;
private ProcessLogService processLogService;
//获取模板授权的人员
private List<UserDTO.TemplateAuthorizedUserDTO> authorizedUsers;
// 实际处理逻辑
public void process() {
......@@ -217,40 +220,33 @@ public class FileProcessTask {
// 3. 处理文件 (调用Claude API等)
String choiceTemplateType = choiceTemplateType(meetingInfo.getSubject(),recordTextBuffer.toString());
log.info("choiceTemplateType->{}",choiceTemplateType);
//获取系统模板
MeetingRecordTemplate meetingRecordTemplate = meetingRecordTemplateMapper.selectById(1);
String processedResult = processWithClaude(recordTextBuffer.toString(),meetingRecordTemplate.getPrompt());
// 4. 保存结果
MeetingRecordTemplate meetingRecordTemplate2 = meetingRecordTemplateMapper.selectById(2);
String dataNetworkMinutesPath = saveResult(processedResult, recordTextBuffer.toString().getBytes(StandardCharsets.UTF_8), meetingInfo, meetingRecordTemplate);
List<EmailPush.Attachment> attachments = new ArrayList<>();
for (UserDTO.TemplateAuthorizedUserDTO templateAuthorizedUserDTO : authorizedUsers) {
//如果模板授权人员不为空,开始生成纪要
if(!CollectionUtils.isEmpty(templateAuthorizedUserDTO.getUserIdList())){
MeetingRecordTemplate meetingRecordTemplate = templateAuthorizedUserDTO.getRecordTemplate();
//模板权限过滤
List<String> userIdList = templateAuthorizedUserDTO.getUserIdList();
if(!userIdList.contains(meetingInfo.getHostUid())){
log.info("用户{}没有纪要模板{}的生成权限,跳过该模板的生成流程",meetingInfo.getHostUid(),meetingRecordTemplate.getName());
processLogService.log(meetingId,subMeetingId,"用户"+meetingInfo.getHostUid()+"没有纪要模板"+meetingRecordTemplate.getName()+"的生成权限,跳过该模板的生成流程");
continue;
}
//根据模板生成纪要
String processedResult = processWithClaude(recordTextBuffer.toString(),meetingRecordTemplate.getPrompt());
String dataNetworkMinutesPath = saveResult(processedResult, recordTextBuffer.toString().getBytes(StandardCharsets.UTF_8), meetingInfo, meetingRecordTemplate);
try(InputStream is = new FileInputStream(dataNetworkMinutesPath)){
byte[] meetingMinutesBytes = IOUtils.toByteArray(is);
EmailPush.Attachment attachment = EmailPush.Attachment.builder().name(meetingInfo.getSubject()+"会议纪要_数据网络中心").bytes(meetingMinutesBytes).build();
EmailPush.Attachment attachment = EmailPush.Attachment.builder().name(meetingInfo.getSubject()+"会议纪要_"+meetingRecordTemplate.getName().replace("模板","")).bytes(meetingMinutesBytes).build();
attachments.add(attachment);
// emailPush(meetingMinutesBytes, meetingInfo.getSubject(), meetingInfo.getEmail(), meetingInfo.getEmailPushAccess());
}catch (Exception e){
throw new RuntimeException(e);
}finally {
FileUtil.del(dataNetworkMinutesPath);
}
String processedResult2 = processWithClaude(recordTextBuffer.toString(),meetingRecordTemplate2.getPrompt());
String groupOfficeMinutesPath = saveResult(processedResult2, recordTextBuffer.toString().getBytes(StandardCharsets.UTF_8), meetingInfo, meetingRecordTemplate2);
try(InputStream is = new FileInputStream(groupOfficeMinutesPath)){
byte[] meetingMinutesBytes = IOUtils.toByteArray(is);
EmailPush.Attachment attachment = EmailPush.Attachment.builder().name(meetingInfo.getSubject()+"会议纪要_集团办").bytes(meetingMinutesBytes).build();
attachments.add(attachment);
// emailPush(meetingMinutesBytes, meetingInfo.getSubject(), meetingInfo.getEmail(), meetingInfo.getEmailPushAccess());
}catch (Exception e){
throw new RuntimeException(e);
}finally {
FileUtil.del(groupOfficeMinutesPath);
}
// meetingRecordTemplateMapper.getAuthorizedSystemTemplate();
}
EmailPush emailPushBuilder = EmailPush.builder().toEmail(meetingInfo.getEmail()).meetingId(meetingId).attachments(attachments).subject(meetingInfo.getSubject()).build();
emailPush(emailPushBuilder);
......@@ -587,7 +583,7 @@ public class FileProcessTask {
public FileProcessTask(List<String> recordFileIdList, String meetingId, String subMeetingId, String savePath, Map<String, Object> metadata, String tencentAppId,
String tencentSdkId, String tencentSecretId, String tencentSecretKey, String tencentAdminUserId,
MeetingInfoMapper meetingInfoMapper, MinioUtils minioUtils, EmailSender emailSender, MeetingRecordTemplateMapper meetingRecordTemplateMapper,
String llmApiAddr, Boolean finalRetry, ProcessLogService processLogService) {
String llmApiAddr, Boolean finalRetry, ProcessLogService processLogService,List<UserDTO.TemplateAuthorizedUserDTO> authorizedUsers) {
this.recordFileIdList = recordFileIdList;
this.savePath = savePath;
this.metadata = metadata;
......@@ -605,5 +601,6 @@ public class FileProcessTask {
this.llmApiAddr = llmApiAddr;
this.finalRetry = finalRetry;
this.processLogService = processLogService;
this.authorizedUsers = authorizedUsers;
}
}
\ No newline at end of file
......@@ -60,10 +60,11 @@ public class FileProcessProducer {
/**
* 批量提交生成纪要任务
* @param recordFiles 转录文件信息
* @param authorizedUsers 模板授权的人员
* @param finalRetry 是否为最终重试
* @param finalRetry
*/
public void submitBatchTasks(List<TencentMeetingVO.RecordFile> recordFiles, Boolean finalRetry) {
public void submitBatchTasks(List<TencentMeetingVO.RecordFile> recordFiles,List<UserDTO.TemplateAuthorizedUserDTO> authorizedUsers, Boolean finalRetry) {
List<Future<?>> futures = new ArrayList<>();
for (TencentMeetingVO.RecordFile recordFile : recordFiles) {
......@@ -85,7 +86,8 @@ public class FileProcessProducer {
meetingRecordTemplateMapper,
llmApiAddr,
finalRetry,
processLogService
processLogService,
authorizedUsers
);
// 提交任务到线程池
......
......@@ -104,9 +104,9 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT
List<MeetingRecordTemplate> meetingRecordTemplates = baseMapper.selectList(new LambdaQueryWrapper<MeetingRecordTemplate>().eq(MeetingRecordTemplate::getType, "system"));
//查出所有系统模板授权信息
List<RecordTemplatePermission> permissions = permissionMapper.selectList(new LambdaQueryWrapper<RecordTemplatePermission>().eq(RecordTemplatePermission::getTemplateType, "system"));
UserDTO.TemplateAuthorizedUserDTO resultItem = new UserDTO.TemplateAuthorizedUserDTO();
//所有授权模板的人员
for (MeetingRecordTemplate template : meetingRecordTemplates) {
UserDTO.TemplateAuthorizedUserDTO resultItem = new UserDTO.TemplateAuthorizedUserDTO();
resultItem.setRecordTemplate(template);
//该系统模板授权部门
List<RecordTemplatePermission> deptPermissions = permissions.stream().filter(item -> "1".equals(item.getRelType()) && template.getId().equals(item.getTemplateId())).collect(Collectors.toList());
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论