新增组织架构相关
This commit is contained in:
@@ -22,6 +22,8 @@ public class CommonConstants {
|
|||||||
|
|
||||||
public static final int THREE_DAY_SECONDS = 60*60*24*3;
|
public static final int THREE_DAY_SECONDS = 60*60*24*3;
|
||||||
|
|
||||||
|
public static final int NORMAL_LOCK_TIMES = 60 * 1000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 企业开通锁存活时间
|
* 企业开通锁存活时间
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package com.cool.store.enums;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Admin
|
||||||
|
* @ClassName FsEventTypeEnum
|
||||||
|
* @Description fs的事件类型
|
||||||
|
*/
|
||||||
|
public enum FSEventTypeEnum {
|
||||||
|
|
||||||
|
//
|
||||||
|
USER_CREATED("contact.user.created_v3","员工入职"),
|
||||||
|
USER_DELETED("contact.user.deleted_v3", "员工离职"),
|
||||||
|
USER_UPDATED("contact.user.updated_v3", "员工信息被修改"),
|
||||||
|
|
||||||
|
DEPARTMENT_CREATED("contact.department.created_v3", "部门被创建"),
|
||||||
|
DEPARTMENT_UPDATED("contact.department.updated_v3", "部门信息被修改"),
|
||||||
|
DEPARTMENT_DELETED("contact.department.deleted_v3", "部门被删除"),
|
||||||
|
|
||||||
|
APP_OPEN("app_open", "首次启用应用"),
|
||||||
|
APP_STATUS_CHANGE("app_status_change", "应用停启用"),
|
||||||
|
APP_TICKET("app_ticket", "app_ticket 事件"),
|
||||||
|
APP_UNINSTALLED("app_uninstalled", "应用卸载"),
|
||||||
|
|
||||||
|
CONTACT_SCOPE_UPDATE("contact.scope.updated_v3", "通讯录范围权限被更新"),
|
||||||
|
ORDER_PAID("order_paid", "应用商店应用购买"),
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
private final String value;
|
||||||
|
private final String remark;
|
||||||
|
|
||||||
|
private static final Map<String, FSEventTypeEnum> map = Arrays.stream(values()).collect(Collectors.toMap(FSEventTypeEnum::getValue, Function.identity()));
|
||||||
|
|
||||||
|
FSEventTypeEnum(String value, String remark) {
|
||||||
|
this.value = value;
|
||||||
|
this.remark = remark;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FSEventTypeEnum parseValue(String value) {
|
||||||
|
return map.get(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isUserEvent(String eventType){
|
||||||
|
return FSEventTypeEnum.USER_CREATED.getValue().equals(eventType) || FSEventTypeEnum.USER_UPDATED.getValue().equals(eventType) || FSEventTypeEnum.USER_DELETED.getValue().equals(eventType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isDepartmentEvent(String eventType){
|
||||||
|
return FSEventTypeEnum.DEPARTMENT_CREATED.getValue().equals(eventType) || FSEventTypeEnum.DEPARTMENT_UPDATED.getValue().equals(eventType) || FSEventTypeEnum.DEPARTMENT_DELETED.getValue().equals(eventType);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -29,11 +29,18 @@ public class EnterpriseUserRoleDAO {
|
|||||||
return enterpriseUserRoleMapper.batchInsertOrUpdate(recordList);
|
return enterpriseUserRoleMapper.batchInsertOrUpdate(recordList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer deleteUserRole(String roleId, DataSourceEnum dataSourceEnum, List<String> userIds){
|
public Integer deleteRoleInUser(String roleId, DataSourceEnum dataSourceEnum, List<String> excludeUserIds){
|
||||||
if(StringUtils.isBlank(roleId) || Objects.isNull(dataSourceEnum)){
|
if(StringUtils.isBlank(roleId) || Objects.isNull(dataSourceEnum)){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return enterpriseUserRoleMapper.deleteUserRole(roleId, dataSourceEnum.getCode(), userIds);
|
return enterpriseUserRoleMapper.deleteRoleInUser(roleId, dataSourceEnum.getCode(), excludeUserIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer deleteUserInRole(String userId, DataSourceEnum dataSourceEnum, String excludeRoleId){
|
||||||
|
if(StringUtils.isAnyBlank(userId, excludeRoleId) || Objects.isNull(dataSourceEnum)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return enterpriseUserRoleMapper.deleteUserInRole(userId, dataSourceEnum.getCode(), excludeRoleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@ package com.cool.store.dao;
|
|||||||
import com.cool.store.constants.CommonConstants;
|
import com.cool.store.constants.CommonConstants;
|
||||||
import com.cool.store.entity.RegionDO;
|
import com.cool.store.entity.RegionDO;
|
||||||
import com.cool.store.mapper.RegionMapper;
|
import com.cool.store.mapper.RegionMapper;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@@ -37,4 +38,15 @@ public class RegionDAO {
|
|||||||
return regionMapper.deleteNotExistRegion(regionIds);
|
return regionMapper.deleteNotExistRegion(regionIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<RegionDO> getRegionByRegionIds(List<String> regionIds){
|
||||||
|
if(CollectionUtils.isEmpty(regionIds)){
|
||||||
|
return Lists.newArrayList();
|
||||||
|
}
|
||||||
|
return regionMapper.getRegionByRegionIds(regionIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<RegionDO> getRegionBaseInfoList(){
|
||||||
|
return regionMapper.getRegionBaseInfoList();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,4 +43,11 @@ public class SysRoleDAO {
|
|||||||
}
|
}
|
||||||
return sysRoleMapper.getHighestPriorityRoleByUserId(userId);
|
return sysRoleMapper.getHighestPriorityRoleByUserId(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SysRoleDO getRoleByName(String roleName, DataSourceEnum dataSource){
|
||||||
|
if(StringUtils.isBlank(roleName) || Objects.isNull(dataSource)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return sysRoleMapper.getRoleByName(roleName, dataSource.getCode());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,4 +37,18 @@ public class UserRegionMappingDAO {
|
|||||||
return userRegionMappingMapper.deleteUserRegion(regionId, dataSourceEnum.getCode(), excludeUserIds);
|
return userRegionMappingMapper.deleteUserRegion(regionId, dataSourceEnum.getCode(), excludeUserIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer deleteRegionUserByExcludeRegionIds(List<String> excludeRegionIds){
|
||||||
|
if(CollectionUtils.isEmpty(excludeRegionIds)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return userRegionMappingMapper.deleteRegionUserByExcludeRegionIds(excludeRegionIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer deleteRegionUserByExcludeUserIds(List<String> excludeUserIds){
|
||||||
|
if(CollectionUtils.isEmpty(excludeUserIds)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return userRegionMappingMapper.deleteRegionUserByExcludeUserIds(excludeUserIds);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,7 @@ public interface EnterpriseUserRoleMapper {
|
|||||||
* @param userIds
|
* @param userIds
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
int deleteUserRole(@Param("roleId") String roleId, @Param("type") Integer type, @Param("userIds") List<String> userIds);
|
int deleteRoleInUser(@Param("roleId") String roleId, @Param("type") Integer type, @Param("excludeUserIds") List<String> excludeUserIds);
|
||||||
|
|
||||||
|
int deleteUserInRole(@Param("userId") String userId, @Param("type") Integer type, @Param("excludeRoleId") String excludeRoleId);
|
||||||
}
|
}
|
||||||
@@ -31,4 +31,17 @@ public interface RegionMapper {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
int deleteNotExistRegion(@Param("regionIds")List<String> regionIds);
|
int deleteNotExistRegion(@Param("regionIds")List<String> regionIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据regionIds获取region
|
||||||
|
* @param regionIds
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<RegionDO> getRegionByRegionIds(@Param("regionIds")List<String> regionIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取区域基本信息
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<RegionDO> getRegionBaseInfoList();
|
||||||
}
|
}
|
||||||
@@ -33,4 +33,11 @@ public interface SysRoleMapper {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
SysRoleDO getHighestPriorityRoleByUserId(@Param("userId") String userId);
|
SysRoleDO getHighestPriorityRoleByUserId(@Param("userId") String userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取角色
|
||||||
|
* @param roleName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
SysRoleDO getRoleByName(@Param("roleName") String roleName, @Param("roleType")Integer roleType);
|
||||||
}
|
}
|
||||||
@@ -33,4 +33,18 @@ public interface UserRegionMappingMapper {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
int deleteUserRegion(@Param("regionId") String regionId, @Param("type")Integer type, @Param("excludeUserIds") List<String> excludeUserIds);
|
int deleteUserRegion(@Param("regionId") String regionId, @Param("type")Integer type, @Param("excludeUserIds") List<String> excludeUserIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除没有的部门映射关系
|
||||||
|
* @param excludeRegionIds
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Integer deleteRegionUserByExcludeRegionIds(@Param("excludeRegionIds") List<String> excludeRegionIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除用户不在的区域
|
||||||
|
* @param excludeUserIds
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Integer deleteRegionUserByExcludeUserIds(@Param("excludeUserIds") List<String> excludeUserIds);
|
||||||
}
|
}
|
||||||
@@ -5,12 +5,13 @@
|
|||||||
<id column="id" jdbcType="INTEGER" property="id"/>
|
<id column="id" jdbcType="INTEGER" property="id"/>
|
||||||
<result column="role_id" jdbcType="VARCHAR" property="roleId"/>
|
<result column="role_id" jdbcType="VARCHAR" property="roleId"/>
|
||||||
<result column="user_id" jdbcType="VARCHAR" property="userId"/>
|
<result column="user_id" jdbcType="VARCHAR" property="userId"/>
|
||||||
|
<result column="type" jdbcType="INTEGER" property="type"/>
|
||||||
<result column="deleted" jdbcType="BIT" property="deleted"/>
|
<result column="deleted" jdbcType="BIT" property="deleted"/>
|
||||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
|
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
|
||||||
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
|
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
id, role_id, user_id, deleted, create_time, update_time
|
id, role_id, user_id, type, deleted, create_time, update_time
|
||||||
</sql>
|
</sql>
|
||||||
<insert id="batchInsertOrUpdate">
|
<insert id="batchInsertOrUpdate">
|
||||||
<foreach collection="recordList" separator=";" item="record">
|
<foreach collection="recordList" separator=";" item="record">
|
||||||
@@ -22,6 +23,9 @@
|
|||||||
<if test="record.userId != null">
|
<if test="record.userId != null">
|
||||||
user_id,
|
user_id,
|
||||||
</if>
|
</if>
|
||||||
|
<if test="record.type != null">
|
||||||
|
type,
|
||||||
|
</if>
|
||||||
<if test="record.deleted != null">
|
<if test="record.deleted != null">
|
||||||
deleted,
|
deleted,
|
||||||
</if>
|
</if>
|
||||||
@@ -39,6 +43,9 @@
|
|||||||
<if test="record.userId != null">
|
<if test="record.userId != null">
|
||||||
#{record.userId},
|
#{record.userId},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="record.type != null">
|
||||||
|
#{record.type},
|
||||||
|
</if>
|
||||||
<if test="record.deleted != null">
|
<if test="record.deleted != null">
|
||||||
#{record.deleted},
|
#{record.deleted},
|
||||||
</if>
|
</if>
|
||||||
@@ -61,6 +68,9 @@
|
|||||||
<if test="userId != null">
|
<if test="userId != null">
|
||||||
user_id = #{userId},
|
user_id = #{userId},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="type != null">
|
||||||
|
type = #{type},
|
||||||
|
</if>
|
||||||
<if test="deleted != null">
|
<if test="deleted != null">
|
||||||
deleted = #{deleted},
|
deleted = #{deleted},
|
||||||
</if>
|
</if>
|
||||||
@@ -74,7 +84,11 @@
|
|||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<update id="deleteUserRole">
|
<update id="deleteRoleInUser">
|
||||||
update enterprise_user_role set deleted = 1 where role_id = #{roleId} and user_id not in <foreach collection="userIds" item="userId" separator="," open="(" close=")">#{userId}</foreach>
|
update enterprise_user_role set deleted = 1 where role_id = #{roleId} and type = #{type} and user_id not in <foreach collection="excludeUserIds" item="userId" separator="," open="(" close=")">#{userId}</foreach>
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<update id="deleteUserInRole">
|
||||||
|
update enterprise_user_role set deleted = 1 where role_id != #{roleId} and user_id = #{userId} and type = #{type}
|
||||||
</update>
|
</update>
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -158,4 +158,23 @@
|
|||||||
<update id="deleteNotExistRegion">
|
<update id="deleteNotExistRegion">
|
||||||
update region set deleted = 1 , update_time = UNIX_TIMESTAMP() where region_id not in <foreach collection="regionIds" separator="," item="regionId" open="(" close=")"> #{regionId}</foreach>
|
update region set deleted = 1 , update_time = UNIX_TIMESTAMP() where region_id not in <foreach collection="regionIds" separator="," item="regionId" open="(" close=")"> #{regionId}</foreach>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<select id="getRegionByRegionIds" resultMap="BaseResultMap">
|
||||||
|
select
|
||||||
|
<include refid="Base_Column_List"/>
|
||||||
|
from
|
||||||
|
region
|
||||||
|
where
|
||||||
|
region_id in <foreach collection="regionIds" item="regionId" separator="," open="(" close=")">#{regionId}</foreach>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getRegionBaseInfoList" resultMap="BaseResultMap">
|
||||||
|
select
|
||||||
|
region_id, name, parent_id
|
||||||
|
from
|
||||||
|
region
|
||||||
|
where
|
||||||
|
deleted = 0
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -126,7 +126,16 @@
|
|||||||
from
|
from
|
||||||
sys_role r inner join enterprise_user_role e on r.role_id = e.role_id
|
sys_role r inner join enterprise_user_role e on r.role_id = e.role_id
|
||||||
where
|
where
|
||||||
e.user_id = #{userId}
|
e.user_id = #{userId} and r.deleted = 0
|
||||||
limit 1
|
limit 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getRoleByName" resultMap="BaseResultMap">
|
||||||
|
select
|
||||||
|
<include refid="Base_Column_List"/>
|
||||||
|
from
|
||||||
|
sys_role
|
||||||
|
where
|
||||||
|
role_name = #{roleName} and role_type = #{roleType} and deleted = 0 limit 1
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -104,10 +104,19 @@
|
|||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<delete id="deleteUserRegion">
|
<update id="deleteUserRegion">
|
||||||
update user_region_mapping set deleted = 1 where region_id = #{regionId} and type = #{type}
|
update user_region_mapping set deleted = 1 where region_id = #{regionId} and type = #{type}
|
||||||
<if test="excludeUserIds != null and excludeUserIds.size() > 0">
|
<if test="excludeUserIds != null and excludeUserIds.size() > 0">
|
||||||
and user_id not in <foreach collection="excludeUserIds" separator="," open="(" close=")" item="userId" >#{userId}</foreach>
|
and user_id not in <foreach collection="excludeUserIds" separator="," open="(" close=")" item="userId" >#{userId}</foreach>
|
||||||
</if>
|
</if>
|
||||||
</delete>
|
</update>
|
||||||
|
|
||||||
|
<update id="deleteRegionUserByExcludeRegionIds">
|
||||||
|
update user_region_mapping set deleted = 1 where region_id not in <foreach collection="excludeRegionIds" open="(" close=")" separator="," item="regionId">#{regionId}</foreach>
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<update id="deleteRegionUserByExcludeUserIds">
|
||||||
|
update user_region_mapping set deleted = 1 where user_id not in <foreach collection="excludeUserIds" open="(" close=")" separator="," item="userId">#{userId}</foreach>
|
||||||
|
</update>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.cool.store.dto.buser;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zhangchenbiao
|
||||||
|
* @FileName: UserEventDTO
|
||||||
|
* @Description:
|
||||||
|
* @date 2023-06-09 13:53
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class UserEventDTO {
|
||||||
|
|
||||||
|
private String corpId;
|
||||||
|
|
||||||
|
private String eventType;
|
||||||
|
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
private String openId;
|
||||||
|
|
||||||
|
private String unionId;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -93,7 +93,7 @@ public class EnterpriseUserDTO implements Serializable {
|
|||||||
|
|
||||||
private String openUserid;
|
private String openUserid;
|
||||||
|
|
||||||
@ApiModelProperty("")
|
@ApiModelProperty("用户所属部门")
|
||||||
private List<String> departmentLists;
|
private List<String> departmentLists;
|
||||||
|
|
||||||
|
|
||||||
@@ -141,4 +141,39 @@ public class EnterpriseUserDTO implements Serializable {
|
|||||||
return resultList;
|
return resultList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static EnterpriseUserDO transUserDtoToDo(EnterpriseUserDTO user, Map<String, String> regionPathMap, Multimap<String, String> leaderDeptMap) {
|
||||||
|
EnterpriseUserDO enterpriseUserDO = new EnterpriseUserDO();
|
||||||
|
enterpriseUserDO.setId(UUIDUtils.get32UUID());
|
||||||
|
enterpriseUserDO.setUserId(user.getUserId());
|
||||||
|
enterpriseUserDO.setName(user.getName());
|
||||||
|
enterpriseUserDO.setRemark(user.getRemark());
|
||||||
|
enterpriseUserDO.setMobile(user.getMobile());
|
||||||
|
enterpriseUserDO.setEmail(user.getEmail());
|
||||||
|
enterpriseUserDO.setOrgEmail(user.getOrgEmail());
|
||||||
|
enterpriseUserDO.setMainAdmin(user.getMainAdmin());
|
||||||
|
enterpriseUserDO.setIsAdmin(user.getIsAdmin());
|
||||||
|
enterpriseUserDO.setUnionid(user.getUnionid());
|
||||||
|
enterpriseUserDO.setAvatar(user.getAvatar());
|
||||||
|
enterpriseUserDO.setJobnumber(user.getJobnumber());
|
||||||
|
enterpriseUserDO.setUserStatus(UserStatusEnum.NORMAL.getCode());
|
||||||
|
enterpriseUserDO.setIsLeader(Boolean.FALSE);
|
||||||
|
List<String> departmentLists = user.getDepartmentLists();
|
||||||
|
List<String> regionPaths = new ArrayList<>();
|
||||||
|
if(CollectionUtils.isNotEmpty(departmentLists)){
|
||||||
|
for (String departmentId : departmentLists) {
|
||||||
|
regionPaths.add(regionPathMap.get(departmentId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Collection<String> deptIds = leaderDeptMap.get(user.getUserId());
|
||||||
|
if(CollectionUtils.isNotEmpty(deptIds)){
|
||||||
|
enterpriseUserDO.setIsLeader(Boolean.TRUE);
|
||||||
|
enterpriseUserDO.setLeaderDeptIds(JSONObject.toJSONString(deptIds));
|
||||||
|
}
|
||||||
|
enterpriseUserDO.setUserRegionIds(JSONObject.toJSONString(regionPaths));
|
||||||
|
enterpriseUserDO.setDeleted(Boolean.FALSE);
|
||||||
|
enterpriseUserDO.setCreateTime(new Date());
|
||||||
|
return enterpriseUserDO;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -217,7 +217,7 @@ public class SysDepartmentDTO {
|
|||||||
Collections.reverse(pathIds);
|
Collections.reverse(pathIds);
|
||||||
String regionPath = CommonConstants.PATH_SPILT + String.join(CommonConstants.PATH_SPILT, pathIds) + CommonConstants.PATH_SPILT;
|
String regionPath = CommonConstants.PATH_SPILT + String.join(CommonConstants.PATH_SPILT, pathIds) + CommonConstants.PATH_SPILT;
|
||||||
region.setRegionPath(regionPath);
|
region.setRegionPath(regionPath);
|
||||||
region.setDeleted(Boolean.TRUE);
|
region.setDeleted(Boolean.FALSE);
|
||||||
if(CollectionUtils.isNotEmpty(dept.getDeptManagerUseridList())){
|
if(CollectionUtils.isNotEmpty(dept.getDeptManagerUseridList())){
|
||||||
for (String leader : dept.getDeptManagerUseridList()) {
|
for (String leader : dept.getDeptManagerUseridList()) {
|
||||||
leaderDeptMap.put(leader, dept.getId());
|
leaderDeptMap.put(leader, dept.getId());
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.cool.store.entity;
|
package com.cool.store.entity;
|
||||||
|
|
||||||
|
import com.cool.store.enums.DataSourceEnum;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@@ -32,6 +33,9 @@ public class EnterpriseUserRoleDO implements Serializable {
|
|||||||
@ApiModelProperty("用户id")
|
@ApiModelProperty("用户id")
|
||||||
private String userId;
|
private String userId;
|
||||||
|
|
||||||
|
@ApiModelProperty("type")
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
@ApiModelProperty("删除标识")
|
@ApiModelProperty("删除标识")
|
||||||
private Boolean deleted;
|
private Boolean deleted;
|
||||||
|
|
||||||
@@ -41,7 +45,7 @@ public class EnterpriseUserRoleDO implements Serializable {
|
|||||||
@ApiModelProperty("更新时间")
|
@ApiModelProperty("更新时间")
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
|
|
||||||
public static List<EnterpriseUserRoleDO> convertDO(String roleId, List<String> userIds){
|
public static List<EnterpriseUserRoleDO> convertSyncDO(String roleId, List<String> userIds){
|
||||||
if(CollectionUtils.isEmpty(userIds)){
|
if(CollectionUtils.isEmpty(userIds)){
|
||||||
return Lists.newArrayList();
|
return Lists.newArrayList();
|
||||||
}
|
}
|
||||||
@@ -50,6 +54,7 @@ public class EnterpriseUserRoleDO implements Serializable {
|
|||||||
EnterpriseUserRoleDO userRole = new EnterpriseUserRoleDO();
|
EnterpriseUserRoleDO userRole = new EnterpriseUserRoleDO();
|
||||||
userRole.setRoleId(roleId);
|
userRole.setRoleId(roleId);
|
||||||
userRole.setUserId(userId);
|
userRole.setUserId(userId);
|
||||||
|
userRole.setType(DataSourceEnum.SYNC.getCode());
|
||||||
userRole.setDeleted(Boolean.FALSE);
|
userRole.setDeleted(Boolean.FALSE);
|
||||||
userRole.setCreateTime(new Date());
|
userRole.setCreateTime(new Date());
|
||||||
userRole.setUpdateTime(new Date());
|
userRole.setUpdateTime(new Date());
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import lombok.Builder;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -69,4 +70,22 @@ public class UserRegionMappingDO implements Serializable {
|
|||||||
}
|
}
|
||||||
return resultList;
|
return resultList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<UserRegionMappingDO> convertSyncDO(List<String> regionIds, String userId){
|
||||||
|
if(CollectionUtils.isEmpty(regionIds) || StringUtils.isBlank(userId)){
|
||||||
|
return Lists.newArrayList();
|
||||||
|
}
|
||||||
|
List<UserRegionMappingDO> resultList = new ArrayList<>();
|
||||||
|
for (String regionId : regionIds) {
|
||||||
|
UserRegionMappingDO userRegion = new UserRegionMappingDO();
|
||||||
|
userRegion.setRegionId(regionId);
|
||||||
|
userRegion.setUserId(userId);
|
||||||
|
userRegion.setType(DataSourceEnum.SYNC.getCode());
|
||||||
|
userRegion.setCreateTime(System.currentTimeMillis());
|
||||||
|
userRegion.setUpdateTime(System.currentTimeMillis());
|
||||||
|
userRegion.setDeleted(Boolean.FALSE);
|
||||||
|
resultList.add(userRegion);
|
||||||
|
}
|
||||||
|
return resultList;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
package com.cool.store.vo.region;
|
||||||
|
|
||||||
|
import com.cool.store.constants.CommonConstants;
|
||||||
|
import com.cool.store.entity.RegionDO;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zhangchenbiao
|
||||||
|
* @FileName: RegionBaseInfoVO
|
||||||
|
* @Description:
|
||||||
|
* @date 2023-06-12 16:08
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class RegionBaseInfoVO {
|
||||||
|
|
||||||
|
@ApiModelProperty("区域id")
|
||||||
|
private String regionId;
|
||||||
|
|
||||||
|
@ApiModelProperty("区域名称")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty("子区域")
|
||||||
|
private List<RegionBaseInfoVO> subRegionList;
|
||||||
|
|
||||||
|
public RegionBaseInfoVO(String regionId, String name) {
|
||||||
|
this.regionId = regionId;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RegionBaseInfoVO convertTree(List<RegionDO> regionList){
|
||||||
|
Map<String, List<RegionDO>> parentMap = regionList.stream().collect(Collectors.groupingBy(k -> k.getParentId()));
|
||||||
|
RegionDO rootRegion = regionList.stream().filter(o -> CommonConstants.ZERO_STR.equals(o.getParentId())).findFirst().get();
|
||||||
|
RegionBaseInfoVO result = new RegionBaseInfoVO(rootRegion.getRegionId(), rootRegion.getName());
|
||||||
|
result.setSubRegionList(getSubRegion(rootRegion.getRegionId(), parentMap));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<RegionBaseInfoVO> getSubRegion(String regionId, Map<String, List<RegionDO>> parentMap){
|
||||||
|
List<RegionBaseInfoVO> resultList = new ArrayList<>();
|
||||||
|
if(Objects.isNull(parentMap) || StringUtils.isBlank(regionId)){
|
||||||
|
return resultList;
|
||||||
|
}
|
||||||
|
List<RegionDO> subRegion = parentMap.get(regionId);
|
||||||
|
if(CollectionUtils.isNotEmpty(subRegion)){
|
||||||
|
for (RegionDO region : subRegion) {
|
||||||
|
RegionBaseInfoVO regionBaseInfo = new RegionBaseInfoVO(region.getRegionId(), region.getName());
|
||||||
|
regionBaseInfo.setSubRegionList(getSubRegion(region.getRegionId(), parentMap));
|
||||||
|
resultList.add(regionBaseInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resultList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@ import com.aliyun.openservices.ons.api.bean.Subscription;
|
|||||||
import com.cool.store.constants.CommonConstants;
|
import com.cool.store.constants.CommonConstants;
|
||||||
import com.cool.store.enums.RocketMqGroupEnum;
|
import com.cool.store.enums.RocketMqGroupEnum;
|
||||||
import com.cool.store.mq.RocketMqConfig;
|
import com.cool.store.mq.RocketMqConfig;
|
||||||
import com.cool.store.mq.consumer.listener.TestListener;
|
import com.cool.store.mq.consumer.listener.UserEventDealListener;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
@@ -29,7 +29,7 @@ public class ConsumerClient {
|
|||||||
@Resource
|
@Resource
|
||||||
private RocketMqConfig rocketMqConfig;
|
private RocketMqConfig rocketMqConfig;
|
||||||
@Resource
|
@Resource
|
||||||
private TestListener testListener;
|
private UserEventDealListener userEventDealListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取通用配置
|
* 获取通用配置
|
||||||
@@ -71,12 +71,12 @@ public class ConsumerClient {
|
|||||||
*/
|
*/
|
||||||
@Bean(initMethod = "start", destroyMethod = "shutdown")
|
@Bean(initMethod = "start", destroyMethod = "shutdown")
|
||||||
public ConsumerBean test() {
|
public ConsumerBean test() {
|
||||||
RocketMqGroupEnum groupEnum = RocketMqGroupEnum.TEST;
|
RocketMqGroupEnum groupEnum = RocketMqGroupEnum.DING_MSG_DEAL;
|
||||||
ConsumerBean consumerBean = new ConsumerBean();
|
ConsumerBean consumerBean = new ConsumerBean();
|
||||||
//配置文件
|
//配置文件
|
||||||
Properties properties = getCommonProperties(groupEnum);
|
Properties properties = getCommonProperties(groupEnum);
|
||||||
consumerBean.setProperties(properties);
|
consumerBean.setProperties(properties);
|
||||||
Map<Subscription, MessageListener> commonSubscriptionTable = getCommonSubscriptionTable(groupEnum, testListener);
|
Map<Subscription, MessageListener> commonSubscriptionTable = getCommonSubscriptionTable(groupEnum, userEventDealListener);
|
||||||
//订阅多个topic如上面设置
|
//订阅多个topic如上面设置
|
||||||
consumerBean.setSubscriptionTable(commonSubscriptionTable);
|
consumerBean.setSubscriptionTable(commonSubscriptionTable);
|
||||||
return consumerBean;
|
return consumerBean;
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package com.cool.store.mq.consumer.listener;
|
||||||
|
|
||||||
|
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.buser.UserEventDTO;
|
||||||
|
import com.cool.store.service.EnterpriseSyncService;
|
||||||
|
import com.cool.store.utils.RedisUtilPool;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zhangchenbiao
|
||||||
|
* @FileName: EnterpriseInitService
|
||||||
|
* @Description: 消息监听
|
||||||
|
* @date 2023-06-09 16:28
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class UserEventDealListener implements MessageListener {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RedisUtilPool redisUtilPool;
|
||||||
|
@Autowired
|
||||||
|
private EnterpriseSyncService enterpriseSyncService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Action consume(Message message, ConsumeContext context) {
|
||||||
|
String text = new String(message.getBody());
|
||||||
|
if(StringUtils.isBlank(text)){
|
||||||
|
log.info("消息体为空,tag:{},messageId:{}",message.getTag(),message.getMsgID());
|
||||||
|
return Action.CommitMessage;
|
||||||
|
}
|
||||||
|
log.info("重试消费次数 messageId:{},try times:{}", message.getMsgID(), message.getReconsumeTimes());
|
||||||
|
|
||||||
|
String lockKey = "DingMsgDealListener:" + message.getMsgID();
|
||||||
|
boolean lock = redisUtilPool.setNxExpire(lockKey, message.getMsgID(), CommonConstants.NORMAL_LOCK_TIMES);
|
||||||
|
if(lock){
|
||||||
|
try {
|
||||||
|
UserEventDTO reqBody = JSONObject.parseObject(text, UserEventDTO.class);
|
||||||
|
enterpriseSyncService.userUpdateEvent(reqBody);
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error("DingMsgDealListener consume dealAddressBookChange error",e);
|
||||||
|
return Action.ReconsumeLater;
|
||||||
|
} finally {
|
||||||
|
redisUtilPool.delKey(lockKey);
|
||||||
|
}
|
||||||
|
log.info("消费成功,tag:{},messageId:{}",message.getTag(),message.getMsgID());
|
||||||
|
return Action.CommitMessage;
|
||||||
|
}
|
||||||
|
return Action.ReconsumeLater;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.cool.store.service;
|
package com.cool.store.service;
|
||||||
|
|
||||||
|
import com.cool.store.dto.buser.UserEventDTO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author zhangchenbiao
|
* @author zhangchenbiao
|
||||||
* @FileName: EnterpriseInitService
|
* @FileName: EnterpriseInitService
|
||||||
@@ -9,4 +11,10 @@ package com.cool.store.service;
|
|||||||
public interface EnterpriseSyncService {
|
public interface EnterpriseSyncService {
|
||||||
|
|
||||||
void syncAll();
|
void syncAll();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 飞书人员事件
|
||||||
|
* @param param
|
||||||
|
*/
|
||||||
|
void userUpdateEvent(UserEventDTO param);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
package com.cool.store.service;
|
package com.cool.store.service;
|
||||||
|
|
||||||
|
import com.cool.store.vo.region.RegionBaseInfoVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author zhangchenbiao
|
* @author zhangchenbiao
|
||||||
* @FileName: RegionService
|
* @FileName: RegionService
|
||||||
@@ -8,4 +12,10 @@ package com.cool.store.service;
|
|||||||
*/
|
*/
|
||||||
public interface RegionService {
|
public interface RegionService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取组织架构基本信息列表
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
RegionBaseInfoVO getRegionBaseInfoList();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.cool.store.service.impl;
|
|||||||
|
|
||||||
import com.cool.store.constants.CommonConstants;
|
import com.cool.store.constants.CommonConstants;
|
||||||
import com.cool.store.dao.*;
|
import com.cool.store.dao.*;
|
||||||
|
import com.cool.store.dto.buser.UserEventDTO;
|
||||||
import com.cool.store.dto.enterprise.*;
|
import com.cool.store.dto.enterprise.*;
|
||||||
import com.cool.store.entity.*;
|
import com.cool.store.entity.*;
|
||||||
import com.cool.store.enums.DataSourceEnum;
|
import com.cool.store.enums.DataSourceEnum;
|
||||||
@@ -9,6 +10,7 @@ import com.cool.store.http.ISVHttpRequest;
|
|||||||
import com.cool.store.service.EnterpriseSyncService;
|
import com.cool.store.service.EnterpriseSyncService;
|
||||||
import com.google.common.collect.ArrayListMultimap;
|
import com.google.common.collect.ArrayListMultimap;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
|
import javafx.util.Pair;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.collections4.ListUtils;
|
import org.apache.commons.collections4.ListUtils;
|
||||||
@@ -19,6 +21,8 @@ import javax.annotation.Resource;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static com.cool.store.enums.FSEventTypeEnum.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author zhangchenbiao
|
* @author zhangchenbiao
|
||||||
* @FileName: EnterpriseInitService
|
* @FileName: EnterpriseInitService
|
||||||
@@ -46,19 +50,9 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService {
|
|||||||
@Override
|
@Override
|
||||||
public void syncAll() {
|
public void syncAll() {
|
||||||
//同步部门
|
//同步部门
|
||||||
List<SysDepartmentDTO> departments = isvHttpRequest.getSubDepartments(CommonConstants.ROOT_DEPT_ID_STR, true);
|
Pair<List<RegionDO>, Multimap<String, String>> listMultimapPair = syncRegion();
|
||||||
//获取企业信息
|
List<RegionDO> regionList = listMultimapPair.getKey();
|
||||||
AuthInfoDTO authInfo = isvHttpRequest.getAuthInfo();
|
Multimap<String, String> leaderDeptMap = listMultimapPair.getValue();
|
||||||
Multimap<String, String> leaderDeptMap = ArrayListMultimap.create();
|
|
||||||
//组织架构中增加根节点,处理部门上下级关系
|
|
||||||
List<RegionDO> regionList = SysDepartmentDTO.convertRegionDO(departments, leaderDeptMap);
|
|
||||||
List<String> regionIds = regionList.stream().map(RegionDO::getRegionId).distinct().collect(Collectors.toList());
|
|
||||||
//添加根节点
|
|
||||||
regionList.add(getRootRegion(authInfo));
|
|
||||||
//批量插入
|
|
||||||
regionDAO.batchInsertOrUpdate(regionList);
|
|
||||||
//删除不存在的区域
|
|
||||||
regionDAO.deleteNotExistRegion(regionIds);
|
|
||||||
Multimap<String, String> roleUserMap = ArrayListMultimap.create();
|
Multimap<String, String> roleUserMap = ArrayListMultimap.create();
|
||||||
//同步用户及部门
|
//同步用户及部门
|
||||||
syncUserAndUserRegion(regionList, roleUserMap, leaderDeptMap);
|
syncUserAndUserRegion(regionList, roleUserMap, leaderDeptMap);
|
||||||
@@ -72,9 +66,9 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService {
|
|||||||
roleIds.add(sysRole.getRoleId());
|
roleIds.add(sysRole.getRoleId());
|
||||||
Collection<String> userIds = roleUserMap.get(roleName);
|
Collection<String> userIds = roleUserMap.get(roleName);
|
||||||
insertOrUpdateList.add(sysRole);
|
insertOrUpdateList.add(sysRole);
|
||||||
userRoleInsertOrUpdateList.addAll(EnterpriseUserRoleDO.convertDO(sysRole.getRoleId(), new ArrayList<>(userIds)));
|
userRoleInsertOrUpdateList.addAll(EnterpriseUserRoleDO.convertSyncDO(sysRole.getRoleId(), new ArrayList<>(userIds)));
|
||||||
//删除角色下不存在的用户
|
//删除角色下不存在的用户
|
||||||
enterpriseUserRoleDAO.deleteUserRole(sysRole.getRoleId(), DataSourceEnum.SYNC, new ArrayList<>(userIds));
|
enterpriseUserRoleDAO.deleteRoleInUser(sysRole.getRoleId(), DataSourceEnum.SYNC, new ArrayList<>(userIds));
|
||||||
}
|
}
|
||||||
sysRoleDAO.batchInsertSelective(insertOrUpdateList);
|
sysRoleDAO.batchInsertSelective(insertOrUpdateList);
|
||||||
enterpriseUserRoleDAO.batchInsertOrUpdate(userRoleInsertOrUpdateList);
|
enterpriseUserRoleDAO.batchInsertOrUpdate(userRoleInsertOrUpdateList);
|
||||||
@@ -86,6 +80,32 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Pair<List<RegionDO>, Multimap<String, String>> syncRegion(){
|
||||||
|
//同步部门
|
||||||
|
List<SysDepartmentDTO> departments = isvHttpRequest.getSubDepartments(CommonConstants.ROOT_DEPT_ID_STR, true);
|
||||||
|
//获取企业信息
|
||||||
|
AuthInfoDTO authInfo = isvHttpRequest.getAuthInfo();
|
||||||
|
Multimap<String, String> leaderDeptMap = ArrayListMultimap.create();
|
||||||
|
//组织架构中增加根节点,处理部门上下级关系
|
||||||
|
List<RegionDO> regionList = SysDepartmentDTO.convertRegionDO(departments, leaderDeptMap);
|
||||||
|
//添加根节点
|
||||||
|
regionList.add(getRootRegion(authInfo));
|
||||||
|
List<String> regionIds = regionList.stream().map(RegionDO::getRegionId).distinct().collect(Collectors.toList());
|
||||||
|
//批量插入
|
||||||
|
regionDAO.batchInsertOrUpdate(regionList);
|
||||||
|
//删除不存在的区域
|
||||||
|
regionDAO.deleteNotExistRegion(regionIds);
|
||||||
|
//删除区域管理的人员
|
||||||
|
userRegionMappingDAO.deleteRegionUserByExcludeRegionIds(regionIds);
|
||||||
|
return new Pair<>(regionList, leaderDeptMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理用户及部门之间的关系
|
||||||
|
* @param regionList
|
||||||
|
* @param roleUserMap
|
||||||
|
* @param leaderDeptMap
|
||||||
|
*/
|
||||||
private void syncUserAndUserRegion(List<RegionDO> regionList, Multimap<String, String> roleUserMap, Multimap<String, String> leaderDeptMap){
|
private void syncUserAndUserRegion(List<RegionDO> regionList, Multimap<String, String> roleUserMap, Multimap<String, String> leaderDeptMap){
|
||||||
Map<String, String> regionPathMap = regionList.stream().collect(Collectors.toMap(RegionDO::getRegionId, RegionDO::getRegionPath));
|
Map<String, String> regionPathMap = regionList.stream().collect(Collectors.toMap(RegionDO::getRegionId, RegionDO::getRegionPath));
|
||||||
List<EnterpriseUserDO> userList = new ArrayList<>();
|
List<EnterpriseUserDO> userList = new ArrayList<>();
|
||||||
@@ -117,6 +137,7 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService {
|
|||||||
userRegionMappingDAO.batchInsertOrUpdateUserRegion(userRegionList);
|
userRegionMappingDAO.batchInsertOrUpdateUserRegion(userRegionList);
|
||||||
//删除不存在的用户
|
//删除不存在的用户
|
||||||
enterpriseUserDAO.deleteUser(userIds);
|
enterpriseUserDAO.deleteUser(userIds);
|
||||||
|
userRegionMappingDAO.deleteRegionUserByExcludeUserIds(userIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -132,6 +153,50 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService {
|
|||||||
rootRegion.setThirdDeptId(CommonConstants.ROOT_DEPT_ID_STR);
|
rootRegion.setThirdDeptId(CommonConstants.ROOT_DEPT_ID_STR);
|
||||||
rootRegion.setOrderNum(CommonConstants.ZERO);
|
rootRegion.setOrderNum(CommonConstants.ZERO);
|
||||||
rootRegion.setRegionPath(CommonConstants.PATH_SPILT + rootRegion.getRegionId() + CommonConstants.PATH_SPILT);
|
rootRegion.setRegionPath(CommonConstants.PATH_SPILT + rootRegion.getRegionId() + CommonConstants.PATH_SPILT);
|
||||||
|
rootRegion.setDeleted(Boolean.FALSE);
|
||||||
return rootRegion;
|
return rootRegion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void userUpdateEvent(UserEventDTO param) {
|
||||||
|
switch (parseValue(param.getEventType())){
|
||||||
|
case USER_CREATED:
|
||||||
|
case USER_UPDATED:
|
||||||
|
EnterpriseUserDTO userDetail = isvHttpRequest.getUserDetailByUserId(param.getOpenId());
|
||||||
|
List<String> departmentLists = userDetail.getDepartmentLists();
|
||||||
|
Multimap<String, String> leaderDeptMap = ArrayListMultimap.create();
|
||||||
|
Map<String, String> regionPathMap = new HashMap<>();
|
||||||
|
if(CollectionUtils.isNotEmpty(departmentLists)){
|
||||||
|
List<RegionDO> regionList = regionDAO.getRegionByRegionIds(departmentLists);
|
||||||
|
List<String> regionIds = ListUtils.emptyIfNull(regionList).stream().map(RegionDO::getRegionId).collect(Collectors.toList());
|
||||||
|
//判断两个集合是否都是包含关系
|
||||||
|
if(!(regionIds.containsAll(departmentLists) && departmentLists.containsAll(regionList))){
|
||||||
|
Pair<List<RegionDO>, Multimap<String, String>> regionPair = syncRegion();
|
||||||
|
regionList = regionPair.getKey();
|
||||||
|
leaderDeptMap = regionPair.getValue();
|
||||||
|
}
|
||||||
|
regionPathMap = regionList.stream().collect(Collectors.toMap(k->k.getRegionId(), v->v.getRegionPath()));
|
||||||
|
userRegionMappingDAO.batchInsertOrUpdateUserRegion(UserRegionMappingDO.convertSyncDO(departmentLists, userDetail.getUserId()));
|
||||||
|
}
|
||||||
|
String jobTitle = userDetail.getJobTitle();
|
||||||
|
if(StringUtils.isNotBlank(jobTitle)){
|
||||||
|
SysRoleDO role = sysRoleDAO.getRoleByName(jobTitle, DataSourceEnum.SYNC);
|
||||||
|
if(Objects.isNull(role)){
|
||||||
|
//新增角色
|
||||||
|
role = SysRoleDO.convertSyncDO(jobTitle);
|
||||||
|
sysRoleDAO.batchInsertSelective(new ArrayList<>(Arrays.asList(role)));
|
||||||
|
}
|
||||||
|
List<EnterpriseUserRoleDO> enterpriseUserRole = EnterpriseUserRoleDO.convertSyncDO(role.getRoleId(), new ArrayList<>(Arrays.asList(userDetail.getUserId())));
|
||||||
|
enterpriseUserRoleDAO.batchInsertOrUpdate(enterpriseUserRole);
|
||||||
|
enterpriseUserRoleDAO.deleteUserInRole(userDetail.getUserId(), DataSourceEnum.SYNC, role.getRoleId());
|
||||||
|
}
|
||||||
|
EnterpriseUserDO enterpriseUser = EnterpriseUserDTO.transUserDtoToDo(userDetail, regionPathMap, leaderDeptMap);
|
||||||
|
enterpriseUserDAO.batchInsertOrUpdate(new ArrayList<>(Arrays.asList(enterpriseUser)));
|
||||||
|
break;
|
||||||
|
case USER_DELETED:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
package com.cool.store.service.impl;
|
package com.cool.store.service.impl;
|
||||||
|
|
||||||
|
import com.cool.store.dao.RegionDAO;
|
||||||
|
import com.cool.store.entity.RegionDO;
|
||||||
import com.cool.store.mq.producer.SimpleMessageService;
|
import com.cool.store.mq.producer.SimpleMessageService;
|
||||||
import com.cool.store.service.RegionService;
|
import com.cool.store.service.RegionService;
|
||||||
import com.cool.store.utils.RedisConstantUtil;
|
import com.cool.store.utils.RedisConstantUtil;
|
||||||
import com.cool.store.utils.RedisUtil;
|
import com.cool.store.utils.RedisUtil;
|
||||||
|
import com.cool.store.vo.region.RegionBaseInfoVO;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author zhangchenbiao
|
* @author zhangchenbiao
|
||||||
@@ -20,9 +24,12 @@ public class RegionServiceImpl implements RegionService {
|
|||||||
@Resource
|
@Resource
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
@Resource
|
@Resource
|
||||||
private RedisConstantUtil redisConstantUtil;
|
private RegionDAO regionDAO;
|
||||||
@Resource
|
|
||||||
private SimpleMessageService simpleMessageService;
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RegionBaseInfoVO getRegionBaseInfoList() {
|
||||||
|
List<RegionDO> regionBaseInfoList = regionDAO.getRegionBaseInfoList();
|
||||||
|
return RegionBaseInfoVO.convertTree(regionBaseInfoList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.cool.store.controller;
|
||||||
|
|
||||||
|
import com.cool.store.response.ResponseResult;
|
||||||
|
import com.cool.store.service.RegionService;
|
||||||
|
import com.cool.store.vo.region.RegionBaseInfoVO;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zhangchenbiao
|
||||||
|
* @FileName: RegionController
|
||||||
|
* @Description:
|
||||||
|
* @date 2023-06-12 15:53
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping({"/v1/region" })
|
||||||
|
@Slf4j
|
||||||
|
@Api(tags = "组织架构")
|
||||||
|
public class RegionController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RegionService regionService;
|
||||||
|
|
||||||
|
@GetMapping("/getRegionList")
|
||||||
|
public ResponseResult<RegionBaseInfoVO> getRegionBaseInfoList(){
|
||||||
|
return ResponseResult.success(regionService.getRegionBaseInfoList());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user