From 6a17d1d2103659097d204a1dfcad0449cecf276b Mon Sep 17 00:00:00 2001 From: haozq <123456> Date: Fri, 23 Feb 2024 10:57:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=91=E6=9C=BA=E6=9E=84?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/controller/TokenController.java | 4 +- .../common/core/utils/aes/ListHelper.java | 4 +- .../entity/system/TreeBuild.java | 86 ++++-------- .../entity/system/dto/OrgDto.java | 20 +++ .../entity/system/vo/OrgVo.java | 32 +++++ .../entity/system/vo/TreeNode.java | 4 +- .../securitycontrol-system/pom.xml | 18 +++ .../base/service/impl/ISelectServiceImpl.java | 9 +- .../system/controller/OrgController.java | 70 ++++++++++ .../system/mapper/OrgMapper.java | 42 ++++++ .../system/service/LoginService.java | 5 + .../system/service/OrgService.java | 44 ++++++ .../system/service/OrgServiceImpl.java | 130 ++++++++++++++++++ .../src/main/resources/mapper/OrgMapper.xml | 21 +++ .../system/service/OrgServiceImplTest.java | 27 ++++ 15 files changed, 447 insertions(+), 69 deletions(-) create mode 100644 securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/dto/OrgDto.java create mode 100644 securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/OrgVo.java create mode 100644 securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/controller/OrgController.java create mode 100644 securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/mapper/OrgMapper.java create mode 100644 securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/OrgService.java create mode 100644 securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/OrgServiceImpl.java create mode 100644 securitycontrol-model/securitycontrol-system/src/main/resources/mapper/OrgMapper.xml create mode 100644 securitycontrol-model/securitycontrol-system/src/test/java/com/securitycontrol/system/service/OrgServiceImplTest.java diff --git a/securitycontrol-auth/src/main/java/com/securitycontrol/auth/controller/TokenController.java b/securitycontrol-auth/src/main/java/com/securitycontrol/auth/controller/TokenController.java index 9dababb..1bf1b85 100644 --- a/securitycontrol-auth/src/main/java/com/securitycontrol/auth/controller/TokenController.java +++ b/securitycontrol-auth/src/main/java/com/securitycontrol/auth/controller/TokenController.java @@ -17,6 +17,8 @@ import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @@ -44,7 +46,7 @@ public class TokenController { @PostMapping("login") - public Result login(LoginBody form) { + public Result login(@RequestBody LoginBody form) { LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(),null); // 获取登录token return Result.ok(tokenService.createToken(userInfo),"登录成功"); diff --git a/securitycontrol-commons/securitycontrol-commons-core/src/main/java/com/securitycontrol/common/core/utils/aes/ListHelper.java b/securitycontrol-commons/securitycontrol-commons-core/src/main/java/com/securitycontrol/common/core/utils/aes/ListHelper.java index 48f2f51..4d6d7b4 100644 --- a/securitycontrol-commons/securitycontrol-commons-core/src/main/java/com/securitycontrol/common/core/utils/aes/ListHelper.java +++ b/securitycontrol-commons/securitycontrol-commons-core/src/main/java/com/securitycontrol/common/core/utils/aes/ListHelper.java @@ -1,6 +1,8 @@ package com.securitycontrol.common.core.utils.aes; +import org.apache.poi.ss.formula.functions.T; + import java.util.List; /** @@ -15,10 +17,8 @@ public class ListHelper { return false; } public static boolean isEmpty(List list){ - return !isNotEmpty(list); } - /** * 集合转字符串 * @param list diff --git a/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/TreeBuild.java b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/TreeBuild.java index 32cd3b1..4468af4 100644 --- a/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/TreeBuild.java +++ b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/TreeBuild.java @@ -1,10 +1,12 @@ package com.securitycontrol.entity.system; +import com.securitycontrol.entity.system.vo.OrgVo; import com.securitycontrol.entity.system.vo.TreeNode; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * @author:cwchen @@ -13,69 +15,35 @@ import java.util.Objects; * @description:下拉树-工具类 */ public class TreeBuild { - public List nodeList = new ArrayList<>(); + private final static String P_ID="0"; /** - * 构造方法 - * @param nodeList 将数据集合赋值给nodeList,即所有数据作为所有节点。 + * 遍历获取 + * @param list + * @return */ - public TreeBuild(List nodeList){ - this.nodeList = nodeList; + public static List transTreeList(List list){ + //map + list.stream().map(node -> { + node.setChildren(fromTree(node, list)); + return node; + }).collect(Collectors.toList()); + //过滤出最上级的菜单 + return list.stream() + .filter(ele -> P_ID.equals(ele.getParentId())) + .collect(Collectors.toList()); + } + /** + * 找寻指定菜单的下级菜单 + * @param node 当前菜单 + * @param list 所有的菜单list + * @return 下级菜单 + */ + public static List fromTree(TreeNode node, List list) { + return list.stream() + .filter(ele -> node.getId().equals(ele.getParentId())) + .collect(Collectors.toList()); } - /** - * 获取需构建的所有根节点(顶级节点) "0" - * @return 所有根节点List集合 - */ - public List getRootNode(){ - // 保存所有根节点(所有根节点的数据) - List rootNodeList = new ArrayList<>(); - // treeNode:查询出的每一条数据(节点) - for (TreeNode treeNode : nodeList){ - // 判断当前节点是否为根节点,此处注意:若parentId类型是String,则要采用equals()方法判断。 - if (0 == treeNode.getParentId()) { - // 是,添加 - rootNodeList.add(treeNode); - } - } - return rootNodeList; - } - - /** - * 根据每一个顶级节点(根节点)进行构建树形结构 - * @return 构建整棵树 - */ - public List buildTree(){ - // treeNodes:保存一个顶级节点所构建出来的完整树形 - List treeNodes = new ArrayList(); - // getRootNode():获取所有的根节点 - for (TreeNode treeRootNode : getRootNode()) { - // 将顶级节点进行构建子树 - treeRootNode = buildChildTree(treeRootNode); - // 完成一个顶级节点所构建的树形,增加进来 - treeNodes.add(treeRootNode); - } - return treeNodes; - } - - /** - * 递归-----构建子树形结构 - * @param pNode 根节点(顶级节点) - * @return 整棵树 - */ - public TreeNode buildChildTree(TreeNode pNode){ - List childTree = new ArrayList(); - // nodeList:所有节点集合(所有数据) - for (TreeNode treeNode : nodeList) { - // 判断当前节点的父节点ID是否等于根节点的ID,即当前节点为其下的子节点 - if (Objects.equals(treeNode.getParentId(),pNode.getId())) { - // 再递归进行判断当前节点的情况,调用自身方法 - childTree.add(buildChildTree(treeNode)); - } - } - // for循环结束,即节点下没有任何节点,树形构建结束,设置树结果 - pNode.setChildren(childTree); - return pNode; - } } diff --git a/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/dto/OrgDto.java b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/dto/OrgDto.java new file mode 100644 index 0000000..adcc12e --- /dev/null +++ b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/dto/OrgDto.java @@ -0,0 +1,20 @@ +package com.securitycontrol.entity.system.dto; + +import lombok.Data; + +import javax.validation.constraints.Pattern; + +/** + * 组织机构查询 + * @author HeiZi + */ +@Data +public class OrgDto { + /**关键字*/ + @Pattern(regexp = "^[a-zA-Z0-9_\\s]+$",message = "查询条件不能包含特殊字符") + private String keyWord; + + + + +} diff --git a/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/OrgVo.java b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/OrgVo.java new file mode 100644 index 0000000..752b30a --- /dev/null +++ b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/OrgVo.java @@ -0,0 +1,32 @@ +package com.securitycontrol.entity.system.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.omg.CORBA.PRIVATE_MEMBER; + +import java.util.List; + +/** + * 组织机构实体类 + * @author HeiZi + */ +@Data +public class OrgVo { + /**组织机构id*/ + private String orgId; + /**组织机构名称*/ + private String orgName; + /**组织机构编码*/ + private String abbName; + /**组织机构简称*/ + @JsonProperty("bName") + private String bName; + /**上级节点id*/ + @JsonProperty("pId") + private String pId; + /**删除状态*/ + private String delFlag; + /**子数据*/ + private List children; + +} diff --git a/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/TreeNode.java b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/TreeNode.java index 032fd3c..120f9be 100644 --- a/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/TreeNode.java +++ b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/TreeNode.java @@ -17,13 +17,13 @@ import java.util.List; public class TreeNode { @ApiModelProperty(value = "id") - private Integer id; + private String id; @ApiModelProperty(value = "名称") private String label; @ApiModelProperty(value = "父ID") - private Integer parentId; + private String parentId; @ApiModelProperty(value = "层级") @JsonInclude(JsonInclude.Include.NON_EMPTY) diff --git a/securitycontrol-model/securitycontrol-system/pom.xml b/securitycontrol-model/securitycontrol-system/pom.xml index d688bb5..fc2f436 100644 --- a/securitycontrol-model/securitycontrol-system/pom.xml +++ b/securitycontrol-model/securitycontrol-system/pom.xml @@ -93,6 +93,24 @@ com.securitycontrol securitycontrol-commons-core + + + + + org.junit.jupiter + junit-jupiter-api + 5.9.3 + test + + + + + org.springframework.boot + spring-boot-starter-test + 3.1.0 + test + + diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/ISelectServiceImpl.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/ISelectServiceImpl.java index e649818..dc35dda 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/ISelectServiceImpl.java +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/ISelectServiceImpl.java @@ -30,14 +30,11 @@ public class ISelectServiceImpl implements ISelectService { @Override public AjaxResult getOrgTree() { List groupList = new ArrayList<>(); - List list = new ArrayList<>(); try { - list = mapper.getOrgTree(); + List list = mapper.getOrgTree(); if (CollectionUtils.isNotEmpty(list)) { // 创建树形结构(数据集合作为参数) - TreeBuild treeBuild = new TreeBuild(list); - // 原查询结果转换树形结构 - groupList = treeBuild.buildTree(); + groupList= TreeBuild.transTreeList(list); } } catch (Exception e) { log.error("组织机构树-查询失败", e); @@ -51,4 +48,6 @@ public class ISelectServiceImpl implements ISelectService { list = mapper.getRoleLists(); return AjaxResult.success(list); } + + } diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/controller/OrgController.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/controller/OrgController.java new file mode 100644 index 0000000..00de0f5 --- /dev/null +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/controller/OrgController.java @@ -0,0 +1,70 @@ +package com.securitycontrol.system.controller; + +import com.securitycontrol.common.core.domain.Result; +import com.securitycontrol.common.core.web.controller.BaseController; +import com.securitycontrol.common.core.web.page.TableDataInfo; +import com.securitycontrol.entity.system.dto.OrgDto; +import com.securitycontrol.entity.system.vo.OrgVo; +import com.securitycontrol.system.service.OrgService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 组织机构控制层 + * @author HeiZi + */ +@RestController +@RequestMapping("/sys/org/") +public class OrgController extends BaseController { + + @Autowired + private OrgService service; + + /** + * + * @param dto + * @return + */ + @GetMapping("getOrgList") + public Result> getOrgList(OrgDto dto) { + return service.getOrgList(dto); + } + + + /** + * + * 新增組織機構 + * @param dto + * @return + */ + @PostMapping("addOrg") + public Result addOrg(@RequestBody OrgVo dto) { + return service.addOrg(dto); + } + + + /** + *修改组织机构 + * @param dto + * @return + */ + @PostMapping("updateOrg") + public Result updateOrg(@RequestBody OrgVo dto) { + return service.updateOrg(dto); + } + + + /** + * 新增組織機構 + * @param dto + * @return + */ + @PostMapping("delOrg") + public Result delOrg(OrgVo dto) { + return service.delOrg(dto); + } + + +} diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/mapper/OrgMapper.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/mapper/OrgMapper.java new file mode 100644 index 0000000..38dc9c7 --- /dev/null +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/mapper/OrgMapper.java @@ -0,0 +1,42 @@ +package com.securitycontrol.system.mapper; + +import com.securitycontrol.entity.system.dto.OrgDto; +import com.securitycontrol.entity.system.vo.OrgVo; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 组织机构处理层 + * @author HeiZi + */ +@Repository +public interface OrgMapper { + /** + *查询 组织机构集合 + * @param dto + * @return + */ + List getOrgList(OrgDto dto); + + /** + * 新增组织机构 + * @param dto + * @return + */ + int addOrg(OrgVo dto); + + /** + * 修改组织机构 + * @param dto + * @return + */ + int updateOrg(OrgVo dto); + + /** + *删除组织机构 + * @param dto + * @return + */ + int delOrg(OrgVo dto); +} diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/LoginService.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/LoginService.java index fc5ac33..b689648 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/LoginService.java +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/LoginService.java @@ -33,5 +33,10 @@ public interface LoginService { */ List getAllMenuList(String userId); + /** + * 更新用户登录信息 + * @param userId + * @param ip + */ void updateUserLogin(String userId, String ip); } diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/OrgService.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/OrgService.java new file mode 100644 index 0000000..3eab6ca --- /dev/null +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/OrgService.java @@ -0,0 +1,44 @@ +package com.securitycontrol.system.service; + +import com.securitycontrol.common.core.domain.Result; +import com.securitycontrol.entity.system.dto.OrgDto; +import com.securitycontrol.entity.system.vo.OrgVo; +import org.apache.poi.ss.formula.functions.T; + +import java.util.List; + +/** + * 租户机构接口层 + * @author HeiZi + */ +public interface OrgService { + /** + * 查询组织机构结婚 + * @param dto + * @return + */ + Result> getOrgList(OrgDto dto); + + /** + * 新增组织机构 + * @param dto + * @return + */ + Result addOrg(OrgVo dto); + + /** + * 修改组织机构 + * @param dto + * @return + */ + Result updateOrg(OrgVo dto); + + /** + * 删除组织机构 + * @param dto + * @return + */ + Result delOrg(OrgVo dto); + + +} diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/OrgServiceImpl.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/OrgServiceImpl.java new file mode 100644 index 0000000..1bfa45c --- /dev/null +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/service/OrgServiceImpl.java @@ -0,0 +1,130 @@ +package com.securitycontrol.system.service; + +import com.alibaba.nacos.common.utils.UuidUtils; +import com.securitycontrol.common.core.domain.Result; +import com.securitycontrol.common.core.utils.aes.ListHelper; +import com.securitycontrol.common.core.utils.aes.StringHelper; +import com.securitycontrol.entity.system.dto.OrgDto; +import com.securitycontrol.entity.system.vo.OrgVo; +import com.securitycontrol.system.mapper.OrgMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.stereotype.Service; +import sun.plugin.util.UIUtil; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author HeiZi + */ +@Service +@Slf4j +public class OrgServiceImpl implements OrgService{ + + + @Resource + private OrgMapper mapper; + + private final static String P_ID="0"; + + private final static int SUCCESS=0; + + @Override + public Result> getOrgList(OrgDto dto) { + List list=mapper.getOrgList(dto); + if(ListHelper.isEmpty(list)){ + return Result.ok(new ArrayList<>()); + } + return Result.ok(getChildList(list)); + } + @Override + public Result addOrg(OrgVo dto) { + try { + if (StringHelper.isEmpty(dto.getOrgId())) { + dto.setOrgId(UuidUtils.generateUuid().toUpperCase()); + } + if (StringHelper.isEmpty(dto.getPId())) { + dto.setPId("0"); + } + int num = mapper.addOrg(dto); + if (num > SUCCESS) { + return Result.ok("新增成功"); + } + return Result.fail("新增失败"); + } catch (Exception e) { + log.error(e.toString(), e); + return Result.fail("服务异常"); + } + } + @Override + public Result updateOrg(OrgVo dto) { + try{ + if(StringHelper.isEmpty(dto.getOrgId())){ + return Result.ok("主键不能为空"); + } + if(StringHelper.isEmpty(dto.getPId())){ + dto.setPId("0"); + } + int num=mapper.updateOrg(dto); + if(num>SUCCESS){ + return Result.ok("修改成功"); + } + return Result.fail("修改失败"); + }catch (Exception e){ + log.error(e.toString(),e); + return Result.fail("服务异常"); + } + } + + @Override + public Result delOrg(OrgVo dto) { + try{ + if(StringHelper.isEmpty(dto.getOrgId())){ + return Result.ok("主键不能为空"); + } + int num=mapper.delOrg(dto); + if(num>SUCCESS){ + return Result.ok("删除成功"); + } + return Result.fail("删除失败"); + }catch (Exception e){ + log.error(e.toString(),e); + return Result.fail("服务异常"); + } + } + + + + /** + * 遍历获取 + * @param list + * @return + */ + public List getChildList( List list){ + //map + list.stream().map(orgVo -> { + orgVo.setChildren(this.fromTree(orgVo, list)); + return orgVo; + }).collect(Collectors.toList()); + //过滤出最上级的菜单 + return list.stream() + .filter(ele -> P_ID.equals(ele.getPId())) + .collect(Collectors.toList()); + + } + /** + * 找寻指定菜单的下级菜单 + * @param orgVo 当前菜单 + * @param list 所有的菜单list + * @return 下级菜单 + */ + private List fromTree(OrgVo orgVo, List list) { + return list.stream() + .filter(ele -> orgVo.getOrgId().equals(ele.getPId())) + .collect(Collectors.toList()); + } + +} diff --git a/securitycontrol-model/securitycontrol-system/src/main/resources/mapper/OrgMapper.xml b/securitycontrol-model/securitycontrol-system/src/main/resources/mapper/OrgMapper.xml new file mode 100644 index 0000000..d574629 --- /dev/null +++ b/securitycontrol-model/securitycontrol-system/src/main/resources/mapper/OrgMapper.xml @@ -0,0 +1,21 @@ + + + + + insert into sys_org(org_id, org_name, abb_name, b_name, p_id, del_flag) + values (#{orgId},#{orgId},#{abbName},#{bName},#{pId},'0') + + + update sys_org set + org_name=#{orgName},abb_name=#{abbName},b_name=#{bName},p_id=#{pId} + where org_id=#{orgId} + + + update sys_org set del_flag=1 where org_id=#{orgId} + + + \ No newline at end of file diff --git a/securitycontrol-model/securitycontrol-system/src/test/java/com/securitycontrol/system/service/OrgServiceImplTest.java b/securitycontrol-model/securitycontrol-system/src/test/java/com/securitycontrol/system/service/OrgServiceImplTest.java new file mode 100644 index 0000000..abcf88d --- /dev/null +++ b/securitycontrol-model/securitycontrol-system/src/test/java/com/securitycontrol/system/service/OrgServiceImplTest.java @@ -0,0 +1,27 @@ +package com.securitycontrol.system.service; + + +import com.securitycontrol.common.core.domain.Result; +import com.securitycontrol.entity.system.vo.OrgVo; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.xml.ws.soap.Addressing; +import java.util.List; + +@SpringBootTest +public class OrgServiceImplTest { + + + + @Autowired + OrgService service; + + + @Test + public void getOrgList() { + Result> list=service.getOrgList(null); + System.err.println("测试"); + } +}