提交 102ea6e2 作者: duanxincheng

模板权限控制

父级 5cb7fb90
package com.cmeeting.ad.controller;
import com.cmeeting.ad.service.UserService;
import com.cmeeting.ad.vo.ApplicationUserVO;
import com.cmeeting.ad.vo.UserVo;
import com.cmeeting.util.IPUtils;
import com.cmeeting.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@RestController
@RequestMapping("/admin")
public class UserAdminController {
@Autowired
private UserService userService;
/**
* 授权查询接口
* @param search
* @param type
* @param userType
* @param categoryId
* @param authType
* @return
*/
@GetMapping("/user/list")
public R list(String search, @RequestParam Integer type, @RequestParam Integer userType,
String categoryId, Integer authType) {
return R.ok(userService.list(search, type, userType, categoryId, authType));
}
}
\ No newline at end of file
......@@ -35,20 +35,4 @@ public class UserController {
public R auth(@Validated @RequestBody UserVo.Auth vo) {
return R.ok(userService.auth(vo));
}
/**
* 授权查询接口
* @param search
* @param type
* @param userType
* @param categoryId
* @param targetId
* @param authType
* @return
*/
@GetMapping("/list")
public R list(String search, @RequestParam Integer type, @RequestParam Integer userType,
String categoryId, @RequestParam String targetId, Integer authType) {
return R.ok(userService.list(search, type, userType, categoryId, targetId, authType));
}
}
\ No newline at end of file
......@@ -23,5 +23,5 @@ public interface UserService {
*/
RoleTree getLoginMenus(List<SysMenu> sysMenuList);
Object list(String search, Integer type, Integer userType, String categoryId, String targetId, Integer authType);
Object list(String search, Integer type, Integer userType, String categoryId, Integer authType);
}
\ No newline at end of file
......@@ -206,15 +206,22 @@ public class UserServiceImpl implements UserService {
}
@Override
public Object list(String search, Integer type, Integer userType, String categoryId, String targetId, Integer authType) {
String url = userAdminConfig.getUserAdminDomain() + "/user/list"
+ "?search=" + UrlEncoderUtil.encode(search.trim())
+ "&type=" + type
+ "&userType=2"
+ "&categoryId=" + categoryId
+ "&targetId=" + targetId;
public Object list(String search, Integer type, Integer userType, String categoryId, Integer authType) {
String url = userAdminConfig.getUserAdminDomain() + UserAdminRouteConstant.SysUser.FIND_NAME;
JSONObject body = new JSONObject();
body.put("tenantId", SecurityUtil.getTenantId());
body.put("type", userType);
body.put("categoryId", categoryId);
body.put("search", search);
// 模糊查询
body.put("searchType", 1);
// + "?search=" + UrlEncoderUtil.encode(search.trim())
// + "&type=" + type
// + "&userType=2"
// + "&categoryId=" + categoryId
// + "&targetId=" + targetId;
System.out.println(url);
JSONObject object = HttpClientUtils.httpGet(url, UserAdminTokenUtil.getUserAdminToken());
JSONObject object = HttpClientUtils.httpPost(url,body, UserAdminTokenUtil.getUserAdminToken());
return object;
}
......
......@@ -2,6 +2,9 @@ package com.cmeeting.controller;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cmeeting.ad.entity.RobotSecurityUser;
import com.cmeeting.ad.util.SecurityUtil;
import com.cmeeting.dto.UserDTO;
import com.cmeeting.pojo.MeetingRecordTemplate;
import com.cmeeting.service.MeetingRecordTemplateService;
import com.cmeeting.service.RecordTemplatePermissionService;
......@@ -13,6 +16,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
@RestController
......@@ -25,15 +29,19 @@ public class RecordTemplateController {
@PostMapping("/create")
public R create(@RequestBody MeetingRecordTemplate recordTemplate) {
RobotSecurityUser user = SecurityUtil.getUser();
recordTemplate.setCreateTime(LocalDateTime.now());
recordTemplate.setIsDel(Boolean.FALSE);
recordTemplate.setCreateUser(user.getId());
boolean save = recordTemplateService.save(recordTemplate);
return R.ok(save);
}
@PostMapping("/update")
public R update(@RequestBody MeetingRecordTemplate recordTemplate) {
RobotSecurityUser user = SecurityUtil.getUser();
recordTemplate.setUpdateTime(LocalDateTime.now());
recordTemplate.setUpdateUser(user.getId());
boolean save = recordTemplateService.updateById(recordTemplate);
return R.ok(save);
}
......@@ -86,4 +94,18 @@ public class RecordTemplateController {
public R auth(@RequestBody RecordTemplateVO.TemplatePermissionVO vo) {
return R.ok(recordTemplatePermissionService.auth(vo));
}
@PostMapping("/authList")
public R authList(@RequestBody RecordTemplateVO.TemplateAuthVO vo) {
return R.ok(recordTemplatePermissionService.authList(vo));
}
/**
* 获取模板授权的人员
* @return
*/
@PostMapping("/selectAuthorizedUsers")
public R selectAuthorizedUsers() {
return R.ok(recordTemplateService.selectAuthorizedUsers());
}
}
// vo/LoginVO.java
package com.cmeeting.dto;
import com.cmeeting.pojo.MeetingRecordTemplate;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
......@@ -41,4 +42,24 @@ public class UserDTO {
", email='" + email + '\'' +
'}';
}
/**
* 已授权模版的人员
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class TemplateAuthorizedUserDTO {
/**
* 模板
*/
private MeetingRecordTemplate recordTemplate;
/**
* 企业微信userid
*/
private List<String> userIdList;
}
}
\ No newline at end of file
......@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cmeeting.dto.UserDTO;
import com.cmeeting.mapper.primary.UserIdMapper;
import com.cmeeting.pojo.MeetingInfo;
import com.cmeeting.service.FileProcessProducer;
import com.cmeeting.service.MeetingInfoService;
import com.cmeeting.service.TencentMeetingService;
import com.cmeeting.service.WeComService;
import com.cmeeting.service.*;
import com.cmeeting.vo.TencentMeetingVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -33,6 +30,8 @@ public class CmeetingJob {
private MeetingInfoService meetingInfoService;
@Autowired
private FileProcessProducer producer;
@Autowired
private MeetingRecordTemplateService meetingRecordTemplateService;
// @PostConstruct
// public void weComUserInit(){
......@@ -110,6 +109,7 @@ public class CmeetingJob {
log.info("结束时间: " + now.format(formatter) + " | Unix 时间戳: " + nowTimestamp);
log.info("----------------------------------");
//智能体授权人员
List<UserDTO> accessUserIds = tencentMeetingService.getAccessUserIds();
if (CollectionUtils.isEmpty(accessUserIds)) {
log.info("无生成纪要权限的人员");
......@@ -124,6 +124,9 @@ public class CmeetingJob {
return;
}
//获取模板授权的人员
// List<UserDTO.TemplateAuthorizedUserDTO> authorizedUsers = meetingRecordTemplateService.selectAuthorizedUsers();
// 提交处理任务
producer.submitBatchTasks(meetingFiles,Boolean.FALSE);
}
......@@ -132,8 +135,8 @@ public class CmeetingJob {
/**
* 定时扫描早于一小时之前的,所有未重试过的会议,重新生成纪要
*/
// @Scheduled(fixedRate = 30 * 60 * 1000,initialDelay = 10 * 60 * 1000)
@Scheduled(fixedRate = 30 * 60 * 1000)
@Scheduled(fixedRate = 30 * 60 * 1000,initialDelay = 10 * 60 * 1000)
// @Scheduled(fixedRate = 30 * 60 * 1000)
public void meetingMinutesRetry() {
try {
log.info("-------生成纪要重试定时任务开始-------");
......
......@@ -248,6 +248,10 @@ public class FileProcessTask {
}finally {
FileUtil.del(groupOfficeMinutesPath);
}
// meetingRecordTemplateMapper.getAuthorizedSystemTemplate();
EmailPush emailPushBuilder = EmailPush.builder().toEmail(meetingInfo.getEmail()).meetingId(meetingId).attachments(attachments).subject(meetingInfo.getSubject()).build();
emailPush(emailPushBuilder);
isSuccess = true;
......
......@@ -36,8 +36,4 @@ public interface CommonMapper extends BaseMapper<User> {
@SqlParser(filter = true)
ApplicationVo getApplicationNoTenantId(@Param("applicationId")String applicationId);
List<String> getSubDeptId(@Param(value = "deptId")String deptId);
List<String> getUsersByDept(@Param(value = "deptIds") List<String> deptIds);
}
......@@ -4,8 +4,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cmeeting.pojo.MeetingRecordTemplate;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface MeetingRecordTemplateMapper extends BaseMapper<MeetingRecordTemplate> {
List<MeetingRecordTemplate> getAuthorizedSystemTemplate();
}
\ No newline at end of file
......@@ -14,9 +14,9 @@ public interface SysUserSysMapper extends BaseMapper<SysUserSync> {
String getParentDeptId(String deptId, String tenantId);
List<String> getSubDeptId(@Param(value = "deptId")String deptId,@Param(value = "tenantId") String tenantId);
List<UserDTO> getUserEmail(@Param(value = "tenantId")String tenantId);
List<String> getUsersByDept(@Param(value = "deptIds") List<String> deptIds,@Param(value = "tenantId") String tenantId);
List<String> getSubDeptId(@Param(value = "deptId")String deptId);
List<UserDTO> getUserEmail(@Param(value = "tenantId")String tenantId);
List<String> getUsersByDept(@Param(value = "deptIds") List<String> deptIds);
}
......@@ -2,10 +2,13 @@ package com.cmeeting.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cmeeting.dto.UserDTO;
import com.cmeeting.pojo.MeetingRecordTemplate;
import com.cmeeting.vo.RecordTemplateVO;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
public interface MeetingRecordTemplateService extends IService<MeetingRecordTemplate> {
IPage<MeetingRecordTemplate> getPage(RecordTemplateVO vo);
IPage<MeetingRecordTemplate> getPersonalPage(RecordTemplateVO vo);
......@@ -17,4 +20,10 @@ public interface MeetingRecordTemplateService extends IService<MeetingRecordTemp
* @return
*/
String templateUpload(MultipartFile file,Integer id);
/**
* 获取模板授权的人员
* @return
*/
List<UserDTO.TemplateAuthorizedUserDTO> selectAuthorizedUsers();
}
......@@ -4,6 +4,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.cmeeting.pojo.RecordTemplatePermission;
import com.cmeeting.vo.RecordTemplateVO;
import java.util.List;
public interface RecordTemplatePermissionService extends IService<RecordTemplatePermission> {
boolean auth(RecordTemplateVO.TemplatePermissionVO vo);
List<RecordTemplatePermission> authList(RecordTemplateVO.TemplateAuthVO vo);
}
......@@ -7,27 +7,39 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmeeting.dto.UserDTO;
import com.cmeeting.mapper.primary.CommonMapper;
import com.cmeeting.mapper.primary.MeetingRecordTemplateMapper;
import com.cmeeting.mapper.primary.RecordTemplatePermissionMapper;
import com.cmeeting.mapper.secondary.SysUserSysMapper;
import com.cmeeting.pojo.MeetingRecordTemplate;
import com.cmeeting.pojo.RecordTemplatePermission;
import com.cmeeting.service.MeetingRecordTemplateService;
import com.cmeeting.util.MinioUtils;
import com.cmeeting.vo.RecordTemplateVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordTemplateMapper, MeetingRecordTemplate> implements MeetingRecordTemplateService {
@Resource
private MeetingRecordTemplateMapper mapper;
@Autowired
private MinioUtils minioUtils;
@Resource
private RecordTemplatePermissionMapper permissionMapper;
@Resource
private SysUserSysMapper sysUserSysMapper;
@Override
public IPage<MeetingRecordTemplate> getPage(RecordTemplateVO vo) {
......@@ -36,7 +48,7 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT
queryWrapper.eq(vo.getType() != null,MeetingRecordTemplate::getType,vo.getType());
queryWrapper.like(vo.getName() != null,MeetingRecordTemplate::getName,vo.getName());
queryWrapper.like(vo.getMeetingType() != null,MeetingRecordTemplate::getMeetingType,vo.getMeetingType());
IPage<MeetingRecordTemplate> resultPage = mapper.selectPage(new Page<>(vo.getCurrent(), vo.getSize()), queryWrapper);
IPage<MeetingRecordTemplate> resultPage = baseMapper.selectPage(new Page<>(vo.getCurrent(), vo.getSize()), queryWrapper);
return resultPage;
}
......@@ -47,7 +59,7 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT
queryWrapper.eq(vo.getType() != null,MeetingRecordTemplate::getType,vo.getType());
queryWrapper.like(vo.getName() != null,MeetingRecordTemplate::getName,vo.getName());
queryWrapper.like(vo.getMeetingType() != null,MeetingRecordTemplate::getMeetingType,vo.getMeetingType());
IPage<MeetingRecordTemplate> resultPage = mapper.selectPage(new Page<>(vo.getCurrent(), vo.getSize()), queryWrapper);
IPage<MeetingRecordTemplate> resultPage = baseMapper.selectPage(new Page<>(vo.getCurrent(), vo.getSize()), queryWrapper);
return resultPage;
}
......@@ -80,4 +92,66 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT
updateById(detail);
return originalFilePath;
}
/**
* 获取模板授权的人员
* @return
*/
@Override
public List<UserDTO.TemplateAuthorizedUserDTO> selectAuthorizedUsers() {
List<UserDTO.TemplateAuthorizedUserDTO> result = new ArrayList<>();
//查出所有系统模板(暂定)
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) {
resultItem.setRecordTemplate(template);
//该系统模板授权部门
List<RecordTemplatePermission> deptPermissions = permissions.stream().filter(item -> "1".equals(item.getRelType()) && template.getId().equals(item.getTemplateId())).collect(Collectors.toList());
//该系统模板授权人员
List<RecordTemplatePermission> userPermissions = permissions.stream().filter(item -> "2".equals(item.getRelType()) && template.getId().equals(item.getTemplateId())).collect(Collectors.toList());
List<String> authorizedUsers = new ArrayList<>();
if(!CollectionUtils.isEmpty(userPermissions)){
for (RecordTemplatePermission userPermission : userPermissions) {
authorizedUsers.add(userPermission.getRelId());
}
}
if(!CollectionUtils.isEmpty(deptPermissions)){
List<String> deptPath = new ArrayList<>();
for (RecordTemplatePermission deptPermission : deptPermissions) {
String deptId = deptPermission.getRelId();
getDeptPath(deptPath,deptId);
}
List<String> usersByDept = sysUserSysMapper.getUsersByDept(deptPath);
if(!CollectionUtils.isEmpty(usersByDept))
authorizedUsers.addAll(usersByDept);
}
resultItem.setUserIdList(authorizedUsers);
result.add(resultItem);
}
return result;
}
/**
* 获取部门的路径
* @param deptPath
* @param deptId
*/
private void getDeptPath(List<String> deptPath, String deptId) {
if(!deptPath.contains(deptId)) deptPath.add(deptId);
List<String> subDeptIds = sysUserSysMapper.getSubDeptId(deptId);
if(CollectionUtils.isEmpty(subDeptIds)) return;
for (String subDeptId : subDeptIds) {
//部门id去重
if(!deptPath.contains(subDeptId)){
deptPath.add(subDeptId);
getDeptPath(deptPath,subDeptId);
}
}
}
}
\ No newline at end of file
package com.cmeeting.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmeeting.mapper.primary.CommonMapper;
import com.cmeeting.mapper.primary.RecordTemplatePermissionMapper;
import com.cmeeting.pojo.CoreModulePermissions;
import com.cmeeting.pojo.MeetingRecordTemplate;
import com.cmeeting.pojo.RecordTemplatePermission;
import com.cmeeting.service.MeetingRecordTemplateService;
......@@ -23,8 +22,6 @@ public class RecordTemplatePermissionServiceImpl extends ServiceImpl<RecordTempl
@Resource
private MeetingRecordTemplateService recordTemplateService;
@Resource
private CommonMapper commonMapper;
/**
* 授权
......@@ -75,22 +72,15 @@ public class RecordTemplatePermissionServiceImpl extends ServiceImpl<RecordTempl
}
/**
* 获取部门的路径
* @param deptPath
* @param deptId
* 查询某个模板已经授权的人员或部门
* @param vo
* @return
*/
private void getDeptPath(List<String> deptPath, String deptId) {
if(!deptPath.contains(deptId)) deptPath.add(deptId);
List<String> subDeptIds = commonMapper.getSubDeptId(deptId);
if(CollectionUtils.isEmpty(subDeptIds)) return;
for (String subDeptId : subDeptIds) {
//部门id去重
if(!deptPath.contains(subDeptId)){
deptPath.add(subDeptId);
getDeptPath(deptPath,subDeptId);
}
}
@Override
public List<RecordTemplatePermission> authList(RecordTemplateVO.TemplateAuthVO vo) {
List<RecordTemplatePermission> permissions = baseMapper.selectList(
new LambdaQueryWrapper<RecordTemplatePermission>()
.eq(RecordTemplatePermission::getTemplateId,vo.getTemplateId()));
return permissions;
}
}
\ No newline at end of file
......@@ -531,7 +531,7 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,T
getDeptPath(deptPath,deptId,tenantId);
}
//已被授权部门下的userid
List<String> accessUserIds = !CollectionUtils.isEmpty(deptPath) ? sysUserSyncMapper.getUsersByDept(deptPath, permissionTenantId) : new ArrayList<>();
List<String> accessUserIds = !CollectionUtils.isEmpty(deptPath) ? sysUserSyncMapper.getUsersByDept(deptPath) : new ArrayList<>();
//已被直接授权的人员追加进去
accessUserIds.addAll(auths.stream().filter(item -> item.getType().equals(1)).map(CoreModulePermissions::getRelId).collect(Collectors.toList()));
if(!CollectionUtils.isEmpty(accessUserIds)){
......@@ -573,7 +573,7 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,T
*/
private void getDeptPath(List<String> deptPath, String deptId, String tenantId) {
if(!deptPath.contains(deptId)) deptPath.add(deptId);
List<String> subDeptIds = sysUserSyncMapper.getSubDeptId(deptId, tenantId);
List<String> subDeptIds = sysUserSyncMapper.getSubDeptId(deptId);
if(CollectionUtils.isEmpty(subDeptIds)) return;
for (String subDeptId : subDeptIds) {
......
......@@ -69,4 +69,23 @@ public class RecordTemplateVO {
*/
private String relId;
}
@Data
public static class TemplateAuthVO{
/**
* 模板id
*/
private Integer templateId;
/**
* 当前页
*/
private Integer current;
/**
* 每页最大数据行
*/
private Integer size;
}
}
\ No newline at end of file
......@@ -55,17 +55,4 @@
assistant_info t1
where t1.is_del = 0
</select>
<select id="getSubDeptId" resultType="java.lang.String">
SELECT dept_id
FROM sys_user_sync_category
WHERE parent_id = #{deptId}
</select>
<select id="getUsersByDept" resultType="java.lang.String">
select t1.user_id as wId
from sys_user_sync t1
where t1.dept_id in
<foreach collection="deptIds" item="deptId" separator="," open="(" close=")">
#{deptId}
</foreach>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmeeting.mapper.primary.MeetingRecordTemplateMapper">
<select id="getAuthorizedSystemTemplate" resultType="com.cmeeting.pojo.MeetingRecordTemplate">
</select>
</mapper>
......@@ -10,7 +10,7 @@
<foreach collection="permissions" item="permission" separator=",">
(
#{permission.templateId},
#{permission.template_type},
#{permission.templateType},
#{permission.relType},
#{permission.relId},
#{permission.createTime}
......
......@@ -20,7 +20,6 @@
SELECT dept_id
FROM sys_user_sync_category
WHERE parent_id = #{deptId}
AND tenant_id = #{tenantId}
</select>
<select id="getUsersByDept" resultType="java.lang.String">
select t1.user_id as wId
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论