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