caiaa 1 år sedan
förälder
incheckning
af6f183ff3

+ 63 - 0
src/main/java/com/dragon/tj/portal/auth/controller/DeptController.java

@@ -0,0 +1,63 @@
+package com.dragon.tj.portal.auth.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.dragon.tj.portal.auth.util.SecurityUtils;
+import com.dragon.tj.portal.auth.util.TreeBuilder;
+import com.dragon.tj.portal.auth.web.convert.DeptTreeNodeConvert;
+import com.dragon.tj.portal.auth.web.dto.DeptTreeNode;
+import com.dragon.tj.portal.auth.web.entity.SysDept;
+import com.dragon.tj.portal.auth.web.service.SysDeptService;
+import com.dragon.tj.portal.common.base.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/dept")
+public class DeptController {
+
+    @Autowired
+    private SysDeptService sysDeptService;
+
+    @Autowired
+    private DeptTreeNodeConvert deptTreeNodeConvert;
+
+    @GetMapping("/root")
+    public R<List<SysDept>> list() {
+        String orgCode = SecurityUtils.getLoginUser().getOrgCode();
+        List<SysDept> list = new ArrayList<>();
+        list.add(sysDeptService.getOne(Wrappers.<SysDept>query().lambda().eq(SysDept::getOrgCode, orgCode)));
+        return R.ok(list);
+    }
+
+    @GetMapping("/children")
+    public R<List<SysDept>> list(@RequestParam String upOrgCode) {
+        return R.ok(sysDeptService.list(Wrappers.<SysDept>query().lambda().eq(SysDept::getUpOrgCode, upOrgCode).orderByAsc(SysDept::getOrgCode)));
+    }
+
+    @GetMapping("/tree")
+    public R<List<DeptTreeNode>> tree() {
+        String rootOrgCode = SecurityUtils.getLoginUser().getOrgCode();
+
+        Pattern pattern = Pattern.compile("^(.*?)(00)*$");
+        Matcher matcher = pattern.matcher(rootOrgCode);
+        String rootOrgCodePrefix = rootOrgCode;
+        while (matcher.find()) {
+            rootOrgCodePrefix = matcher.group(1);
+        }
+        List<SysDept> orgs = sysDeptService.list(Wrappers.<SysDept>query().lambda().likeRight(SysDept::getOrgCode, rootOrgCodePrefix).orderByAsc(SysDept::getOrgCode));
+        List<DeptTreeNode> orgNodes = orgs.stream().map(deptTreeNodeConvert::toVo).collect(Collectors.toList());
+        if (orgNodes.size() > 1) {
+            orgNodes = new TreeBuilder(orgNodes).buildTree(rootOrgCode);
+        }
+        return R.ok(orgNodes);
+    }
+}

+ 1 - 0
src/main/java/com/dragon/tj/portal/auth/controller/UserController.java

@@ -20,6 +20,7 @@ public class UserController {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         Map<String, Object> data = new HashMap<>(3);
         data.put("name", loginUser.getUser().getName());
+        data.put("idCard", loginUser.getUser().getIdcard());
         data.put("roles", loginUser.getPermissions());
         return R.ok(data);
     }

+ 15 - 1
src/main/java/com/dragon/tj/portal/auth/service/TokenService.java

@@ -14,9 +14,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
 @Service
