Browse Source

组织审批对象

caixiaofeng 10 months ago
parent
commit
59057ae977

+ 9 - 0
flow-system/flow-system-api/src/main/java/com/flow/service/DeptService.java

@@ -2,6 +2,7 @@ package com.flow.service;
 
 import com.flow.common.mybatis.service.BaseService;
 import com.flow.entity.Dept;
+import com.flow.entity.User;
 import com.flow.model.DeptQuery;
 
 import java.util.List;
@@ -23,4 +24,12 @@ public interface DeptService extends BaseService<Dept> {
     Dept update(Dept dept);
 
     void delete(Set<Long> ids);
+
+    User getLeader(String id);
+
+    List<User> getLeader(List<String> ids);
+
+    List<User> getUsers(String id);
+
+    List<User> getUsers(List<String> ids);
 }

+ 29 - 0
flow-system/flow-system-biz/src/main/java/com/flow/dao/DeptDao.java

@@ -3,7 +3,36 @@ package com.flow.dao;
 
 import com.flow.common.mybatis.dao.BaseDao;
 import com.flow.entity.Dept;
+import com.flow.entity.User;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 public interface DeptDao extends BaseDao<Dept> {
 
+    @Select("select * from sys_user where username  = (select leader from sys_dept where id =#{id})")
+    User getLeader(String id);
+
+    @Select({
+            "<script>",
+            "select * from sys_user where username in (select leader from sys_dept where id in ",
+            "<foreach item='id' collection='ids' open='(' separator=',' close=')'>",
+            "#{id}",
+            "</foreach>)",
+            "</script>"
+    })
+    List<User> getLeader(List<String> ids);
+
+    @Select("select * from sys_user where dept_id = #{id}")
+    List<User> getUsers(String id);
+
+    @Select({
+            "<script>",
+            "select * from sys_user where dept_id in",
+            "<foreach item='id' collection='ids' open='(' separator=',' close=')'>",
+            "#{roleId}",
+            "</foreach>",
+            "</script>"
+    })
+    List<User> getUsers(List<String> ids);
 }

+ 21 - 0
flow-system/flow-system-biz/src/main/java/com/flow/service/impl/DeptServiceImpl.java

@@ -7,6 +7,7 @@ import com.flow.common.mybatis.constant.SqlConstant;
 import com.flow.common.mybatis.service.impl.BaseServiceImpl;
 import com.flow.dao.DeptDao;
 import com.flow.entity.Dept;
+import com.flow.entity.User;
 import com.flow.mapstruct.DeptMapper;
 import com.flow.model.DeptQuery;
 import com.flow.service.DeptService;
@@ -116,4 +117,24 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptDao, Dept> implements D
     public void delete(Set<Long> ids) {
         deptDao.deleteBatchIds(ids);
     }
+
+    @Override
+    public User getLeader(String id) {
+        return deptDao.getLeader(id);
+    }
+
+    @Override
+    public List<User> getLeader(List<String> ids) {
+        return deptDao.getLeader(ids);
+    }
+
+    @Override
+    public List<User> getUsers(String id) {
+        return deptDao.getUsers(id);
+    }
+
+    @Override
+    public List<User> getUsers(List<String> ids) {
+        return deptDao.getUsers(ids);
+    }
 }

+ 49 - 0
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/node/AssigneeNode.java

@@ -5,8 +5,11 @@ import com.flow.common.core.util.ApplicationContextUtil;
 import com.flow.common.oauth2.utils.SecurityContextUtil;
 import com.flow.entity.User;
 import com.flow.enums.AssigneeTypeEnum;
+import com.flow.enums.OrganizationTypeEnum;
+import com.flow.service.DeptService;
 import com.flow.service.RoleService;
 import com.flow.service.UserService;
