diff --git a/src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java b/src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java index 98798d9..fe34bba 100644 --- a/src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java +++ b/src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java @@ -158,4 +158,23 @@ public class AssociatedFormsController { } + + + /*当前用户是否在指定的机构下或机构的祖先机构下*/ + @RequestMapping(value = "AssociatedForms/queryIfOrgOrPerson") + public JsonData queryIfOrgOrPerson(@RequestHeader(value = "User-Key") String key, + @RequestHeader(value = "User-Token") String token, + @RequestBody Map requestBody) { + if(StringUtils.isBlank(key)||StringUtils.isBlank(token)){ + return JsonData.buildError("非法请求"); + } + String targetOrgOrPerson = requestBody.get("left"); + String condition = requestBody.get("operator"); + String currentUser = requestBody.get("right"); + Boolean flag = customerFormService.queryIfOrgOrPersonContainsCurrentUser(key,token,targetOrgOrPerson,condition,"当前用户"); + + return JsonData.buildSuccess(flag); + + } + } diff --git a/src/main/java/com/hxgk/lowcode/model/entity/Tree.java b/src/main/java/com/hxgk/lowcode/model/entity/Tree.java index 277ddfa..2c84e7c 100644 --- a/src/main/java/com/hxgk/lowcode/model/entity/Tree.java +++ b/src/main/java/com/hxgk/lowcode/model/entity/Tree.java @@ -2,6 +2,7 @@ package com.hxgk.lowcode.model.entity; import org.springframework.stereotype.Repository; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -81,4 +82,32 @@ public class Tree { public void setType(String type) { this.type = type; } + + //获取targetId的所有祖先节点 + public List getAncestorIds(String targetId) { + List ancestorIds = new ArrayList<>(); + Tree targetNode = findNodeById(this, targetId); + if (targetNode!= null) { + while (targetNode!= null && targetNode.getParentId()!= null) { + ancestorIds.add(targetNode.getParentId()); + targetNode = findNodeById(this, targetNode.getParentId()); + } + } + return ancestorIds; + } + + private Tree findNodeById(Tree root, String targetId) { + if (root.getId().equals(targetId)) { + return root; + } + if (root.getChildren() != null) { // 增加判断,避免空指针 + for (Tree child : root.getChildren()) { + Tree found = findNodeById(child, targetId); + if (found != null) { + return found; + } + } + } + return null; + } } diff --git a/src/main/java/com/hxgk/lowcode/model/entity/UserDetail.java b/src/main/java/com/hxgk/lowcode/model/entity/UserDetail.java index c7664e2..4bfb016 100644 --- a/src/main/java/com/hxgk/lowcode/model/entity/UserDetail.java +++ b/src/main/java/com/hxgk/lowcode/model/entity/UserDetail.java @@ -15,10 +15,13 @@ public class UserDetail { private String wmNumber; //唯一识别码 private Long wmKey; - //adminorg + //行政组织 private Long adminorg; //role权限 private Integer roleId; + //主部门 + private Long maindeparment; + public String getIdcardno() { return idcardno; @@ -76,4 +79,11 @@ public class UserDetail { this.adminorg = adminorg; } + public Long getMaindeparment() { + return maindeparment; + } + + public void setMaindeparment(Long maindeparment) { + this.maindeparment = maindeparment; + } } diff --git a/src/main/java/com/hxgk/lowcode/service/CustomerFormService.java b/src/main/java/com/hxgk/lowcode/service/CustomerFormService.java index 0e3c08a..c5cb1ee 100644 --- a/src/main/java/com/hxgk/lowcode/service/CustomerFormService.java +++ b/src/main/java/com/hxgk/lowcode/service/CustomerFormService.java @@ -18,4 +18,6 @@ public interface CustomerFormService { ArrayList getAsfDataTitles(String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString); ArrayList getAsfDataTitlesByIds(String AsfFormId,ArrayList> ids); + + Boolean queryIfOrgOrPersonContainsCurrentUser(String key, String token, String targetOrgOrPerson, String condition, String 当前用户); } diff --git a/src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java b/src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java index a1bde84..27ab145 100644 --- a/src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java +++ b/src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java @@ -13,6 +13,7 @@ import com.hxgk.lowcode.mapper.CustomerFormViewMapper; import com.hxgk.lowcode.mapper.FieldRecordMapper; import com.hxgk.lowcode.model.entity.*; import com.hxgk.lowcode.service.CustomerFormService; +import com.hxgk.lowcode.service.HrService; import com.hxgk.lowcode.service.SystemRoleService; import com.hxgk.lowcode.service.UserService; import com.hxgk.lowcode.utils.HttpUtils; @@ -38,6 +39,9 @@ public class CustomerFormServiceImpl implements CustomerFormService { @Autowired private FieldRecordMapper fieldRecordMapper; + @Autowired + private HrService hrService; + @Override //根据用户权限查询表单列表 public Tree getCustomerFormList(String key, String token) { @@ -742,6 +746,7 @@ public class CustomerFormServiceImpl implements CustomerFormService { } + private ArrayList addToReturnSortedDataTitleList(ArrayList> ids, ArrayList toReturnSortedDataTitleList) { ArrayList list = new ArrayList<>(); //toReturnSortedDataTitleList中缺少的asfMasterId的map @@ -793,4 +798,49 @@ public class CustomerFormServiceImpl implements CustomerFormService { } } + @Override + public Boolean queryIfOrgOrPersonContainsCurrentUser(String key, String token, String targetOrgOrPerson, String condition, String 当前用户) { + //获取用户信息 从redis中根据userkey和usertoken拿到userdetail + Map keytokenmap = new HashMap<>(); + keytokenmap.put("userkey",key); + keytokenmap.put("usertoken",token); + UserDetail userDetail = userService.getUserDetailFromRedis(keytokenmap); + + String[] targetOrgOrPersonArr = targetOrgOrPerson.split(":"); + Tree orgAndManTree = hrService.getOrgAndManTree(); + if(condition.equals("==")){ + if(targetOrgOrPersonArr[1].equals(userDetail.getWmKey().toString())){ + return true; + }else{ + return false; + } + }else if(condition.equals("!=")){ + if(!targetOrgOrPersonArr[1].equals(userDetail.getWmKey().toString())){ + return true; + }else{ + return false; + } + }else{ + //条件设置的组织机构人员范围 + List ancestorIds = orgAndManTree.getAncestorIds(targetOrgOrPersonArr[1]); + //人员所在地主部门 + if(userDetail.getMaindeparment().toString().equals(targetOrgOrPersonArr[1])){ + return true; + }else{ + int count = 0; + for(String id : ancestorIds){ + if(id.equals(targetOrgOrPersonArr[1])){ + count++; + } + } + if(count > 0){ + return true; + }else{ + return false; + } + } + } + } + + } diff --git a/src/main/java/com/hxgk/lowcode/service/impl/UserServiceImpl.java b/src/main/java/com/hxgk/lowcode/service/impl/UserServiceImpl.java index 012f0aa..06823de 100644 --- a/src/main/java/com/hxgk/lowcode/service/impl/UserServiceImpl.java +++ b/src/main/java/com/hxgk/lowcode/service/impl/UserServiceImpl.java @@ -89,6 +89,10 @@ public class UserServiceImpl implements UserService { long adminorg = Long.parseLong(entry.getValue()); userDetail.setAdminorg(adminorg); } + if (StringUtils.isNotEmpty(entry.getKey()) && entry.getKey().equals("maindeparment")) { + long maindeparment = Long.parseLong(entry.getValue()); + userDetail.setMaindeparment(maindeparment); + } } return userDetail;