Merge remote-tracking branch 'origin/cc_20230520_partner' into cc_20230520_partner
This commit is contained in:
@@ -67,6 +67,7 @@
|
||||
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.5" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.coolstore:coolstore-base:1.5.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
|
||||
<orderEntry type="module" module-name="coolstore-partner-dao" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:3.0.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.2" level="project" />
|
||||
@@ -93,7 +94,6 @@
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
package com.cool.store.consumer;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.aliyun.openservices.ons.api.Action;
|
||||
import com.aliyun.openservices.ons.api.ConsumeContext;
|
||||
import com.aliyun.openservices.ons.api.Message;
|
||||
import com.aliyun.openservices.ons.api.MessageListener;
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.dto.enterprise.EnterpriseInitDTO;
|
||||
import com.cool.store.enums.EnterpriseStatusEnum;
|
||||
import com.cool.store.service.EnterpriseInitService;
|
||||
import com.cool.store.utils.RedisUtilPool;
|
||||
import com.coolstore.base.enums.AppTypeEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 企业开通初始化
|
||||
*
|
||||
* @author chenyupeng
|
||||
* @since 2022/1/26
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class EnterpriseInitListener implements MessageListener {
|
||||
@Resource
|
||||
private EnterpriseInitService enterpriseInitService;
|
||||
@Autowired
|
||||
private RedisUtilPool redisUtilPool;
|
||||
|
||||
@Override
|
||||
public Action consume(Message message, ConsumeContext consumeContext) {
|
||||
if(message.getReconsumeTimes() + 1 >= Integer.parseInt(CommonConstants.MaxReconsumeTimes)){
|
||||
//超过最大消费次数
|
||||
return Action.CommitMessage;
|
||||
}
|
||||
String text = new String(message.getBody());
|
||||
if(StringUtils.isBlank(text)){
|
||||
return Action.CommitMessage;
|
||||
}
|
||||
String lockKey = "EnterpriseInitDataSync:" + message.getMsgID();
|
||||
EnterpriseInitDTO enterpriseInitDTO = JSONObject.parseObject(text, EnterpriseInitDTO.class);
|
||||
log.info("EnterpriseInitListener messageId:{},try times:{}, receive data :{}", message.getMsgID(), message.getReconsumeTimes(), JSONObject.toJSONString(enterpriseInitDTO));
|
||||
boolean lock = redisUtilPool.setNxExpire(lockKey, message.getMsgID(), CommonConstants.ENTERPRISE_OPEN_LOCK_TIMES);
|
||||
if (lock) {
|
||||
try {
|
||||
String appType = enterpriseInitDTO.getAppType();
|
||||
String enterpriseStatusKey = MessageFormat.format(CommonConstants.ENTERPRISE_OPEN_STATUS_KEY, enterpriseInitDTO.getCorpId(), enterpriseInitDTO.getAppType());
|
||||
enterpriseInitService.enterpriseInit(enterpriseInitDTO.getCorpId(), AppTypeEnum.getAppType(enterpriseInitDTO.getAppType()),
|
||||
enterpriseInitDTO.getEid(), enterpriseInitDTO.getDbName(), enterpriseInitDTO.getUserId());
|
||||
enterpriseInitService.sendOpenSucceededMsg(enterpriseInitDTO.getCorpId(), enterpriseInitDTO.getAppType(), Arrays.asList(enterpriseInitDTO.getUserId()));
|
||||
//更新企业开通缓存状态
|
||||
redisUtilPool.setString(enterpriseStatusKey, String.valueOf(EnterpriseStatusEnum.NORMAL.getCode()), CommonConstants.ONE_DAY_SECONDS);
|
||||
return Action.CommitMessage;
|
||||
} catch (Exception e) {
|
||||
log.error("has exception", e);
|
||||
} finally {
|
||||
redisUtilPool.delKey(lockKey);
|
||||
}
|
||||
}
|
||||
return Action.CommitMessage;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.cool.store.consumer;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.aliyun.openservices.ons.api.Action;
|
||||
import com.aliyun.openservices.ons.api.ConsumeContext;
|
||||
import com.aliyun.openservices.ons.api.Message;
|
||||
import com.aliyun.openservices.ons.api.MessageListener;
|
||||
import com.cool.store.dto.enterprise.EnterpriseOpenMsg;
|
||||
import com.cool.store.service.EnterpriseInitService;
|
||||
import com.coolstore.base.enums.RocketMqTagEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 执行企业端脚本消息监听
|
||||
* @author :xugangkun
|
||||
* @date :2022/2/11 15:32
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class EnterpriseScriptListener implements MessageListener {
|
||||
|
||||
@Resource
|
||||
private EnterpriseInitService enterpriseInitService;
|
||||
|
||||
@Override
|
||||
public Action consume(Message message, ConsumeContext consumeContext) {
|
||||
String text = new String(message.getBody());
|
||||
log.info("EnterpriseScriptListener messageId:{}, msg:{}", message.getMsgID(), text);
|
||||
if(StringUtils.isBlank(text)){
|
||||
return Action.CommitMessage;
|
||||
}
|
||||
switch (RocketMqTagEnum.getByTag(message.getTag())){
|
||||
case ENTERPRISE_OPEN_ENTERPRISE_RUN_SCRIPT:
|
||||
log.info("run Enterprise Script start");
|
||||
EnterpriseOpenMsg msg = null;
|
||||
try {
|
||||
msg = JSON.parseObject(text, EnterpriseOpenMsg.class);
|
||||
} catch (Exception e) {
|
||||
log.error("invalid auth msg={}", text);
|
||||
}
|
||||
enterpriseInitService.runEnterpriseScript(msg);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return Action.CommitMessage;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,10 @@
|
||||
package com.cool.store.http;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.dto.enterprise.AuthInfoDTO;
|
||||
import com.cool.store.dto.enterprise.AuthScopeDTO;
|
||||
import com.cool.store.dto.enterprise.EnterpriseUserDTO;
|
||||
import com.cool.store.dto.enterprise.SysDepartmentDTO;
|
||||
import com.cool.store.dto.login.UserIdInfoDTO;
|
||||
import com.cool.store.utils.RestTemplateUtil;
|
||||
import com.coolstore.base.dto.ResultDTO;
|
||||
@@ -10,6 +13,8 @@ import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@@ -46,9 +51,13 @@ public class ISVHttpRequest {
|
||||
|
||||
public EnterpriseUserDTO getUserDetailByUserId(String corpId, String userId, String appType){
|
||||
String url = isvDomain + "/isv/user/getUserDetail";
|
||||
HashMap requestMap = new HashMap();
|
||||
requestMap.put("corpId", corpId);
|
||||
requestMap.put("userId", userId);
|
||||
requestMap.put("appType", appType);
|
||||
ResponseEntity<ResultDTO> responseEntity = null;
|
||||
try {
|
||||
responseEntity = RestTemplateUtil.loadGet(url, ResultDTO.class);
|
||||
responseEntity = RestTemplateUtil.get(url, ResultDTO.class, requestMap);
|
||||
log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity));
|
||||
if(Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()){
|
||||
return JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getBody().getData()), EnterpriseUserDTO.class);
|
||||
@@ -58,4 +67,115 @@ public class ISVHttpRequest {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<String> getAdminUserList(String corpId, String appType){
|
||||
String url = isvDomain + "/isv/corp/getAdminUserList";
|
||||
HashMap requestMap = new HashMap();
|
||||
requestMap.put("corpId", corpId);
|
||||
requestMap.put("appType", appType);
|
||||
ResponseEntity<ResultDTO> responseEntity = null;
|
||||
try {
|
||||
responseEntity = RestTemplateUtil.get(url, ResultDTO.class, requestMap);
|
||||
log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity));
|
||||
if(Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()){
|
||||
return JSONObject.parseArray(JSONObject.toJSONString(responseEntity.getBody().getData()), String.class);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.info("调用isv出错{}", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public AuthInfoDTO getAuthInfo(String corpId, String appType){
|
||||
String url = isvDomain + "/isv/corp/getAuthInfo";
|
||||
HashMap requestMap = new HashMap();
|
||||
requestMap.put("corpId", corpId);
|
||||
requestMap.put("appType", appType);
|
||||
ResponseEntity<ResultDTO> responseEntity = null;
|
||||
try {
|
||||
responseEntity = RestTemplateUtil.get(url, ResultDTO.class, requestMap);
|
||||
log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity));
|
||||
if(Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()){
|
||||
return JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getBody().getData()), AuthInfoDTO.class);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.info("调用isv出错{}", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<SysDepartmentDTO> getDepartments(String corpId, String appType, String parentId){
|
||||
String url = isvDomain + "/isv/corp/getDepartments";
|
||||
HashMap requestMap = new HashMap();
|
||||
requestMap.put("corpId", corpId);
|
||||
requestMap.put("appType", appType);
|
||||
requestMap.put("parentId", parentId);
|
||||
ResponseEntity<ResultDTO> responseEntity = null;
|
||||
try {
|
||||
responseEntity = RestTemplateUtil.get(url, ResultDTO.class, requestMap);
|
||||
log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity));
|
||||
if(Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()){
|
||||
return JSONObject.parseArray(JSONObject.toJSONString(responseEntity.getBody().getData()), SysDepartmentDTO.class);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.info("调用isv出错{}", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public AuthScopeDTO getAuthScope(String corpId, String appType){
|
||||
String url = isvDomain + "/isv/corp/getAuthScope";
|
||||
HashMap requestMap = new HashMap();
|
||||
requestMap.put("corpId", corpId);
|
||||
requestMap.put("appType", appType);
|
||||
ResponseEntity<ResultDTO> responseEntity = null;
|
||||
try {
|
||||
responseEntity = RestTemplateUtil.get(url, ResultDTO.class, requestMap);
|
||||
log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity));
|
||||
if(Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()){
|
||||
return JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getBody().getData()), AuthScopeDTO.class);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.info("调用isv出错{}", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<EnterpriseUserDTO> getDepartmentUsers(String corpId, String appType, String deptId){
|
||||
String url = isvDomain + "/isv/corp/getDepartmentUsers";
|
||||
HashMap requestMap = new HashMap();
|
||||
requestMap.put("corpId", corpId);
|
||||
requestMap.put("appType", appType);
|
||||
requestMap.put("deptId", deptId);
|
||||
ResponseEntity<ResultDTO> responseEntity = null;
|
||||
try {
|
||||
responseEntity = RestTemplateUtil.get(url, ResultDTO.class, requestMap);
|
||||
log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity));
|
||||
if(Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()){
|
||||
return JSONObject.parseArray(JSONObject.toJSONString(responseEntity.getBody().getData()), EnterpriseUserDTO.class);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.info("调用isv出错{}", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<EnterpriseUserDTO> getUserDetailByUserIds(String corpId, List<String> userIdList, String appType) {
|
||||
String url = isvDomain + "/isv/corp/getDepartmentUsers";
|
||||
HashMap requestMap = new HashMap();
|
||||
requestMap.put("corpId", corpId);
|
||||
requestMap.put("appType", appType);
|
||||
requestMap.put("userIds", userIdList);
|
||||
ResponseEntity<ResultDTO> responseEntity = null;
|
||||
try {
|
||||
responseEntity = RestTemplateUtil.get(url, ResultDTO.class, requestMap);
|
||||
log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity));
|
||||
if(Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()){
|
||||
return JSONObject.parseArray(JSONObject.toJSONString(responseEntity.getBody().getData()), EnterpriseUserDTO.class);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.info("调用isv出错{}", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,9 +8,12 @@ import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.utils.RestTemplateUtil;
|
||||
import com.coolstore.base.dto.ResultDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.shiro.crypto.hash.Hash;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@@ -25,9 +28,13 @@ public class WechatRest {
|
||||
|
||||
public CodeSessionDTO miniProgramJsCodeSession(String appId, String secret, String jsCode){
|
||||
String url = "https://api.weixin.qq.com/sns/jscode2session";
|
||||
Map requestMap = new HashMap<String, String>();
|
||||
requestMap.put("appId", appId);
|
||||
requestMap.put("secret", secret);
|
||||
requestMap.put("jsCode", jsCode);
|
||||
ResponseEntity<CodeSessionDTO> responseEntity = null;
|
||||
try {
|
||||
responseEntity = RestTemplateUtil.loadGet(url, CodeSessionDTO.class);
|
||||
responseEntity = RestTemplateUtil.get(url, CodeSessionDTO.class);
|
||||
log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity));
|
||||
if(Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()){
|
||||
return responseEntity.getBody();
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.cool.store.service;
|
||||
|
||||
import com.cool.store.dto.enterprise.EnterpriseOpenMsg;
|
||||
import com.coolstore.base.enums.AppTypeEnum;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhangchenbiao
|
||||
* @FileName: EnterpriseInitService
|
||||
* @Description:
|
||||
* @date 2023-05-29 15:43
|
||||
*/
|
||||
public interface EnterpriseInitService {
|
||||
|
||||
void runEnterpriseScript(EnterpriseOpenMsg msg);
|
||||
|
||||
|
||||
void enterpriseInit(String cropId, AppTypeEnum appType, String eid, String dbName, String openUserId);
|
||||
|
||||
void sendOpenSucceededMsg(String corpId, String appType, List<String> userList);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.cool.store.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhangchenbiao
|
||||
* @FileName: EnterpriseUserService
|
||||
* @Description: 用户service
|
||||
* @date 2023-05-29 19:58
|
||||
*/
|
||||
public interface EnterpriseUserService {
|
||||
|
||||
void updateUserRegionPathList(String enterpriseId, List<String> userIds);
|
||||
|
||||
}
|
||||
@@ -2,22 +2,32 @@ package com.cool.store.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.dao.EnterpriseUserDAO;
|
||||
import com.cool.store.dao.EnterpriseUserRoleDAO;
|
||||
import com.cool.store.dao.SysRoleDAO;
|
||||
import com.cool.store.dto.enterprise.EnterpriseInitDTO;
|
||||
import com.cool.store.dto.enterprise.EnterpriseOpenMsg;
|
||||
import com.cool.store.dto.enterprise.EnterpriseUserDTO;
|
||||
import com.cool.store.dto.enterprise.EnterpriseUserRole;
|
||||
import com.cool.store.dao.*;
|
||||
import com.cool.store.dto.enterprise.*;
|
||||
import com.cool.store.entity.EnterpriseUserDO;
|
||||
import com.cool.store.entity.RegionDO;
|
||||
import com.cool.store.entity.SysDepartmentDO;
|
||||
import com.cool.store.entity.UserRegionMappingDO;
|
||||
import com.cool.store.enums.AIEnum;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.enums.RegionTypeEnum;
|
||||
import com.cool.store.enums.RoleEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.http.ISVHttpRequest;
|
||||
import com.cool.store.mq.SimpleMessageService;
|
||||
import com.cool.store.request.EnterpriseUserRequest;
|
||||
import com.cool.store.service.EnterpriseInitService;
|
||||
import com.cool.store.service.EnterpriseUserService;
|
||||
import com.cool.store.utils.DataSourceHelper;
|
||||
import com.cool.store.utils.ListOptUtils;
|
||||
import com.cool.store.utils.ScriptUtil;
|
||||
import com.cool.store.utils.UUIDUtils;
|
||||
import com.coolstore.base.enums.AppTypeEnum;
|
||||
import com.coolstore.base.enums.RocketMqTagEnum;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.support.EncodedResource;
|
||||
@@ -25,6 +35,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author zhangchenbiao
|
||||
@@ -34,7 +45,7 @@ import java.util.*;
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class EnterpriseInitServiceImpl {
|
||||
public class EnterpriseInitServiceImpl implements EnterpriseInitService {
|
||||
|
||||
@Resource
|
||||
protected ScriptUtil scriptUtil;
|
||||
@@ -48,7 +59,16 @@ public class EnterpriseInitServiceImpl {
|
||||
private SimpleMessageService simpleMessageService;
|
||||
@Resource
|
||||
private ISVHttpRequest isvHttpRequest;
|
||||
@Resource
|
||||
private UserRegionMappingDAO userRegionMappingDAO;
|
||||
@Resource
|
||||
private RegionDAO regionDAO;
|
||||
@Resource
|
||||
private SysDepartmentDAO sysDepartmentDAO;
|
||||
@Resource
|
||||
private EnterpriseUserService enterpriseUserService;
|
||||
|
||||
@Override
|
||||
public void runEnterpriseScript(EnterpriseOpenMsg msg) {
|
||||
runEnterpriseScriptAndInitAuthUser(msg);
|
||||
//抛出开始数据同步消息
|
||||
@@ -62,6 +82,406 @@ public class EnterpriseInitServiceImpl {
|
||||
simpleMessageService.send(JSONObject.toJSONString(enterpriseInitDTO), RocketMqTagEnum.ENTERPRISE_OPEN_DATA_SYNC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enterpriseInit(String corpId, AppTypeEnum appTypeEnum, String eid, String dbName, String openUserId) {
|
||||
try {
|
||||
String appType = appTypeEnum.getValue();
|
||||
//优先处理ai用户 保证能够超登
|
||||
List<EnterpriseUserRequest> authUsers = new ArrayList<>();
|
||||
List<String> adminUserList = isvHttpRequest.getAdminUserList(corpId, appType);
|
||||
//添加ai用户
|
||||
authUsers.add(getAIUser());
|
||||
authUsers.addAll(getAdminList(adminUserList));
|
||||
DataSourceHelper.changeToSpecificDataSource(dbName);
|
||||
//获取开通授权信息
|
||||
AuthInfoDTO authInfo = isvHttpRequest.getAuthInfo(corpId, appType);
|
||||
//记录此次处理的用户的id,
|
||||
Set<String> handlerUserIds = new HashSet<>();
|
||||
//处理ai用户
|
||||
dealUsers(authUsers, eid, corpId, dbName, new HashMap<>(), null, authInfo, handlerUserIds);
|
||||
//初始化部门
|
||||
List<SysDepartmentDTO> sysDepartmentDTOS = initDept(corpId, eid, appType, dbName);
|
||||
if(CollectionUtils.isEmpty(sysDepartmentDTOS)){
|
||||
//构建跟部门
|
||||
SysDepartmentDTO root = new SysDepartmentDTO();
|
||||
root.setId(CommonConstants.ROOT_DEPT_ID_STR);
|
||||
root.setName(authInfo.getAuthCorpInfo().getCorpName());
|
||||
sysDepartmentDTOS.add(root);
|
||||
}
|
||||
//初始化根区域
|
||||
initRootRegion(sysDepartmentDTOS, eid, dbName);
|
||||
//初始化用户
|
||||
initUser(sysDepartmentDTOS,corpId,eid,appType,dbName, adminUserList, authInfo, handlerUserIds);
|
||||
} catch (Exception e) {
|
||||
log.error("enterpriseInit enterpriseInit error,corpId:{},appType:{}", corpId, appTypeEnum.getValue(), e);
|
||||
throw new ServiceException(ErrorCodeEnum.FEISHU_SERVICE_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendOpenSucceededMsg(String corpId, String appType, List<String> userList) {
|
||||
if(CollectionUtils.isEmpty(userList)){
|
||||
return;
|
||||
}
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("userList", userList);
|
||||
jsonObject.put("appType", appType);
|
||||
jsonObject.put("corpId", corpId);
|
||||
simpleMessageService.send(jsonObject.toJSONString(), RocketMqTagEnum.OPEN_SUCCEEDED_MSG_QUEUE);
|
||||
}
|
||||
|
||||
public void dealUsers(List<EnterpriseUserRequest> users, String eid, String corpId, String dbName,
|
||||
Map<String, String> deptIdMap, Long unclassifiedRegionId, AuthInfoDTO authInfo, Set<String> handlerUserIds) {
|
||||
|
||||
DataSourceHelper.changeToSpecificDataSource(dbName);
|
||||
try {
|
||||
insertUserRelatedInfo(users, eid, dbName, authInfo, handlerUserIds);
|
||||
//处理用户和区域的关系
|
||||
handlerUserRegionMapping(eid, users, unclassifiedRegionId);
|
||||
} catch (Exception e) {
|
||||
log.error("dealUsers insertUserRelatedInfo error, corpId={}", corpId, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void insertUserRelatedInfo(List<EnterpriseUserRequest> deptUsers, String eid, String dbName, AuthInfoDTO authInfo, Set<String> handlerUserIds) {
|
||||
|
||||
if (CollectionUtils.isEmpty(deptUsers)) {
|
||||
log.info("insertUserRelatedInfo deptUsers is empty,eid:{}",eid);
|
||||
return;
|
||||
}
|
||||
log.info("insertUserRelatedInfo-{}, deptUsersSize:{}",eid, deptUsers.size());
|
||||
DataSourceHelper.reset();
|
||||
//提取enterpriseUserDO
|
||||
List<EnterpriseUserDO> collect = ListUtils.emptyIfNull(deptUsers).stream()
|
||||
.map(EnterpriseUserRequest::getEnterpriseUserDO)
|
||||
.collect(Collectors.toList());
|
||||
DataSourceHelper.changeToSpecificDataSource(dbName);
|
||||
enterpriseUserDAO.batchInsertOrUpdate(eid, collect);
|
||||
// 同步用户与角色的关系
|
||||
Long masterRoleId = sysRoleDAO.getRoleIdByRoleEnum(eid, RoleEnum.MASTER.getRoleEnum());
|
||||
Long employeeRoleId = sysRoleDAO.getRoleIdByRoleEnum(eid, RoleEnum.EMPLOYEE.getRoleEnum());
|
||||
Long subMaster = sysRoleDAO.getRoleIdByRoleEnum(eid, RoleEnum.SUB_MASTER.getRoleEnum());
|
||||
Long shopOwner = sysRoleDAO.getRoleIdByRoleEnum(eid, RoleEnum.SHOPOWNER.getRoleEnum());
|
||||
List<EnterpriseUserRole> userRoles = new ArrayList<>();
|
||||
collect.forEach(f -> {
|
||||
if (Objects.nonNull(f)) {
|
||||
//记录此次操作的用户
|
||||
handlerUserIds.add(f.getUserId());
|
||||
if (Objects.nonNull(f.getIsAdmin()) && f.getIsAdmin()) {
|
||||
log.info("绑定管理员角色,{}", f.getUserId());
|
||||
userRoles.add(new EnterpriseUserRole(masterRoleId.toString(), f.getUserId()));
|
||||
//如果是开通人,再给子管理员权限
|
||||
if (authInfo.getAuthUserInfo()!=null){
|
||||
if (f.getUserId().equals(authInfo.getAuthUserInfo().getUserId())) {
|
||||
userRoles.add(new EnterpriseUserRole(subMaster.toString(), f.getUserId()));
|
||||
userRoles.add(new EnterpriseUserRole(shopOwner.toString(), f.getUserId()));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
userRoles.add(new EnterpriseUserRole(employeeRoleId.toString(), f.getUserId()));
|
||||
}
|
||||
}
|
||||
});
|
||||
if (CollectionUtils.isNotEmpty(userRoles)) {
|
||||
enterpriseUserRoleDAO.insertBatchUserRole(eid, userRoles);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理用户和区域的关系
|
||||
* @param eid
|
||||
* @param enterpriseUserRequests
|
||||
*/
|
||||
public void handlerUserRegionMapping(String eid, List<EnterpriseUserRequest> enterpriseUserRequests, Long unclassifiedRegionId) {
|
||||
//用户区域映射关系
|
||||
List<UserRegionMappingDO> userRegionMappings = new ArrayList<>();
|
||||
List<String> userIds = new ArrayList<>();
|
||||
List<Long> regionIds = new ArrayList<>();
|
||||
enterpriseUserRequests.forEach(user -> {
|
||||
if (Objects.isNull(user.getEnterpriseUserDO())) {
|
||||
return;
|
||||
}
|
||||
//移除不在授权范围内的部门
|
||||
List<String> deptIds = user.getDepartmentLists();
|
||||
if (CollectionUtils.isEmpty(deptIds)) {
|
||||
if (Objects.isNull(unclassifiedRegionId)) {
|
||||
return;
|
||||
}
|
||||
//如果所属的部门未在授权部门内,挂在未分组
|
||||
regionIds.add(unclassifiedRegionId);
|
||||
} else {
|
||||
//db查询区域表的数据,找到映射的区域
|
||||
List<Long> regionIdsBySynDingDeptIds = regionDAO.getRegionIdsBySynDingDeptIds(eid, deptIds.stream().map(a -> a).collect(Collectors.toList()));
|
||||
if (CollectionUtils.isNotEmpty(regionIdsBySynDingDeptIds)) {
|
||||
regionIds.addAll(regionIdsBySynDingDeptIds);
|
||||
} else {
|
||||
//未找到映射关系
|
||||
regionIds.add(unclassifiedRegionId);
|
||||
}
|
||||
}
|
||||
//构建用户和区域的关系
|
||||
ListUtils.emptyIfNull(regionIds)
|
||||
.stream()
|
||||
.forEach(item -> {
|
||||
userRegionMappings.add(buildUserRegionMappingDO(user.getEnterpriseUserDO().getUserId(), item));
|
||||
|
||||
});
|
||||
//清除用户区域的关系的regionIds用来存储下属映射的区域regionIds
|
||||
regionIds.clear();
|
||||
//构建我的下属
|
||||
//移除不在授权范围内的部门的主管部门
|
||||
List<String> leaderDeptIds = user.getLeaderInDepts();
|
||||
if (CollectionUtils.isNotEmpty(leaderDeptIds)) {
|
||||
List<Long> regionIdsBySynDingDeptIds = regionDAO.getRegionIdsBySynDingDeptIds(eid, leaderDeptIds.stream().map(a->a).collect(Collectors.toList()));
|
||||
if (CollectionUtils.isNotEmpty(regionIdsBySynDingDeptIds)) {
|
||||
regionIds.addAll(regionIdsBySynDingDeptIds);
|
||||
}
|
||||
}
|
||||
//用完即清除
|
||||
regionIds.clear();
|
||||
userIds.add(user.getEnterpriseUserDO().getUserId());
|
||||
//触发条件,满足一个,就开始进行处理落库
|
||||
if (userRegionMappings.size() > CommonConstants.DEAL_RECORD_MAX_SIZE) {
|
||||
//先删除 后新增
|
||||
//用户和区域的映射关系
|
||||
userRegionMappingDAO.deletedByUserIds(eid, userIds);
|
||||
userRegionMappingDAO.batchInsertRegionMapping(eid, userRegionMappings);
|
||||
//调用订正用户表字段user_region_ids
|
||||
enterpriseUserService.updateUserRegionPathList(eid, userIds);
|
||||
userRegionMappings.clear();
|
||||
userIds.clear();
|
||||
}
|
||||
});
|
||||
if (CollectionUtils.isNotEmpty(userRegionMappings)) {
|
||||
//先删除 后新增
|
||||
//用户和区域的映射关系
|
||||
userRegionMappingDAO.deletedByUserIds(eid, userIds);
|
||||
userRegionMappingDAO.batchInsertRegionMapping(eid, userRegionMappings);
|
||||
//调用订正用户表字段user_region_ids
|
||||
enterpriseUserService.updateUserRegionPathList(eid, userIds);
|
||||
}
|
||||
}
|
||||
|
||||
public UserRegionMappingDO buildUserRegionMappingDO(String userId, Long regionId) {
|
||||
UserRegionMappingDO userRegionMappingDO = new UserRegionMappingDO();
|
||||
userRegionMappingDO.setUserId(userId);
|
||||
userRegionMappingDO.setRegionId(String.valueOf(regionId));
|
||||
return userRegionMappingDO;
|
||||
}
|
||||
|
||||
public void initRootRegion(List<SysDepartmentDTO> sysDepartmentDTOS, String eid, String dbName) {
|
||||
|
||||
try {
|
||||
Optional<SysDepartmentDTO> first = sysDepartmentDTOS.stream()
|
||||
.filter(s -> Objects.equals(CommonConstants.ROOT_DEPT_ID_STR, s.getId())).findFirst();
|
||||
|
||||
if (first.isPresent()) {
|
||||
DataSourceHelper.changeToSpecificDataSource(dbName);
|
||||
SysDepartmentDTO sysDepartmentDTO = first.get();
|
||||
RegionDO regionDO = new RegionDO();
|
||||
regionDO.setId(1L);
|
||||
regionDO.setRegionType(RegionTypeEnum.ROOT.getType());
|
||||
regionDO.setName(sysDepartmentDTO.getName());
|
||||
regionDO.setCreateName(CommonConstants.SYSTEM_USER_ID);
|
||||
regionDO.setCreateTime(Calendar.getInstance().getTimeInMillis());
|
||||
regionDO.setSynDingDeptId(CommonConstants.ROOT_DEPT_ID_STR);
|
||||
regionDO.setUnclassifiedFlag(CommonConstants.ZERO);
|
||||
regionDO.setRegionPath(null);
|
||||
regionDO.setStoreNum(CommonConstants.ONE);
|
||||
regionDAO.insertRoot(eid, regionDO);
|
||||
//同步部门为区域节点
|
||||
initRegionByDepartment(eid, CommonConstants.ROOT_DEPT_ID_STR);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("enterpriseInit initRootRegion error,eid:{}", eid, e);
|
||||
throw new ServiceException(ErrorCodeEnum.FEISHU_SERVICE_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
public void initRegionByDepartment(String eid, String deptId) {
|
||||
//首次获取 获取根部门下一级的所有数据
|
||||
List<QueryDeptChildDTO> queryDeptChildDTOS = sysDepartmentDAO.getDeptChildListByParentId(eid, deptId);
|
||||
if (CollectionUtils.isEmpty(queryDeptChildDTOS)) {
|
||||
return;
|
||||
}
|
||||
List<RegionDO> regionDOS = new ArrayList<>();
|
||||
List<String> syncDingDeptIds = new ArrayList<>();
|
||||
for (QueryDeptChildDTO deptChildDTO : queryDeptChildDTOS) {
|
||||
//设置上级区域的path,方便后续的追溯
|
||||
deptChildDTO.setPath("/" + deptId + "/");
|
||||
RegionDO regionDO = new RegionDO();
|
||||
regionDO.setParentId(String.valueOf(deptId));
|
||||
regionDO.setName(deptChildDTO.getName());
|
||||
regionDO.setCreateTime(System.currentTimeMillis());
|
||||
regionDO.setUpdateTime(System.currentTimeMillis());
|
||||
regionDO.setSynDingDeptId(String.valueOf(deptChildDTO.getId()));
|
||||
regionDO.setRegionType(RegionTypeEnum.PATH.getType());
|
||||
//次序值
|
||||
regionDO.setOrderNum(deptChildDTO.getDepartOrder());
|
||||
regionDO.setRegionPath("/" + CommonConstants.ROOT_DEPT_ID_STR + "/");
|
||||
regionDO.setDeleted(Boolean.FALSE);
|
||||
regionDOS.add(regionDO);
|
||||
syncDingDeptIds.add(String.valueOf(deptChildDTO.getId()));
|
||||
if (regionDOS.size() > CommonConstants.DEAL_RECORD_MAX_SIZE) {
|
||||
//批量插入或更新
|
||||
regionDAO.batchInsertRegions(regionDOS, eid);
|
||||
regionDOS.clear();
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(regionDOS)) {
|
||||
//批量插入或更新
|
||||
regionDAO.batchInsertRegions(regionDOS, eid);
|
||||
}
|
||||
//递归调用,接着获取下一层级的数据进行处理
|
||||
//获取region的id和部门id映射关系
|
||||
Map<String, Long> regionIdMap = regionDAO.getRegionSynDeptIdAndIdMapping(eid, syncDingDeptIds);
|
||||
handlerSubRegions(eid, queryDeptChildDTOS, regionIdMap);
|
||||
}
|
||||
|
||||
public void initUser(List<SysDepartmentDTO> sysDepartmentDTOS, String corpId, String eid, String appType, String dbName,
|
||||
List<String> adminList, AuthInfoDTO authInfo, Set<String> handlerUserIds) {
|
||||
try {
|
||||
//先查询是否存在未分组区域
|
||||
RegionDO unclassifiedRegionDO = regionDAO.getUnclassifiedRegionDO(eid);
|
||||
//获取通讯录授权范围
|
||||
AuthScopeDTO authScope = isvHttpRequest.getAuthScope(corpId, appType);
|
||||
List<EnterpriseUserDTO> enterpriseUserDTOS = null;
|
||||
if (CollectionUtils.isNotEmpty(authScope.getUserIdList())) {
|
||||
//通过授权范围获取授权用户
|
||||
enterpriseUserDTOS = isvHttpRequest.getUserDetailByUserIds(corpId, authScope.getUserIdList(), appType);
|
||||
}
|
||||
List<String> deptIdLists = ListUtils.emptyIfNull(sysDepartmentDTOS).stream().map(SysDepartmentDTO::getId).collect(Collectors.toList());
|
||||
//判断授权范围内是否有根节点,没有则移除
|
||||
if (CollectionUtils.isNotEmpty(authScope.getDeptIdList()) && !authScope.getDeptIdList().contains(CommonConstants.ROOT_DEPT_ID_STR)) {
|
||||
deptIdLists.remove(CommonConstants.ROOT_DEPT_ID_STR);
|
||||
sysDepartmentDTOS = ListUtils.emptyIfNull(sysDepartmentDTOS)
|
||||
.stream()
|
||||
.filter(a -> !a.getId().equals(CommonConstants.ROOT_DEPT_ID_STR))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
Map<String, String> deptIdMap = ListUtils.emptyIfNull(sysDepartmentDTOS).stream()
|
||||
.filter(d -> d.getParentId() != null)
|
||||
.collect(Collectors.toMap(SysDepartmentDTO::getId, SysDepartmentDTO::getParentId));
|
||||
List<EnterpriseUserRequest> authUsers = new ArrayList<>();
|
||||
|
||||
if (CollectionUtils.isNotEmpty(enterpriseUserDTOS)) {
|
||||
EnterpriseUserRequest tempRequest;
|
||||
EnterpriseUserDO tempDo;
|
||||
for (EnterpriseUserDTO enterpriseUserDTO : enterpriseUserDTOS) {
|
||||
tempDo = EnterpriseUserDTO.convertEnterpriseUserDTO2EnterpriseUserDO(enterpriseUserDTO);
|
||||
tempRequest = new EnterpriseUserRequest();
|
||||
tempRequest.setEnterpriseUserDO(tempDo);
|
||||
tempRequest.setDepartmentLists(ListOptUtils.getIntersection(enterpriseUserDTO.getDepartmentLists(), deptIdLists));
|
||||
tempRequest.setLeaderInDepts(ListOptUtils.getIntersection(enterpriseUserDTO.getIsLeaderInDepts(), deptIdLists));
|
||||
authUsers.add(tempRequest);
|
||||
}
|
||||
}
|
||||
dealUsers(authUsers,eid,corpId,dbName, deptIdMap, unclassifiedRegionDO.getId(), authInfo, handlerUserIds);
|
||||
List<EnterpriseUserRequest> deptUsers;
|
||||
if (CollectionUtils.isNotEmpty(sysDepartmentDTOS)) {
|
||||
|
||||
for (SysDepartmentDTO sysDepartmentDTO : sysDepartmentDTOS) {
|
||||
//通过授权部门获取授权用户
|
||||
List<EnterpriseUserDTO> departmentUsersQw = isvHttpRequest.getDepartmentUsers(corpId, sysDepartmentDTO.getId(), appType);
|
||||
deptUsers = ListUtils.emptyIfNull(departmentUsersQw).stream().map(e -> {
|
||||
EnterpriseUserRequest enterpriseUserRequest = new EnterpriseUserRequest();
|
||||
enterpriseUserRequest.setEnterpriseUserDO(EnterpriseUserDTO.convertEnterpriseUserDTO2EnterpriseUserDO(e));
|
||||
enterpriseUserRequest.setDepartmentLists(ListOptUtils.getIntersection(e.getDepartmentLists(), deptIdLists));
|
||||
enterpriseUserRequest.setLeaderInDepts(ListOptUtils.getIntersection(e.getIsLeaderInDepts(), deptIdLists));
|
||||
return enterpriseUserRequest;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
if (CollectionUtils.isNotEmpty(deptUsers)) {
|
||||
log.info("enterpriseInit initUser deptUsersInfo, corpId={}, deptId={}, userSize={}", corpId, sysDepartmentDTO.getId(), deptUsers.size());
|
||||
dealUsers(deptUsers, eid, corpId, dbName, deptIdMap, unclassifiedRegionDO.getId(), authInfo, handlerUserIds);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("enterpriseInit initUser error,eid:{},appType:{}", eid, appType, e);
|
||||
throw new ServiceException(ErrorCodeEnum.FEISHU_SERVICE_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
public void handlerSubRegions(String eid, List<QueryDeptChildDTO> depts, Map<String, Long> regionIdMap) {
|
||||
List<RegionDO> regionDOS = new ArrayList<>();
|
||||
//暂存一层级的数据
|
||||
List<QueryDeptChildDTO> results = new ArrayList<>();
|
||||
List<String> syncDingDeptIds = new ArrayList<>();
|
||||
for (QueryDeptChildDTO dept : depts) {
|
||||
//获取该层级的子节点处理
|
||||
List<QueryDeptChildDTO> childDTOS = sysDepartmentDAO.getDeptChildListByParentId(eid, String.valueOf(dept.getId()));
|
||||
for (QueryDeptChildDTO deptChildDTO : childDTOS) {
|
||||
//设置上级区域的path,方便后续的追溯
|
||||
deptChildDTO.setPath(dept.getPath() + regionIdMap.get(deptChildDTO.getParentId()) + "/");
|
||||
RegionDO regionDO = new RegionDO();
|
||||
regionDO.setParentId(String.valueOf(regionIdMap.get(deptChildDTO.getParentId())));
|
||||
regionDO.setCreateTime(System.currentTimeMillis());
|
||||
regionDO.setName(deptChildDTO.getName());
|
||||
regionDO.setSynDingDeptId(String.valueOf(deptChildDTO.getId()));
|
||||
regionDO.setUpdateTime(System.currentTimeMillis());
|
||||
regionDO.setOrderNum(deptChildDTO.getDepartOrder());
|
||||
regionDO.setRegionType(RegionTypeEnum.PATH.getType());
|
||||
//次序值
|
||||
regionDO.setRegionPath(dept.getPath() + regionIdMap.get(deptChildDTO.getParentId()) + "/");
|
||||
regionDO.setDeleted(Boolean.FALSE);
|
||||
regionDOS.add(regionDO);
|
||||
syncDingDeptIds.add(String.valueOf(deptChildDTO.getId()));
|
||||
}
|
||||
//暂存该层级的子节点数据
|
||||
if (CollectionUtils.isNotEmpty(childDTOS)) {
|
||||
results.addAll(childDTOS);
|
||||
}
|
||||
if (regionDOS.size() > CommonConstants.DEAL_RECORD_MAX_SIZE) {
|
||||
//批量插入或更新
|
||||
regionDAO.batchInsertRegions(regionDOS, eid);
|
||||
regionDOS.clear();
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(regionDOS)) {
|
||||
//批量插入或更新
|
||||
regionDAO.batchInsertRegions(regionDOS, eid);
|
||||
}
|
||||
//递归调用
|
||||
if (CollectionUtils.isNotEmpty(results)) {
|
||||
//一次用完即清理
|
||||
regionIdMap.clear();
|
||||
//添加这一层的region的id和部门id映射关系
|
||||
regionIdMap.putAll(regionDAO.getRegionSynDeptIdAndIdMapping(eid, syncDingDeptIds));
|
||||
handlerSubRegions(eid, results, regionIdMap);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<SysDepartmentDTO> initDept(String corpId, String eid, String appType, String dbName) {
|
||||
List<SysDepartmentDTO> departments = null;
|
||||
try {
|
||||
//获取所有部门
|
||||
departments = isvHttpRequest.getDepartments(corpId, appType, null);
|
||||
if (CollectionUtils.isEmpty(departments)) {
|
||||
log.info("enterpriseInit initDept getDepartments is empty,corpId:{},appType:{}", corpId, appType);
|
||||
return departments;
|
||||
}
|
||||
List<SysDepartmentDO> sysDepartmentDOS = new ArrayList<>();
|
||||
for (SysDepartmentDTO department : departments) {
|
||||
sysDepartmentDOS.add(convertSysDepartmentDTO2SysDepartmentDO(department, appType));
|
||||
if(sysDepartmentDOS.size() > CommonConstants.DEAL_RECORD_MAX_SIZE){
|
||||
sysDepartmentDAO.batchInsertOrUpdate(eid, sysDepartmentDOS);
|
||||
sysDepartmentDOS.clear();
|
||||
}
|
||||
}
|
||||
|
||||
DataSourceHelper.changeToSpecificDataSource(dbName);
|
||||
if(CollectionUtils.isNotEmpty(sysDepartmentDOS)){
|
||||
sysDepartmentDAO.batchInsertOrUpdate(eid, sysDepartmentDOS);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("enterpriseInit initDept error,corpId:{},appType:{}", corpId, appType, e);
|
||||
throw new ServiceException(ErrorCodeEnum.FEISHU_SERVICE_ERROR);
|
||||
}
|
||||
return departments;
|
||||
}
|
||||
|
||||
public void runEnterpriseScriptAndInitAuthUser(EnterpriseOpenMsg msg) {
|
||||
DataSourceHelper.changeToSpecificDataSource(msg.getDbName());
|
||||
//执行脚本代码
|
||||
@@ -107,4 +527,74 @@ public class EnterpriseInitServiceImpl {
|
||||
enterpriseUserRoleDAO.insertBatchUserRole(eid, userRoles);
|
||||
}
|
||||
|
||||
|
||||
private List<EnterpriseUserRequest> getAdminList(List<String> adminList) {
|
||||
if(CollectionUtils.isEmpty(adminList)){
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
List<EnterpriseUserRequest> resultList = new ArrayList<>();
|
||||
if(CollectionUtils.isNotEmpty(adminList)){
|
||||
for (String userId : adminList) {
|
||||
EnterpriseUserRequest enterpriseUserRequest = new EnterpriseUserRequest();
|
||||
EnterpriseUserDO enterpriseUserDO = new EnterpriseUserDO();
|
||||
enterpriseUserDO.setId(userId);
|
||||
enterpriseUserDO.setName(userId);
|
||||
enterpriseUserDO.setUserId(userId);
|
||||
enterpriseUserDO.setUnionid(userId);
|
||||
enterpriseUserDO.setRoles(RoleEnum.MASTER.getId());
|
||||
enterpriseUserDO.setIsAdmin(Boolean.TRUE);
|
||||
enterpriseUserDO.setActive(Boolean.TRUE);
|
||||
enterpriseUserRequest.setEnterpriseUserDO(enterpriseUserDO);
|
||||
enterpriseUserRequest.setDepartment("[1]");
|
||||
enterpriseUserRequest.setDepartments("[1]");
|
||||
resultList.add(enterpriseUserRequest);
|
||||
}
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
private EnterpriseUserRequest getAIUser() {
|
||||
EnterpriseUserRequest enterpriseUserRequest = new EnterpriseUserRequest();
|
||||
EnterpriseUserDO enterpriseUserDO = new EnterpriseUserDO();
|
||||
enterpriseUserDO.setId(AIEnum.AI_ID.getCode());
|
||||
enterpriseUserDO.setName(AIEnum.AI_NAME.getCode());
|
||||
enterpriseUserDO.setUserId(AIEnum.AI_USERID.getCode());
|
||||
enterpriseUserDO.setMobile(AIEnum.AI_MOBILE.getCode());
|
||||
enterpriseUserDO.setRoles(AIEnum.AI_ROLES.getCode());
|
||||
enterpriseUserDO.setUnionid(AIEnum.AI_UUID.getCode());
|
||||
enterpriseUserDO.setIsAdmin(Boolean.TRUE);
|
||||
enterpriseUserDO.setActive(Boolean.TRUE);
|
||||
enterpriseUserRequest.setEnterpriseUserDO(enterpriseUserDO);
|
||||
enterpriseUserRequest.setDepartment(AIEnum.AI_DEPARTMENT.getCode());
|
||||
enterpriseUserRequest.setDepartments(AIEnum.AI_DEPARTMENT.getCode());
|
||||
return enterpriseUserRequest;
|
||||
}
|
||||
|
||||
public SysDepartmentDO convertSysDepartmentDTO2SysDepartmentDO(SysDepartmentDTO dto, String appType) {
|
||||
if (dto == null) {
|
||||
return null;
|
||||
}
|
||||
SysDepartmentDO sysDepartmentDO = new SysDepartmentDO();
|
||||
sysDepartmentDO.setName(dto.getName());
|
||||
sysDepartmentDO.setId(dto.getId());
|
||||
sysDepartmentDO.setParentId(dto.getParentId());
|
||||
sysDepartmentDO.setDepartOrder(dto.getDepartOrder());
|
||||
sysDepartmentDO.setCreateDeptGroup(dto.getCreateDeptGroup());
|
||||
sysDepartmentDO.setAutoAddUser(dto.getAutoAddUser());
|
||||
sysDepartmentDO.setDepHiding(dto.getDepHiding());
|
||||
sysDepartmentDO.setDeptPerimits(dto.getDeptPerimits());
|
||||
sysDepartmentDO.setUserPerimits(dto.getUserPerimits());
|
||||
sysDepartmentDO.setOuterDept(dto.getOuterDept());
|
||||
sysDepartmentDO.setOuterPermitDepts(dto.getOuterPermitDepts());
|
||||
sysDepartmentDO.setOuterPermitUsers(dto.getOuterPermitUsers());
|
||||
sysDepartmentDO.setOrgDeptOwner(dto.getOrgDeptOwner());
|
||||
sysDepartmentDO.setDeptManagerUseridList(dto.getDeptManagerUseridList());
|
||||
sysDepartmentDO.setUserCount(dto.getUserCount());
|
||||
sysDepartmentDO.setUnactiveUserCount(dto.getUnactiveUserCount());
|
||||
sysDepartmentDO.setParentIds(dto.getParentIds());
|
||||
sysDepartmentDO.setSubIds(dto.getSubIds());
|
||||
return sysDepartmentDO;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
package com.cool.store.service.impl;
|
||||
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.context.CurrentUser;
|
||||
import com.cool.store.dao.EnterpriseUserDAO;
|
||||
import com.cool.store.dao.RegionDAO;
|
||||
import com.cool.store.dao.UserRegionMappingDAO;
|
||||
import com.cool.store.entity.EnterpriseUserDO;
|
||||
import com.cool.store.entity.RegionDO;
|
||||
import com.cool.store.entity.UserRegionMappingDO;
|
||||
import com.cool.store.service.EnterpriseUserService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author zhangchenbiao
|
||||
* @FileName: EnterpriseUserServiceImpl
|
||||
* @Description:
|
||||
* @date 2023-05-29 19:58
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class EnterpriseUserServiceImpl implements EnterpriseUserService {
|
||||
|
||||
@Resource
|
||||
private UserRegionMappingDAO userRegionMappingDAO;
|
||||
@Resource
|
||||
private RegionDAO regionDAO;
|
||||
@Resource
|
||||
private EnterpriseUserDAO enterpriseUserDAO;
|
||||
|
||||
@Override
|
||||
public void updateUserRegionPathList(String enterpriseId, List<String> userIds) {
|
||||
if (CollectionUtils.isEmpty(userIds)) {
|
||||
return;
|
||||
}
|
||||
//查询该人员的最新部门情况 同步到enterpriseUser 表usereginIds表中
|
||||
List<UserRegionMappingDO> userRegionMappingDOS = userRegionMappingDAO.listUserRegionMappingByUserId(enterpriseId, userIds);
|
||||
Map<String, List<UserRegionMappingDO>> userRegionMappingMap = ListUtils.emptyIfNull(userRegionMappingDOS)
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(UserRegionMappingDO::getUserId));
|
||||
List<String> regionIds = userRegionMappingDOS.stream()
|
||||
.map(UserRegionMappingDO::getRegionId).distinct().collect(Collectors.toList());
|
||||
List<RegionDO> regionDOS = regionDAO.getRegionByRegionIds(enterpriseId, regionIds);
|
||||
Map<String, RegionDO> regionMap = regionDOS.stream()
|
||||
.collect(Collectors.toMap(RegionDO::getRegionId, data -> data));
|
||||
|
||||
List<EnterpriseUserDO> enterpriseUserList= new ArrayList<>();
|
||||
for (String userId:userIds) {
|
||||
EnterpriseUserDO enterpriseUserDO = new EnterpriseUserDO();
|
||||
enterpriseUserDO.setUserId(userId);
|
||||
String regionPathString = "";
|
||||
List<RegionDO> regionDOList = new ArrayList<>();
|
||||
//如果没有对应部门 默认未null 正常情况下不会出现userRegionId不为null的情况
|
||||
enterpriseUserDO.setUserRegionIds(null);
|
||||
List<UserRegionMappingDO> userRegionMappingList = userRegionMappingMap.get(userId);
|
||||
|
||||
//异常情况下处理
|
||||
if (CollectionUtils.isEmpty(userRegionMappingList)){
|
||||
log.info("getUserRegionPathListStr exception 该人员没有任何部门");
|
||||
//查询未分组
|
||||
RegionDO unclassifiedRegionDO = regionDAO.getUnclassifiedRegionDO(enterpriseId);
|
||||
//将人添加到未分组中
|
||||
addUserRegionMappingDO(enterpriseId,userId,unclassifiedRegionDO.getRegionId(),new CurrentUser());
|
||||
regionDOList.add(unclassifiedRegionDO);
|
||||
}
|
||||
|
||||
ListUtils.emptyIfNull(userRegionMappingList)
|
||||
.stream()
|
||||
.forEach(userRegionMappingDO -> {
|
||||
RegionDO regionDO = regionMap.get(userRegionMappingDO.getRegionId());
|
||||
if (Objects.nonNull(regionDO)){
|
||||
regionDOList.add(regionDO);
|
||||
}
|
||||
});
|
||||
|
||||
regionPathString = regionDOList.stream()
|
||||
.map(e -> e.getFullRegionPath()).collect(Collectors.joining(CommonConstants.COMMA));
|
||||
if (StringUtils.isNotBlank(regionPathString)){
|
||||
enterpriseUserDO.setUserRegionIds(CommonConstants.SQUAREBRACKETSLEFT+ regionPathString+ CommonConstants.SQUAREBRACKETSRIGHT);
|
||||
}
|
||||
enterpriseUserList.add(enterpriseUserDO);
|
||||
}
|
||||
enterpriseUserDAO.batchUpdateDiffUserDiffRegionIds(enterpriseId, enterpriseUserList);
|
||||
}
|
||||
|
||||
private void addUserRegionMappingDO(String enterpriseId,String userId,String regionId,CurrentUser currentUser){
|
||||
UserRegionMappingDO userRegionMappingDO = new UserRegionMappingDO();
|
||||
userRegionMappingDO.setUserId(userId);
|
||||
userRegionMappingDO.setRegionId(regionId);
|
||||
userRegionMappingDO.setCreateId(currentUser.getUserId());
|
||||
userRegionMappingDO.setUpdateId(currentUser.getUserId());
|
||||
userRegionMappingDO.setCreateTime(System.currentTimeMillis());
|
||||
userRegionMappingDO.setUpdateTime(System.currentTimeMillis());
|
||||
//将用户添加到未分组
|
||||
userRegionMappingDAO.batchInsertRegionMapping(enterpriseId, Arrays.asList(userRegionMappingDO));
|
||||
}
|
||||
}
|
||||
@@ -8,17 +8,14 @@ import com.cool.store.context.DataSourceContext;
|
||||
import com.cool.store.dao.*;
|
||||
import com.cool.store.dto.login.RefreshUser;
|
||||
import com.cool.store.entity.EnterpriseConfigDO;
|
||||
import com.cool.store.entity.EnterpriseDO;
|
||||
import com.cool.store.entity.EnterpriseUserDO;
|
||||
import com.cool.store.entity.SysRoleDO;
|
||||
import com.cool.store.enums.AppTypeEnum;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.enums.UserStatusEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.model.entity.EnterpriseDO;
|
||||
import com.cool.store.service.LoginService;
|
||||
import com.cool.store.utils.DataSourceHelper;
|
||||
import com.cool.store.utils.RedisUtilPool;
|
||||
import com.github.xiaoymin.knife4j.core.util.StrUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.crypto.RandomNumberGenerator;
|
||||
@@ -27,7 +24,6 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @author zhangchenbiao
|
||||
|
||||
Reference in New Issue
Block a user