+import com.google.common.collect.Lists;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.flowable.bpmn.model.FlowElement;
@@ -27,6 +30,12 @@ public abstract class AssigneeNode extends Node {
     private List<String> users;
     // 审批人角色
     private List<String> roles;
+    // 组织
+    private List<String> organizations;
+    // 表单内组织
+    private String formOrganization;
+    // 组织办理类型
+    private OrganizationTypeEnum organizationType;
     // 主管
     private Integer leader;
     // 组织主管
@@ -41,6 +50,7 @@ public abstract class AssigneeNode extends Node {
     public List<String> getAssignees(Map<String, Object> values) {
         UserService userService = ApplicationContextUtil.getBean(UserService.class);
         RoleService roleService = ApplicationContextUtil.getBean(RoleService.class);
+        DeptService deptService = ApplicationContextUtil.getBean(DeptService.class);
         String userId = SecurityContextUtil.getUserId();
         List<String> assignees = new ArrayList<>();
         switch (this.assigneeType) {
@@ -94,6 +104,45 @@ public abstract class AssigneeNode extends Node {
                     assignees.add(leader.getUsername());
                 }
                 break;
+            case ORG:
+                OrganizationTypeEnum organizationTypeEnum = this.getOrganizationType();
+                List<User> leaderList = Lists.newArrayList();
+                if (organizationTypeEnum == OrganizationTypeEnum.LEADER) {
+                    leaderList = deptService.getLeader(this.getOrganizations());
+                }
+                if (organizationTypeEnum == OrganizationTypeEnum.ALL) {
+                    leaderList = deptService.getUsers(this.getOrganizations());
+                }
+                if (CollectionUtils.isNotEmpty(leaderList)) {
+                    List<String> userIds = leaderList.stream().map(User::getUsername).collect(Collectors.toList());
+                    assignees.addAll(userIds);
+                }
+                break;
+            case FORM_ORG:
+                Object formOrg = values.get(this.getFormOrganization());
+                if (Objects.nonNull(formOrg)) {
+                    ArrayList<String> orgIds = new ArrayList<>();
+                    if (formOrg instanceof Collection) {
+                        orgIds.addAll((Collection<? extends String>) formOrg);
+                    } else {
+                        orgIds.add(formOrg.toString());
+                    }
+                    OrganizationTypeEnum organizationType = this.getOrganizationType();
+                    List<User> userList = Lists.newArrayList();
+                    if (organizationType == OrganizationTypeEnum.LEADER) {
+                        userList = deptService.getLeader(this.getOrganizations());
+                    }
+                    if (organizationType == OrganizationTypeEnum.ALL) {
+                        userList = deptService.getUsers(this.getOrganizations());
+                    }
+                    if (CollectionUtils.isNotEmpty(userList)) {
+                        List<String> userIds = userList.stream()
+                                .map(User::getUsername)
+                                .collect(Collectors.toList());
+                        assignees.addAll(userIds);
+                    }
+                }
+                break;
             case ORG_LEADER:
                 User orgLeader = userService.getOrgLeader(userId, this.orgLeader);
                 if (Objects.nonNull(orgLeader)) {

+ 2 - 0
flow-workflow/flow-workflow-entity/src/main/java/com/flow/enums/AssigneeTypeEnum.java

@@ -9,6 +9,8 @@ import lombok.Getter;
 public enum AssigneeTypeEnum {
     USER("user", "用户"),
     ROLE("role", "角色"),
+    ORG("organization", "组织"),
+    FORM_ORG("formOrganization", "表单组织"),
     CHOICE("choice", "发起人自选"),
     SELF("self", "发起人自己"),
     LEADER("leader", "主管"),

+ 17 - 0
flow-workflow/flow-workflow-entity/src/main/java/com/flow/enums/OrganizationTypeEnum.java

@@ -0,0 +1,17 @@
+package com.flow.enums;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum OrganizationTypeEnum {
+    LEADER("leader", "组织主管"),
+    ALL("all", "组织内所有人");
+
+    @JsonValue
+    final String organizationType;
+    final String description;
+
+}