大调整

This commit is contained in:
zhangchenbiao
2023-06-08 15:58:05 +08:00
parent af7188f223
commit 665cb2190f
5 changed files with 249 additions and 304 deletions

View File

@@ -1,6 +1,5 @@
package com.cool.store.mapper; package com.cool.store.mapper;
import com.cool.store.dto.enterprise.EnterpriseUserRole;
import com.cool.store.entity.SysRoleDO; import com.cool.store.entity.SysRoleDO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -8,26 +7,30 @@ import java.util.List;
/** /**
* @author zhangchenbiao * @author zhangchenbiao
* @date 2023-05-19 03:00 * @date 2023-06-08 10:54
*/ */
public interface SysRoleMapper { public interface SysRoleMapper {
/** /**
* *
* 默认插入方法,只会给有值的字段赋值 * 默认插入方法,只会给有值的字段赋值
* 会对传进来的字段做判空处理如果字段为空则使用数据库默认字段或者null * 会对传进来的字段做判空处理如果字段为空则使用数据库默认字段或者null
* dateTime:2023-05-19 03:00 * dateTime:2023-06-08 10:54
*/ */
int insertSelective(@Param("record") SysRoleDO record); int batchInsertSelective(@Param("insertOrUpdateList") List<SysRoleDO> insertOrUpdateList);
/** /**
* *
* 默认更新方法根据主键更新不会把null值更新到数据库避免覆盖之前有值的 * 默认更新方法根据主键更新不会把null值更新到数据库避免覆盖之前有值的
* dateTime:2023-05-19 03:00 * dateTime:2023-06-08 10:54
*/ */
int updateByPrimaryKeySelective(@Param("record") SysRoleDO record); int updateByPrimaryKeySelective(SysRoleDO record);
Integer deleteRole(@Param("roleType")Integer roleType, @Param("roleIds") List<String> roleIds);
SysRoleDO getHighestPrioritySysRoleDoByUserId(@Param("userId") String userId); /**
* 获取用户权限
SysRoleDO getRoleByRoleEnum(@Param("roleEnum") String roleEnum); * @param userId
* @return
*/
SysRoleDO getHighestPriorityRoleByUserId(@Param("userId") String userId);
} }

View File

