提交 8f1afb93 作者: 洪东保

定时任务修改

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