diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/UserController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/UserController.java index eef7e442..4359442e 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/UserController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/UserController.java @@ -1,5 +1,6 @@ package com.nflg.wms.admin.controller; +import com.nflg.wms.admin.pojo.request.UserAddLdapQO; import com.nflg.wms.admin.service.LDAPControllerService; import com.nflg.wms.admin.service.UserControllerService; import com.nflg.wms.common.pojo.ApiResult; @@ -14,6 +15,7 @@ import com.nflg.wms.starter.BaseController; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import org.springframework.web.bind.annotation.*; @@ -159,4 +161,13 @@ public class UserController extends BaseController { public ApiResult> getLdapUsers(@RequestParam Long ldapId, @RequestParam String distinguishedName){ return ApiResult.success(ldapControllerService.getUsers(ldapId,distinguishedName)); } + + /** + * 从LDAP添加用户 + */ + @PostMapping("addLdapUser") + public ApiResult addLdapUser(@Valid @RequestBody @NotEmpty List users) { + userControllerService.addLdapUsers(users); + return ApiResult.success(); + } } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/UserAddLdapQO.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/UserAddLdapQO.java new file mode 100644 index 00000000..a2c37309 --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/UserAddLdapQO.java @@ -0,0 +1,44 @@ +package com.nflg.wms.admin.pojo.request; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UserAddLdapQO { + + /** + * 用户名 + */ + @NotBlank + private String name; + + /** + * ad表id + */ + @NotNull + private Long ldapId; + + /** + * 用户工号 + */ + @NotBlank + private String userCode; + + /** + * 用户DN + */ + @NotBlank + private String distinguishedName; + + /** + * 部门DN + */ + @JsonIgnore + private String departmentDistinguishedName; + + public String getDepartmentDistinguishedName() { + return distinguishedName.substring(distinguishedName.indexOf(",") + 1); + } +} diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/RoleControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/RoleControllerService.java index 2faec3c9..62f89d76 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/RoleControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/RoleControllerService.java @@ -3,6 +3,7 @@ package com.nflg.wms.admin.service; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.promeg.pinyinhelper.Pinyin; +import com.nflg.wms.common.constant.Constant; import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.vo.RoleVO; import com.nflg.wms.common.pojo.vo.UserVO; @@ -36,10 +37,10 @@ public class RoleControllerService { private IUserRoleMapService userRoleMapService; public void addRole(RoleAddQO request) { - if (StrUtil.isBlank(request.getCode())){ + if (StrUtil.isBlank(request.getCode())) { request.setCode(toPinYin(request.getName())); } - roleService.add(request, UserUtil.getUserName()); + roleService.add(request, UserUtil.getUserId(), UserUtil.getUserName()); } public void updateRole(RoleUpdateQO request) { @@ -48,6 +49,9 @@ public class RoleControllerService { } public IPage searchRoles(RoleSearchQO request) { + if (!UserUtil.getRoles().contains(Constant.SUPER_ADMIN)) { + request.setUserId(UserUtil.getUserId()); + } return roleService.search(request); } @@ -68,7 +72,7 @@ public class RoleControllerService { return userRoleMapService.getAuthorizeUser(roleId); } - private String toPinYin(String str){ + private String toPinYin(String str) { StringBuilder pinyin = new StringBuilder(); for (char c : str.toCharArray()) { if (Pinyin.isChinese(c)) { diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/UserControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/UserControllerService.java index 66332292..f293b30f 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/UserControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/UserControllerService.java @@ -8,6 +8,7 @@ import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.nflg.wms.admin.pojo.request.UserAddLdapQO; import com.nflg.wms.common.constant.Constant; import com.nflg.wms.common.constant.STATE; import com.nflg.wms.common.exception.NflgException; @@ -183,6 +184,9 @@ public class UserControllerService { if (Objects.nonNull(request.getDeptId())) { request.setDeptIds(deptService.getWithChildren(request.getDeptId())); } + if (!UserUtil.getRoles().contains(Constant.SUPER_ADMIN)) { + request.setCreateById(UserUtil.getUserId()); + } IPage pu = uService.search(request); pu.getRecords().forEach(userVO -> userVO.setRoles(userRoleMapService.getAuthorizeRole(userVO.getId()))); return pu; @@ -763,4 +767,40 @@ public class UserControllerService { .addSheet(new ListSheet<>(datas)) .writeTo(response.getOutputStream()); } + + @Transactional + public void addLdapUsers(List ldapUsers) { + List users = new ArrayList<>(); + List userInteriors = new ArrayList<>(); + List departments = deptService.lambdaQuery() + .eq(Department::getSource, 1) + .in(Department::getSourceId, ldapUsers.stream().map(UserAddLdapQO::getDepartmentDistinguishedName).collect(Collectors.toSet())) + .list(); + ldapUsers.forEach(userAddLdapQO -> { + Department department = departments.stream() + .filter(it -> it.getSourceId().equals(userAddLdapQO.getDepartmentDistinguishedName())) + .findFirst() + .orElse(null); + VUtil.trueThrowBusinessError(Objects.isNull(department)).throwMessage("部门不存在"); + User user = new User() + .setId(IdUtil.getSnowflakeNextId()) + .setUserCode(userAddLdapQO.getUserCode()) + .setUserName(userAddLdapQO.getName()) + .setEnableMustResetPwd(false) + .setMustResetPwd(false) + .setSource(1) + .setSourceId(userAddLdapQO.getDistinguishedName()) + .setRemark("LDAP用户") + .setLanguageCode(Constant.DEFAULT_LANGUAGE_CODE) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()); + users.add(user); + userInteriors.add(new UserInterior() + .setUserId(user.getId()) + .setDeptId(department.getId()) + ); + }); + uService.saveBatch(users); + userInteriorService.saveBatch(userInteriors); + } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java index 1a99e973..6f20ab31 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java @@ -33,4 +33,6 @@ public class Constant { public static String DICTIONARY_SUPPLIERS_CATEGORY = "SuppliersCategory"; public static String LOGIN_EXTRA_PURCHASING_GROUP = "purchasing_group"; + + public static String SUPER_ADMIN = "SuperAdmin"; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/RoleSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/RoleSearchQO.java index 5b4e39f3..77e52011 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/RoleSearchQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/RoleSearchQO.java @@ -1,5 +1,6 @@ package com.nflg.wms.common.pojo.qo; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import lombok.EqualsAndHashCode; @@ -8,4 +9,7 @@ import lombok.EqualsAndHashCode; public class RoleSearchQO extends PageQO{ private String name; + + @JsonIgnore + private Long userId; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/UserSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/UserSearchQO.java index 07f62a08..24ddb8a9 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/UserSearchQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/UserSearchQO.java @@ -28,4 +28,7 @@ public class UserSearchQO extends SearchBaseQO { */ @JsonIgnore private Set deptIds; + + @JsonIgnore + private Long createById; } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/Role.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/Role.java index 8a02e22e..ef048641 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/Role.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/Role.java @@ -2,12 +2,13 @@ package com.nflg.wms.repository.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; -import java.io.Serializable; -import java.time.LocalDateTime; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; +import java.io.Serializable; +import java.time.LocalDateTime; + /** *

* 角色 @@ -41,6 +42,16 @@ public class Role implements Serializable { */ private Boolean enable; + /** + * 类型,0:普通角色;1:业务管理员 + */ + private Integer type; + + /** + * 创建人ID + */ + private Long createById; + /** * 创建人 */ diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/User.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/User.java index fdea29fb..3eb4e31e 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/User.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/User.java @@ -59,6 +59,11 @@ public class User implements Serializable { */ private Integer state; + /** + * 创建人ID + */ + private Long createById; + /** * 创建人 */ diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IRoleService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IRoleService.java index 07edd3ac..0818617d 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IRoleService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IRoleService.java @@ -9,9 +9,6 @@ import com.nflg.wms.common.pojo.qo.RoleUpdateQO; import com.nflg.wms.common.pojo.vo.MenuVO; import com.nflg.wms.common.pojo.vo.RoleVO; import com.nflg.wms.repository.entity.Role; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; import java.util.List; @@ -25,13 +22,13 @@ import java.util.List; */ public interface IRoleService extends IService { - void add(@Valid RoleAddQO request,@NotBlank String userName); + void add(RoleAddQO request,Long userId,String userName); - void update(@Valid RoleUpdateQO request, @NotBlank String userName); + void update(RoleUpdateQO request, String userName); - IPage search(@Valid RoleSearchQO request); + IPage search(RoleSearchQO request); - void enable(@Valid EnableQO request, String userName); + void enable(EnableQO request, String userName); - List getMenusByRoleCodes(@Valid @NotNull Long serviceId, Long userId); + List getMenusByRoleCodes(Long serviceId, Long userId); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/MenuServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/MenuServiceImpl.java index 3e8e94ce..e63138ba 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/MenuServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/MenuServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.common.constant.Constant; import com.nflg.wms.common.pojo.qo.EnableMenuQO; import com.nflg.wms.common.pojo.qo.MenuAddQO; import com.nflg.wms.common.pojo.qo.MenuSearchQO; @@ -14,15 +15,15 @@ import com.nflg.wms.common.pojo.qo.MenuUpdateQO; import com.nflg.wms.common.pojo.vo.ButtonVO; import com.nflg.wms.common.pojo.vo.MenuAuthorizeVO; import com.nflg.wms.common.pojo.vo.MenuVO; +import com.nflg.wms.common.pojo.vo.RoleVO; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.Menu; import com.nflg.wms.repository.entity.MenuButton; import com.nflg.wms.repository.entity.RoleButtonMap; +import com.nflg.wms.repository.entity.RoleMenuMap; import com.nflg.wms.repository.mapper.MenuMapper; -import com.nflg.wms.repository.service.IMenuButtonService; -import com.nflg.wms.repository.service.IMenuService; -import com.nflg.wms.repository.service.IRoleButtonMapService; +import com.nflg.wms.repository.service.*; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -47,6 +48,12 @@ public class MenuServiceImpl extends ServiceImpl implements IM @Resource private IRoleButtonMapService roleButtonMapService; + @Resource + private IUserRoleMapService userRoleMapService; + + @Resource + private IRoleMenuMapService roleMenuMapService; + @Override public List getMenuForAuthorize(Long roleId) { List

datas = lambdaQuery() @@ -63,6 +70,16 @@ public class MenuServiceImpl extends ServiceImpl implements IM @Override public List getNodeForAuthorize(Long roleId) { List nodes = baseMapper.getAllDataForAuthorize(roleId); + if (!UserUtil.getRoles().contains(Constant.SUPER_ADMIN)){ + List userRoles=userRoleMapService.getRoleList(UserUtil.getUserId()); + List menuIds =roleMenuMapService.lambdaQuery() + .in(RoleMenuMap::getRoleId, userRoles.stream().map(RoleVO::getId).collect(Collectors.toList())) + .list() + .stream() + .map(RoleMenuMap::getMenuId) + .toList(); + nodes.removeIf(v -> !menuIds.contains(v.getId())); + } List rootNodes = nodes.stream().filter(v -> v.getType() == 1 && v.getParentId() == 0 ).toList(); diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/RoleServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/RoleServiceImpl.java index 371cc6ba..c2a3a6e9 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/RoleServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/RoleServiceImpl.java @@ -9,7 +9,6 @@ import com.nflg.wms.common.pojo.qo.RoleSearchQO; import com.nflg.wms.common.pojo.qo.RoleUpdateQO; import com.nflg.wms.common.pojo.vo.MenuVO; import com.nflg.wms.common.pojo.vo.RoleVO; -import com.nflg.wms.common.util.BeanUtil; import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.Menu; import com.nflg.wms.repository.entity.Role; @@ -45,11 +44,12 @@ public class RoleServiceImpl extends ServiceImpl implements IR @Transactional @Override - public void add(RoleAddQO request, String userName) { + public void add(RoleAddQO request,Long userId, String userName) { Role role = new Role() .setCode(request.getCode()) .setName(request.getName()) .setEnable(request.getEnable()) + .setCreateById(userId) .setCreateBy(userName) .setCreateTime(LocalDateTime.now()); save(role); diff --git a/nflg-wms-repository/src/main/resources/mapper/MenuMapper.xml b/nflg-wms-repository/src/main/resources/mapper/MenuMapper.xml index f8971db0..2566b4cb 100644 --- a/nflg-wms-repository/src/main/resources/mapper/MenuMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/MenuMapper.xml @@ -22,26 +22,16 @@ diff --git a/nflg-wms-repository/src/main/resources/mapper/RoleMapper.xml b/nflg-wms-repository/src/main/resources/mapper/RoleMapper.xml index 21d393f1..277261bf 100644 --- a/nflg-wms-repository/src/main/resources/mapper/RoleMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/RoleMapper.xml @@ -6,6 +6,9 @@ SELECT * FROM role + + AND create_by_id = #{request.userId} + AND name ilike CONCAT('%',#{request.name},'%') diff --git a/nflg-wms-repository/src/main/resources/mapper/UserMapper.xml b/nflg-wms-repository/src/main/resources/mapper/UserMapper.xml index e0a05e40..6bc4e107 100644 --- a/nflg-wms-repository/src/main/resources/mapper/UserMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/UserMapper.xml @@ -14,6 +14,9 @@ select vu.* from v_user_interior vu + + and vu.create_by_id = #{request.createById} + and vu.dept_id in