@@ -3,198 +3,130 @@
<mapper namespace="com.cool.store.mapper.SysRoleMapper"> <mapper namespace="com.cool.store.mapper.SysRoleMapper">
<resultMap id="BaseResultMap" type="com.cool.store.entity.SysRoleDO"> <resultMap id="BaseResultMap" type="com.cool.store.entity.SysRoleDO">
<id column="id" jdbcType="BIGINT" property="id"/> <id column="id" jdbcType="BIGINT" property="id"/>
<result column="role_id" jdbcType="VARCHAR" property="roleId"/>
<result column="role_name" jdbcType="VARCHAR" property="roleName"/> <result column="role_name" jdbcType="VARCHAR" property="roleName"/>
<result column="is_internal" jdbcType="BIT" property="isInternal"/> <result column="role_type" jdbcType="TINYINT" property="roleType"/>
<result column="role_auth" jdbcType="VARCHAR" property="roleAuth"/> <result column="third_unique_id" jdbcType="VARCHAR" property="thirdUniqueId"/>
<result column="source" jdbcType="CHAR" property="source"/> <result column="deleted" jdbcType="BIT" property="deleted"/>
<result column="position_type" jdbcType="VARCHAR" property="positionType"/>
<result column="app_menu" jdbcType="VARCHAR" property="appMenu"/>
<result column="syn_ding_role_id" jdbcType="BIGINT" property="synDingRoleId"/>
<result column="priority" jdbcType="INTEGER" property="priority"/>
<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"/>
<result column="role_enum" jdbcType="VARCHAR" property="roleEnum"/>
<result column="create_user" jdbcType="VARCHAR" property="createUser"/> <result column="create_user" jdbcType="VARCHAR" property="createUser"/>
<result column="update_user" jdbcType="VARCHAR" property="updateUser"/> <result column="update_user" jdbcType="VARCHAR" property="updateUser"/>
<result column="third_unique_id" jdbcType="VARCHAR" property="thirdUniqueId"/>
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, role_name, is_internal, role_auth, source, position_type, app_menu, syn_ding_role_id, id, role_id, role_name, role_type, third_unique_id, deleted, create_time, update_time, create_user,
priority, create_time, update_time, role_enum, create_user, update_user, third_unique_id update_user
</sql> </sql>
<insert id="insertSelective" keyColumn="id" keyProperty="record.id" useGeneratedKeys="true"> <insert id="batchInsertSelective">
insert into sys_role <foreach collection="insertOrUpdateList" separator=";" item="record">
<trim prefix="(" suffix=")" suffixOverrides=","> insert into sys_role
<if test="record.roleName != null"> <trim prefix="(" suffix=")" suffixOverrides=",">
role_name, <if test="record.roleId != null">
</if> role_id,
<if test="record.isInternal != null"> </if>
is_internal, <if test="record.roleName != null">
</if> role_name,
<if test="record.roleAuth != null"> </if>
role_auth, <if test="record.roleType != null">
</if> role_type,
<if test="record.source != null"> </if>
source, <if test="record.thirdUniqueId != null">
</if> third_unique_id,
<if test="record.positionType != null"> </if>
position_type, <if test="record.deleted != null">
</if> deleted,
<if test="record.appMenu != null"> </if>
app_menu, <if test="record.createTime != null">
</if> create_time,
<if test="record.synDingRoleId != null"> </if>
syn_ding_role_id, <if test="record.updateTime != null">
</if> update_time,
<if test="record.priority != null"> </if>
priority, <if test="record.createUser != null">
</if> create_user,
<if test="record.createTime != null"> </if>
create_time, <if test="record.updateUser != null">
</if> update_user,
<if test="record.updateTime != null"> </if>
update_time, </trim>
</if> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="record.roleEnum != null"> <if test="record.roleId != null">
role_enum, #{record.roleId},
</if> </if>
<if test="record.createUser != null"> <if test="record.roleName != null">
create_user, #{record.roleName},
</if> </if>
<if test="record.updateUser != null"> <if test="record.roleType != null">
update_user, #{record.roleType},
</if> </if>
<if test="record.thirdUniqueId != null"> <if test="record.thirdUniqueId != null">
third_unique_id, #{record.thirdUniqueId},
</if> </if>
</trim> <if test="record.deleted != null">
<trim prefix="values (" suffix=")" suffixOverrides=","> #{record.deleted},
<if test="record.roleName != null"> </if>
#{record.roleName}, <if test="record.createTime != null">
</if> #{record.createTime},
<if test="record.isInternal != null"> </if>
#{record.isInternal}, <if test="record.updateTime != null">
</if> #{record.updateTime},
<if test="record.roleAuth != null"> </if>
#{record.roleAuth}, <if test="record.createUser != null">
</if> #{record.createUser},
<if test="record.source != null"> </if>
#{record.source}, <if test="record.updateUser != null">
</if> #{record.updateUser},
<if test="record.positionType != null"> </if>
#{record.positionType}, </trim>
</if> ON DUPLICATE KEY UPDATE role_name = values(role_name), deleted = values(deleted)
<if test="record.appMenu != null"> </foreach>
#{record.appMenu},
</if>
<if test="record.synDingRoleId != null">
#{record.synDingRoleId},
</if>
<if test="record.priority != null">
#{record.priority},
</if>
<if test="record.createTime != null">
#{record.createTime},
</if>
<if test="record.updateTime != null">
#{record.updateTime},
</if>
<if test="record.roleEnum != null">
#{record.roleEnum},
</if>
<if test="record.createUser != null">
#{record.createUser},
</if>
<if test="record.updateUser != null">
#{record.updateUser},
</if>
<if test="record.thirdUniqueId != null">
#{record.thirdUniqueId},
</if>
</trim>
</insert> </insert>
<update id="updateByPrimaryKeySelective"> <update id="updateByPrimaryKeySelective">
update sys_role update sys_role
<set> <set>
<if test="record.roleName != null"> <if test="roleId != null">
role_name = #{record.roleName}, role_id = #{roleId},
</if> </if>
<if test="record.isInternal != null"> <if test="roleName != null">
is_internal = #{record.isInternal}, role_name = #{roleName},
</if> </if>
<if test="record.roleAuth != null"> <if test="roleType != null">
role_auth = #{record.roleAuth}, role_type = #{roleType},
</if> </if>
<if test="record.source != null"> <if test="thirdUniqueId != null">
source = #{record.source}, third_unique_id = #{thirdUniqueId},
</if> </if>
<if test="record.positionType != null"> <if test="deleted != null">
position_type = #{record.positionType}, deleted = #{deleted},
</if> </if>
<if test="record.appMenu != null"> <if test="createTime != null">
app_menu = #{record.appMenu}, create_time = #{createTime},
</if> </if>
<if test="record.synDingRoleId != null"> <if test="updateTime != null">
syn_ding_role_id = #{record.synDingRoleId}, update_time = #{updateTime},
</if> </if>
<if test="record.priority != null"> <if test="createUser != null">
priority = #{record.priority}, create_user = #{createUser},
</if> </if>
<if test="record.createTime != null"> <if test="updateUser != null">
create_time = #{record.createTime}, update_user = #{updateUser},
</if>
<if test="record.updateTime != null">
update_time = #{record.updateTime},
</if>
<if test="record.roleEnum != null">
role_enum = #{record.roleEnum},
</if>
<if test="record.createUser != null">
create_user = #{record.createUser},
</if>
<if test="record.updateUser != null">
update_user = #{record.updateUser},
</if>
<if test="record.thirdUniqueId != null">
third_unique_id = #{record.thirdUniqueId},
</if> </if>
</set> </set>
where id = #{record.id} where id = #{id}
</update> </update>
<select id="getHighestPrioritySysRoleDoByUserId" resultMap="BaseResultMap"> <update id="deleteRole">
select update sys_role set deleted = 1 where role_type = #{roleType} and role_id not in
c.id as id, <foreach collection="roleIds" open="(" close=")" separator="," item="roleId">#{roleId}</foreach>
c.role_name as roleName, </update>
c.role_auth as roleAuth,
c.position_type as positionType,
c.app_menu as appMenu,
c.role_enum as roleEnum
from
enterprise_user a
left join enterprise_user_role b on a.user_id =b.user_id
left join sys_role c on c.id=b.role_id
where
a.user_id= #{userId} and a.active = true
order by
c.priority is null, c.priority, position_type desc
LIMIT 1
</select>
<select id="getRoleByRoleEnum" resultMap="BaseResultMap"> <select id="getHighestPriorityRoleByUserId" resultMap="BaseResultMap">
select select
id as id, r.*
role_name as roleName,
role_auth as roleAuth,
is_internal as isInternal,
`source` as source,
priority as priority,
app_menu as appMenu,
position_type as positionType,
role_enum as roleEnum
from from
sys_role sys_role r inner join enterprise_user_role e on r.role_id = e.role_id
where where
role_enum = #{roleEnum} e.user_id = #{userId}
limit 1
</select> </select>
</mapper> </mapper>

