提交 7d4fd34c 作者: duanxincheng

模板权限控制

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