wangwei 7 tahun lalu
induk
melakukan
45b276b18f
11 mengubah file dengan 284 tambahan dan 18 penghapusan
  1. 10 0
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/pom.xml
  2. 10 9
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/controller/BpmDeploymentController.java
  3. 43 0
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/ActivitiUserUtil.java
  4. 57 0
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/CustomGroupEntityManager.java
  5. 29 0
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/CustomGroupEntityManagerFactory.java
  6. 70 0
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/CustomUserEntityManager.java
  7. 25 0
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/CustomUserEntityManagerFactory.java
  8. 1 1
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/FlowableAbstract.java
  9. 3 2
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/FlowableAutoConfiguration.java
  10. 35 0
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/JumpTaskCmd.java
  11. 1 6
      hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/test/resources/application.yml

+ 10 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/pom.xml

@@ -129,5 +129,15 @@
             <version>3.0-SNAPSHOT</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.hswebframework.web</groupId>
+            <artifactId>hsweb-system-authorization-entity</artifactId>
+            <version>3.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.hswebframework.web</groupId>
+            <artifactId>hsweb-system-authorization-service-api</artifactId>
+            <version>3.0-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 </project>

+ 10 - 9
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/controller/BpmDeploymentController.java

@@ -3,15 +3,16 @@ package org.hswebframework.web.workflow.flowable.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.activiti.bpmn.converter.BpmnXMLConverter;
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.editor.constants.ModelDataJsonConstants;
+import org.activiti.editor.language.json.converter.BpmnJsonConverter;
+import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
+import org.activiti.engine.repository.DeploymentBuilder;
+import org.activiti.engine.repository.Model;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.repository.ProcessDefinitionQuery;
 import org.apache.commons.io.FilenameUtils;
-import org.flowable.bpmn.converter.BpmnXMLConverter;
-import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.editor.constants.ModelDataJsonConstants;
-import org.flowable.editor.language.json.converter.BpmnJsonConverter;
-import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntity;
-import org.flowable.engine.repository.DeploymentBuilder;
-import org.flowable.engine.repository.ProcessDefinition;
-import org.flowable.engine.repository.ProcessDefinitionQuery;
 import org.hsweb.ezorm.core.PropertyWrapper;
 import org.hsweb.ezorm.core.SimplePropertyWrapper;
 import org.hsweb.ezorm.core.param.TermType;