View File

@@ -5,128 +5,109 @@
<id column="id" jdbcType="INTEGER" property="id"/> <id column="id" jdbcType="INTEGER" property="id"/>
<result column="region_id" jdbcType="VARCHAR" property="regionId"/> <result column="region_id" jdbcType="VARCHAR" property="regionId"/>
<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="create_id" jdbcType="VARCHAR" property="createId"/> <result column="create_id" jdbcType="VARCHAR" property="createId"/>
<result column="create_time" jdbcType="BIGINT" property="createTime"/> <result column="create_time" jdbcType="BIGINT" property="createTime"/>
<result column="update_id" jdbcType="VARCHAR" property="updateId"/> <result column="update_id" jdbcType="VARCHAR" property="updateId"/>
<result column="update_time" jdbcType="BIGINT" property="updateTime"/> <result column="update_time" jdbcType="BIGINT" property="updateTime"/>
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, region_id, user_id, create_id, create_time, update_id, update_time id, region_id, user_id, type, deleted, create_id, create_time, update_id, update_time
</sql> </sql>
<insert id="insertSelective" keyColumn="id" keyProperty="record.id" useGeneratedKeys="true"> <insert id="batchInsertOrUpdateUserRegion">
insert into user_region_mapping <foreach collection="insertOrUpdateList" item="record" separator=";">
<trim prefix="(" suffix=")" suffixOverrides=","> insert into user_region_mapping
<if test="record.regionId != null"> <trim prefix="(" suffix=")" suffixOverrides=",">
region_id, <if test="record.regionId != null">
</if> region_id,
<if test="record.userId != null"> </if>
user_id, <if test="record.userId != null">
</if> user_id,
<if test="record.createId != null"> </if>
create_id, <if test="record.type != null">
</if> type,
<if test="record.createTime != null"> </if>
create_time, <if test="record.deleted != null">
</if> deleted,
<if test="record.updateId != null"> </if>
update_id, <if test="record.createId != null">
</if> create_id,
<if test="record.updateTime != null"> </if>
update_time, <if test="record.createTime != null">
</if> create_time,
</trim> </if>
<trim prefix="values (" suffix=")" suffixOverrides=","> <if test="record.updateId != null">
<if test="record.regionId != null"> update_id,
#{record.regionId}, </if>
</if> <if test="record.updateTime != null">
<if test="record.userId != null"> update_time,
#{record.userId}, </if>
</if> </trim>
<if test="record.createId != null"> <trim prefix="values (" suffix=")" suffixOverrides=",">
#{record.createId}, <if test="record.regionId != null">
</if> #{record.regionId},
<if test="record.createTime != null"> </if>
#{record.createTime}, <if test="record.userId != null">
</if> #{record.userId},
<if test="record.updateId != null"> </if>
#{record.updateId}, <if test="record.type != null">
</if> #{record.type},
<if test="record.updateTime != null"> </if>
#{record.updateTime}, <if test="record.deleted != null">
</if> #{record.deleted},
</trim> </if>
<if test="record.createId != null">
#{record.createId},
</if>
<if test="record.createTime != null">
#{record.createTime},
</if>
<if test="record.updateId != null">
#{record.updateId},
</if>
<if test="record.updateTime != null">
#{record.updateTime},
</if>
</trim>
ON DUPLICATE KEY UPDATE type = values(type), deleted = values(deleted)
</foreach>
</insert> </insert>
<update id="updateByPrimaryKeySelective"> <update id="updateByPrimaryKeySelective">
update user_region_mapping update user_region_mapping
<set> <set>
<if test="record.regionId != null"> <if test="regionId != null">
region_id = #{record.regionId}, region_id = #{regionId},
</if> </if>
<if test="record.userId != null"> <if test="userId != null">
user_id = #{record.userId}, user_id = #{userId},
</if> </if>
<if test="record.createId != null"> <if test="type != null">
create_id = #{record.createId}, type = #{type},
</if> </if>
<if test="record.createTime != null"> <if test="deleted != null">
create_time = #{record.createTime}, deleted = #{deleted},
</if> </if>
<if test="record.updateId != null"> <if test="createId != null">
update_id = #{record.updateId}, create_id = #{createId},
</if> </if>
<if test="record.updateTime != null"> <if test="createTime != null">
update_time = #{record.updateTime}, create_time = #{createTime},
</if>
<if test="updateId != null">
update_id = #{updateId},
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if> </if>
</set> </set>
where id = #{record.id} where id = #{id}
</update> </update>
<delete id="deletedByUserIds"> <delete id="deleteUserRegion">
delete from user_region_mapping where user_id in update user_region_mapping set deleted = 1 where region_id = #{regionId} and type = #{type}
<foreach collection="userIds" open="(" close=")" separator="," item="userId"> <if test="excludeUserIds != null and excludeUserIds.size() > 0">
#{userId} and user_id not in <foreach collection="excludeUserIds" separator="," open="(" close=")" item="userId" >#{userId}</foreach>
</foreach>
</delete>
<insert id="batchInsertRegionMapping">
insert into user_region_mapping
(
region_id,
user_id,
create_time,
update_time,
create_id,
update_id
)
values
<foreach collection="userRegionMappingDOS" item="entity" separator=",">
(
#{entity.regionId},
#{entity.userId},
#{entity.createTime},
#{entity.updateTime},
#{entity.createId},
#{entity.updateId}
)
</foreach>
</insert>
<select id="listUserRegionMappingByUserId" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from user_region_mapping
<if test="userIds !=null and userIds.size >0">
where user_id in
<foreach collection="userIds" open="(" close=")" separator="," item="userId">
#{userId}
</foreach>
</if> </if>
</select>
<delete id="deletedByIds">
delete from user_region_mapping where id in
<foreach collection="ids" open="(" close=")" separator="," item="id">
#{id}
</foreach>
</delete> </delete>
</mapper> </mapper>

