diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/UserAllocationTask.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/UserAllocationTask.java new file mode 100644 index 0000000..6c7c53d --- /dev/null +++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/UserAllocationTask.java @@ -0,0 +1,48 @@ +package com.ensign.crm.module.crm.job; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ensign.crm.framework.common.enums.CommonStatusEnum; +import com.ensign.crm.framework.quartz.core.handler.JobHandler; +import com.ensign.crm.module.system.api.permission.PermissionApi; +import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO; +import com.ensign.crm.module.system.dal.mysql.user.AdminUserMapper; +import com.ensign.crm.module.system.service.permission.PermissionService; +import com.ensign.crm.module.system.service.permission.RoleService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Description: TODO + * @Date: 2024/10/15 11:38 + * @Created: by ZZSLL + */ + +@Slf4j +@Component +public class UserAllocationTask implements JobHandler { + + @Autowired + private AdminUserMapper userMapper; + + @Autowired + private PermissionService permissionService; + + + @Override + public String execute(String param) { + + LambdaQueryWrapper<AdminUserDO> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AdminUserDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) + .eq(AdminUserDO::getIsSyncKingdee, CommonStatusEnum.ENABLE.getStatus()); + List<AdminUserDO> users = userMapper.selectList(queryWrapper); + + for (AdminUserDO user : users) { + permissionService.assignPermissions(user); + } + + return "success"; + } +} diff --git a/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/api/permission/PermissionApi.java b/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/api/permission/PermissionApi.java index 9469190..4c1ded9 100644 --- a/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/api/permission/PermissionApi.java +++ b/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/api/permission/PermissionApi.java @@ -45,5 +45,4 @@ public interface PermissionApi { * @return 部门数据权限 */ DeptDataPermissionRespDTO getDeptDataPermission(Long userId); - } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/constant/UserFunctionRoleEnum.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/constant/UserFunctionRoleEnum.java new file mode 100644 index 0000000..e006ec4 --- /dev/null +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/constant/UserFunctionRoleEnum.java @@ -0,0 +1,69 @@ +package com.ensign.crm.module.system.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Classname UserFunctionRoleEnum + * @Description + * + * 1:厂家后台, + * 2:区域经理, + * 3:业务经理, + * 4:经销商后台, + * 5:经销商销售员 + * + * @Date 2024/10/15 11:41 + * @Created by violet + */ + +@Getter +@AllArgsConstructor +public enum UserFunctionRoleEnum { + + FACTORY_BACKEND(1, "CRM_role_1"), + REGIONAL_MANAGER(2, "CRM_role_2"), + BUSINESS_MANAGER(3, "CRM_role_3"), + DEALER_BACKEND(4, "CRM_role_4"), + DEALER_SALESMAN(5, "CRM_role_5"); + + private final Integer userFunc; + + private final String roleName; + + + private static final Map<Integer, String> MAP = new HashMap<>(); + + private static final List<String> LIST = new ArrayList<>(); + + static { + for (UserFunctionRoleEnum role : UserFunctionRoleEnum.values()) { + MAP.put(role.getUserFunc(), role.getRoleName()); + LIST.add(role.getRoleName()); + } + } + + public static String getRoleName(Integer userFunc) { + return MAP.get(userFunc); + } + + public static List<String> getAllRoleName() { + return LIST; + } + + public static List<String> get(Integer... func) { + List<String> roleNames = new ArrayList<>(); + for (Integer f : func) { + String roleName = UserFunctionRoleEnum.getRoleName(f); + if (roleName != null) { + roleNames.add(roleName); + } + } + return roleNames; + } +} diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionService.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionService.java index 38bd1da..9ea2b2d 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionService.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionService.java @@ -1,6 +1,7 @@ package com.ensign.crm.module.system.service.permission; import com.ensign.crm.module.system.api.permission.dto.DeptDataPermissionRespDTO; +import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO; import java.util.Collection; import java.util.Set; @@ -143,4 +144,5 @@ public interface PermissionService { */ DeptDataPermissionRespDTO getDeptDataPermission(Long userId); + void assignPermissions(AdminUserDO user); } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionServiceImpl.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionServiceImpl.java index 3a344b9..91fd919 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionServiceImpl.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionServiceImpl.java @@ -7,11 +7,14 @@ import cn.hutool.extra.spring.SpringUtil; import com.ensign.crm.framework.common.enums.CommonStatusEnum; import com.ensign.crm.framework.common.util.collection.CollectionUtils; import com.ensign.crm.framework.datapermission.core.annotation.DataPermission; +import com.ensign.crm.module.system.api.permission.PermissionApi; import com.ensign.crm.module.system.api.permission.dto.DeptDataPermissionRespDTO; +import com.ensign.crm.module.system.constant.UserFunctionRoleEnum; import com.ensign.crm.module.system.dal.dataobject.permission.MenuDO; import com.ensign.crm.module.system.dal.dataobject.permission.RoleDO; import com.ensign.crm.module.system.dal.dataobject.permission.RoleMenuDO; import com.ensign.crm.module.system.dal.dataobject.permission.UserRoleDO; +import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO; import com.ensign.crm.module.system.dal.mysql.permission.RoleMenuMapper; import com.ensign.crm.module.system.dal.mysql.permission.UserRoleMapper; import com.ensign.crm.module.system.dal.redis.RedisKeyConstants; @@ -59,6 +62,9 @@ public class PermissionServiceImpl implements PermissionService { @Resource private AdminUserService userService; + @Resource + private PermissionApi permissionApi; + @Override public boolean hasAnyPermissions(Long userId, String... permissions) { // 如果为空,说明已经有权限 @@ -86,7 +92,7 @@ public class PermissionServiceImpl implements PermissionService { /** * 判断指定角色,是否拥有该 permission 权限 * - * @param roles 指定角色数组 + * @param roles 指定角色数组 * @param permission 权限标识 * @return 是否拥有 */ @@ -334,4 +340,56 @@ public class PermissionServiceImpl implements PermissionService { return SpringUtil.getBean(getClass()); } + + @Override + public void assignPermissions(AdminUserDO user) { + Integer userFunction = user.getCrmUserFunction(); + if (userFunction == null) { + return; + } + if (!"12345".contains(userFunction.toString())) { + return; + } + Long userId = user.getId(); + List<String> rules = getRoleList(userFunction); + Set<String> noRoles = new HashSet<>(); + for (String rule : rules) { + boolean hassed = permissionApi.hasAnyRoles(userId, rule); + if (!hassed) { + noRoles.add(rule); + } + } + + if (!noRoles.isEmpty()) { + doAssignPermissions(user, noRoles); + } + } + + private void doAssignPermissions(AdminUserDO user, Set<String> noRoles) { + Set<Long> ids = roleService.getRoleIds(noRoles); + assignUserRole(user.getId(), ids); + } + + private List<String> getRoleList(Integer userFunction) { + List<String> roles = new ArrayList<>(); + roles.add("crmuser"); + switch (userFunction) { + case 1: + roles.addAll(UserFunctionRoleEnum.get(1, 2, 3, 4, 5)); + break; + case 2: + roles.addAll(UserFunctionRoleEnum.get(1, 2, 3, 4)); + break; + case 3: + roles.addAll(UserFunctionRoleEnum.get(1, 2, 3)); + break; + case 4: + roles.addAll(UserFunctionRoleEnum.get(1, 2)); + break; + case 5: + roles.addAll(UserFunctionRoleEnum.get(1)); + break; + } + return roles; + } } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/RoleService.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/RoleService.java index e75c0b2..39509cf 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/RoleService.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/RoleService.java @@ -121,4 +121,5 @@ public interface RoleService { */ void validateRoleList(Collection<Long> ids); + Set<Long> getRoleIds(Set<String> noRoles); } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/RoleServiceImpl.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/RoleServiceImpl.java index 1c85000..033a9d2 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/RoleServiceImpl.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/RoleServiceImpl.java @@ -4,10 +4,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.spring.SpringUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ensign.crm.framework.common.enums.CommonStatusEnum; import com.ensign.crm.framework.common.pojo.PageResult; import com.ensign.crm.framework.common.util.collection.CollectionUtils; import com.ensign.crm.framework.common.util.object.BeanUtils; +import com.ensign.crm.framework.mybatis.core.query.LambdaQueryWrapperX; import com.ensign.crm.module.system.controller.admin.permission.vo.role.RolePageReqVO; import com.ensign.crm.module.system.controller.admin.permission.vo.role.RoleSaveReqVO; import com.ensign.crm.module.system.dal.dataobject.permission.RoleDO; @@ -258,4 +260,17 @@ public class RoleServiceImpl implements RoleService { return SpringUtil.getBean(getClass()); } + + @Override + public Set<Long> getRoleIds(Set<String> noRoles) { + LambdaQueryWrapperX<RoleDO> queryWrapperX = new LambdaQueryWrapperX<>(); + queryWrapperX.eq(RoleDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) + .in(RoleDO::getCode, noRoles); + List<RoleDO> roleDOS = roleMapper.selectList(queryWrapperX); + Set<Long> roleIds = new HashSet<>(); + roleDOS.forEach(roleDO -> { + roleIds.add(roleDO.getId()); + }); + return roleIds; + } }