Merge remote-tracking branch 'origin/cc_20230520_partner' into cc_20230520_partner

This commit is contained in:
苏竹红
2023-05-30 14:46:00 +08:00
77 changed files with 2022 additions and 41 deletions

View File

@@ -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" />

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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;
}
}

View File

@@ -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));
}
}

View File

@@ -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