@@ -147,7 +149,19 @@ public class TokenService {
      * @return token
      */
     private String getToken(HttpServletRequest request) {
-        String token = request.getHeader(header);
+        String token = null;
+        Cookie[] cookies = request.getCookies();
+        if (Objects.nonNull(cookies)) {
+            for (Cookie cookie : cookies) {
+                if ("X-Token".equals(cookie.getName())) {
+                    token = cookie.getValue();
+                    break;
+                }
+            }
+        }
+        if (StringUtils.isBlank(token)) {
+            token = request.getHeader(header);
+        }
         if (StringUtils.isNotEmpty(token) && token.startsWith(TOKEN_PREFIX)) {
             token = token.replace(TOKEN_PREFIX, "");
         }

+ 80 - 0
src/main/java/com/dragon/tj/portal/auth/util/TreeBuilder.java

@@ -0,0 +1,80 @@
+package com.dragon.tj.portal.auth.util;
+
+import com.dragon.tj.portal.auth.web.dto.DeptTreeNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TreeBuilder {
+
+    // 保存参与构建树形的所有数据(通常数据库查询结果)
+    public List<DeptTreeNode> nodeList;
+
+    /**
+     * 构造方法
+     *
+     * @param nodeList 将数据集合赋值给nodeList,即所有数据作为所有节点。
+     */
+    public TreeBuilder(List<DeptTreeNode> nodeList) {
+        this.nodeList = nodeList;
+    }
+
+    /**
+     * 获取需构建的所有根节点(顶级节点) "0"
+     *
+     * @return 所有根节点List集合
+     */
+    public List<DeptTreeNode> getRootNode(String rootValue) {
+        // 保存所有根节点(所有根节点的数据)
+        List<DeptTreeNode> rootNodeList = new ArrayList<>();
+        // DeptTreeNode:查询出的每一条数据(节点)
+        for (DeptTreeNode node : nodeList) {
+            // 判断当前节点是否为根节点,此处注意:若parentId类型是String,则要采用equals()方法判断。
+            if (rootValue.equals(node.getOrgCode())) {
+                // 是,添加
+                rootNodeList.add(node);
+            }
+        }
+        return rootNodeList;
+    }
+
+    /**
+     * 根据每一个顶级节点(根节点)进行构建树形结构
+     *
+     * @return 构建整棵树
+     */
+    public List<DeptTreeNode> buildTree(String rootValue) {
+        // treeNodes:保存一个顶级节点所构建出来的完整树形
+        List<DeptTreeNode> treeNodes = new ArrayList<>();
+        // getRootNode():获取所有的根节点
+        for (DeptTreeNode treeRootNode : getRootNode(rootValue)) {
+            // 将顶级节点进行构建子树
+            treeRootNode = buildChildTree(treeRootNode);
+            // 完成一个顶级节点所构建的树形,增加进来
+            treeNodes.add(treeRootNode);
+        }
+        return treeNodes;
+    }
+
+    /**
+     * 递归-----构建子树形结构
+     *
+     * @param pNode 根节点(顶级节点)
+     * @return 整棵树
+     */
+    public DeptTreeNode buildChildTree(DeptTreeNode pNode) {
+        List<DeptTreeNode> childTree = new ArrayList<DeptTreeNode>();
+        // nodeList:所有节点集合(所有数据)
+        for (DeptTreeNode node : nodeList) {
+            // 判断当前节点的父节点ID是否等于根节点的ID,即当前节点为其下的子节点
+            if (node.getUpOrgCode().equals(pNode.getOrgCode())) {
+                // 再递归进行判断当前节点的情况,调用自身方法
+                childTree.add(buildChildTree(node));
+            }
+        }
+        // for循环结束,即节点下没有任何节点,树形构建结束,设置树结果
+        pNode.setChildren(childTree);
+        return pNode;
+    }
+
+}

+ 14 - 0
src/main/java/com/dragon/tj/portal/auth/web/convert/DeptTreeNodeConvert.java

@@ -0,0 +1,14 @@
+package com.dragon.tj.portal.auth.web.convert;
+
+import com.dragon.tj.portal.auth.web.dto.DeptTreeNode;
+import com.dragon.tj.portal.auth.web.entity.SysDept;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
+public interface DeptTreeNodeConvert {
+
+
+    DeptTreeNode toVo(SysDept sysDept);
+
+}

+ 27 - 0
src/main/java/com/dragon/tj/portal/auth/web/dto/DeptTreeNode.java

@@ -0,0 +1,27 @@
+package com.dragon.tj.portal.auth.web.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DeptTreeNode {
+
+    private String orgCode;
+    private String upOrgCode;
+    private String orgKind;
+    private String fullName;
+    private String shortName;
+    private String areaCode;
+    private String standCode;
+    private String orgType;
+    private String orgLevel;
+    private String orgRank;
+    private String unitClass;
+    private String email;
+    private String linkMan;
+    private String phone;
+    private String updateTime;
+    private String deleted;
+    private List<DeptTreeNode> children;
+}

+ 4 - 0
src/main/resources/application.properties

@@ -1,5 +1,9 @@
 spring.profiles.active=dev
 
+spring.servlet.multipart.enabled=true
+spring.servlet.multipart.max-file-size=200MB
+spring.servlet.multipart.max-request-size=210MB
+
 ###########app################
 app.code=A-120000200000-9999