diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/enums/UserGroupSelectTypeEnum.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/enums/UserGroupSelectTypeEnum.java new file mode 100644 index 000000000..efdb2f80c --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/enums/UserGroupSelectTypeEnum.java @@ -0,0 +1,79 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.system.api.enums; + +import lombok.Getter; + +/** + * 用户组的选择详情 + *

+ * 授权对象类型:1-用户,2-部门,3-角色,4-职位,5-关系,6-部门审批人 + * + * @author fengshuonan + * @date 2022/9/26 14:31 + */ +@Getter +public enum UserGroupSelectTypeEnum { + + /** + * 用户 + */ + USER(1, "用户"), + + /** + * 部门 + */ + DEPT(2, "部门"), + + /** + * 角色 + */ + ROLE(3, "角色"), + + /** + * 职位 + */ + POSITION(4, "职位"), + + /** + * 关系 + */ + RELATION(5, "关系"), + + /** + * 部门审批人 + */ + APPROVER(6, "部门审批人"); + + private final Integer code; + + private final String message; + + UserGroupSelectTypeEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + +} diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/SysUserGroupController.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/SysUserGroupController.java index 7fa19c287..51d3a83a5 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/SysUserGroupController.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/SysUserGroupController.java @@ -1,6 +1,5 @@ package cn.stylefeng.roses.kernel.system.modular.user.controller; -import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; @@ -14,7 +13,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.List; /** * 用户组控制器 @@ -37,32 +35,8 @@ public class SysUserGroupController { */ @PostResource(name = "添加", path = "/sysUserGroup/add") public ResponseData add(@RequestBody @Validated(SysUserGroupRequest.add.class) SysUserGroupRequest sysUserGroupRequest) { - sysUserGroupService.add(sysUserGroupRequest); - return new SuccessResponseData<>(); - } - - /** - * 删除 - * - * @author fengshuonan - * @date 2022/09/26 10:12 - */ - @PostResource(name = "删除", path = "/sysUserGroup/delete") - public ResponseData delete(@RequestBody @Validated(SysUserGroupRequest.delete.class) SysUserGroupRequest sysUserGroupRequest) { - sysUserGroupService.del(sysUserGroupRequest); - return new SuccessResponseData<>(); - } - - /** - * 编辑 - * - * @author fengshuonan - * @date 2022/09/26 10:12 - */ - @PostResource(name = "编辑", path = "/sysUserGroup/edit") - public ResponseData edit(@RequestBody @Validated(SysUserGroupRequest.edit.class) SysUserGroupRequest sysUserGroupRequest) { - sysUserGroupService.edit(sysUserGroupRequest); - return new SuccessResponseData<>(); + SysUserGroup result = sysUserGroupService.add(sysUserGroupRequest); + return new SuccessResponseData<>(result); } /** @@ -76,26 +50,4 @@ public class SysUserGroupController { return new SuccessResponseData<>(sysUserGroupService.detail(sysUserGroupRequest)); } - /** - * 获取列表 - * - * @author fengshuonan - * @date 2022/09/26 10:12 - */ - @GetResource(name = "获取列表", path = "/sysUserGroup/list") - public ResponseData> list(SysUserGroupRequest sysUserGroupRequest) { - return new SuccessResponseData<>(sysUserGroupService.findList(sysUserGroupRequest)); - } - - /** - * 获取列表(带分页) - * - * @author fengshuonan - * @date 2022/09/26 10:12 - */ - @GetResource(name = "分页查询", path = "/sysUserGroup/page") - public ResponseData> page(SysUserGroupRequest sysUserGroupRequest) { - return new SuccessResponseData<>(sysUserGroupService.findPage(sysUserGroupRequest)); - } - } diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/entity/SysUserGroup.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/entity/SysUserGroup.java index 898048f72..5b5853dc6 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/entity/SysUserGroup.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/entity/SysUserGroup.java @@ -2,6 +2,7 @@ package cn.stylefeng.roses.kernel.system.modular.user.entity; import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription; +import cn.stylefeng.roses.kernel.system.api.pojo.usergroup.SelectItem; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -9,6 +10,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.List; + /** * 用户组实例类 * @@ -41,4 +44,46 @@ public class SysUserGroup extends BaseEntity { @ChineseDescription("组内选择项的合并") private String userGroupDetailName; + /** + * 选中的用户列表 + */ + @TableField(exist = false) + @ChineseDescription("选中的用户列表") + private List selectUserList; + + /** + * 选中的组织机构列表 + */ + @TableField(exist = false) + @ChineseDescription("选中的组织机构列表") + private List selectOrgList; + + /** + * 选中的角色列表 + */ + @TableField(exist = false) + @ChineseDescription("选中的角色列表") + private List selectRoleList; + + /** + * 选中的职位列表 + */ + @TableField(exist = false) + @ChineseDescription("选中的职位列表") + private List selectPositionList; + + /** + * 选中的关系列表 + */ + @TableField(exist = false) + @ChineseDescription("选中的关系列表") + private List selectRelationList; + + /** + * 选中的部门审批人类型列表 + */ + @TableField(exist = false) + @ChineseDescription("选中的部门审批人类型列表") + private List selectOrgApproverTypeList; + } diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/UserGroupFactory.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/UserGroupFactory.java new file mode 100644 index 000000000..b4e98e0ef --- /dev/null +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/UserGroupFactory.java @@ -0,0 +1,170 @@ +package cn.stylefeng.roses.kernel.system.modular.user.factory; + +import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.system.api.enums.UserGroupSelectTypeEnum; +import cn.stylefeng.roses.kernel.system.api.pojo.usergroup.SelectItem; +import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserGroup; +import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserGroupDetail; +import cn.stylefeng.roses.kernel.system.modular.user.pojo.request.SysUserGroupRequest; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 用户组创建工厂 + * + * @author fengshuonan + * @date 2022/9/26 14:28 + */ +public class UserGroupFactory { + + /** + * 创建用户组详情 + * + * @param userGroupId 用户组的组id + * @param sysUserGroupRequest 前端传递的参数 + * @return 最终转化的用户组详情实体 + * @author fengshuonan + * @date 2022/9/26 14:29 + */ + public static List createUserGroupDetail(Long userGroupId, SysUserGroupRequest sysUserGroupRequest) { + + ArrayList sysUserGroupDetails = new ArrayList<>(); + + // 解析请求参数中选择的情况 + List selectUserList = sysUserGroupRequest.getSelectUserList(); + List selectOrgList = sysUserGroupRequest.getSelectOrgList(); + List selectRoleList = sysUserGroupRequest.getSelectRoleList(); + List selectPositionList = sysUserGroupRequest.getSelectPositionList(); + List selectRelationList = sysUserGroupRequest.getSelectRelationList(); + List selectOrgApproverTypeList = sysUserGroupRequest.getSelectOrgApproverTypeList(); + + // 生成对应的userGroupDetail实体 + List users = parseToUserGroupDetail(userGroupId, UserGroupSelectTypeEnum.USER, selectUserList); + List depts = parseToUserGroupDetail(userGroupId, UserGroupSelectTypeEnum.DEPT, selectOrgList); + List roles = parseToUserGroupDetail(userGroupId, UserGroupSelectTypeEnum.ROLE, selectRoleList); + List positions = parseToUserGroupDetail(userGroupId, UserGroupSelectTypeEnum.POSITION, selectPositionList); + List relations = parseToUserGroupDetail(userGroupId, UserGroupSelectTypeEnum.RELATION, selectRelationList); + List approvers = parseToUserGroupDetail(userGroupId, UserGroupSelectTypeEnum.APPROVER, selectOrgApproverTypeList); + + sysUserGroupDetails.addAll(users); + sysUserGroupDetails.addAll(depts); + sysUserGroupDetails.addAll(roles); + sysUserGroupDetails.addAll(positions); + sysUserGroupDetails.addAll(relations); + sysUserGroupDetails.addAll(approvers); + + return sysUserGroupDetails; + } + + /** + * @author fengshuonan + * @date 2022/9/26 15:37 + */ + public static SysUserGroup parseToEntity(SysUserGroup sysUserGroup, List sysUserGroupDetailList) { + + // 按类型将详情分组 + Map> userDetailList = sysUserGroupDetailList.stream().collect(Collectors.groupingBy(SysUserGroupDetail::getSelectType)); + + // 设置绑定的用户列表 + List users = userDetailList.get(UserGroupSelectTypeEnum.USER.getCode()); + sysUserGroup.setSelectUserList(parseToSelectItem(users)); + + // 设置绑定的部门列表 + List depts = userDetailList.get(UserGroupSelectTypeEnum.DEPT.getCode()); + sysUserGroup.setSelectOrgList(parseToSelectItem(depts)); + + // 设置绑定的角色列表 + List roles = userDetailList.get(UserGroupSelectTypeEnum.ROLE.getCode()); + sysUserGroup.setSelectRoleList(parseToSelectItem(roles)); + + // 设置绑定的职位列表 + List positions = userDetailList.get(UserGroupSelectTypeEnum.POSITION.getCode()); + sysUserGroup.setSelectPositionList(parseToSelectItem(positions)); + + // 设置绑定的关系类型 + List relations = userDetailList.get(UserGroupSelectTypeEnum.RELATION.getCode()); + sysUserGroup.setSelectRelationList(parseToSelectItem(relations)); + + // 设置绑定的部门审批人类型 + List approvers = userDetailList.get(UserGroupSelectTypeEnum.APPROVER.getCode()); + sysUserGroup.setSelectOrgApproverTypeList(parseToSelectItem(approvers)); + + return sysUserGroup; + } + + /** + * 生成指定类型的userGroupDetail存储类型 + * + * @author fengshuonan + * @date 2022/9/26 14:36 + */ + public static List parseToUserGroupDetail(Long userGroupId, UserGroupSelectTypeEnum userGroupSelectTypeEnum, List paramList) { + + ArrayList results = new ArrayList<>(); + + if (ObjectUtil.isEmpty(paramList)) { + return results; + } + + // 转化请求的参数 + for (SelectItem selectItem : paramList) { + SysUserGroupDetail sysUserGroupDetail = new SysUserGroupDetail(); + + // 设置分组id + sysUserGroupDetail.setUserGroupId(userGroupId); + + // 设置详情类型 + sysUserGroupDetail.setSelectType(userGroupSelectTypeEnum.getCode()); + + // 设置选择的值和名称 + sysUserGroupDetail.setSelectValue(selectItem.getBizId()); + sysUserGroupDetail.setSelectValueName(selectItem.getName()); + + // 如果请求的参数是部门审批人类型,则需要单独存储选择的审批人类型 + if (UserGroupSelectTypeEnum.APPROVER.equals(userGroupSelectTypeEnum)) { + sysUserGroupDetail.setSubSelectValue(selectItem.getSubValue()); + sysUserGroupDetail.setSubSelectValueName(selectItem.getSubValueName()); + } + + results.add(sysUserGroupDetail); + } + + return results; + } + + /** + * 解析到可选择的item + * + * @author fengshuonan + * @date 2022/9/26 15:44 + */ + public static List parseToSelectItem(List userGroupDetailList) { + + ArrayList selectItems = new ArrayList<>(); + + if (ObjectUtil.isEmpty(userGroupDetailList)) { + return selectItems; + } + + for (SysUserGroupDetail sysUserGroupDetail : userGroupDetailList) { + SelectItem selectItem = new SelectItem(); + + selectItem.setBizId(sysUserGroupDetail.getSelectValue()); + selectItem.setName(sysUserGroupDetail.getSelectValueName()); + + // 如果请求的参数是部门审批人类型,则需要单独存储选择的审批人类型 + if (UserGroupSelectTypeEnum.APPROVER.getCode().equals(sysUserGroupDetail.getSelectType())) { + selectItem.setSubValue(sysUserGroupDetail.getSubSelectValue()); + selectItem.setSubValueName(sysUserGroupDetail.getSubSelectValueName()); + } + + selectItems.add(selectItem); + } + + return selectItems; + } + +} diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/pojo/request/SysUserGroupRequest.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/pojo/request/SysUserGroupRequest.java index 038493b50..3f1126cb0 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/pojo/request/SysUserGroupRequest.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/pojo/request/SysUserGroupRequest.java @@ -22,7 +22,7 @@ public class SysUserGroupRequest extends BaseRequest { /** * 用户组id */ - @NotNull(message = "用户组id不能为空", groups = {edit.class, delete.class}) + @NotNull(message = "用户组id不能为空", groups = {detail.class}) @ChineseDescription("用户组id") private Long userGroupId; diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/SysUserGroupService.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/SysUserGroupService.java index 64f61845d..1f8fc9e25 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/SysUserGroupService.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/SysUserGroupService.java @@ -22,7 +22,7 @@ public interface SysUserGroupService extends IService { * @author fengshuonan * @date 2022/09/26 10:12 */ - void add(SysUserGroupRequest sysUserGroupRequest); + SysUserGroup add(SysUserGroupRequest sysUserGroupRequest); /** * 删除 diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserGroupServiceImpl.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserGroupServiceImpl.java index 3b2a2ef45..6f6f70b18 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserGroupServiceImpl.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserGroupServiceImpl.java @@ -7,15 +7,20 @@ import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserGroup; +import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserGroupDetail; import cn.stylefeng.roses.kernel.system.modular.user.enums.SysUserGroupExceptionEnum; +import cn.stylefeng.roses.kernel.system.modular.user.factory.UserGroupFactory; import cn.stylefeng.roses.kernel.system.modular.user.mapper.SysUserGroupMapper; import cn.stylefeng.roses.kernel.system.modular.user.pojo.request.SysUserGroupRequest; +import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserGroupDetailService; import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserGroupService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.List; /** @@ -27,11 +32,27 @@ import java.util.List; @Service public class SysUserGroupServiceImpl extends ServiceImpl implements SysUserGroupService { - @Override - public void add(SysUserGroupRequest sysUserGroupRequest) { + @Resource + private SysUserGroupDetailService sysUserGroupDetailService; + + @Override + public SysUserGroup add(SysUserGroupRequest sysUserGroupRequest) { + SysUserGroup sysUserGroup = new SysUserGroup(); - BeanUtil.copyProperties(sysUserGroupRequest, sysUserGroup); + sysUserGroup.setUserGroupId(IdWorker.getId()); + sysUserGroup.setUserGroupTitle(sysUserGroupRequest.getUserGroupTitle()); + sysUserGroup.setUserGroupDetailName(sysUserGroupRequest.getUserGroupDetailName()); + + // 解析各个请求的list,转化成detail实体 + List userGroupDetail = UserGroupFactory.createUserGroupDetail(sysUserGroup.getUserGroupId(), sysUserGroupRequest); + + // 保存用户组信息和用户组的详情 this.save(sysUserGroup); + if (ObjectUtil.isNotEmpty(userGroupDetail)) { + this.sysUserGroupDetailService.saveBatch(userGroupDetail); + } + + return sysUserGroup; } @Override @@ -49,7 +70,15 @@ public class SysUserGroupServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysUserGroupDetail::getUserGroupId, sysUserGroup.getUserGroupId()); + List detailList = sysUserGroupDetailService.list(queryWrapper); + + // 将用户组的详情列表,转化为单独的list返回给前端 + return UserGroupFactory.parseToEntity(sysUserGroup, detailList); } @Override