View File

@@ -1,5 +1,8 @@
package com.cool.store.entity; package com.cool.store.entity;
import cn.hutool.crypto.digest.MD5;
import com.cool.store.constants.CommonConstants;
import com.cool.store.enums.DataSourceEnum;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@@ -11,40 +14,30 @@ import lombok.NoArgsConstructor;
/** /**
* *
* @author zhangchenbiao * @author zhangchenbiao
* @date 2023-05-19 03:00 * @date 2023-06-08 10:54
*/ */
@Data @Data
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class SysRoleDO implements Serializable { public class SysRoleDO implements Serializable {
@ApiModelProperty("自增id") @ApiModelProperty("自增id")
private Long id; private Long id;
@ApiModelProperty("") @ApiModelProperty("角色id")
private String roleId;
@ApiModelProperty("角色名称")
private String roleName; private String roleName;
@ApiModelProperty("是否预制") @ApiModelProperty("角色类型 0-同步 1-自建")
private Boolean isInternal; private Integer roleType;
@ApiModelProperty("角色权限范围all全企业数据include_subordinate(所在组织架构包含下级) not_include_subordinate(所在的组织架构不包含下级) personal (仅自己的数据) ") @ApiModelProperty("第三方唯一id")
private String roleAuth; private String thirdUniqueId;
@ApiModelProperty("岗位来源:(create:自建岗位, sync:从钉钉同步的角色sync_position从钉钉同步的职位, ehr 从第三方ehr同步的)") @ApiModelProperty("删除标识")
private String source; private Boolean deleted;
@ApiModelProperty("职位类型store_outside-店外store_inside-店内")
private String positionType;
@ApiModelProperty("移动端菜单")
private String appMenu;
@ApiModelProperty("钉钉角色id")
private Long synDingRoleId;
@ApiModelProperty("角色排序 1.管理员 1-99.门店职位 100+.钉钉角色")
private Integer priority;
@ApiModelProperty("创建时间") @ApiModelProperty("创建时间")
private Date createTime; private Date createTime;
@@ -52,15 +45,20 @@ public class SysRoleDO implements Serializable {
@ApiModelProperty("更新时间") @ApiModelProperty("更新时间")
private Date updateTime; private Date updateTime;
@ApiModelProperty("角色枚举用于判定逻辑")
private String roleEnum;
@ApiModelProperty("创建人") @ApiModelProperty("创建人")
private String createUser; private String createUser;
@ApiModelProperty("更新人") @ApiModelProperty("更新人")
private String updateUser; private String updateUser;
@ApiModelProperty("第三方唯一id") public static SysRoleDO convertSyncDO(String roleName){
private String thirdUniqueId; SysRoleDO role = new SysRoleDO();
role.setRoleId(MD5.create().digestHex(roleName));
role.setRoleName(roleName);
role.setRoleType(DataSourceEnum.SYNC.getCode());
role.setDeleted(Boolean.FALSE);
role.setCreateTime(new Date());
role.setUpdateTime(new Date());
return role;
}
} }

View File

@@ -1,23 +1,30 @@
package com.cool.store.entity; package com.cool.store.entity;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dto.enterprise.EnterpriseUserDTO;
import com.cool.store.enums.DataSourceEnum;
import com.google.common.collect.Lists;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
/** /**
* *
* @author zhangchenbiao * @author zhangchenbiao
* @date 2023-05-19 03:00 * @date 2023-06-07 02:07
*/ */
@Data @Data
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class UserRegionMappingDO implements Serializable { public class UserRegionMappingDO implements Serializable {
@ApiModelProperty("主键") @ApiModelProperty("主键")
private Integer id; private Integer id;
@@ -27,6 +34,12 @@ public class UserRegionMappingDO implements Serializable {
@ApiModelProperty("用户ID") @ApiModelProperty("用户ID")
private String userId; private String userId;
@ApiModelProperty("类型")
private Integer type;
@ApiModelProperty("删除标识")
private Boolean deleted;
@ApiModelProperty("创建人") @ApiModelProperty("创建人")
private String createId; private String createId;
@@ -38,4 +51,22 @@ public class UserRegionMappingDO implements Serializable {
@ApiModelProperty("更新时间") @ApiModelProperty("更新时间")
private Long updateTime; private Long updateTime;
public static List<UserRegionMappingDO> convertSyncDO(String regionId, List<EnterpriseUserDTO> departmentUsers){
if(CollectionUtils.isEmpty(departmentUsers)){
return Lists.newArrayList();
}
List<UserRegionMappingDO> resultList = new ArrayList<>();
for (EnterpriseUserDTO departmentUser : departmentUsers) {
UserRegionMappingDO userRegion = new UserRegionMappingDO();
userRegion.setRegionId(regionId);
userRegion.setUserId(departmentUser.getUserId());
userRegion.setType(DataSourceEnum.SYNC.getCode());
userRegion.setCreateTime(System.currentTimeMillis());
userRegion.setUpdateTime(System.currentTimeMillis());
userRegion.setDeleted(Boolean.FALSE);
resultList.add(userRegion);
}
return resultList;
}
} }