提交 8f1afb93 作者: 洪东保

定时任务修改

父级 4e053985
...@@ -110,6 +110,9 @@ public class CmeetingJob { ...@@ -110,6 +110,9 @@ public class CmeetingJob {
log.info("-------关联企微腾会人员定时任务结束--------"); log.info("-------关联企微腾会人员定时任务结束--------");
} }
/**
* 拉取会议并走一遍总流程(生成纪要->推送邮件)
*/
@Scheduled(fixedRate = 20 * 60 * 1000, initialDelay = 2 * 60 * 1000) @Scheduled(fixedRate = 20 * 60 * 1000, initialDelay = 2 * 60 * 1000)
public void execute() { public void execute() {
if (isDev) { if (isDev) {
...@@ -162,6 +165,7 @@ public class CmeetingJob { ...@@ -162,6 +165,7 @@ public class CmeetingJob {
List<MeetingInfo> meetingInfoList = List<MeetingInfo> meetingInfoList =
meetingInfoService.list(new LambdaQueryWrapper<MeetingInfo>() meetingInfoService.list(new LambdaQueryWrapper<MeetingInfo>()
.eq(MeetingInfo::getIsGenerated, Boolean.FALSE) .eq(MeetingInfo::getIsGenerated, Boolean.FALSE)
.eq(MeetingInfo::getEmailGenerateAccess, true)
.eq(MeetingInfo::getGenerateRetry, Boolean.FALSE) .eq(MeetingInfo::getGenerateRetry, Boolean.FALSE)
.le(MeetingInfo::getSyncTime, LocalDateTime.now().minusHours(1)) .le(MeetingInfo::getSyncTime, LocalDateTime.now().minusHours(1))
); );
......
...@@ -10,6 +10,7 @@ import com.cmeeting.mapper.primary.MeetingRecordTemplateMapper; ...@@ -10,6 +10,7 @@ import com.cmeeting.mapper.primary.MeetingRecordTemplateMapper;
import com.cmeeting.pojo.MeetingInfo; import com.cmeeting.pojo.MeetingInfo;
import com.cmeeting.pojo.MeetingRecordTemplate; import com.cmeeting.pojo.MeetingRecordTemplate;
import com.cmeeting.util.MinioUtils; import com.cmeeting.util.MinioUtils;
import com.cmeeting.util.RedisUtils;
import com.cmeeting.vo.EmailPush; import com.cmeeting.vo.EmailPush;
import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.XWPFTemplate;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
...@@ -46,12 +47,17 @@ public class EmailPushTask { ...@@ -46,12 +47,17 @@ public class EmailPushTask {
private MeetingInfoMapper meetingInfoMapper; private MeetingInfoMapper meetingInfoMapper;
private MinioUtils minioUtils; private MinioUtils minioUtils;
private RedisUtils redisUtils;
private EmailSender emailSender; private EmailSender emailSender;
private MeetingRecordTemplateMapper meetingRecordTemplateMapper; private MeetingRecordTemplateMapper meetingRecordTemplateMapper;
private Map<String,String> tidWidRelations; private Map<String,String> tidWidRelations;
// 实际处理逻辑 // 实际处理逻辑
public void process() { public void process() {
boolean getKey = redisUtils.setnx("meeting_" + meetingId + subMeetingId, meetingId, 19*60);
if (!getKey) {
return;
}
Boolean isSuccess = Boolean.FALSE; Boolean isSuccess = Boolean.FALSE;
AtomicInteger retryCount = new AtomicInteger(0); AtomicInteger retryCount = new AtomicInteger(0);
MeetingInfo meetingInfo = meetingInfoMapper.selectOne(new LambdaQueryWrapper<MeetingInfo>() MeetingInfo meetingInfo = meetingInfoMapper.selectOne(new LambdaQueryWrapper<MeetingInfo>()
...@@ -144,7 +150,7 @@ public class EmailPushTask { ...@@ -144,7 +150,7 @@ public class EmailPushTask {
.set(MeetingInfo::getIsPushed,isSuccess) .set(MeetingInfo::getIsPushed,isSuccess)
.set(MeetingInfo::getPushRetry,Boolean.TRUE) .set(MeetingInfo::getPushRetry,Boolean.TRUE)
); );
redisUtils.del("meeting_" + meetingId + subMeetingId);
} }
......
...@@ -87,9 +87,12 @@ public class MeetingInfo implements Serializable { ...@@ -87,9 +87,12 @@ public class MeetingInfo implements Serializable {
*/ */
private Boolean isGenerated; private Boolean isGenerated;
/** /**
* 推送邮件许可 为false不推送 * 生成纪要许可
*/ */
private Boolean emailGenerateAccess; private Boolean emailGenerateAccess;
/**
* 推送邮件许可 为false不推送
*/
private Boolean emailPushAccess; private Boolean emailPushAccess;
/** /**
* 是否推送邮件完成 * 是否推送邮件完成
......
...@@ -7,6 +7,7 @@ import com.cmeeting.job.FileProcessTask; ...@@ -7,6 +7,7 @@ import com.cmeeting.job.FileProcessTask;
import com.cmeeting.log.service.ProcessLogService; import com.cmeeting.log.service.ProcessLogService;
import com.cmeeting.mapper.primary.MeetingInfoMapper; import com.cmeeting.mapper.primary.MeetingInfoMapper;
import com.cmeeting.mapper.primary.MeetingRecordTemplateMapper; import com.cmeeting.mapper.primary.MeetingRecordTemplateMapper;
import com.cmeeting.mapper.primary.UserIdMapper;
import com.cmeeting.pojo.UserId; import com.cmeeting.pojo.UserId;
import com.cmeeting.util.MinioUtils; import com.cmeeting.util.MinioUtils;
import com.cmeeting.util.RedisUtils; import com.cmeeting.util.RedisUtils;
...@@ -49,6 +50,12 @@ public class FileProcessProducer { ...@@ -49,6 +50,12 @@ public class FileProcessProducer {
@Resource @Resource
private MeetingRecordTemplateMapper meetingRecordTemplateMapper; private MeetingRecordTemplateMapper meetingRecordTemplateMapper;
@Resource @Resource
private MeetingRecordTemplateService meetingRecordTemplateService;
@Resource
private MeetTypeService meetTypeService;
@Resource
private UserIdMapper userIdMapper;
@Resource
private MinioUtils minioUtils; private MinioUtils minioUtils;
@Resource @Resource
private RedisUtils redisUtils; private RedisUtils redisUtils;
...@@ -87,6 +94,9 @@ public class FileProcessProducer { ...@@ -87,6 +94,9 @@ public class FileProcessProducer {
redisUtils, redisUtils,
emailSender, emailSender,
meetingRecordTemplateMapper, meetingRecordTemplateMapper,
meetingRecordTemplateService,
meetTypeService,
userIdMapper,
llmApiAddr, llmApiAddr,
finalRetry, finalRetry,
processLogService, processLogService,
......
...@@ -32,6 +32,7 @@ public interface ModulePermissionService extends IService<ModulePermission> { ...@@ -32,6 +32,7 @@ public interface ModulePermissionService extends IService<ModulePermission> {
*/ */
List<ModulePermission> checkPermission(List<String> deptIds, String userId); List<ModulePermission> checkPermission(List<String> deptIds, String userId);
List<Long> checkPermission(List<String> deptIds, String userId, Integer purpose); List<Long> checkPermission(List<String> deptIds, String userId, Integer purpose);
Boolean checkAdminPermission(List<String> deptIds, String userId);
Boolean checkPermission(List<String> deptIds, String userId, Integer purpose, Long targetId); Boolean checkPermission(List<String> deptIds, String userId, Integer purpose, Long targetId);
Boolean personalStatus(String userId); Boolean personalStatus(String userId);
......
...@@ -204,7 +204,7 @@ public class ModulePermissionServiceImpl extends ServiceImpl<ModulePermissionMap ...@@ -204,7 +204,7 @@ public class ModulePermissionServiceImpl extends ServiceImpl<ModulePermissionMap
@Override @Override
public List<ModulePermission> checkPermission(List<String> deptIds, String userId) { public List<ModulePermission> checkPermission(List<String> deptIds, String userId) {
return this.list(new LambdaQueryWrapper<ModulePermission>() return this.list(new LambdaQueryWrapper<ModulePermission>()
.and(e -> e.eq(ModulePermission::getType, RecordTemplateConstant.REL_TYPE_DEPT).in(ModulePermission::getRelId, deptIds) .and(e -> e.eq(CollUtil.isNotEmpty(deptIds), ModulePermission::getType, RecordTemplateConstant.REL_TYPE_DEPT).in(ModulePermission::getRelId, deptIds)
.or().eq(ModulePermission::getType, RecordTemplateConstant.REL_TYPE_USER).eq(ModulePermission::getRelId, userId)) .or().eq(ModulePermission::getType, RecordTemplateConstant.REL_TYPE_USER).eq(ModulePermission::getRelId, userId))
.select(ModulePermission::getTargetId) .select(ModulePermission::getTargetId)
); );
...@@ -214,7 +214,7 @@ public class ModulePermissionServiceImpl extends ServiceImpl<ModulePermissionMap ...@@ -214,7 +214,7 @@ public class ModulePermissionServiceImpl extends ServiceImpl<ModulePermissionMap
public List<Long> checkPermission(List<String> deptIds, String userId, Integer purpose) { public List<Long> checkPermission(List<String> deptIds, String userId, Integer purpose) {
List<ModulePermission> list = this.list(new LambdaQueryWrapper<ModulePermission>() List<ModulePermission> list = this.list(new LambdaQueryWrapper<ModulePermission>()
.eq(ModulePermission::getPurpose, purpose) .eq(ModulePermission::getPurpose, purpose)
.and(e -> e.eq(ModulePermission::getType, RecordTemplateConstant.REL_TYPE_DEPT).in(ModulePermission::getRelId, deptIds) .and(e -> e.eq(CollUtil.isNotEmpty(deptIds), ModulePermission::getType, RecordTemplateConstant.REL_TYPE_DEPT).in(ModulePermission::getRelId, deptIds)
.or().eq(ModulePermission::getType, RecordTemplateConstant.REL_TYPE_USER).eq(ModulePermission::getRelId, userId) .or().eq(ModulePermission::getType, RecordTemplateConstant.REL_TYPE_USER).eq(ModulePermission::getRelId, userId)
.or().eq(ModulePermission::getType, RecordTemplateConstant.REL_TYPE_USER).eq(ModulePermission::getRelId, CategoryConstant.ALL_EN) .or().eq(ModulePermission::getType, RecordTemplateConstant.REL_TYPE_USER).eq(ModulePermission::getRelId, CategoryConstant.ALL_EN)
).select(ModulePermission::getTargetId) ).select(ModulePermission::getTargetId)
...@@ -223,6 +223,18 @@ public class ModulePermissionServiceImpl extends ServiceImpl<ModulePermissionMap ...@@ -223,6 +223,18 @@ public class ModulePermissionServiceImpl extends ServiceImpl<ModulePermissionMap
} }
@Override @Override
public Boolean checkAdminPermission(List<String> deptIds, String userId) {
List<ModulePermission> list = this.list(new LambdaQueryWrapper<ModulePermission>()
.eq(ModulePermission::getPurpose, PermissionPruposeType.ADMIN_AUTH)
.and(e -> e.eq(CollUtil.isNotEmpty(deptIds), ModulePermission::getType, RecordTemplateConstant.REL_TYPE_DEPT).in(ModulePermission::getRelId, deptIds)
.or().eq(ModulePermission::getType, RecordTemplateConstant.REL_TYPE_USER).eq(ModulePermission::getRelId, userId)
.or().eq(ModulePermission::getType, RecordTemplateConstant.REL_TYPE_USER).eq(ModulePermission::getRelId, CategoryConstant.ALL_EN)
).select(ModulePermission::getId)
);
return CollUtil.isNotEmpty(list);
}
@Override
public Boolean checkPermission(List<String> deptIds, String userId, Integer purpose, Long targetId) { public Boolean checkPermission(List<String> deptIds, String userId, Integer purpose, Long targetId) {
boolean flag = purpose.equals(PermissionPruposeType.TEMPLATE_TYPE_PERMISSION) || purpose.equals(PermissionPruposeType.TEMPLATE_PERMISSION); boolean flag = purpose.equals(PermissionPruposeType.TEMPLATE_TYPE_PERMISSION) || purpose.equals(PermissionPruposeType.TEMPLATE_PERMISSION);
if (flag && targetId != null) { if (flag && targetId != null) {
......
package com.cmeeting.service.impl; package com.cmeeting.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmeeting.constant.PermissionPruposeType;
import com.cmeeting.dto.UserDTO; import com.cmeeting.dto.UserDTO;
import com.cmeeting.log.service.ProcessLogService; import com.cmeeting.log.service.ProcessLogService;
import com.cmeeting.mapper.primary.AuthMapper; import com.cmeeting.mapper.primary.AuthMapper;
import com.cmeeting.mapper.primary.MeetingInfoMapper; import com.cmeeting.mapper.primary.MeetingInfoMapper;
import com.cmeeting.mapper.primary.TecentMeetingMapper; import com.cmeeting.mapper.primary.TecentMeetingMapper;
import com.cmeeting.mapper.secondary.SysUserSysMapper; import com.cmeeting.mapper.secondary.SysUserSysMapper;
import com.cmeeting.pojo.CoreModulePermissions; import com.cmeeting.pojo.*;
import com.cmeeting.pojo.MeetingInfo; import com.cmeeting.service.ModulePermissionService;
import com.cmeeting.pojo.TencentMeetingUser; import com.cmeeting.service.SysUserSyncService;
import com.cmeeting.pojo.WeComUser;
import com.cmeeting.service.TencentMeetingService; import com.cmeeting.service.TencentMeetingService;
import com.cmeeting.util.RedisUtils; import com.cmeeting.util.RedisUtils;
import com.cmeeting.util.SignatureUtil; import com.cmeeting.util.SignatureUtil;
...@@ -64,6 +66,10 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper, ...@@ -64,6 +66,10 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,
private RedisUtils redisUtils; private RedisUtils redisUtils;
@Resource @Resource
private ProcessLogService processLogService; private ProcessLogService processLogService;
@Resource
private ModulePermissionService modulePermissionService;
@Resource
private SysUserSyncService sysUserSyncService;
private static final String HMAC_ALGORITHM = "HmacSHA256"; private static final String HMAC_ALGORITHM = "HmacSHA256";
private static final char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; private static final char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
...@@ -134,6 +140,8 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper, ...@@ -134,6 +140,8 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,
List<TencentMeetingVO.SimpleMeetingInfo> meetingIds = meetingInfoMapper.getAllMeetingIds(); List<TencentMeetingVO.SimpleMeetingInfo> meetingIds = meetingInfoMapper.getAllMeetingIds();
List<TencentMeetingUser> meetingUsers = tecentMeetingMapper.getAlluser(); List<TencentMeetingUser> meetingUsers = tecentMeetingMapper.getAlluser();
Map<String, String> meetingMap = meetingUsers.stream().collect(Collectors.toMap(TencentMeetingUser::getUserId, TencentMeetingUser::getUserName)); Map<String, String> meetingMap = meetingUsers.stream().collect(Collectors.toMap(TencentMeetingUser::getUserId, TencentMeetingUser::getUserName));
while (currentPage.intValue() <= totalPage) { while (currentPage.intValue() <= totalPage) {
CorpRecordsVO data = fetchMeetingRecords(tencentAdminUserId, 1, startTime, endTime, currentPage.getAndIncrement(), 20); CorpRecordsVO data = fetchMeetingRecords(tencentAdminUserId, 1, startTime, endTime, currentPage.getAndIncrement(), 20);
//设置总页数 //设置总页数
...@@ -225,20 +233,31 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper, ...@@ -225,20 +233,31 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,
//判断是否有权限生成纪要 //判断是否有权限生成纪要
boolean generateAccess; boolean generateAccess;
boolean emailPushAccess; boolean emailPushAccess;
UserDTO userDTO = accessUserIds.stream().filter(item -> item.getTid().equals(hostId)).findFirst().get();
String userId = weComUserMap.get(userDTO.getWid()).getUserId();
// 1. 智能体需要授权 // 1. 智能体需要授权
generateAccess = accessUserIds.stream().anyMatch(item -> item.getTid().equals(hostId)); generateAccess = accessUserIds.stream().anyMatch(item -> item.getTid().equals(hostId));
log.info("智能体是否授权: {}", generateAccess); log.info("用户: {}, 智能体是否授权: {}", userId, generateAccess);
UserDTO userDTO = accessUserIds.stream().filter(item -> item.getTid().equals(hostId)).findFirst().get();
String email = userDTO.getEmail(); String email = userDTO.getEmail();
// TODO 要改
// 2. 腾讯会议和企业微信信息同步过并且绑定关系 // 2. 腾讯会议和企业微信信息同步过并且绑定关系
// 3. 用户在超管授权了的人员里面
// 3. 用户自己没有关闭会议纪要功能 // 3. 用户自己没有关闭会议纪要功能
// 满足以上所有则emailGenerateAccess为ture // 满足以上所有则emailGenerateAccess为ture
generateAccess = weComUserMap.containsKey(userDTO.getWid()) ? weComUserMap.get(userDTO.getWid()).getEmailPushAccess() : Boolean.FALSE; generateAccess = generateAccess && weComUserMap.containsKey(userDTO.getWid());
log.info("uid是否绑定企业微信: {}", generateAccess);
List<SysUserSyncCategory> categoryList = sysUserSyncService.getCategoryListByUserId(userId);
List<String> deptIds = categoryList.stream().map(SysUserSyncCategory::getDeptId).collect(Collectors.toList());
generateAccess = generateAccess && modulePermissionService.checkAdminPermission(deptIds, userId);
log.info("超管是否授权给用户: {}", generateAccess);
generateAccess = generateAccess && modulePermissionService.personalStatus(userId);
log.info("个人是否开启纪要功能: {}", generateAccess);
// 是否推送邮箱 // 是否推送邮箱
emailPushAccess = weComUserMap.containsKey(userDTO.getWid()) ? weComUserMap.get(userDTO.getWid()).getEmailPushAccess() : Boolean.FALSE; emailPushAccess = generateAccess && (weComUserMap.containsKey(userDTO.getWid()) ? weComUserMap.get(userDTO.getWid()).getEmailPushAccess() : Boolean.FALSE);
log.info("推送邮箱: {}", emailPushAccess); log.info("是否推送邮箱: {}", emailPushAccess);
// 查询会议开始和结束时间 // 查询会议开始和结束时间
MeetingInfo startAndEndTimeByMeetingId = TencentMeetingApiUtil.getStartAndEndTimeByMeetingId(meetingId); MeetingInfo startAndEndTimeByMeetingId = TencentMeetingApiUtil.getStartAndEndTimeByMeetingId(meetingId);
//会议基本信息保存 //会议基本信息保存
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论