提交 c38ab7e6 作者: 洪东保

cmeeting独立部署:

 1. AD用户定时从中集API同步
 2. 所有表放在新库cmeeting中
 3. 删除所有tenantId相关参数
父级 7db8e145
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
...@@ -39,18 +39,10 @@ public class SysUserSync implements Serializable { ...@@ -39,18 +39,10 @@ public class SysUserSync implements Serializable {
*/ */
private String name; private String name;
/** /**
* 姓
*/
private String lastName;
/**
* 部门id(用户同步的时候没有给这个值为默认分类) * 部门id(用户同步的时候没有给这个值为默认分类)
*/ */
private String deptId; private String deptId;
/** /**
* 名
*/
private String firstName;
/**
* 别名 * 别名
*/ */
private String nickName; private String nickName;
...@@ -67,127 +59,9 @@ public class SysUserSync implements Serializable { ...@@ -67,127 +59,9 @@ public class SysUserSync implements Serializable {
*/ */
private String email; private String email;
/** /**
* 公司邮箱
*/
private String companyEmail;
/**
* 部门 * 部门
*/ */
private String department; private String department;
/**
* 分机号
*/
private String extensionNumber;
/**
* 工位
*/
private String workStation;
/**
* 人员类型
*/
private String type;
/**
* 国家
*/
private String country;
/**
* 城市
*/
private String city;
/**
* 地区
*/
private String area;
/**
* 直属上级
*/
private String directlySubordinateSuperior;
/**
* 虚线上级
*/
private String dottedLineSuperior;
/**
* 职务
*/
private String position;
/**
* 职级
*/
private String rank;
/**
* 人员状态
*/
private String state;
/**
* 入职日期
*/
private String entryDate;
/**
* 入职类型
*/
private String entryType;
/**
* 试用期
*/
private String probationPeriod;
/**
* 转正日期
*/
private String probationCompletionDate;
/**
* 转正状态
*/
private String probationCompletionType;
/**
* 出生日期
*/
private String birthDate;
/**
* 籍贯
*/
private String nativePlace;
/**
* 民族
*/
private String nationality;
/**
* 婚姻状况
*/
private String maritalStatus;
/**
* 政治面貌
*/
private String politicalOutlook;
/**
* 首次参加工作日期
*/
private String firstWorkDate;
/**
* 用户信息
*/
private Object allFieldParam;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
/**
* 租户id
*/
private String tenantId;
@TableField(exist = false)
private String path;
@TableField(exist = false)
private String deptName;
} }
package com.cmeeting.ad.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cmeeting.ad.entity.SysTenant;
/**
* <p>
* 租户表 服务类
* </p>
*
* @author robot
* @since 2019-08-10
*/
public interface ISysTenantService extends IService<SysTenant> {
}
// service/UserService.java
package com.cmeeting.ad.service; package com.cmeeting.ad.service;
import com.cmeeting.ad.entity.RoleTree;
import com.cmeeting.ad.entity.SysMenu;
import com.cmeeting.ad.vo.ApplicationUserVO; import com.cmeeting.ad.vo.ApplicationUserVO;
import com.cmeeting.ad.vo.UserVo; import com.cmeeting.ad.vo.UserVo;
import com.cmeeting.util.R; import com.cmeeting.util.R;
import java.util.List;
public interface UserService { public interface UserService {
R login(String agentId, String data, String ip); R login(String agentId, String data, String ip);
String auth(String userId, String nick, String role); String auth(String userId, String nick, String role);
Object list(String search, Integer type, Integer userType, String categoryId, Integer authType);
Object tokenAuth(ApplicationUserVO.LoginDecrypt vo); Object tokenAuth(ApplicationUserVO.LoginDecrypt vo);
Object emailAuth(UserVo.Auth vo); Object emailAuth(UserVo.Auth vo);
......
package com.cmeeting.ad.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmeeting.ad.entity.SysTenant;
import com.cmeeting.mapper.tertiary.SysTenantMapper;
import com.cmeeting.ad.service.ISysTenantService;
import org.springframework.stereotype.Service;
/**
* <p>
* 租户表 服务实现类
* </p>
*
* @author robot
* @since 2019-08-10
*/
@Service
public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant> implements ISysTenantService {
}
...@@ -8,13 +8,12 @@ import com.cmeeting.ad.util.SecurityUtil; ...@@ -8,13 +8,12 @@ import com.cmeeting.ad.util.SecurityUtil;
import com.cmeeting.ad.vo.UserVo; import com.cmeeting.ad.vo.UserVo;
import com.cmeeting.constant.RecordTemplateConstant; import com.cmeeting.constant.RecordTemplateConstant;
import com.cmeeting.exception.RobotBaseException; import com.cmeeting.exception.RobotBaseException;
import com.cmeeting.mapper.tertiary.AuthMapper; import com.cmeeting.mapper.primary.AuthMapper;
import com.cmeeting.ad.service.ILdapService; import com.cmeeting.ad.service.ILdapService;
import com.cmeeting.ad.service.ISysTenantService;
import com.cmeeting.ad.service.UserService; import com.cmeeting.ad.service.UserService;
import com.cmeeting.ad.util.JwtUtil; import com.cmeeting.ad.util.JwtUtil;
import com.cmeeting.constant.UserAdminRouteConstant; import com.cmeeting.constant.UserAdminRouteConstant;
import com.cmeeting.mapper.secondary.SysUserSysMapper; import com.cmeeting.mapper.primary.SysUserSyncMapper;
import com.cmeeting.pojo.CoreModulePermissions; import com.cmeeting.pojo.CoreModulePermissions;
import com.cmeeting.util.*; import com.cmeeting.util.*;
import com.cmeeting.ad.vo.ApplicationUserVO; import com.cmeeting.ad.vo.ApplicationUserVO;
...@@ -58,17 +57,13 @@ public class UserServiceImpl implements UserService { ...@@ -58,17 +57,13 @@ public class UserServiceImpl implements UserService {
@Resource @Resource
private RedisUtils redisUtils; private RedisUtils redisUtils;
@Resource @Resource
private ISysTenantService iTenantService;
@Resource
private JwtUtil jwtUtil; private JwtUtil jwtUtil;
@Resource @Resource
private SysUserSysMapper sysUserSysMapper; private SysUserSyncMapper sysUserSysMapper;
@Resource @Resource
private AuthMapper authMapper; private AuthMapper authMapper;
@Resource @Resource
private SysUserSysMapper sysUserSyncMapper; private SysUserSyncMapper sysUserSyncMapper;
@Value("${isDev}")
private Boolean isDev;
@Override @Override
public R login(String agentId, String data, String ip) { public R login(String agentId, String data, String ip) {
...@@ -81,11 +76,9 @@ public class UserServiceImpl implements UserService { ...@@ -81,11 +76,9 @@ public class UserServiceImpl implements UserService {
@Override @Override
public String auth(String userId, String nick, String role) { public String auth(String userId, String nick, String role) {
HashMap<String, String> stringStringHashMap = new HashMap<>(); HashMap<String, String> stringStringHashMap = new HashMap<>();
SysTenant sysTenant = iTenantService.getById(permissionTenantId);
stringStringHashMap.put("userId", userId); stringStringHashMap.put("userId", userId);
stringStringHashMap.put("tenantId", permissionTenantId); stringStringHashMap.put("tenantId", permissionTenantId);
stringStringHashMap.put("role", role); stringStringHashMap.put("role", role);
stringStringHashMap.put("language", sysTenant.getLanguage());
stringStringHashMap.put("nick", nick); stringStringHashMap.put("nick", nick);
UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(userId, permissionTenantId); UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(userId, permissionTenantId);
usernamePasswordAuthenticationToken.setDetails(stringStringHashMap); usernamePasswordAuthenticationToken.setDetails(stringStringHashMap);
...@@ -98,25 +91,6 @@ public class UserServiceImpl implements UserService { ...@@ -98,25 +91,6 @@ public class UserServiceImpl implements UserService {
return token; return token;
} }
@Override
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.httpPost(url, body, UserAdminTokenUtil.getUserAdminToken());
return object;
}
@Override @Override
public Object tokenAuth(ApplicationUserVO.LoginDecrypt vo) { public Object tokenAuth(ApplicationUserVO.LoginDecrypt vo) {
...@@ -140,11 +114,10 @@ public class UserServiceImpl implements UserService { ...@@ -140,11 +114,10 @@ public class UserServiceImpl implements UserService {
List<String> deptPath = new ArrayList<>(); List<String> deptPath = new ArrayList<>();
for (CoreModulePermissions authDept : authDepts) { for (CoreModulePermissions authDept : authDepts) {
String deptId = authDept.getRelId(); String deptId = authDept.getRelId();
String tenantId = authDept.getTenantId(); getDeptPath(deptPath, deptId);
getDeptPath(deptPath, deptId, tenantId);
} }
//已被授权部门下的userid //已被授权部门下的userid
List<String> accessUserIds = !CollectionUtils.isEmpty(deptPath) ? sysUserSyncMapper.getUsersByDept(deptPath, permissionTenantId) : new ArrayList<>(); List<String> accessUserIds = !CollectionUtils.isEmpty(deptPath) ? sysUserSyncMapper.getUsersByDept(deptPath) : new ArrayList<>();
if (!accessUserIds.contains(userId)) { if (!accessUserIds.contains(userId)) {
throw new RobotBaseException("您暂无权限"); throw new RobotBaseException("您暂无权限");
} }
...@@ -167,10 +140,8 @@ public class UserServiceImpl implements UserService { ...@@ -167,10 +140,8 @@ public class UserServiceImpl implements UserService {
// } // }
long expireTimeStamp = Duration.between(now, expireDate).getSeconds(); long expireTimeStamp = Duration.between(now, expireDate).getSeconds();
HashMap<String, String> stringStringHashMap = new HashMap<>(); HashMap<String, String> stringStringHashMap = new HashMap<>();
SysTenant sysTenant = iTenantService.getById(permissionTenantId);
stringStringHashMap.put("userId", userId); stringStringHashMap.put("userId", userId);
stringStringHashMap.put("tenantId", permissionTenantId); stringStringHashMap.put("tenantId", permissionTenantId);
stringStringHashMap.put("language", sysTenant.getLanguage());
stringStringHashMap.put("nick", nick); stringStringHashMap.put("nick", nick);
UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(userId, permissionTenantId); UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(userId, permissionTenantId);
usernamePasswordAuthenticationToken.setDetails(stringStringHashMap); usernamePasswordAuthenticationToken.setDetails(stringStringHashMap);
...@@ -187,9 +158,7 @@ public class UserServiceImpl implements UserService { ...@@ -187,9 +158,7 @@ public class UserServiceImpl implements UserService {
String username = login.getUsername().trim(); String username = login.getUsername().trim();
boolean auth = iLdapService.authenticate(username, login.getPassword().trim()); boolean auth = iLdapService.authenticate(username, login.getPassword().trim());
if (auth) { if (auth) {
// if(true){
SysUserSync sysUserSync = sysUserSysMapper.selectOne(new LambdaQueryWrapper<SysUserSync>() SysUserSync sysUserSync = sysUserSysMapper.selectOne(new LambdaQueryWrapper<SysUserSync>()
.eq(SysUserSync::getTenantId, permissionTenantId)
.eq(SysUserSync::getUserId, username)); .eq(SysUserSync::getUserId, username));
if(StringUtils.isEmpty(adminWhiteUsers) || !Arrays.asList(adminWhiteUsers.split(",")).contains(username)){ if(StringUtils.isEmpty(adminWhiteUsers) || !Arrays.asList(adminWhiteUsers.split(",")).contains(username)){
throw new RobotBaseException("尊敬的用户 ["+sysUserSync.getName()+"],您的账户"+username+"未被授权访问此系统,请联系系统管理员。"); throw new RobotBaseException("尊敬的用户 ["+sysUserSync.getName()+"],您的账户"+username+"未被授权访问此系统,请联系系统管理员。");
...@@ -205,13 +174,12 @@ public class UserServiceImpl implements UserService { ...@@ -205,13 +174,12 @@ public class UserServiceImpl implements UserService {
* *
* @param deptPath * @param deptPath
* @param deptId * @param deptId
* @param tenantId
*/ */
private void getDeptPath(List<String> deptPath, String deptId, String tenantId) { private void getDeptPath(List<String> deptPath, String deptId) {
if (!deptPath.contains(deptId)) { if (!deptPath.contains(deptId)) {
deptPath.add(deptId); deptPath.add(deptId);
} }
List<String> subDeptIds = sysUserSyncMapper.getSubDeptId(deptId, tenantId); List<String> subDeptIds = sysUserSyncMapper.getSubDeptId(deptId);
if (CollectionUtils.isEmpty(subDeptIds)) { if (CollectionUtils.isEmpty(subDeptIds)) {
return; return;
} }
...@@ -220,7 +188,7 @@ public class UserServiceImpl implements UserService { ...@@ -220,7 +188,7 @@ public class UserServiceImpl implements UserService {
//部门id去重 //部门id去重
if (!deptPath.contains(subDeptId)) { if (!deptPath.contains(subDeptId)) {
deptPath.add(subDeptId); deptPath.add(subDeptId);
getDeptPath(deptPath, subDeptId, tenantId); getDeptPath(deptPath, subDeptId);
} }
} }
......
package com.cmeeting.config; //package com.cmeeting.config;
//
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; //import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory; //import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate; //import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan; //import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier; //import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties; //import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder; //import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; //import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; //import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
//
import javax.sql.DataSource; //import javax.sql.DataSource;
//
// 从数据源配置 //// 从数据源配置
@Configuration //@Configuration
@MapperScan(basePackages = "com.cmeeting.mapper.secondary", sqlSessionFactoryRef = "slaveSqlSessionFactory") //@MapperScan(basePackages = "com.cmeeting.mapper.secondary", sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class SlaveDataSourceConfig { //public class SlaveDataSourceConfig {
//
@Bean(name = "slaveDataSource") // @Bean(name = "slaveDataSource")
@ConfigurationProperties(prefix = "spring.datasource.slave") // @ConfigurationProperties(prefix = "spring.datasource.slave")
public DataSource slaveDataSource() { // public DataSource slaveDataSource() {
return DataSourceBuilder.create().build(); // return DataSourceBuilder.create().build();
} // }
//
@Bean(name = "slaveSqlSessionFactory") // @Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception { // public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean(); // MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource); // bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/secondary/*.xml")); // bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/secondary/*.xml"));
return bean.getObject(); // return bean.getObject();
} // }
//
@Bean(name = "slaveSqlSessionTemplate") // @Bean(name = "slaveSqlSessionTemplate")
public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) { // public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory); // return new SqlSessionTemplate(sqlSessionFactory);
} // }
} //}
package com.cmeeting.config; //package com.cmeeting.config;
//
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; //import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory; //import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate; //import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan; //import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier; //import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties; //import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder; //import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; //import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; //import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
//
import javax.sql.DataSource; //import javax.sql.DataSource;
//
// 从数据源配置 //// 从数据源配置
@Configuration //@Configuration
@MapperScan(basePackages = "com.cmeeting.mapper.tertiary", sqlSessionFactoryRef = "tertiarySqlSessionFactory") //@MapperScan(basePackages = "com.cmeeting.mapper.tertiary", sqlSessionFactoryRef = "tertiarySqlSessionFactory")
public class TertiaryDataSourceConfig { //public class TertiaryDataSourceConfig {
//
@Bean(name = "tertiaryDataSource") // @Bean(name = "tertiaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.tertiary") // @ConfigurationProperties(prefix = "spring.datasource.tertiary")
public DataSource tertiaryDataSource() { // public DataSource tertiaryDataSource() {
return DataSourceBuilder.create().build(); // return DataSourceBuilder.create().build();
} // }
//
@Bean(name = "tertiarySqlSessionFactory") // @Bean(name = "tertiarySqlSessionFactory")
public SqlSessionFactory tertiarySqlSessionFactory(@Qualifier("tertiaryDataSource") DataSource dataSource) throws Exception { // public SqlSessionFactory tertiarySqlSessionFactory(@Qualifier("tertiaryDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean(); // MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource); // bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/tertiary/*.xml")); // bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/tertiary/*.xml"));
return bean.getObject(); // return bean.getObject();
} // }
//
@Bean(name = "tertiarySqlSessionTemplate") // @Bean(name = "tertiarySqlSessionTemplate")
public SqlSessionTemplate tertiarySqlSessionTemplate(@Qualifier("tertiarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) { // public SqlSessionTemplate tertiarySqlSessionTemplate(@Qualifier("tertiarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory); // return new SqlSessionTemplate(sqlSessionFactory);
} // }
} //}
package com.cmeeting.constant;
/**
* CIMC api 常量类
*/
public interface CimcConstants {
//API地址(测试)
//1. 获取组织标准信息
String GET_TEST_ORGANIZATION = "https://apipoc1.cimc.com/env-101/por-101/hrapi/hrms/cimc_org_unit_wbs_standard.service?p_user=USER&p_password=PASSWORD&apikey=API_KEY&p_page_num=PAGE_NUM";
//获取岗位标准信息
String GET_TEST_POSITION = "https://apipoc1.cimc.com/env-101/por-101/hrapi/hrms/cimc_org_position_wbs_standard.service?p_user=USER&p_password=PASSWORD&apikey=API_KEY&p_page_num=PAGE_NUM";
//获取员工标准信息
String GET_TEST_EMPLOYEE = "https://apipoc1.cimc.com/env-101/por-101/hrapi/hrms/cimc_lbr_employee_wbs_standard.service?p_user=USER&p_password=PASSWORD&apikey=API_KEY&p_include_dismission=1&p_page_num=PAGE_NUM";
//获取IWORK获取访问token
String GET_TEST_TOKEN = "https://apipoc1.cimc.com/env-101/por-101/hrapi/iWorkapi/v1/token?apikey=API_KEY";
String TEST_IWORK_LOGIN = "https://apipoc1.cimc.com/env-101/por-101/hrapi/iWorkapi/ticket/TICKET?access_token=TOKEN&apikey=API_KEY";
//2. API地址(集团本地节点-生产)
String GET_ORGANIZATION = "https://cchqapi.cimc.com/por-11/hrapi/hrms/cimc_org_unit_wbs_standard.service?p_user=USER&p_password=PASSWORD&apikey=API_KEY&p_page_num=PAGE_NUM";
String GET_POSITION = "https://cchqapi.cimc.com/por-11/hrapi/hrms/cimc_org_position_wbs_standard.service?p_user=USER&p_password=PASSWORD&apikey=API_KEY&p_page_num=PAGE_NUM";
String GET_EMPLOYEE = "https://cchqapi.cimc.com/por-11/hrapi/hrms/cimc_lbr_employee_wbs_standard.service?p_user=USER&p_password=PASSWORD&apikey=API_KEY&p_page_num=PAGE_NUM";
String GET_TOKEN = "https://cchqapi.cimc.com/por-11/hrapi/iWorkapi/v1/token?apikey=API_KEY";
String IWORK_LOGIN = "https://cchqapi.cimc.com/por-11/hrapi/iWorkapi/ticket/TICKET?access_token=TOKEN&apikey=API_KEY";
//3. API地址(AWS节点-生产)
String GET_AWS_ORGANIZATION = "https://awsapi.cimc.cn/env-101/por-10/hrapi/hrms/cimc_org_unit_wbs_standard.service?p_user=USER&p_password=PASSWORD&apikey=API_KEY&p_page_num=PAGE_NUM";
String GET_AWS_POSITION = "https://awsapi.cimc.cn/env-101/por-10/hrapi/hrms/cimc_org_position_wbs_standard.service?p_user=USER&p_password=PASSWORD&apikey=API_KEY&p_page_num=PAGE_NUM";
String GET_AWS_EMPLOYEE = "https://awsapi.cimc.cn/env-101/por-10/hrapi/hrms/cimc_lbr_employee_wbs_standard.service?p_user=USER&p_password=PASSWORD&apikey=API_KEY&p_page_num=PAGE_NUM";
String GET_AWS_TOKEN = "https://awsapi.cimc.cn/env-101/por-10/hrapi/iWorkapi/v1/token?apikey=API_KEY";
String AWS_IWORK_LOGIN = "https://awsapi.cimc.cn/env-101/por-10/hrapi/iWorkapi/ticket/TICKET?access_token=TOKEN&apikey=API_KEY";
//门户登录
String POST_TEST_LOGIN = "https://apipoc1.cimc.com/env-101/por-101/cimcoatest/test/APIUserService"; //参数 apikey systemid token
String POST_LOGIN = "https://awsapi.cimc.cn/env-101/por-10/cimcoaprd/oa_prd/APIUserService";
String BPM_POST_FORM_TEST = "https://apipoc1.cimc.com/env-101/por-101/ekp/bpm/addReview";
String BPM_POST_FORM_PROD = "https://awsapi.cimc.cn/env-101/por-10/ekp/bpm/addReview";
String ALTER_USER = "USER";
String ALTER_PASSWORD = "PASSWORD";
String ALTER_API_KEY = "API_KEY";
String ALTER_DISMISSION = "DISMISSION";
String ALTER_PAGE_NUM = "PAGE_NUM";
String ALTER_TOKEN = "TOKEN";
String ALTER_TICKET = "TICKET";
String EMPTY = "";
}
package com.cmeeting.controller;
import com.cmeeting.dto.CimcOrganization;
import com.cmeeting.util.CimcUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/cimc")
public class CimcController {
@Resource
private CimcUtil cimcUtil;
/**
* 测试服务器能否访问中集AD
*/
@GetMapping("/testSSL")
public void testSSL() {
cimcUtil.testSSLTimeout(1, CimcOrganization.class);
}
}
...@@ -28,7 +28,7 @@ public class SysUseSyncController { ...@@ -28,7 +28,7 @@ public class SysUseSyncController {
} }
@GetMapping("/list") @GetMapping("/list")
public R list(@RequestParam String categoryId, @RequestParam Integer current, @RequestParam Integer size, String search) { public R list(@RequestParam String categoryId, @RequestParam Integer current, @RequestParam Integer size, String search) {
return R.ok(iSysUserSyncService.selectPage(current, size, categoryId, tenantId, search)); return R.ok(iSysUserSyncService.selectPage(current, size, categoryId, search));
} }
} }
package com.cmeeting.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* (CimcEmployee)实体类
*
* @author makejava
* @since 2023-11-11 18:57:51
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CimcEmployee implements Serializable {
private static final long serialVersionUID = 622198806836696239L;
private String id;
/**
* 员工id
*/
private String employeeId;
/**
* 办公电话
*/
private String officePhone;
/**
* 本地住址
*/
private String cityAddress;
/**
* 出生日期
*/
private Date bornDate;
/**
* 第二外语
*/
private String firstForeignLanguage;
/**
* 第二外语水平
*/
private String firstForeignLevel;
/**
* 第一外语
*/
private String secondForeignLanguage;
/**
* 第一外语水平
*/
private String secondForeignLevel;
/**
* 电子邮件
*/
private String email;
/**
* 岗位名称
*/
private String positionName;
/**
* 岗位编码
*/
private String masterPositionId;
/**
* 岗位编制性质
*/
private String positionEmpType;
/**
* 工种
*/
private String positionType;
/**
* 公司工号
*/
private String companyCode;
/**
* 公司ID
*/
private String companyId;
/**
* 公司名称
*/
private String companyName;
/**
* 国籍
*/
private String nationality;
/**
* 户口类型
*/
private String homeTownTypeName;
/**
* 户口所在地
*/
private String homeTown;
/**
* 婚姻状况
*/
private String marriageStatus;
/**
* 籍贯
*/
private Object nativePlace;
/**
* 集团工号
*/
private String employeeCode;
/**
* 家庭地址
*/
private String homeAddress;
/**
* 家庭电话
*/
private String homePhone;
/**
* 驾照
*/
private String drivelicenseName;
/**
* 兼职岗位
*/
private String assignPosition;
/**
* 兼职岗位ID
*/
private String assignPositionId;
/**
* 紧急联系人
*/
private String fireConnectPerson;
/**
* 紧急联系人电话
*/
private String firePhone;
/**
* 进入集团日期
*/
private Date joinGroupDate;
/**
* 离职备注
*/
private Object dismissionMemo;
/**
* 离职操作日期
*/
private Date dismissonCreationDate;
/**
* 离职类型
*/
private String dismissionType;
/**
* 离职前部门
*/
private String dismissionUnitName;
/**
* 离职前岗位
*/
private String dismissionPositionName;
/**
* 离职前岗位编制性质
*/
private String dismissionEmployeeType;
/**
* 离职前工种
*/
private String dismissionPositionType;
/**
* 离职前职能
*/
private String dismissionJobFunction;
/**
* 离职前状态
*/
private Object dismissionBeforeStatus;
/**
* 离职去向
*/
private Object dismissionToPlace;
/**
* 离职日期
*/
private Date dismissionDate;
/**
* 离职原因
*/
private String dismissionReason;
/**
* 民族
*/
private String nativeplace;
/**
* 母语
*/
private String matherLanguage;
/**
* 迁本地户口日期
*/
private Date toCityDate;
/**
* 入党日期
*/
private Date joinPartyDate;
/**
* 入职日期
*/
private Date joinDate;
/**
* 身份证失效日期
*/
private Date certificateDateTo;
/**
* 实际转正日期
*/
private Date formulaDate;
/**
* 试用结束日期
*/
private Date trialBeginDate;
/**
* 试用开始日期
*/
private Date trialEndDate;
/**
* 首次工作日期
*/
private Date firstWorkDate;
/**
* 所属产业
*/
private String propertyName;
/**
* 性别
*/
private String sexName;
/**
* 姓名
*/
private String employeeName;
/**
* 最高学位
*/
private String degree;
/**
* 血型
*/
private String bloodType;
/**
* 一级部门
*/
private String branchUnitName;
/**
* 移动电话号码
*/
private String mobil;
/**
* 英文名
*/
private String eName;
/**
* 员工类型
*/
private String empType;
/**
* 员工状态
*/
private String curStatusName;
/**
* 政治面貌
*/
private String politicsStatus;
/**
* 证件编号
*/
private String certificateId;
/**
* 证件类型
*/
private String certificateType;
/**
* 职能
*/
private String jobFunction;
/**
* 组织编码
*/
private String unitId;
/**
* 组织名称
*/
private String unitName;
/**
* 最高学历
*/
private String graduate;
/**
* 学校
*/
private String collegeName;
/**
* 专业
*/
private String specialName;
/**
* 招聘来源id
*/
private String govRecruitSource;
/**
* 招聘来源名称
*/
private String recruitSource;
/**
* 创建者
*/
private String createdBy;
/**
* 创建日期
*/
private Date creationDate;
/**
* 最后更新者
*/
private String lastUpdatedBy;
/**
* 最后更新日期
*/
private Date lastUpdateDate;
}
package com.cmeeting.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 中集·组织·标准信息(CimcOrganization)实体类
*
* @author makejava
* @since 2023-11-11 17:06:35
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CimcOrganization implements Serializable {
private static final long serialVersionUID = -81161130857632176L;
private String id;
/**
* 组织id
*/
private String unitId;
/**
* 组织名称
*/
private String unitName;
/**
* 父组织id
*/
private String parentId;
/**
* 组织管理岗位名称
*/
private String managerPositionName;
/**
* 组织级别id
*/
private String levelId;
/**
* 组织级别名称
*/
private String levelName;
/**
* 组织描述
*/
private String unitDescription;
/**
* 公司id
*/
private String companyId;
/**
* 公司名称
*/
private String companyName;
/**
* 顺序号
*/
private String searchIndex;
/**
* 是否公司管理层
*/
private String isMgmtUnit;
/**
* 干部管理权责
*/
private String isOwnedUnit;
/**
* 创建者id
*/
private String createdBy;
/**
* 创建日期
*/
private Date creationDate;
/**
* 最后修改者
*/
private String lastUpdatedBy;
/**
* 最后修改日期
*/
private Date lastUpdateDate;
/**
* 组织管理岗位ID
*/
private String managerPosition;
}
package com.cmeeting.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 中集岗位标准信息(CimcPost)实体类
*
* @author makejava
* @since 2023-11-11 17:06:41
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CimcPost implements Serializable {
private static final long serialVersionUID = -26027491730988650L;
private String id;
/**
* 岗位id
*/
private String positionId;
/**
* 岗位名称
*/
private String positionName;
/**
* 上级岗位id
*/
private String responseToId;
/**
* 公司id
*/
private String companyId;
/**
* 公司名称
*/
private String companyName;
/**
* 组织id
*/
private String unitId;
/**
* 组织名称
*/
private String unitName;
/**
* 岗位描述
*/
private Object positionDescription;
/**
* 定编人数
*/
private String plannedHolderNum;
/**
* 在编人数
*/
private String currentHolderNum;
/**
* 岗位编制性质
*/
private String positionType;
/**
* 职族
*/
private String zhizuId;
/**
* 职类
*/
private String zhileiId;
/**
* 职层
*/
private String zhicengId;
/**
* 集团职能
*/
private String zhinengId;
/**
* 集团工种
*/
private String gongzhongId;
/**
* 板块职能
*/
private String bkZhinengId;
/**
* 板块工种
*/
private String bkGongzhongId;
/**
* 创建者id
*/
private String createdBy;
/**
* 创建日期
*/
private Date creationDate;
/**
* 最后修改者
*/
private String lastUpdatedBy;
/**
* 最后修改日期
*/
private Date lastUpdateDate;
}
package com.cmeeting.job; package com.cmeeting.job;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.azure.core.credential.AccessToken;
import com.azure.core.credential.TokenRequestContext;
import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
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.cmeeting.config.StatisticsEmailPushProperties; import com.cmeeting.config.StatisticsEmailPushProperties;
import com.cmeeting.constant.MeetingState;
import com.cmeeting.dto.UserDTO; import com.cmeeting.dto.UserDTO;
import com.cmeeting.email.EmailSender; import com.cmeeting.email.EmailSender;
import com.cmeeting.exception.RobotBaseException;
import com.cmeeting.mapper.primary.UserIdMapper; import com.cmeeting.mapper.primary.UserIdMapper;
import com.cmeeting.pojo.MeetingInfo; import com.cmeeting.pojo.MeetingInfo;
import com.cmeeting.pojo.UserId; import com.cmeeting.pojo.UserId;
import com.cmeeting.pojo.WeComUser; import com.cmeeting.pojo.WeComUser;
import com.cmeeting.service.*; import com.cmeeting.service.*;
import com.cmeeting.service.impl.CimcService;
import com.cmeeting.util.RedisUtils; import com.cmeeting.util.RedisUtils;
import com.cmeeting.vo.EmailPush;
import com.cmeeting.vo.StatisticsEmailPush; import com.cmeeting.vo.StatisticsEmailPush;
import com.cmeeting.vo.TencentMeetingVO; import com.cmeeting.vo.TencentMeetingVO;
import com.microsoft.graph.authentication.TokenCredentialAuthProvider;
import com.microsoft.graph.models.*;
import com.microsoft.graph.requests.AttachmentCollectionPage;
import com.microsoft.graph.requests.AttachmentCollectionResponse;
import com.microsoft.graph.requests.GraphServiceClient;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import okhttp3.Request;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.*;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.text.MessageFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -71,6 +52,9 @@ public class CmeetingJob { ...@@ -71,6 +52,9 @@ public class CmeetingJob {
private MeetingRecordTemplateService meetingRecordTemplateService; private MeetingRecordTemplateService meetingRecordTemplateService;
@Resource @Resource
private UserIdMapper userIdMapper; private UserIdMapper userIdMapper;
@Resource
private CimcService cimcService;
@Value("${isDev}") @Value("${isDev}")
private Boolean isDev; private Boolean isDev;
@Resource @Resource
...@@ -78,20 +62,6 @@ public class CmeetingJob { ...@@ -78,20 +62,6 @@ public class CmeetingJob {
@Resource @Resource
private EmailSender emailSender; private EmailSender emailSender;
// @PostConstruct
public void weComUserInit() {
weComUserSync();
}
// @PostConstruct
public void tencentUserInit() {
TencentUserSync();
}
// @PostConstruct
public void userBindInit() {
userBind();
}
/** /**
* 企微人员定时同步 * 企微人员定时同步
...@@ -101,7 +71,7 @@ public class CmeetingJob { ...@@ -101,7 +71,7 @@ public class CmeetingJob {
if (isDev) { if (isDev) {
return; return;
} }
if (!redisUtils.setnx("weComUserSync", "weComUserSync", 20 * 60 * 60)){ if (!redisUtils.setnx("weComUserSync", "weComUserSync", 20 * 60 * 60)) {
return; return;
} }
try { try {
...@@ -125,7 +95,7 @@ public class CmeetingJob { ...@@ -125,7 +95,7 @@ public class CmeetingJob {
if (isDev) { if (isDev) {
return; return;
} }
if (!redisUtils.setnx("TencentUserSync", "TencentUserSync", 20 * 60 * 60)){ if (!redisUtils.setnx("TencentUserSync", "TencentUserSync", 20 * 60 * 60)) {
return; return;
} }
try { try {
...@@ -149,7 +119,7 @@ public class CmeetingJob { ...@@ -149,7 +119,7 @@ public class CmeetingJob {
if (isDev) { if (isDev) {
return; return;
} }
if (!redisUtils.setnx("userBind", "userBind", 20 * 60 * 60)){ if (!redisUtils.setnx("userBind", "userBind", 20 * 60 * 60)) {
return; return;
} }
try { try {
...@@ -172,7 +142,7 @@ public class CmeetingJob { ...@@ -172,7 +142,7 @@ public class CmeetingJob {
if (isDev) { if (isDev) {
return; return;
} }
if (!redisUtils.setnx("Scheduled-All", "Scheduled-All", 18 * 60)){ if (!redisUtils.setnx("Scheduled-All", "Scheduled-All", 18 * 60)) {
return; return;
} }
try { try {
...@@ -204,7 +174,7 @@ public class CmeetingJob { ...@@ -204,7 +174,7 @@ public class CmeetingJob {
// 提交处理任务 // 提交处理任务
producer.submitBatchTasks(meetingFiles, authorizedUsers, tidWidRelations, Boolean.FALSE); producer.submitBatchTasks(meetingFiles, authorizedUsers, tidWidRelations, Boolean.FALSE);
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
redisUtils.del("Scheduled-All"); redisUtils.del("Scheduled-All");
...@@ -215,12 +185,12 @@ public class CmeetingJob { ...@@ -215,12 +185,12 @@ public class CmeetingJob {
/** /**
* 定时扫描早于一小时之前的,所有未重试过的会议,重新生成纪要 * 定时扫描早于一小时之前的,所有未重试过的会议,重新生成纪要
*/ */
@Scheduled(fixedRate = 30 * 60 * 1000,initialDelay = 10 * 60 * 1000) @Scheduled(fixedRate = 30 * 60 * 1000, initialDelay = 10 * 60 * 1000)
public void meetingMinutesRetry() { public void meetingMinutesRetry() {
if (isDev) { if (isDev) {
return; return;
} }
if (!redisUtils.setnx("Scheduled-retry", "Scheduled-retry", 28 * 60)){ if (!redisUtils.setnx("Scheduled-retry", "Scheduled-retry", 28 * 60)) {
return; return;
} }
try { try {
...@@ -231,11 +201,11 @@ public class CmeetingJob { ...@@ -231,11 +201,11 @@ public class CmeetingJob {
// 不能用status筛选,因为可能线程执行一般服务终止,status状态没变 // 不能用status筛选,因为可能线程执行一般服务终止,status状态没变
List<MeetingInfo> meetingInfoList = List<MeetingInfo> meetingInfoList =
meetingInfoService.list(new LambdaQueryWrapper<MeetingInfo>() meetingInfoService.list(new LambdaQueryWrapper<MeetingInfo>()
.eq(MeetingInfo::getEmailPushAccess,Boolean.TRUE) .eq(MeetingInfo::getEmailPushAccess, Boolean.TRUE)
.eq(MeetingInfo::getEmailGenerateAccess,Boolean.TRUE) .eq(MeetingInfo::getEmailGenerateAccess, Boolean.TRUE)
.eq(MeetingInfo::getIsGenerated,Boolean.FALSE) .eq(MeetingInfo::getIsGenerated, Boolean.FALSE)
.eq(MeetingInfo::getGenerateRetry,Boolean.FALSE) .eq(MeetingInfo::getGenerateRetry, Boolean.FALSE)
.le(MeetingInfo::getSyncTime,LocalDateTime.now().minusHours(1)) .le(MeetingInfo::getSyncTime, LocalDateTime.now().minusHours(1))
); );
if (meetingInfoList == null || meetingInfoList.isEmpty()) { if (meetingInfoList == null || meetingInfoList.isEmpty()) {
...@@ -271,12 +241,12 @@ public class CmeetingJob { ...@@ -271,12 +241,12 @@ public class CmeetingJob {
/** /**
* 定时扫描早于一小时之前的,所有邮件推送未重试过的会议,重新推送邮件 * 定时扫描早于一小时之前的,所有邮件推送未重试过的会议,重新推送邮件
*/ */
@Scheduled(fixedRate = 10 * 60 * 1000,initialDelay = 1 * 60 * 1000) @Scheduled(fixedRate = 10 * 60 * 1000, initialDelay = 1 * 60 * 1000)
public void emailPushRetry() { public void emailPushRetry() {
if (isDev) { if (isDev) {
return; return;
} }
if (!redisUtils.setnx("Scheduled-email-retry", "Scheduled-email-retry", 28 * 60)){ if (!redisUtils.setnx("Scheduled-email-retry", "Scheduled-email-retry", 28 * 60)) {
return; return;
} }
try { try {
...@@ -285,11 +255,11 @@ public class CmeetingJob { ...@@ -285,11 +255,11 @@ public class CmeetingJob {
//查出所有早于一小时前的,邮件推送失败且未重试过的会议 //查出所有早于一小时前的,邮件推送失败且未重试过的会议
List<MeetingInfo> meetingInfoList = List<MeetingInfo> meetingInfoList =
meetingInfoService.list(new LambdaQueryWrapper<MeetingInfo>() meetingInfoService.list(new LambdaQueryWrapper<MeetingInfo>()
.eq(MeetingInfo::getEmailPushAccess,Boolean.TRUE) .eq(MeetingInfo::getEmailPushAccess, Boolean.TRUE)
.eq(MeetingInfo::getIsGenerated,Boolean.TRUE) .eq(MeetingInfo::getIsGenerated, Boolean.TRUE)
.eq(MeetingInfo::getIsPushed,Boolean.FALSE) .eq(MeetingInfo::getIsPushed, Boolean.FALSE)
.eq(MeetingInfo::getPushRetry,Boolean.FALSE) .eq(MeetingInfo::getPushRetry, Boolean.FALSE)
.le(MeetingInfo::getSyncTime,LocalDateTime.now().minusHours(1)) .le(MeetingInfo::getSyncTime, LocalDateTime.now().minusHours(1))
); );
if (meetingInfoList == null || meetingInfoList.isEmpty()) { if (meetingInfoList == null || meetingInfoList.isEmpty()) {
...@@ -326,12 +296,13 @@ public class CmeetingJob { ...@@ -326,12 +296,13 @@ public class CmeetingJob {
@Value(value = "${tencent.base-save-path}") @Value(value = "${tencent.base-save-path}")
private String savePath; private String savePath;
@Scheduled(cron = "50 59 7,9,11,13,15,17,19,21,23 * * ?") @Scheduled(cron = "50 59 7,9,11,13,15,17,19,21,23 * * ?")
public void emailStatisticsPush() { public void emailStatisticsPush() {
if (isDev) { if (isDev) {
return; return;
} }
if (!redisUtils.setnx("emailStatisticsPush", "emailStatisticsPush", 60 * 60)){ if (!redisUtils.setnx("emailStatisticsPush", "emailStatisticsPush", 60 * 60)) {
return; return;
} }
log.info("推送统计邮件开始!"); log.info("推送统计邮件开始!");
...@@ -381,4 +352,14 @@ public class CmeetingJob { ...@@ -381,4 +352,14 @@ public class CmeetingJob {
log.info("推送统计邮件完成!"); log.info("推送统计邮件完成!");
} }
/**
* 每天6点执行一次
*/
@Scheduled(cron = "0 0 6 * * ? ")
public void pullAllDate() {
cimcService.pullCimcData();
}
} }
package com.cmeeting.mapper.tertiary; package com.cmeeting.mapper.primary;
import com.cmeeting.pojo.CoreModulePermissions; import com.cmeeting.pojo.CoreModulePermissions;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
......
//package com.cmeeting.mapper.secondary;
//
//import com.baomidou.mybatisplus.core.mapper.BaseMapper;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.cmeeting.pojo.ShareUser;
//import org.apache.ibatis.annotations.Param;
//
//import java.util.List;
//
///**
// * (ShareUser)表数据库访问层
// *
// * @author makejava
// * @since 2025-01-16 14:50:16
// */
//public interface ShareUserMapper extends BaseMapper<ShareUser> {
//
//}
package com.cmeeting.mapper.secondary; package com.cmeeting.mapper.primary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cmeeting.pojo.SysUserSyncCategory; import com.cmeeting.pojo.SysUserSyncCategory;
......
package com.cmeeting.mapper.secondary; package com.cmeeting.mapper.primary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...@@ -15,31 +15,30 @@ import java.util.List; ...@@ -15,31 +15,30 @@ import java.util.List;
import java.util.Map; import java.util.Map;
@Mapper @Mapper
public interface SysUserSysMapper extends BaseMapper<SysUserSync> { public interface SysUserSyncMapper extends BaseMapper<SysUserSync> {
String getCompanyEmail(String wid, String tenantId);
String getParentDeptId(@Param(value = "deptId")String deptId,@Param(value = "tenantId") String tenantId); String getParentDeptId(@Param(value = "deptId")String deptId);
List<UserDTO> getUserEmail(@Param(value = "tenantId")String tenantId); List<UserDTO> getUserEmail();
List<SysUserSync> getSimpleUserList(@Param(value = "tenantId")String tenantId); List<SysUserSync> getSimpleUserList();
List<SysDept> getSimpleDeptList(@Param(value = "tenantId")String tenantId); List<SysDept> getSimpleDeptList();
List<String> getSubDeptId(@Param(value = "deptId")String deptId,@Param(value = "tenantId")String tenantId); List<String> getSubDeptId(@Param(value = "deptId")String deptId);
List<String> getUsersByDept(@Param(value = "deptIds") List<String> deptIds,@Param(value = "tenantId")String tenantId); List<String> getUsersByDept(@Param(value = "deptIds") List<String> deptIds);
List<PermissionCheckedDTO.User> findName(@Param("deptIds") List<String> deptIds, @Param("categoryId") String categoryId, @Param("search") String search, List<PermissionCheckedDTO.User> findName(@Param("deptIds") List<String> deptIds, @Param("categoryId") String categoryId, @Param("search") String search,
@Param("tenantId") String tenantId, @Param("userList") List<String> userList); @Param("userList") List<String> userList);
List<PermissionCheckedDTO.User> findInUserIdsOrShareCateIds(@Param("userIds") List<String> userIds, @Param("shareCateIds") List<String> shareCateIds, List<PermissionCheckedDTO.User> findInUserIdsOrShareCateIds(@Param("userIds") List<String> userIds, @Param("shareCateIds") List<String> shareCateIds,
@Param("tenantId") String tenantId, @Param("search") String search); @Param("search") String search);
List<PermissionCheckedDTO.User> findByParam(@Param("userIds") List<String> userIds, @Param("notInCateIds") List<String> notInCateIds, @Param("cateIds") List<String> shareCateIds, List<PermissionCheckedDTO.User> findByParam(@Param("userIds") List<String> userIds, @Param("notInCateIds") List<String> notInCateIds, @Param("cateIds") List<String> shareCateIds,
@Param("tenantId") String tenantId, @Param("search") String search, @Param("categoryId") String categoryId); @Param("search") String search, @Param("categoryId") String categoryId);
Page<SysUserSyncDTO> selectByDeptId(@Param("deptIds") List<String> deptIds, @Param("tenantId") String tenantId, Page<SysUserSyncDTO> selectByDeptId(@Param("deptIds") List<String> deptIds,
@Param("page") Page page, @Param("search") String search); @Param("page") Page page, @Param("search") String search);
/** /**
...@@ -50,7 +49,6 @@ public interface SysUserSysMapper extends BaseMapper<SysUserSync> { ...@@ -50,7 +49,6 @@ public interface SysUserSysMapper extends BaseMapper<SysUserSync> {
* @return * @return
*/ */
@MapKey("userId") @MapKey("userId")
List<Map<String, String>> selectParamByUserIdList(@Param("tenantId") String tenantId, List<Map<String, String>> selectParamByUserIdList(@Param("searchValue") String searchValue,
@Param("searchValue") String searchValue,
@Param("userIdList") List<String> userIdList); @Param("userIdList") List<String> userIdList);
} }
package com.cmeeting.mapper.secondary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cmeeting.pojo.ShareUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* (ShareUser)表数据库访问层
*
* @author makejava
* @since 2025-01-16 14:50:16
*/
public interface ShareUserMapper extends BaseMapper<ShareUser> {
}
package com.cmeeting.mapper.secondary;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface SysUserMapper {
String getUserDeptPath(@Param("userId") String userId);
}
package com.cmeeting.mapper.tertiary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cmeeting.ad.entity.SysTenant;
/**
* <p>
* 租户表 Mapper 接口
* </p>
*
* @author robot
* @since 2019-08-10
*/
public interface SysTenantMapper extends BaseMapper<SysTenant> {
}
...@@ -45,10 +45,6 @@ public class SysUserSyncCategory implements Serializable { ...@@ -45,10 +45,6 @@ public class SysUserSyncCategory implements Serializable {
*/ */
private String nameEn; private String nameEn;
/** /**
* 平台类型 QWX=企业微信, DD=钉钉,FS=飞书
*/
private String platformType;
/**
* 部门领导,多个领导用逗号隔开 * 部门领导,多个领导用逗号隔开
*/ */
private String departmentLeader; private String departmentLeader;
...@@ -61,16 +57,8 @@ public class SysUserSyncCategory implements Serializable { ...@@ -61,16 +57,8 @@ public class SysUserSyncCategory implements Serializable {
*/ */
private Integer sortNo; private Integer sortNo;
/** /**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/**
* 租户id * 租户id
*/ */
private String tenantId; // private String tenantId;
@TableField(exist = false)
private List<SysUserSyncCategory> children;
} }
package com.cmeeting.service; //package com.cmeeting.service;
//
import cn.hutool.core.lang.tree.Tree; //import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService; //import com.baomidou.mybatisplus.extension.service.IService;
import com.cmeeting.dto.PermissionCheckedDTO; //import com.cmeeting.dto.PermissionCheckedDTO;
import com.cmeeting.pojo.ShareUser; //import com.cmeeting.pojo.ShareUser;
//
import java.util.List; //import java.util.List;
//
/** ///**
* (ShareUser)表服务接口 // * (ShareUser)表服务接口
* // *
* @author makejava // * @author makejava
* @since 2025-01-16 14:50:15 // * @since 2025-01-16 14:50:15
*/ // */
public interface IShareUserService extends IService<ShareUser>{ //public interface IShareUserService extends IService<ShareUser>{
//
//
PermissionCheckedDTO findName(String categoryId, String search, String tenantId, List<String> categoryList, List<String> userList); // PermissionCheckedDTO findName(String categoryId, String search, String tenantId, List<String> categoryList, List<String> userList);
} //}
...@@ -35,11 +35,11 @@ public interface SysUserSyncService extends IService<SysUserSync> { ...@@ -35,11 +35,11 @@ public interface SysUserSyncService extends IService<SysUserSync> {
List<SysUserSyncCategory> getCategoryListByUserId(String userId); List<SysUserSyncCategory> getCategoryListByUserId(String userId);
PermissionCheckedDTO listByCategoryId(String categoryId, String search, String tenantId, List<String> categoryList, List<String> userList); PermissionCheckedDTO listByCategoryId(String categoryId, String search, List<String> categoryList, List<String> userList);
List<PermissionCheckedDTO.User> findInUserIdsOrShareCateIds(List<String> userIds, List<String> shareCateIds, String tenantId, String search); List<PermissionCheckedDTO.User> findInUserIdsOrShareCateIds(List<String> userIds, List<String> shareCateIds, String search);
List<PermissionCheckedDTO.User> findByParam(List<String> userIds, List<String> notInCateIds, List<String> shareCateIds, String tenantId, String search, String categoryId); List<PermissionCheckedDTO.User> findByParam(List<String> userIds, List<String> notInCateIds, List<String> shareCateIds, String search, String categoryId);
Page<SysUserSyncDTO> selectPage(Integer current, Integer size, String categoryId, String tenantId, String search); Page<SysUserSyncDTO> selectPage(Integer current, Integer size, String categoryId, String search);
} }
package com.cmeeting.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cmeeting.ad.entity.SysUserSync;
import com.cmeeting.dto.CimcEmployee;
import com.cmeeting.dto.CimcOrganization;
import com.cmeeting.pojo.SysUserSyncCategory;
import com.cmeeting.service.ISysUserSyncCategoryService;
import com.cmeeting.service.SysUserSyncService;
import com.cmeeting.util.CimcUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
@Slf4j
public class CimcService {
@Resource
private ISysUserSyncCategoryService iSysUserSyncCategoryService;
@Resource
private SysUserSyncService SysUserSyncService;
@Resource
private CimcUtil cimcUtil;
public void initCimcData(){
iSysUserSyncCategoryService.remove(new LambdaQueryWrapper<>());
SysUserSyncService.remove(new LambdaQueryWrapper<>());
}
@Transactional(rollbackFor = Exception.class)
public void pullCimcData() {
initCimcData();
int i = 1;
while (true) {
List<CimcOrganization> deptList = cimcUtil.getDataByClass(i, CimcOrganization.class);
if (deptList == null || deptList.size() == 0) {
log.info("该页没有数据, i: {}", i);
break;
}
log.info("获取到数据, size: {}", deptList.size());
List<SysUserSyncCategory> data = new ArrayList<>();
for (CimcOrganization organizations : deptList) {
SysUserSyncCategory o = new SysUserSyncCategory();
o.setName(organizations.getUnitName());
o.setDeptId(organizations.getUnitId());
o.setParentId(organizations.getParentId());
data.add(o);
}
iSysUserSyncCategoryService.saveBatch(data);
i++;
}
i = 1;
while (true) {
List<CimcEmployee> userList = cimcUtil.getDataByClass(i, CimcEmployee.class);
if (userList == null || userList.size() == 0) {
log.info("该页没有数据, i: {}", i);
break;
}
log.info("获取到数据, size: {}", userList.size());
List<SysUserSync> sysUserSyncs = new ArrayList<>();
for (CimcEmployee employee : userList) {
SysUserSync sysUserSync = SysUserSync.builder()
.userId(employee.getEmployeeCode()).name(employee.getEmployeeName()).deptId(employee.getUnitId())
.email(employee.getEmail()).department(employee.getUnitName()).build();
sysUserSyncs.add(sysUserSync);
}
SysUserSyncService.saveBatch(sysUserSyncs);
i++;
}
}
}
...@@ -31,7 +31,7 @@ import com.cmeeting.log.service.ProcessLogService; ...@@ -31,7 +31,7 @@ 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.mapper.primary.UserIdMapper;
import com.cmeeting.mapper.secondary.SysUserSysMapper; import com.cmeeting.mapper.primary.SysUserSyncMapper;
import com.cmeeting.pojo.MeetingInfo; import com.cmeeting.pojo.MeetingInfo;
import com.cmeeting.pojo.MeetingRecordTemplate; import com.cmeeting.pojo.MeetingRecordTemplate;
import com.cmeeting.pojo.UserId; import com.cmeeting.pojo.UserId;
...@@ -109,7 +109,7 @@ public class MeetingInfoServiceImpl extends ServiceImpl<MeetingInfoMapper, Meeti ...@@ -109,7 +109,7 @@ public class MeetingInfoServiceImpl extends ServiceImpl<MeetingInfoMapper, Meeti
@Resource @Resource
private UserIdMapper userIdMapper; private UserIdMapper userIdMapper;
@Autowired @Autowired
private SysUserSysMapper sysUserSysMapper; private SysUserSyncMapper sysUserSysMapper;
@Value("${aec.key}") @Value("${aec.key}")
public String aesKey; public String aesKey;
...@@ -304,7 +304,7 @@ public class MeetingInfoServiceImpl extends ServiceImpl<MeetingInfoMapper, Meeti ...@@ -304,7 +304,7 @@ public class MeetingInfoServiceImpl extends ServiceImpl<MeetingInfoMapper, Meeti
} }
// 获取用户信息 // 获取用户信息
List<String> userIdList = statisticsList.stream().map(map -> map.get("userId")).collect(Collectors.toList()); List<String> userIdList = statisticsList.stream().map(map -> map.get("userId")).collect(Collectors.toList());
List<Map<String, String>> userInfoList = sysUserSysMapper.selectParamByUserIdList(permissionTenantId, searchValue, userIdList); List<Map<String, String>> userInfoList = sysUserSysMapper.selectParamByUserIdList(searchValue, userIdList);
for (Map<String, String> userInfo : userInfoList) { for (Map<String, String> userInfo : userInfoList) {
String userId = userInfo.get("userId"); String userId = userInfo.get("userId");
......
...@@ -24,7 +24,7 @@ import com.cmeeting.dto.RecordTemplateDto; ...@@ -24,7 +24,7 @@ import com.cmeeting.dto.RecordTemplateDto;
import com.cmeeting.dto.UserDTO; import com.cmeeting.dto.UserDTO;
import com.cmeeting.exception.RobotBaseException; import com.cmeeting.exception.RobotBaseException;
import com.cmeeting.mapper.primary.*; import com.cmeeting.mapper.primary.*;
import com.cmeeting.mapper.secondary.SysUserSysMapper; import com.cmeeting.mapper.primary.SysUserSyncMapper;
import com.cmeeting.pojo.*; import com.cmeeting.pojo.*;
import com.cmeeting.service.MeetTemplateEnableService; import com.cmeeting.service.MeetTemplateEnableService;
import com.cmeeting.service.MeetingRecordTemplateService; import com.cmeeting.service.MeetingRecordTemplateService;
...@@ -58,7 +58,7 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT ...@@ -58,7 +58,7 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT
@Resource @Resource
private RecordTemplatePermissionMapper permissionMapper; private RecordTemplatePermissionMapper permissionMapper;
@Resource @Resource
private SysUserSysMapper sysUserSysMapper; private SysUserSyncMapper sysUserSysMapper;
@Autowired @Autowired
private MeetTypeMapper meetTypeMapper; private MeetTypeMapper meetTypeMapper;
@Resource @Resource
...@@ -123,7 +123,7 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT ...@@ -123,7 +123,7 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT
resultList.addAll(customTemplateList); resultList.addAll(customTemplateList);
List<MeetingRecordTemplate> records = getUsersByOffset(resultList, current, size); List<MeetingRecordTemplate> records = getUsersByOffset(resultList, current, size);
if (!CollectionUtils.isEmpty(records)) { if (!CollectionUtils.isEmpty(records)) {
List<SysUserSync> simpleUserList = sysUserSysMapper.getSimpleUserList(user.getTenantId()); List<SysUserSync> simpleUserList = sysUserSysMapper.getSimpleUserList();
Map<String, String> simpleUserMap = CollectionUtils.isEmpty(simpleUserList) Map<String, String> simpleUserMap = CollectionUtils.isEmpty(simpleUserList)
? new HashMap<>() : simpleUserList.stream().collect(Collectors.toMap(SysUserSync::getUserId, SysUserSync::getName)); ? new HashMap<>() : simpleUserList.stream().collect(Collectors.toMap(SysUserSync::getUserId, SysUserSync::getName));
for (MeetingRecordTemplate record : records) { for (MeetingRecordTemplate record : records) {
...@@ -202,9 +202,9 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT ...@@ -202,9 +202,9 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT
List<String> deptPath = new ArrayList<>(); List<String> deptPath = new ArrayList<>();
for (RecordTemplatePermission deptPermission : deptPermissions) { for (RecordTemplatePermission deptPermission : deptPermissions) {
String deptId = deptPermission.getRelId(); String deptId = deptPermission.getRelId();
getDeptPath(deptPath, deptId, permissionTenantId); getDeptPath(deptPath, deptId);
} }
List<String> usersByDept = sysUserSysMapper.getUsersByDept(deptPath, permissionTenantId); List<String> usersByDept = sysUserSysMapper.getUsersByDept(deptPath);
if (!CollectionUtils.isEmpty(usersByDept)) if (!CollectionUtils.isEmpty(usersByDept))
authorizedUsers.addAll(usersByDept); authorizedUsers.addAll(usersByDept);
} }
...@@ -556,16 +556,16 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT ...@@ -556,16 +556,16 @@ public class MeetingRecordTemplateServiceImpl extends ServiceImpl<MeetingRecordT
* @param deptPath * @param deptPath
* @param deptId * @param deptId
*/ */
private void getDeptPath(List<String> deptPath, String deptId, String tenantId) { private void getDeptPath(List<String> deptPath, String deptId) {
if (!deptPath.contains(deptId)) deptPath.add(deptId); if (!deptPath.contains(deptId)) deptPath.add(deptId);
List<String> subDeptIds = sysUserSysMapper.getSubDeptId(deptId, tenantId); List<String> subDeptIds = sysUserSysMapper.getSubDeptId(deptId);
if (CollectionUtils.isEmpty(subDeptIds)) return; if (CollectionUtils.isEmpty(subDeptIds)) return;
for (String subDeptId : subDeptIds) { for (String subDeptId : subDeptIds) {
//部门id去重 //部门id去重
if (!deptPath.contains(subDeptId)) { if (!deptPath.contains(subDeptId)) {
deptPath.add(subDeptId); deptPath.add(subDeptId);
getDeptPath(deptPath, subDeptId, tenantId); getDeptPath(deptPath, subDeptId);
} }
} }
......
...@@ -2,32 +2,25 @@ package com.cmeeting.service.impl; ...@@ -2,32 +2,25 @@ package com.cmeeting.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.ad.entity.RobotSecurityUser;
import com.cmeeting.ad.util.SecurityUtil;
import com.cmeeting.constant.CategoryConstant; import com.cmeeting.constant.CategoryConstant;
import com.cmeeting.constant.PermissionPruposeType; import com.cmeeting.constant.PermissionPruposeType;
import com.cmeeting.constant.RecordTemplateConstant; import com.cmeeting.constant.RecordTemplateConstant;
import com.cmeeting.constant.UserTypeConstant; import com.cmeeting.constant.UserTypeConstant;
import com.cmeeting.dto.PermissionCheckedDTO; import com.cmeeting.dto.PermissionCheckedDTO;
import com.cmeeting.exception.RobotBaseException; import com.cmeeting.exception.RobotBaseException;
import com.cmeeting.mapper.primary.ModulePermissionMapper;
import com.cmeeting.pojo.ModulePermission; import com.cmeeting.pojo.ModulePermission;
import com.cmeeting.service.IShareUserService;
import com.cmeeting.service.ModulePermissionService; import com.cmeeting.service.ModulePermissionService;
import com.cmeeting.mapper.primary.ModulePermissionMapper;
import com.cmeeting.service.SysUserSyncService; import com.cmeeting.service.SysUserSyncService;
import com.cmeeting.vo.AuthVO; import com.cmeeting.vo.AuthVO;
import com.cmeeting.vo.PermissionVO;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* @author Administrator * @author Administrator
...@@ -40,8 +33,8 @@ public class ModulePermissionServiceImpl extends ServiceImpl<ModulePermissionMap ...@@ -40,8 +33,8 @@ public class ModulePermissionServiceImpl extends ServiceImpl<ModulePermissionMap
@Resource @Resource
private SysUserSyncService iSysUserSyncService; private SysUserSyncService iSysUserSyncService;
@Resource // @Resource
private IShareUserService iShareUserService; // private IShareUserService iShareUserService;
@Override @Override
public PermissionCheckedDTO permissionList(String search, String categoryId, Integer userType, Integer purpose, Integer targetId, List<String> categoryIdList, List<String> userIdList) { public PermissionCheckedDTO permissionList(String search, String categoryId, Integer userType, Integer purpose, Integer targetId, List<String> categoryIdList, List<String> userIdList) {
...@@ -83,20 +76,21 @@ public class ModulePermissionServiceImpl extends ServiceImpl<ModulePermissionMap ...@@ -83,20 +76,21 @@ public class ModulePermissionServiceImpl extends ServiceImpl<ModulePermissionMap
@Override @Override
public PermissionCheckedDTO permissionList(String search, String categoryId, Integer userType, Integer purpose, List<String> categoryList, List<String> userList) { public PermissionCheckedDTO permissionList(String search, String categoryId, Integer userType, Integer purpose, List<String> categoryList, List<String> userList) {
PermissionCheckedDTO dto = new PermissionCheckedDTO(); return iSysUserSyncService.listByCategoryId(categoryId, search, categoryList, userList);
if (userType != null) { // PermissionCheckedDTO dto = new PermissionCheckedDTO();
if (userType == UserTypeConstant.SYNC) { // if (userType != null) {
dto = iSysUserSyncService.listByCategoryId(categoryId, search, SecurityUtil.getTenantId(), categoryList, userList); // if (userType == UserTypeConstant.SYNC) {
} else if (userType == UserTypeConstant.ADMIN) { // dto = iSysUserSyncService.listByCategoryId(categoryId, search, categoryList, userList);
dto = iShareUserService.findName(categoryId, search, SecurityUtil.getTenantId(), categoryList, userList); // } else if (userType == UserTypeConstant.ADMIN) {
} // dto = iShareUserService.findName(categoryId, search, SecurityUtil.getTenantId(), categoryList, userList);
} else { // }
dto = iSysUserSyncService.listByCategoryId(categoryId, search, SecurityUtil.getTenantId(), categoryList, userList); // } else {
PermissionCheckedDTO dto1 = iShareUserService.findName(categoryId, search, SecurityUtil.getTenantId(), categoryList, userList); // dto = iSysUserSyncService.listByCategoryId(categoryId, search, categoryList, userList);
dto.getUserList().addAll(dto1.getUserList()); // PermissionCheckedDTO dto1 = iShareUserService.findName(categoryId, search, SecurityUtil.getTenantId(), categoryList, userList);
dto.getCategoryList().addAll(dto1.getCategoryList()); // dto.getUserList().addAll(dto1.getUserList());
} // dto.getCategoryList().addAll(dto1.getCategoryList());
return dto; // }
// return dto;
} }
@Override @Override
......
...@@ -17,7 +17,7 @@ import com.cmeeting.ad.entity.SysUserSync; ...@@ -17,7 +17,7 @@ import com.cmeeting.ad.entity.SysUserSync;
import com.cmeeting.ad.util.SecurityUtil; import com.cmeeting.ad.util.SecurityUtil;
import com.cmeeting.exception.RobotBaseException; import com.cmeeting.exception.RobotBaseException;
import com.cmeeting.mapper.primary.RecordTemplatePermissionMapper; import com.cmeeting.mapper.primary.RecordTemplatePermissionMapper;
import com.cmeeting.mapper.secondary.SysUserSysMapper; import com.cmeeting.mapper.primary.SysUserSyncMapper;
import com.cmeeting.pojo.MeetingInfo; import com.cmeeting.pojo.MeetingInfo;
import com.cmeeting.pojo.MeetingRecordTemplate; import com.cmeeting.pojo.MeetingRecordTemplate;
import com.cmeeting.pojo.RecordTemplatePermission; import com.cmeeting.pojo.RecordTemplatePermission;
...@@ -61,7 +61,7 @@ public class RecordTemplatePermissionServiceImpl extends ServiceImpl<RecordTempl ...@@ -61,7 +61,7 @@ public class RecordTemplatePermissionServiceImpl extends ServiceImpl<RecordTempl
@Resource @Resource
private MeetingInfoService meetingInfoService; private MeetingInfoService meetingInfoService;
@Resource @Resource
private SysUserSysMapper sysUserSysMapper; private SysUserSyncMapper sysUserSysMapper;
@Resource @Resource
private MinioUtils minioUtils; private MinioUtils minioUtils;
@Value(value = "${llm.api-addr}") @Value(value = "${llm.api-addr}")
...@@ -125,10 +125,10 @@ public class RecordTemplatePermissionServiceImpl extends ServiceImpl<RecordTempl ...@@ -125,10 +125,10 @@ public class RecordTemplatePermissionServiceImpl extends ServiceImpl<RecordTempl
.eq(RecordTemplatePermission::getTemplateId,vo.getTemplateId())); .eq(RecordTemplatePermission::getTemplateId,vo.getTemplateId()));
List<RecordTemplateVO.PermissionItem> permissionItems = new ArrayList<>(); List<RecordTemplateVO.PermissionItem> permissionItems = new ArrayList<>();
if(!CollectionUtils.isEmpty(permissions)){ if(!CollectionUtils.isEmpty(permissions)){
List<SysUserSync> simpleUserList = sysUserSysMapper.getSimpleUserList(user.getTenantId()); List<SysUserSync> simpleUserList = sysUserSysMapper.getSimpleUserList();
Map<String, String> simpleUserMap = CollectionUtils.isEmpty(simpleUserList) Map<String, String> simpleUserMap = CollectionUtils.isEmpty(simpleUserList)
? new HashMap<>() : simpleUserList.stream().collect(Collectors.toMap(SysUserSync::getUserId, SysUserSync::getName)); ? new HashMap<>() : simpleUserList.stream().collect(Collectors.toMap(SysUserSync::getUserId, SysUserSync::getName));
List<SysDept> simpleDeptList = sysUserSysMapper.getSimpleDeptList(user.getTenantId()); List<SysDept> simpleDeptList = sysUserSysMapper.getSimpleDeptList();
Map<String, String> simpleDeptMap = CollectionUtils.isEmpty(simpleDeptList) Map<String, String> simpleDeptMap = CollectionUtils.isEmpty(simpleDeptList)
? new HashMap<>() : simpleDeptList.stream().collect(Collectors.toMap(SysDept::getDeptId, SysDept::getName)); ? new HashMap<>() : simpleDeptList.stream().collect(Collectors.toMap(SysDept::getDeptId, SysDept::getName));
for (RecordTemplatePermission permission : permissions) { for (RecordTemplatePermission permission : permissions) {
......
...@@ -5,7 +5,7 @@ import cn.hutool.core.lang.tree.Tree; ...@@ -5,7 +5,7 @@ import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.CategoryConstant; import com.cmeeting.constant.CategoryConstant;
import com.cmeeting.mapper.secondary.SysUserSyncCategoryMapper; import com.cmeeting.mapper.primary.SysUserSyncCategoryMapper;
import com.cmeeting.pojo.SysUserSyncCategory; import com.cmeeting.pojo.SysUserSyncCategory;
import com.cmeeting.service.ISysUserSyncCategoryService; import com.cmeeting.service.ISysUserSyncCategoryService;
import com.cmeeting.util.CategoryTreeUtil; import com.cmeeting.util.CategoryTreeUtil;
...@@ -35,7 +35,7 @@ public class SysUserSyncCategoryServiceImpl extends ServiceImpl<SysUserSyncCateg ...@@ -35,7 +35,7 @@ public class SysUserSyncCategoryServiceImpl extends ServiceImpl<SysUserSyncCateg
@Override @Override
public List<Tree<String>> tree(String tenantId) { public List<Tree<String>> tree(String tenantId) {
List<SysUserSyncCategory> sysUserSyncCategories = baseMapper.selectList(new LambdaQueryWrapper<SysUserSyncCategory>().eq(SysUserSyncCategory::getTenantId, tenantId)); List<SysUserSyncCategory> sysUserSyncCategories = baseMapper.selectList(new LambdaQueryWrapper<>());
if(CollUtil.isNotEmpty(sysUserSyncCategories)){ if(CollUtil.isNotEmpty(sysUserSyncCategories)){
Set<String> set = sysUserSyncCategories.stream().map(SysUserSyncCategory::getDeptId).collect(Collectors.toSet()); Set<String> set = sysUserSyncCategories.stream().map(SysUserSyncCategory::getDeptId).collect(Collectors.toSet());
for (SysUserSyncCategory sysUserSyncCategory : sysUserSyncCategories) { for (SysUserSyncCategory sysUserSyncCategory : sysUserSyncCategories) {
......
...@@ -4,10 +4,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; ...@@ -4,10 +4,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmeeting.constant.MeetingState; import com.cmeeting.constant.MeetingState;
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.tertiary.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.primary.SysUserSyncMapper;
import com.cmeeting.pojo.*; import com.cmeeting.pojo.*;
import com.cmeeting.service.ModulePermissionService; import com.cmeeting.service.ModulePermissionService;
import com.cmeeting.service.SysUserSyncService; import com.cmeeting.service.SysUserSyncService;
...@@ -60,7 +60,7 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper, ...@@ -60,7 +60,7 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,
@Resource @Resource
private AuthMapper authMapper; private AuthMapper authMapper;
@Resource @Resource
private SysUserSysMapper sysUserSyncMapper; private SysUserSyncMapper sysUserSyncMapper;
@Resource @Resource
private RedisUtils redisUtils; private RedisUtils redisUtils;
@Resource @Resource
...@@ -355,17 +355,16 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper, ...@@ -355,17 +355,16 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,
List<String> deptPath = new ArrayList<>(); List<String> deptPath = new ArrayList<>();
for (CoreModulePermissions authDept : authDepts) { for (CoreModulePermissions authDept : authDepts) {
String deptId = authDept.getRelId(); String deptId = authDept.getRelId();
String tenantId = authDept.getTenantId(); getDeptPath(deptPath, deptId);
getDeptPath(deptPath, deptId, tenantId);
} }
//已被授权部门下的userid //已被授权部门下的userid
List<String> accessUserIds = !CollectionUtils.isEmpty(deptPath) ? sysUserSyncMapper.getUsersByDept(deptPath, permissionTenantId) : new ArrayList<>(); List<String> accessUserIds = !CollectionUtils.isEmpty(deptPath) ? sysUserSyncMapper.getUsersByDept(deptPath) : new ArrayList<>();
//2. 已被直接授权的人员追加进去 //2. 已被直接授权的人员追加进去
accessUserIds.addAll(auths.stream().filter(item -> item.getType().equals(1)).map(CoreModulePermissions::getRelId).collect(Collectors.toList())); accessUserIds.addAll(auths.stream().filter(item -> item.getType().equals(1)).map(CoreModulePermissions::getRelId).collect(Collectors.toList()));
if (!CollectionUtils.isEmpty(accessUserIds)) { if (!CollectionUtils.isEmpty(accessUserIds)) {
//查出人员邮箱 //查出人员邮箱
List<UserDTO> userEmailList = sysUserSyncMapper.getUserEmail(permissionTenantId); List<UserDTO> userEmailList = sysUserSyncMapper.getUserEmail();
Map<String, UserDTO> userEmailMap = CollectionUtils.isEmpty(userEmailList) ? new HashMap<>() Map<String, UserDTO> userEmailMap = CollectionUtils.isEmpty(userEmailList) ? new HashMap<>()
: userEmailList.stream().collect(Collectors.toMap(UserDTO::getWid, Function.identity(), (existing, replacement) -> existing)); : userEmailList.stream().collect(Collectors.toMap(UserDTO::getWid, Function.identity(), (existing, replacement) -> existing));
...@@ -399,18 +398,17 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper, ...@@ -399,18 +398,17 @@ public class TencentMeetingServiceImpl extends ServiceImpl<TecentMeetingMapper,
* *
* @param deptPath * @param deptPath
* @param deptId * @param deptId
* @param tenantId
*/ */
private void getDeptPath(List<String> deptPath, String deptId, String tenantId) { private void getDeptPath(List<String> deptPath, String deptId) {
if (!deptPath.contains(deptId)) deptPath.add(deptId); 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; if (CollectionUtils.isEmpty(subDeptIds)) return;
for (String subDeptId : subDeptIds) { for (String subDeptId : subDeptIds) {
//部门id去重 //部门id去重
if (!deptPath.contains(subDeptId)) { if (!deptPath.contains(subDeptId)) {
deptPath.add(subDeptId); deptPath.add(subDeptId);
getDeptPath(deptPath, subDeptId, tenantId); getDeptPath(deptPath, subDeptId);
} }
} }
......
...@@ -7,11 +7,10 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; ...@@ -7,11 +7,10 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmeeting.ad.entity.RobotSecurityUser; import com.cmeeting.ad.entity.RobotSecurityUser;
import com.cmeeting.ad.util.SecurityUtil; import com.cmeeting.ad.util.SecurityUtil;
import com.cmeeting.dto.UserDTO;
import com.cmeeting.exception.RobotBaseException; import com.cmeeting.exception.RobotBaseException;
import com.cmeeting.mapper.primary.UserIdMapper; import com.cmeeting.mapper.primary.UserIdMapper;
import com.cmeeting.mapper.primary.WeComUserMapper; import com.cmeeting.mapper.primary.WeComUserMapper;
import com.cmeeting.mapper.secondary.SysUserSysMapper; import com.cmeeting.mapper.primary.SysUserSyncMapper;
import com.cmeeting.pojo.MeetingInfo; import com.cmeeting.pojo.MeetingInfo;
import com.cmeeting.pojo.UserId; import com.cmeeting.pojo.UserId;
import com.cmeeting.pojo.WeComUser; import com.cmeeting.pojo.WeComUser;
...@@ -54,7 +53,7 @@ public class WeComServiceImpl extends ServiceImpl<WeComUserMapper, WeComUser> i ...@@ -54,7 +53,7 @@ public class WeComServiceImpl extends ServiceImpl<WeComUserMapper, WeComUser> i
@Autowired @Autowired
private UserIdMapper userIdMapper; private UserIdMapper userIdMapper;
@Resource @Resource
private SysUserSysMapper sysUserSyncMapper; private SysUserSyncMapper sysUserSyncMapper;
@Value(value = "${permission.tenantId}") @Value(value = "${permission.tenantId}")
private String permissionTenantId; private String permissionTenantId;
......
...@@ -42,7 +42,6 @@ public class CategoryTreeUtil<T> { ...@@ -42,7 +42,6 @@ public class CategoryTreeUtil<T> {
extra.put("categoryId", category.getId()); extra.put("categoryId", category.getId());
extra.put("parentId", category.getParentId()); extra.put("parentId", category.getParentId());
extra.put("sortNo", category.getSortNo()); extra.put("sortNo", category.getSortNo());
extra.put("tenantId", category.getTenantId());
} else { } else {
// TODO 新的分类 // TODO 新的分类
} }
......
package com.cmeeting.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cmeeting.constant.CimcConstants;
import com.cmeeting.dto.CimcEmployee;
import com.cmeeting.dto.CimcOrganization;
import com.cmeeting.dto.CimcPost;
import com.cmeeting.exception.RobotBaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
* 中集相关接口工具类
*/
@Slf4j
@Component
public class CimcUtil implements CimcConstants {
@Value("${cimc.loginApiKey-test}")
public String loginApiKey = "faBqIHbXOtDIbguxJ7F55QhL04jIRekJ";//生产 Jj8UONm74FRxOSMnlIN95pVVUJf5Nn2D 测试 faBqIHbXOtDIbguxJ7F55QhL04jIRekJ
@Value("${cimc.loginApiKey-prod}")
public String prodLoginApiKey = "Jj8UONm74FRxOSMnlIN95pVVUJf5Nn2D";//生产 Jj8UONm74FRxOSMnlIN95pVVUJf5Nn2D 测试 faBqIHbXOtDIbguxJ7F55QhL04jIRekJ
@Value("${cimc.username}")
public String username;
@Value("${cimc.password}")
public String password;
@Value("${cimc.apiKey}")
public String apiKey;//同步apiKey
@Value("${cimc.userinfo-environment}")
public String userInfoEnvironment;
public void testSSLTimeout(int pageNum, Class zClass) {
String uri = "";
if (CimcEmployee.class == zClass) {
if ("test".equals(userInfoEnvironment)) {
uri = GET_TEST_EMPLOYEE;
} else {
uri = GET_AWS_EMPLOYEE;
}
} else if (CimcOrganization.class == zClass) {
if ("test".equals(userInfoEnvironment)) {
uri = GET_TEST_ORGANIZATION;
} else {
uri = GET_AWS_ORGANIZATION;
}
} else if (CimcPost.class == zClass) {
if ("test".equals(userInfoEnvironment)) {
uri = GET_TEST_POSITION;
} else {
uri = GET_AWS_POSITION;
}
}
String url = uri.replace(ALTER_USER, URLEncoder.encode(username)).replace(ALTER_PASSWORD, URLEncoder.encode(password)).replace(ALTER_API_KEY, apiKey).replaceAll(ALTER_PAGE_NUM, String.valueOf(pageNum));
String res = SSLUtils.sendGetByHttpsAndTtimOut(url);
if (res.contains("You cannot consume this service")) {
log.error("同步信息失败,账号或apiKey无效");
}
if (res != null) {
log.info("res.length: {}", res.length());
if (res.length() < 1000) {
log.info("res: \n{}", res);
}
} else {
log.info("res is null");
}
}
public List getDataByClass(int pageNum, Class zClass) {
String recordsName = "";
String uri = "";
if (CimcEmployee.class == zClass) {
if ("test".equals(userInfoEnvironment)) {
uri = GET_TEST_EMPLOYEE;
} else {
uri = GET_AWS_EMPLOYEE;
}
recordsName = "employee_record";
} else if (CimcOrganization.class == zClass) {
if ("test".equals(userInfoEnvironment)) {
uri = GET_TEST_ORGANIZATION;
} else {
uri = GET_AWS_ORGANIZATION;
}
recordsName = "unit_record";
} else if (CimcPost.class == zClass) {
if ("test".equals(userInfoEnvironment)) {
uri = GET_TEST_POSITION;
} else {
uri = GET_AWS_POSITION;
}
recordsName = "position_record";
}
String url = uri.replace(ALTER_USER, URLEncoder.encode(username)).replace(ALTER_PASSWORD, URLEncoder.encode(password)).replace(ALTER_API_KEY, apiKey).replaceAll(ALTER_PAGE_NUM, String.valueOf(pageNum));
String res = SSLUtils.sendGetByHttpsAndTtimOut(url);
if (res.contains("You cannot consume this service")) {
throw new RobotBaseException("同步信息失败,账号或apiKey无效");
}
if (res.length() < 2000) {
log.error("res: {}", res);
}
JSONObject object = JSONObject.parseObject(res);
JSONObject envelope = (JSONObject) object.get("soap:Envelope");
JSONObject body = (JSONObject) envelope.get("soap:Body");
JSONObject records = null;
records = (JSONObject) body.get(recordsName);
if (records == null) {
return null;
}
JSONArray record = (JSONArray) records.get("record");
if (record == null) {
return null;
}
List<Object> objectList = new ArrayList<>();
// 提供的AD账号和密码对应一个租户
if (record.size() != 0) {
record.forEach(obj -> {
Object o = JSONObject.toJavaObject((JSONObject) obj, zClass);
objectList.add(o);
});
}
return objectList;
}
}
package com.cmeeting.util;
/**
* @author cf
* @date 2023/7/3下午 1:06
*/
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
@Slf4j
public class SSLUtils {
/**
* 忽略https证书验证
*
* @return
*/
public static SSLSocketFactory getSSLSocketFactory() {
try {
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, getTrustManager(), new SecureRandom());
return sslContext.getSocketFactory();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static TrustManager[] getTrustManager() {
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
//检查客户端证书,若不信任该证书抛出异常,咱们自己就是客户端不用检查
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}
//检查服务器的证书,若不信任该证书抛出异常,可以不检查默认都信任
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
//返回受信任的X509证书数组
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
}
};
return trustAllCerts;
}
public static String sendPostByHttps(String url, JSONObject data) {
log.info("https post: {}", url);
String result = HttpRequest.post(url)
.header("Content-Type", "application/json;charset=UTF-8")
.setSSLSocketFactory(SSLUtils.getSSLSocketFactory())
.body(data.toJSONString())
.execute().body();
return result;
}
public static String sendGetByHttps(String url) {
log.info("https get: {}", url);
String result = HttpRequest.get(url)
.setSSLSocketFactory(SSLUtils.getSSLSocketFactory())
.execute().body();
return result;
}
public static String sendGetByHttpsAndTtimOut(String url) {
log.info("https get: {}", url);
String result = HttpRequest.get(url)
.setSSLSocketFactory(SSLUtils.getSSLSocketFactory())
.timeout(60000)
.execute().body();
return result;
}
public static String sendXmlPostByHttps(String url, String data, String apiKey) {
log.info("Https Xml Post: {}", url);
log.info("Https Xml body: {}", data);
return HttpRequest.post(url)
.header("Content-Type", "text/xml")
.header("Accept", "application/xml")
.header("apikey", apiKey)
.setSSLSocketFactory(SSLUtils.getSSLSocketFactory())
.body(data).execute().body();
}
public static String sendPostByHttps(String url, String data, String apiKey) {
log.info("Https Url: {}", url);
log.info("Https body: {}", data);
String ret = HttpRequest.post(url)
.header("Content-Type", "application/json")
.header("apikey", apiKey)
.setSSLSocketFactory(SSLUtils.getSSLSocketFactory())
.body(data).execute().body();
log.info("Https ret: {}", ret);
return ret;
}
}
...@@ -47,17 +47,17 @@ spring: ...@@ -47,17 +47,17 @@ spring:
username: root username: root
password: qizhi123 password: qizhi123
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.jdbc.Driver
# 从数据源 # # 从数据源
slave: # slave:
jdbc-url: jdbc:mysql://192.168.10.157:3306/zhongji-user?useSSL=false&characterEncoding=utf8&serverTimezone=UTC # jdbc-url: jdbc:mysql://192.168.10.157:3306/zhongji-user?useSSL=false&characterEncoding=utf8&serverTimezone=UTC
username: root # username: root
password: qizhi123 # password: qizhi123
driver-class-name: com.mysql.jdbc.Driver # driver-class-name: com.mysql.jdbc.Driver
tertiary: # tertiary:
jdbc-url: jdbc:mysql://192.168.10.157:3306/zhongji-aigc?useSSL=false&characterEncoding=utf8&serverTimezone=UTC # jdbc-url: jdbc:mysql://192.168.10.157:3306/zhongji-aigc?useSSL=false&characterEncoding=utf8&serverTimezone=UTC
username: root # username: root
password: qizhi123 # password: qizhi123
driver-class-name: com.mysql.jdbc.Driver # driver-class-name: com.mysql.jdbc.Driver
redis: redis:
database: ${REDIS_DATABASE} database: ${REDIS_DATABASE}
host: ${REDIS_ADDRESS} host: ${REDIS_ADDRESS}
......
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmeeting.mapper.tertiary.AuthMapper"> <mapper namespace="com.cmeeting.mapper.primary.AuthMapper">
<select id="getAuthByTargetId" resultType="com.cmeeting.pojo.CoreModulePermissions"> <select id="getAuthByTargetId" resultType="com.cmeeting.pojo.CoreModulePermissions">
SELECT SELECT
......
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmeeting.mapper.secondary.SysUserSysMapper"> <mapper namespace="com.cmeeting.mapper.primary.SysUserSyncMapper">
<select id="getCompanyEmail" resultType="java.lang.String">
SELECT company_email
FROM sys_user_sync
WHERE user_id = #{wid}
AND tenant_id = #{tenantId}
LIMIT 1
</select>
<select id="getParentDeptId" resultType="java.lang.String"> <select id="getParentDeptId" resultType="java.lang.String">
SELECT parent_id SELECT parent_id
FROM sys_user_sync_category FROM sys_user_sync_category
WHERE dept_id = #{deptId} WHERE dept_id = #{deptId}
AND tenant_id = #{tenantId}
LIMIT 1 LIMIT 1
</select> </select>
<select id="getSubDeptId" resultType="java.lang.String"> <select id="getSubDeptId" resultType="java.lang.String">
...@@ -30,80 +22,73 @@ ...@@ -30,80 +22,73 @@
</foreach> </foreach>
</select> </select>
<select id="getUserEmail" resultType="com.cmeeting.dto.UserDTO"> <select id="getUserEmail" resultType="com.cmeeting.dto.UserDTO">
select t1.user_id as wId,IFNULL(t1.email,t1.company_email) as email select t1.user_id as wId, IFNULL(t1.email, t1.company_email) as email
from sys_user_sync t1 from sys_user_sync t1
where (t1.email is not null where (t1.email is not null
or t1.company_email is not null) or t1.company_email is not null)
AND t1.tenant_id = #{tenantId}
</select> </select>
<select id="getSimpleUserList" resultType="com.cmeeting.ad.entity.SysUserSync"> <select id="getSimpleUserList" resultType="com.cmeeting.ad.entity.SysUserSync">
select t1.user_id as userId,t1.name select t1.user_id as userId, t1.name
from sys_user_sync t1 from sys_user_sync t1
<where>
<if test="tenantId != null and tenantId != ''">
AND t1.tenant_id = #{tenantId}
</if>
</where>
group by t1.user_id group by t1.user_id
</select> </select>
<select id="getSimpleDeptList" resultType="com.cmeeting.ad.entity.SysDept"> <select id="getSimpleDeptList" resultType="com.cmeeting.ad.entity.SysDept">
SELECT SELECT susc.dept_id,
susc.dept_id, susc.`name`
susc.`name` FROM sys_user_sync_category AS susc
FROM
sys_user_sync_category AS susc
WHERE
susc.tenant_id = #{tenantId}
</select> </select>
<select id="findName" resultType="com.cmeeting.dto.PermissionCheckedDTO$User"> <select id="findName" resultType="com.cmeeting.dto.PermissionCheckedDTO$User">
select distinct t1.user_id as id,t1.name,t2.name as deptName select distinct t1.user_id as id,t1.name,t2.name as deptName
from sys_user_sync t1 from sys_user_sync t1
left join sys_user_sync_category t2 on t1.dept_id = t2.dept_id and t1.tenant_id = t2.tenant_id left join sys_user_sync_category t2 on t1.dept_id = t2.dept_id and t1.tenant_id = t2.tenant_id
where t1.tenant_id = #{tenantId} <where>
<if test="categoryId != null and categoryId != ''"> <if test="categoryId != null and categoryId != ''">
and t1.dept_id = #{categoryId} and t1.dept_id = #{categoryId}
</if> </if>
<if test="deptIds!=null and deptIds.size > 0"> <if test="deptIds!=null and deptIds.size > 0">
and t2.dept_id in and t2.dept_id in
<foreach collection="deptIds" open="(" close=")" item="id" separator=",">#{id}</foreach> <foreach collection="deptIds" open="(" close=")" item="id" separator=",">#{id}</foreach>
</if> </if>
<if test="userList != null and userList.size > 0"> <if test="userList != null and userList.size > 0">
and t1.user_id in and t1.user_id in
<foreach collection="userList" item="id" close=")" open="(" separator=","> <foreach collection="userList" item="id" close=")" open="(" separator=",">
#{id} #{id}
</foreach> </foreach>
</if> </if>
<if test="search != null and search!=''"> <if test="search != null and search!=''">
and t1.name like concat('%',#{search},'%') and t1.name like concat('%',#{search},'%')
</if> </if>
</where>
</select> </select>
<select id="findInUserIdsOrShareCateIds" resultType="com.cmeeting.dto.PermissionCheckedDTO$User"> <select id="findInUserIdsOrShareCateIds" resultType="com.cmeeting.dto.PermissionCheckedDTO$User">
select distinct t1.user_id as id,t1.name,t2.name as deptName select distinct t1.user_id as id,t1.name,t2.name as deptName
from sys_user_sync t1 from sys_user_sync t1
left join sys_user_sync_category t2 on t1.dept_id = t2.dept_id and t1.tenant_id = t2.tenant_id left join sys_user_sync_category t2 on t1.dept_id = t2.dept_id and t1.tenant_id = t2.tenant_id
where t1.tenant_id = #{tenantId} <where>
and ( (
t1.user_id in t1.user_id in
<foreach collection="userIds" item="id" close=")" open="(" separator=","> <foreach collection="userIds" item="id" close=")" open="(" separator=",">
#{id} #{id}
</foreach> </foreach>
or or
t1.dept_id in t1.dept_id in
<foreach collection="shareCateIds" item="id" close=")" open="(" separator=","> <foreach collection="shareCateIds" item="id" close=")" open="(" separator=",">
#{id} #{id}
</foreach> </foreach>
) )
<if test="search != null and search!=''"> <if test="search != null and search!=''">
and t1.name like concat('%',#{search},'%') and t1.name like concat('%',#{search},'%')
</if> </if>
</where>
</select> </select>
<select id="findByParam" resultType="com.cmeeting.dto.PermissionCheckedDTO$User"> <select id="findByParam" resultType="com.cmeeting.dto.PermissionCheckedDTO$User">
select distinct t1.user_id as id,t1.name,t2.name as deptName select distinct t1.user_id as id,t1.name,t2.name as deptName
from sys_user_sync t1 from sys_user_sync t1
left join sys_user_sync_category t2 on t1.dept_id = t2.dept_id and t1.tenant_id = t2.tenant_id left join sys_user_sync_category t2 on t1.dept_id = t2.dept_id and t1.tenant_id = t2.tenant_id
where t1.tenant_id = #{tenantId} <where>
<if test="categoryId != null and categoryId!=''"> <if test="categoryId != null and categoryId!=''">
and t1.dept_id = #{categoryId} and t1.dept_id = #{categoryId}
</if> </if>
...@@ -128,6 +113,7 @@ ...@@ -128,6 +113,7 @@
#{id} #{id}
</foreach> </foreach>
</if> </if>
</where>
</select> </select>
<select id="selectByDeptId" resultType="com.cmeeting.dto.SysUserSyncDTO"> <select id="selectByDeptId" resultType="com.cmeeting.dto.SysUserSyncDTO">
select DISTINCT t1.* select DISTINCT t1.*
...@@ -140,27 +126,28 @@ ...@@ -140,27 +126,28 @@
#{id} #{id}
</foreach> </foreach>
</if> </if>
where t1.tenant_id = #{tenantId} <where>
<if test="search!=null and search!=''"> <if test="search!=null and search!=''">
and (t1.user_id like concat('%',#{search},'%') or t1.name like concat('%',#{search},'%') or t1.nick_name like concat('%',#{search},'%')) (t1.user_id like concat('%',#{search},'%') or t1.name like concat('%',#{search},'%') or t1.nick_name
</if> like concat('%',#{search},'%'))
</if>
</where>
</select> </select>
<select id="selectParamByUserIdList" resultType="java.util.LinkedHashMap"> <select id="selectParamByUserIdList" resultType="java.util.LinkedHashMap">
SELECT SELECT
sys_user_sync_category.`name` as deptName, sys_user_sync_category.`name` as deptName,
sys_user_sync.`name`, sys_user_sync.`name`,
sys_user_sync.user_id as userId sys_user_sync.user_id as userId
FROM FROM
sys_user_sync, sys_user_sync,
sys_user_sync_category sys_user_sync_category
<where> <where>
sys_user_sync.tenant_id = #{tenantId} sys_user_sync.dept_id = sys_user_sync_category.dept_id
and sys_user_sync_category.tenant_id = #{tenantId}
and sys_user_sync.dept_id = sys_user_sync_category.dept_id
<if test="searchValue != null and searchValue != ''"> <if test="searchValue != null and searchValue != ''">
and (sys_user_sync.user_id like concat('%',#{searchValue},'%') or sys_user_sync.name like concat('%',#{searchValue},'%') or sys_user_sync_category.name like concat('%',#{searchValue},'%')) and (sys_user_sync.user_id like concat('%',#{searchValue},'%') or sys_user_sync.name like
concat('%',#{searchValue},'%') or sys_user_sync_category.name like concat('%',#{searchValue},'%'))
</if> </if>
<if test="userIdList.size() > 0"> <if test="userIdList.size() > 0">
and sys_user_sync.user_id in and sys_user_sync.user_id in
......
<?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.secondary.SysUserMapper">
<select id="getUserDeptPath" resultType="java.lang.String">
SELECT t2.path
FROM sys_user t1
LEFT JOIN sys_user_category t2 ON t1.category_id = t2.id AND t2.is_del = 0
WHERE t1.id = #{userId} AND t1.is_del = 0
</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.tertiary.SysTenantMapper">
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论