فهرست منبع

重构工作流(04)

zhouhao 6 سال پیش
والد
کامیت
3beea117b8
11فایلهای تغییر یافته به همراه138 افزوده شده و 8 حذف شده
  1. 1 1
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/CandidateDimensionParser.java
  2. 1 1
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/DefaultCandidateDimensionParser.java
  3. 32 0
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/DimensionContext.java
  4. 11 1
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/CandidateDimensionParserStrategy.java
  5. 2 1
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/DepartmentCandidateDimensionParserStrategy.java
  6. 2 1
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/OrgCandidateDimensionParserStrategy.java
  7. 2 1
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/PositionCandidateDimensionParserStrategy.java
  8. 61 0
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/RelationCandidateDimensionParserStrategy.java
  9. 2 1
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/RoleCandidateDimensionParserStrategy.java
  10. 2 1
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/UserCandidateDimensionParserStrategy.java
  11. 22 0
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/test/java/org/hswebframework/web/workflow/dimension/DefaultCandidateDimensionParserTest.groovy

+ 1 - 1
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/CandidateDimensionParser.java

@@ -6,5 +6,5 @@ package org.hswebframework.web.workflow.dimension;
  * @since 3.0.0-RC
  */
 public interface CandidateDimensionParser {
-    CandidateDimension parse(String jsonConfig);
+    CandidateDimension parse(DimensionContext context, String jsonConfig);
 }

+ 1 - 1
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/DefaultCandidateDimensionParser.java

@@ -20,7 +20,7 @@ public class DefaultCandidateDimensionParser implements CandidateDimensionParser
     private List<CandidateDimensionParserStrategy> strategies;
 
     @Override