@@ -164,7 +165,7 @@ public class BpmDeploymentController extends FlowableAbstract {
 
             BpmnJsonConverter converter = new BpmnJsonConverter();
             com.fasterxml.jackson.databind.node.ObjectNode modelNode = converter.convertToJson(bpmnModel);
-            org.flowable.engine.repository.Model modelData = repositoryService.newModel();
+            Model modelData = repositoryService.newModel();
             modelData.setKey(processDefinition.getKey());
             modelData.setName(processDefinition.getResourceName().substring(0, processDefinition.getResourceName().indexOf(".")));
             modelData.setCategory(processDefinition.getDeploymentId());

+ 43 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/ActivitiUserUtil.java

@@ -0,0 +1,43 @@
+package org.hswebframework.web.workflow.flowable.utils;
+
+import org.activiti.engine.identity.Group;
+import org.activiti.engine.impl.persistence.entity.GroupEntity;
+import org.activiti.engine.impl.persistence.entity.UserEntity;
+import org.hswebframework.web.entity.authorization.RoleEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author wangwei
+ * @Date 2017/8/3.
+ */
+public class ActivitiUserUtil {
+    public static UserEntity toActivitiUser(org.hswebframework.web.entity.authorization.UserEntity bUser){
+        UserEntity userEntity = new UserEntity();
+        userEntity.setId(bUser.getName());
+        userEntity.setFirstName(bUser.getUsername());
+        userEntity.setLastName(bUser.getName());
+        userEntity.setPassword(bUser.getPassword());
+//        userEntity.setEmail(bUser.getEmail());
+        userEntity.setRevision(1);
+        return userEntity;
+    }
+
+    public static GroupEntity toActivitiGroup(RoleEntity sysRole){
+        GroupEntity groupEntity = new GroupEntity();
+        groupEntity.setRevision(1);
+        groupEntity.setType("assignment");
+        groupEntity.setName(sysRole.getName());
+        return groupEntity;
+    }
+
+    public static List<Group> toActivitiGroups(List<RoleEntity> roleEntities){
+        List<Group> groups = new ArrayList<Group>();
+        for (RoleEntity roleEntity : roleEntities) {
+            GroupEntity groupEntity = toActivitiGroup(roleEntity);
+            groups.add(groupEntity);
+        }
+        return groups;
+    }
+}

+ 57 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/CustomGroupEntityManager.java

@@ -0,0 +1,57 @@
+package org.hswebframework.web.workflow.flowable.utils;
+
+import org.activiti.engine.identity.Group;
+import org.activiti.engine.impl.GroupQueryImpl;
+import org.activiti.engine.impl.Page;
+import org.activiti.engine.impl.persistence.entity.GroupEntity;
+import org.activiti.engine.impl.persistence.entity.GroupEntityManager;
+import org.hswebframework.web.entity.authorization.RoleEntity;
+import org.hswebframework.web.service.authorization.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.EmptyResultDataAccessException;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * Created by Administrator on 2016/3/19 0019.
+ */
+@Service
+public class CustomGroupEntityManager extends GroupEntityManager {
+
+    @Autowired
+    private UserService userService;
+
+    public GroupEntity findGroupById(final String id) {
+        if (id == null)
+            return null;
+        try {
+            List<RoleEntity> sysRoles = userService.getUserRole(id);
+            return ActivitiUserUtil.toActivitiGroup(sysRoles.get(0));
+        } catch (EmptyResultDataAccessException e) {
+            return null;
+        }
+    }
+
+    @Override
+    public List<Group> findGroupsByUser(final String id) {
+        if (id == null)
+            return null;
+        try {
+            List<RoleEntity> sysRoles = userService.getUserRole(id);
+            return ActivitiUserUtil.toActivitiGroups(sysRoles);
+        } catch (EmptyResultDataAccessException e) {
+            return null;
+        }
+    }
+
+    @Override
+    public List<Group> findGroupByQueryCriteria(GroupQueryImpl query, Page page) {
+        throw new RuntimeException("not implement method.");
+    }
+
+    @Override
+    public long findGroupCountByQueryCriteria(GroupQueryImpl query) {
+        throw new RuntimeException("not implement method.");
+    }
+}

+ 29 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/CustomGroupEntityManagerFactory.java

@@ -0,0 +1,29 @@
+package org.hswebframework.web.workflow.flowable.utils;
+
+import org.activiti.engine.impl.interceptor.Session;
+import org.activiti.engine.impl.interceptor.SessionFactory;
+import org.activiti.engine.impl.persistence.entity.GroupEntityManager;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Created by Administrator on 2016/3/19 0019.
+ */
+public class CustomGroupEntityManagerFactory implements SessionFactory {
+
+    private CustomGroupEntityManager customGroupEntityManager;
+
+    @Autowired
+    public void setCustomGroupEntityManager(CustomGroupEntityManager customGroupEntityManager){
+        this.customGroupEntityManager = customGroupEntityManager;
+    }
+
+    public Class<?> getSessionType() {
+        // 返回原始的GroupEntityManager类型
+        return GroupEntityManager.class;
+    }
+
+    public Session openSession() {
+        // 返回自定义的GroupEntityManager实例
+        return customGroupEntityManager;
+    }
+}

+ 70 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/CustomUserEntityManager.java

@@ -0,0 +1,70 @@
+package org.hswebframework.web.workflow.flowable.utils;
+
+import org.activiti.engine.identity.Group;
+import org.activiti.engine.impl.Page;
+import org.activiti.engine.impl.UserQueryImpl;
+import org.activiti.engine.impl.persistence.entity.IdentityInfoEntity;
+import org.activiti.engine.impl.persistence.entity.UserEntity;
+import org.activiti.engine.impl.persistence.entity.UserEntityManager;
+import org.hswebframework.web.entity.authorization.RoleEntity;
+import org.hswebframework.web.service.authorization.UserService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.EmptyResultDataAccessException;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class CustomUserEntityManager extends UserEntityManager {
+    protected Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @SuppressWarnings("all")
+    @Autowired
+    private UserService userService;
+
+    @Override
+    public UserEntity findUserById(final String userId) {
+        if (userId == null)
+            return null;
+        try {
+            org.hswebframework.web.entity.authorization.UserEntity user = userService.selectByPk(userId);
+            return ActivitiUserUtil.toActivitiUser(user);
+        } catch (EmptyResultDataAccessException e) {
+            return null;
+        }
+    }
+
+    @Override
+    public List<Group> findGroupsByUser(final String userId) {
+        if (userId == null)
+            return null;
+
+        List<RoleEntity> sysRoles = userService.getUserRole(userId);
+        return  ActivitiUserUtil.toActivitiGroups(sysRoles);
+
+    }
+
+    @Override
+    public List<org.activiti.engine.identity.User> findUserByQueryCriteria(UserQueryImpl query, Page page) {
+        throw new RuntimeException("not implement method.");
+    }
+
+    @Override
+    public IdentityInfoEntity findUserInfoByUserIdAndKey(String userId,
+                                                         String key) {
+        throw new RuntimeException("not implement method.");
+    }
+
+    @Override
+    public List<String> findUserInfoKeysByUserIdAndType(String userId,
+                                                        String type) {
+        throw new RuntimeException("not implement method.");
+    }
+
+    @Override
+    public long findUserCountByQueryCriteria(UserQueryImpl query) {
+        throw new RuntimeException("not implement method.");
+    }
+}

+ 25 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/CustomUserEntityManagerFactory.java

@@ -0,0 +1,25 @@
+package org.hswebframework.web.workflow.flowable.utils;
+
+import org.activiti.engine.impl.interceptor.Session;
+import org.activiti.engine.impl.interceptor.SessionFactory;
+import org.activiti.engine.impl.persistence.entity.UserIdentityManager;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class CustomUserEntityManagerFactory implements SessionFactory {
+    private CustomUserEntityManager customUserEntityManager;
+
+    @Autowired
+    public void setCustomUserEntityManager(CustomUserEntityManager customUserEntityManager) {
+        this.customUserEntityManager = customUserEntityManager;
+    }
+
+    @Override
+    public Class<?> getSessionType() { // 返回引擎的实体管理器接口
+        return UserIdentityManager.class;
+    }
+
+    @Override
+    public Session openSession() {
+        return customUserEntityManager;
+    }
+}

+ 1 - 1
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/FlowableAbstract.java

@@ -1,7 +1,7 @@
 package org.hswebframework.web.workflow.flowable.utils;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.flowable.engine.*;
+import org.activiti.engine.*;
 
 import javax.annotation.Resource;
 

+ 3 - 2
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/FlowableAutoConfiguration.java

@@ -1,7 +1,7 @@
 package org.hswebframework.web.workflow.flowable.utils;
 
-import org.flowable.engine.ProcessEngineConfiguration;
-import org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration;
+import org.activiti.engine.ProcessEngineConfiguration;
+import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -15,6 +15,7 @@ public class FlowableAutoConfiguration {
     public ProcessEngineConfiguration processEngineConfiguration(){
         ProcessEngineConfiguration processEngineConfiguration = new StandaloneProcessEngineConfiguration()
                 .setAsyncExecutorActivate(false)
+                .setJobExecutorActivate(false)
                 .setActivityFontName("宋体")
                 .setLabelFontName("宋体")
                 .setAnnotationFontName("宋体");

+ 35 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/utils/JumpTaskCmd.java

@@ -0,0 +1,35 @@
+package org.hswebframework.web.workflow.flowable.utils;
+
+import org.activiti.engine.impl.context.Context;
+import org.activiti.engine.impl.interceptor.Command;
+import org.activiti.engine.impl.interceptor.CommandContext;
+import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
+import org.activiti.engine.impl.persistence.entity.TaskEntity;
+import org.activiti.engine.impl.pvm.process.ActivityImpl;
+import org.activiti.engine.impl.pvm.process.ProcessDefinitionImpl;
+import org.activiti.engine.task.Comment;
+
+/**
+ * Created by Administrator on 2016/4/20 0020.
+ */
+public class JumpTaskCmd implements Command<Comment> {
+    protected String executionId;
+    protected String activityId;
+
+
+    public JumpTaskCmd(String executionId, String activityId) {
+        this.executionId = executionId;
+        this.activityId = activityId;
+    }
+
+    public Comment execute(CommandContext commandContext) {
+        for (TaskEntity taskEntity : Context.getCommandContext().getTaskEntityManager().findTasksByExecutionId(executionId)) {
+            Context.getCommandContext().getTaskEntityManager().deleteTask(taskEntity, "jump", false);
+        }
+        ExecutionEntity executionEntity = Context.getCommandContext().getExecutionEntityManager().findExecutionById(executionId);
+        ProcessDefinitionImpl processDefinition = executionEntity.getProcessDefinition();
+        ActivityImpl activity = processDefinition.findActivity(activityId);
+        executionEntity.executeActivity(activity);
+        return null;
+    }
+}

+ 1 - 6
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/test/resources/application.yml

@@ -9,11 +9,6 @@ spring:
        password :
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name : org.h2.Driver
-#    jpa:
-#      database: h2
-#      show-sql: true
-#      hibernate:
-#        ddl-auto: update
     cache:
        type: simple
 
@@ -24,4 +19,4 @@ logging:
 mybatis:
   dynamic-datasource: false
 server:
-  port: 8808
+  port: 8080