caixiaofeng 5 ay önce
ebeveyn
işleme
bc4dc228fe

+ 14 - 0
flow-workflow/flow-workflow-api/src/main/java/com/flow/service/FlowInstanceService.java

@@ -7,10 +7,12 @@ import com.flow.common.mybatis.service.BaseService;
 import com.flow.entity.FlowInstance;
 import com.flow.model.FlowInstanceQuery;
 import com.flow.model.FormInfo;
+import com.flow.model.UrgeTaskForm;
 import com.flow.model.spreadsheet.SpreadSheet;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface FlowInstanceService extends BaseService<FlowInstance> {
     /**
@@ -34,6 +36,18 @@ public interface FlowInstanceService extends BaseService<FlowInstance> {
      */
     FlowInstance getInstance(String instanceId);
 
+    /**
+     * 获取代办用户
+     * @param instanceId
+     * @return
+     */
+    Set<String> getTodoUsers(String instanceId);
+
+    /**
+     * 催办
+     * @param urgeTaskForm
+     */
+    void urge(UrgeTaskForm urgeTaskForm);
     /**
      * 获取流程变量
      * @param instanceId

+ 38 - 4
flow-workflow/flow-workflow-biz/src/main/java/com/flow/service/impl/FlowInstanceServiceImpl.java

@@ -1,6 +1,7 @@
 package com.flow.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -19,6 +20,7 @@ import com.flow.enums.NotifyEnum;
 import com.flow.enums.ProcessStatus;
 import com.flow.model.FlowInstanceQuery;
 import com.flow.model.FormInfo;
+import com.flow.model.UrgeTaskForm;
 import com.flow.model.spreadsheet.SpreadSheet;
 import com.flow.service.FlowDefineService;
 import com.flow.service.FlowInstanceService;
@@ -29,16 +31,15 @@ import org.flowable.engine.RuntimeService;
 import org.flowable.engine.TaskService;
 import org.flowable.engine.history.HistoricProcessInstance;
 import org.flowable.engine.runtime.ProcessInstance;
+import org.flowable.task.api.Task;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class FlowInstanceServiceImpl extends BaseServiceImpl<FlowInstanceDao, FlowInstance> implements FlowInstanceService {
@@ -84,6 +85,39 @@ public class FlowInstanceServiceImpl extends BaseServiceImpl<FlowInstanceDao, Fl
         return flowInstanceDao.getInstance(instanceId);
     }
 
+    @Override
+    public Set<String> getTodoUsers(String instanceId) {
+        List<Task> list = taskService.createTaskQuery()
+                .processInstanceId(instanceId)
+                .list();
+        return list.stream()
+                .map(Task::getAssignee)
+                .collect(Collectors.toSet());
+    }
+
+    @Override
+    public void urge(UrgeTaskForm urgeTaskForm) {
+        String instanceId = urgeTaskForm.getInstanceId();
+        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(instanceId).singleResult();
+        List<String> assignees = urgeTaskForm.getAssignees();
+        String content = urgeTaskForm.getContent();
+        if (StringUtils.isBlank(content)) {
+            content = String.format("您好!【%s】目前尚未完成,请尽快处理。", processInstance.getName());
+        }
+        for (String assignee : assignees) {
+            Notify notify = Notify.builder()
+                    .type(NotifyEnum.MESSAGE)
+                    .receivingTime(LocalDateTime.now())
+                    .subject("催办")
+                    .content(content)
+                    .url("/flow/todo")
+                    .receiver(assignee)
+                    .sender(SecurityContextUtil.getUserId())
+                    .build();
+            notifyService.notify(notify);
+        }
+    }
+
     @Override
     public Map<String, Object> getVariables(String instanceId) {
         Map<String, Object> variables = new HashMap<>();

+ 14 - 0
flow-workflow/flow-workflow-controller/src/main/java/com/flow/controller/FlowInstanceController.java

@@ -7,6 +7,7 @@ import com.flow.common.core.util.SecurityContextUtil;
 import com.flow.entity.FlowInstance;
 import com.flow.model.FlowInstanceQuery;
 import com.flow.model.FormInfo;
+import com.flow.model.UrgeTaskForm;
 import com.flow.model.spreadsheet.SpreadSheet;
 import com.flow.service.FlowInstanceService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 @RestController
 @RequestMapping("/instance")
@@ -40,6 +42,18 @@ public class FlowInstanceController {
         return Result.success(pageResult);
     }
 
+    @GetMapping("/todoUsers/{instanceId}")
+    public Result<Set<String>> getTodoUsers(@PathVariable String instanceId) {
+        Set<String> todoUsers = flowInstanceService.getTodoUsers(instanceId);
+        return Result.success(todoUsers);
+    }
+
+    @PostMapping("/urge")
+    public Result<?> urge(@RequestBody UrgeTaskForm urgeTaskForm) {
+        flowInstanceService.urge(urgeTaskForm);
+        return Result.success();
+    }
+
     @GetMapping("/{instanceId}")
     public Result<FlowInstance> getInstance(@PathVariable String instanceId) {
         return Result.success(flowInstanceService.getInstance(instanceId));

+ 13 - 0
flow-workflow/flow-workflow-entity/src/main/java/com/flow/model/UrgeTaskForm.java

@@ -0,0 +1,13 @@
+package com.flow.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UrgeTaskForm {
+    private String instanceId;
+    private String content;
+    private List<String> assignees;
+
+}