-    public CandidateDimension parse(String jsonConfig) {
+    public CandidateDimension parse(DimensionContext context, String jsonConfig) {
         JSONObject jsonObject = JSON.parseObject(jsonConfig);
         String type = jsonObject.getString("type");
         CandidateDimensionParserStrategy.StrategyConfig config = jsonObject

+ 32 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/DimensionContext.java

@@ -0,0 +1,32 @@
+package org.hswebframework.web.workflow.dimension;
+
+
+import lombok.*;
+import org.activiti.engine.task.TaskInfo;
+
+/**
+ * @author zhouhao
+ * @since 3.0.0-RC
+ */
+@Getter
+@Setter
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DimensionContext {
+
+    /**
+     * 流程发起人ID
+     */
+    private String creatorId;
+
+    /**
+     * 当前环节
+     */
+    private TaskInfo currentTask;
+
+    /**
+     * 上一环节
+     */
+    private TaskInfo preTask;
+}

+ 11 - 1
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/CandidateDimensionParserStrategy.java

@@ -2,6 +2,7 @@ package org.hswebframework.web.workflow.dimension.parser;
 
 import lombok.Getter;
 import lombok.Setter;
+import org.hswebframework.web.workflow.dimension.DimensionContext;
 
 import java.util.List;
 import java.util.Map;
@@ -13,14 +14,16 @@ public interface CandidateDimensionParserStrategy {
     String DIMENSION_POSITION   = "position";
     String DIMENSION_DEPARTMENT = "department";
     String DIMENSION_ORG        = "org";
+    String DIMENSION_RELATION   = "relation";
 
     boolean support(String dimension);
 
-    List<String> parse(StrategyConfig config);
+    List<String> parse(DimensionContext context, StrategyConfig config);
 
     @Getter
     @Setter
     class StrategyConfig {
+
         private List<String> idList;
 
         private Map<String, Object> config;
@@ -28,5 +31,12 @@ public interface CandidateDimensionParserStrategy {
         public Optional<Object> getConfig(String name) {
             return config == null ? Optional.empty() : Optional.ofNullable(config.get(name));
         }
+
+        public Optional<String> getStringConfig(String name) {
+            return config == null ?
+                    Optional.empty() :
+                    Optional.ofNullable(config.get(name))
+                            .map(String::valueOf);
+        }
     }
 }

+ 2 - 1
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/DepartmentCandidateDimensionParserStrategy.java

@@ -2,6 +2,7 @@ package org.hswebframework.web.workflow.dimension.parser;
 
 import org.hswebframework.web.entity.authorization.UserEntity;
 import org.hswebframework.web.service.authorization.UserService;
+import org.hswebframework.web.workflow.dimension.DimensionContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.stereotype.Component;
@@ -28,7 +29,7 @@ public class DepartmentCandidateDimensionParserStrategy implements CandidateDime
     }
 
     @Override
-    public List<String> parse(StrategyConfig config) {
+    public List<String> parse(DimensionContext context,StrategyConfig config) {
 
         String type = config.getConfig("tree")
                 .map(String::valueOf)

+ 2 - 1
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/OrgCandidateDimensionParserStrategy.java

@@ -2,6 +2,7 @@ package org.hswebframework.web.workflow.dimension.parser;
 
 import org.hswebframework.web.entity.authorization.UserEntity;
 import org.hswebframework.web.service.authorization.UserService;
+import org.hswebframework.web.workflow.dimension.DimensionContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.stereotype.Component;
@@ -28,7 +29,7 @@ public class OrgCandidateDimensionParserStrategy implements CandidateDimensionPa
     }
 
     @Override
-    public List<String> parse(StrategyConfig config) {
+    public List<String> parse(DimensionContext context, StrategyConfig config) {
         String type = config.getConfig("tree")
                 .map(String::valueOf)
                 .map("-"::concat)

+ 2 - 1
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/PositionCandidateDimensionParserStrategy.java

@@ -2,6 +2,7 @@ package org.hswebframework.web.workflow.dimension.parser;
 
 import org.hswebframework.web.entity.authorization.UserEntity;
 import org.hswebframework.web.service.authorization.UserService;
+import org.hswebframework.web.workflow.dimension.DimensionContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.stereotype.Component;
@@ -28,7 +29,7 @@ public class PositionCandidateDimensionParserStrategy implements CandidateDimens
     }
 
     @Override
-    public List<String> parse(StrategyConfig config) {
+    public List<String> parse(DimensionContext context, StrategyConfig config) {
         String type = config.getConfig("tree")
                 .map(String::valueOf)
                 .map("-"::concat)

+ 61 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/RelationCandidateDimensionParserStrategy.java

@@ -0,0 +1,61 @@
+package org.hswebframework.web.workflow.dimension.parser;
+
+import org.hswebframework.web.organizational.authorization.PersonnelAuthentication;
+import org.hswebframework.web.organizational.authorization.PersonnelAuthenticationManager;
+import org.hswebframework.web.organizational.authorization.relation.Relations;
+import org.hswebframework.web.workflow.dimension.DimensionContext;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author zhouhao
+ * @since 3.0.0-RC
+ */
+public class RelationCandidateDimensionParserStrategy implements CandidateDimensionParserStrategy {
+
+    @Autowired
+    PersonnelAuthenticationManager authenticationManager;
+
+
+    @Override
+    public boolean support(String dimension) {
+        return DIMENSION_RELATION.equals(dimension);
+    }
+
+    @Override
+    public List<String> parse(DimensionContext context, StrategyConfig config) {
+        String userType = config.getStringConfig("userType")
+                .orElse("creator");
+
+        String user;
+        switch (userType) {
+            case "fixed":
+                user = config.getStringConfig("userId")
+                        .orElse(context.getCreatorId());
+                break;
+            case "pre":
+                user = context.getPreTask().getOwner();
+                break;
+            default:
+                user = context.getCreatorId();
+        }
+
+        PersonnelAuthentication authentication = authenticationManager
+                .getPersonnelAuthorizationByUserId(user);
+
+        if (null == authentication) {
+            return Collections.emptyList();
+        }
+        Relations relations = authentication.getRelations();
+
+
+
+        return Collections.emptyList();
+    }
+
+    public static class RelationInfo{
+
+    }
+}

+ 2 - 1
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/RoleCandidateDimensionParserStrategy.java

@@ -2,6 +2,7 @@ package org.hswebframework.web.workflow.dimension.parser;
 
 import org.hswebframework.web.entity.authorization.UserEntity;
 import org.hswebframework.web.service.authorization.UserService;
+import org.hswebframework.web.workflow.dimension.DimensionContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.stereotype.Component;
@@ -28,7 +29,7 @@ public class RoleCandidateDimensionParserStrategy implements CandidateDimensionP
     }
 
     @Override
-    public List<String> parse(StrategyConfig config) {
+    public List<String> parse(DimensionContext context, StrategyConfig config) {
         return userService.selectByUserByRole(config.getIdList())
                 .stream()
                 .map(UserEntity::getId)

+ 2 - 1
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/parser/UserCandidateDimensionParserStrategy.java

@@ -1,5 +1,6 @@
 package org.hswebframework.web.workflow.dimension.parser;
 
+import org.hswebframework.web.workflow.dimension.DimensionContext;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -17,7 +18,7 @@ public class UserCandidateDimensionParserStrategy implements CandidateDimensionP
     }
 
     @Override
-    public List<String> parse(StrategyConfig config) {
+    public List<String> parse(DimensionContext context, StrategyConfig config) {
         return config.getIdList();
     }
 }

+ 22 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/test/java/org/hswebframework/web/workflow/dimension/DefaultCandidateDimensionParserTest.groovy

@@ -53,4 +53,26 @@ class DefaultCandidateDimensionParserTest extends Specification {
         dimension.getCandidateUserIdList() != null
         dimension != CandidateDimension.empty
     }
+
+    def "Test Parse Department"() {
+        setup:
+        def config = """ {"type":"department","idList":["test"]} """
+        and:
+        def dimension = parser.parse(config)
+        expect:
+        dimension != null
+        dimension.getCandidateUserIdList() != null
+        dimension != CandidateDimension.empty
+    }
+
+    def "Test Parse Org"() {
+        setup:
+        def config = """ {"type":"org","idList":["test"]} """
+        and:
+        def dimension = parser.parse(config)
+        expect:
+        dimension != null
+        dimension.getCandidateUserIdList() != null
+        dimension != CandidateDimension.empty
+    }
 }