Forráskód Böngészése

优化工作流(6)

zhouhao 6 éve
szülő
commit
63dc997d9a

+ 2 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/WorkFlowFormService.java

@@ -6,6 +6,8 @@ import org.hswebframework.web.commons.entity.PagerResult;
 import org.hswebframework.web.commons.entity.param.QueryParamEntity;
 import org.hswebframework.web.workflow.service.request.SaveFormRequest;
 
+import java.util.List;
+
 
 /**
  * @author zhouhao

+ 18 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/imp/ActivityConfigServiceImpl.java

@@ -61,6 +61,24 @@ public class ActivityConfigServiceImpl extends GenericEntityService<ActivityConf
         return super.updateByPk(pk, entity);
     }
 
+    @Override
+    @Caching(evict = {
+            @CacheEvict(key = "'define-id:'+#entity.processDefineId+'-'+#entity.activityId"),
+            @CacheEvict(key = "'define-key:'+#entity.processDefineKey+'-'+#entity.activityId")
+    })
+    protected int updateByPk(ActivityConfigEntity entity) {
+        return super.updateByPk(entity);
+    }
+
+    @Override
+    @Caching(evict = {
+            @CacheEvict(key = "'define-id:'+#entity.processDefineId+'-'+#entity.activityId"),
+            @CacheEvict(key = "'define-key:'+#entity.processDefineKey+'-'+#entity.activityId")
+    })
+    public String saveOrUpdate(ActivityConfigEntity entity) {
+        return super.saveOrUpdate(entity);
+    }
+
     @Override
     @Caching(evict = {
             @CacheEvict(key = "'define-id:'+#result.processDefineId+'-'+#result.activityId", condition = "#result!=null"),

+ 22 - 3
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/imp/ProcessDefineConfigServiceImpl.java

@@ -10,6 +10,7 @@ import org.hswebframework.web.workflow.service.ProcessDefineConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheConfig;
 import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
 
@@ -42,7 +43,7 @@ public class ProcessDefineConfigServiceImpl extends EnableCacheGenericEntityServ
     @Override
     @Caching(evict = {
             @CacheEvict(key = "'define-id:'+#entity.processDefineId"),
-            @CacheEvict(key = "'define-key-latest:'+#entity.processDefineKey", condition = "#entity.status==1")
+            @CacheEvict(key = "'define-key-latest:'+#entity.processDefineKey")
     })
     public String insert(ProcessDefineConfigEntity entity) {
         entity.setCreateTime(new Date());
@@ -61,6 +62,24 @@ public class ProcessDefineConfigServiceImpl extends EnableCacheGenericEntityServ
         return super.updateByPk(id, entity);
     }
 
+    @Override
+    @Caching(evict = {
+            @CacheEvict(key = "'define-id:'+#entity.processDefineId"),
+            @CacheEvict(key = "'define-key-latest:'+#entity.processDefineKey")
+    })
+    protected int updateByPk(ProcessDefineConfigEntity entity) {
+        return super.updateByPk(entity);
+    }
+
+    @Override
+    @Caching(evict = {
+            @CacheEvict(key = "'define-id:'+#entity.processDefineId"),
+            @CacheEvict(key = "'define-key-latest:'+#entity.processDefineKey")
+    })
+    public String saveOrUpdate(ProcessDefineConfigEntity entity) {
+        return super.saveOrUpdate(entity);
+    }
+
     @Override
     @Caching(evict = {
             @CacheEvict(key = "'define-id:'+#result.processDefineId"),
@@ -72,7 +91,7 @@ public class ProcessDefineConfigServiceImpl extends EnableCacheGenericEntityServ
     }
 
     @Override
-    @CacheEvict(key = "'define-id:'+#processDefineId")
+    @Cacheable(key = "'define-id:'+#processDefineId")
     public ProcessDefineConfigEntity selectByProcessDefineId(String processDefineId) {
         return createQuery()
                 .where("processDefineId", Objects.requireNonNull(processDefineId, "参数[processDefineId]不能为空"))
@@ -80,7 +99,7 @@ public class ProcessDefineConfigServiceImpl extends EnableCacheGenericEntityServ
     }
 
     @Override
-    @CacheEvict(key = "'define-key-latest:'+#processDefineKey")
+    @Cacheable(key = "'define-key-latest:'+#processDefineKey")
     public ProcessDefineConfigEntity selectByLatestProcessDefineKey(String processDefineKey) {
         return createQuery()
                 .where("processDefineKey", Objects.requireNonNull(processDefineKey, "参数[processDefineKey]不能为空"))

+ 8 - 20
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/imp/WorkFlowFormServiceImpl.java

@@ -1,5 +1,6 @@
 package org.hswebframework.web.workflow.service.imp;
 
+import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.task.Task;
 import org.hswebframework.ezorm.rdb.RDBTable;
@@ -26,12 +27,11 @@ import org.hswebframework.web.workflow.service.request.SaveFormRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import java.sql.JDBCType;
-import java.util.Date;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * @author zhouhao
@@ -129,11 +129,12 @@ public class WorkFlowFormServiceImpl extends AbstractFlowableService implements
     protected void acceptStartProcessFormData(ProcessInstance instance,
                                               Map<String, Object> formData) {
 
+        String processDefinitionName = ((ExecutionEntity) instance).getProcessDefinition().getName();
+
         formData.put("id", instance.getBusinessKey());
         formData.put("processDefineId", instance.getProcessDefinitionId());
         formData.put("processDefineKey", instance.getProcessDefinitionKey());
-        formData.put("processDefineName", instance.getProcessDefinitionName());
-        formData.put("processDefineVersion", instance.getProcessDefinitionVersion());
+        formData.put("processDefineName", processDefinitionName);
         formData.put("processInstanceId", instance.getProcessInstanceId());
 
     }
@@ -222,21 +223,8 @@ public class WorkFlowFormServiceImpl extends AbstractFlowableService implements
             processDefineName.setProperty("read-only", true);
             processDefineName.setComment("流程定义Name");
             table.addColumn(processDefineName);
-        }//----------processDefineVersion--------------
-        {
-            RDBColumnMetaData processDefineVersion = new RDBColumnMetaData();
-            processDefineVersion.setJavaType(Integer.class);
-            processDefineVersion.setJdbcType(JDBCType.INTEGER);
-            processDefineVersion.setLength(32);
-            processDefineVersion.setPrecision(32);
-            processDefineVersion.setScale(0);
-            processDefineVersion.setName("proc_def_ver");
-            processDefineVersion.setAlias("processDefineVersion");
-            processDefineVersion.setDataType(dialect.buildDataType(processDefineVersion));
-            processDefineVersion.setProperty("read-only", true);
-            processDefineVersion.setComment("流程定义版本");
-            table.addColumn(processDefineVersion);
-        }//----------processDefineVersion--------------
+        }
+        //----------processDefineVersion--------------
         {
             RDBColumnMetaData processInstanceId = new RDBColumnMetaData();
             processInstanceId.setJavaType(String.class);

+ 2 - 2
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/terms/ProcessParticipateSqlTerm.java

@@ -32,9 +32,9 @@ public class ProcessParticipateSqlTerm extends AbstractSqlTermCustomer {
 
         appender.add("exists(select 1 from ACT_HI_IDENTITYLINK I  WHERE ",
                 createColumnName(processInstanceId, tableAlias),
-                "=I.PROC_INST_ID_  "
+                "=I.PROC_INST_ID_"
                 , (!term.getOptions().isEmpty() ? " and I.TYPE_ =" + wherePrefix + ".options[0]" : "")
-                , " and I.USER_ID_  ");
+                , " and I.USER_ID_ ");
         appendCondition(val, wherePrefix, appender);
         appender.add(")");
 

+ 47 - 12
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/web/FlowableProcessController.java

@@ -18,6 +18,8 @@ import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.runtime.ProcessInstanceQuery;
 import org.activiti.engine.task.Task;
 import org.activiti.engine.task.TaskQuery;
+import org.hswebframework.ezorm.core.Conditional;
+import org.hswebframework.ezorm.core.NestConditional;
 import org.hswebframework.ezorm.core.dsl.Query;
 import org.hswebframework.web.NotFoundException;
 import org.hswebframework.web.authorization.Authentication;
@@ -202,30 +204,53 @@ public class FlowableProcessController {
 
         PagerResult<TaskInfo> result = QueryUtils.doQuery(taskQuery, query, TaskInfo::of);
 
+
         return ResponseMessage.ok(result).exclude(query.getExcludes()).include(query.getIncludes());
     }
 
     @AllArgsConstructor
     @Getter
-    public enum Type{
+    public enum Type {
         claim("user-wf-claim"),
         todo("user-wf-todo"),
         completed("user-wf-completed"),
-        part("user-wf-part");
+        part("user-wf-part"),
+        create("is") {
+            @Override
+            public void applyQueryTerm(NestConditional<?> conditional, String userId) {
+                conditional.accept("creatorId", getTermType(), userId);
+            }
+        },
+        claimOrTodo("is") {
+            @Override
+            public void applyQueryTerm(NestConditional<?> conditional, String userId) {
+                conditional.nest()
+                        .when(true, q -> Type.claim.applyQueryTerm(q, userId))
+                        .or()
+                        .when(true, q -> Type.todo.applyQueryTerm(q, userId))
+                        .end();
+            }
+        };
 
         private String termType;
 
+        public void applyQueryTerm(NestConditional<?> conditional, String userId) {
+            conditional.accept("processInstanceId", termType, userId);
+        }
     }
 
     @GetMapping("/{type}/form/{processDefineId}")
     @ApiOperation("获取自己可查看的流程表单数据")
     @Authorize(merge = false)
-    public ResponseMessage<PagerResult<Object>> getFormData(@PathVariable Type type, @PathVariable String processDefineId, QueryParamEntity query, Authentication authentication) {
-
+    @SuppressWarnings("all")
+    public ResponseMessage<PagerResult<Object>> getFormData(@PathVariable Type type,
+                                                            @PathVariable String processDefineId,
+                                                            QueryParamEntity query,
+                                                            Authentication authentication) {
         Query.empty(query)
                 .nest()
                 //只能看到自己待办理
-                .and("processInstanceId", type.getTermType(), authentication.getUser().getId())
+                .when(type != null, q -> type.applyQueryTerm(q, authentication.getUser().getId()))
                 .end();
         return ResponseMessage.ok(workFlowFormService.selectProcessForm(processDefineId, query));
     }
@@ -233,13 +258,9 @@ public class FlowableProcessController {
     @GetMapping("/task/form/{processDefineId}/{taskDefineKey}")
     @ApiOperation("获取流程任务表单数据")
     @Authorize(merge = false)
-    public ResponseMessage<PagerResult<Object>> getTaskFormData(@PathVariable String processDefineId, @PathVariable String taskDefineKey, QueryParamEntity query, Authentication authentication) {
-
-        Query.empty(query)
-                .nest()
-                .and("processInstanceId", "user-wf-todo", authentication.getUser().getId())
-                .end();
-
+    public ResponseMessage<PagerResult<Object>> getTaskFormData(@PathVariable String processDefineId,
+                                                                @PathVariable String taskDefineKey,
+                                                                QueryParamEntity query) {
         return ResponseMessage.ok(workFlowFormService.selectTaskForm(processDefineId, taskDefineKey, query));
     }
 
@@ -251,6 +272,20 @@ public class FlowableProcessController {
         TaskQuery taskQuery = taskService.createTaskQuery();
 
         taskQuery.taskCandidateUser(authentication.getUser().getId());
+
+        PagerResult<TaskInfo> result = QueryUtils.doQuery(taskQuery, query, TaskInfo::of);
+
+        return ResponseMessage.ok(result);
+    }
+
+    @GetMapping("/claims-and-todo")
+    @ApiOperation("获取待签收和待处理的任务")
+    @Authorize(merge = false)
+    public ResponseMessage<PagerResult<TaskInfo>> getClaimsAndTodo(QueryParamEntity query, Authentication authentication) {
+        TaskQuery taskQuery = taskService.createTaskQuery();
+
+        taskQuery.taskCandidateOrAssigned(authentication.getUser().getId());
+
         PagerResult<TaskInfo> result = QueryUtils.doQuery(taskQuery, query, TaskInfo::of);
 
         return ResponseMessage.ok(result);

+ 1 - 1
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/web/response/TaskInfo.java

@@ -4,6 +4,7 @@ import lombok.Data;
 import org.hswebframework.web.commons.bean.Bean;
 
 import java.util.Date;
+import java.util.Map;
 
 /**
  * @author zhouhao
@@ -38,7 +39,6 @@ public class TaskInfo implements Bean {
     public static TaskInfo of(org.activiti.engine.task.TaskInfo task) {
         TaskInfo taskInfo = new TaskInfo();
         taskInfo.copyFrom(task);
-
         return taskInfo;
     }
 }