caixiaofeng 5 ヶ月 前
コミット
8da5fe6eee

+ 22 - 0
flow-workflow/flow-workflow-api/src/main/java/com/flow/service/FlowDefineService.java

@@ -7,16 +7,19 @@ import com.flow.model.FormInfo;
 import com.flow.model.StartProcess;
 
 import java.util.List;
+import java.util.Map;
 
 public interface FlowDefineService extends BaseService<FlowDefine> {
     /**
      * 启动流程
+     *
      * @param startProcess
      */
     void startProcess(StartProcess startProcess);
 
     /**
      * 流程定义列表
+     *
      * @param flowDefine
      * @return
      */
@@ -24,6 +27,7 @@ public interface FlowDefineService extends BaseService<FlowDefine> {
 
     /**
      * 挂起/启用
+     *
      * @param defineId
      * @return
      */
@@ -31,6 +35,7 @@ public interface FlowDefineService extends BaseService<FlowDefine> {
 
     /**
      * 获取流程定义
+     *
      * @param defineId
      * @return
      */
@@ -38,8 +43,25 @@ public interface FlowDefineService extends BaseService<FlowDefine> {
 
     /**
      * 获取开始表单
+     *
      * @param defineId
      * @return
      */
     FormInfo getStartForm(String defineId);
+
+    /**
+     * 暂存表单数据
+     *
+     * @param startProcess
+     */
+    void storeFormDataTemporarily(StartProcess startProcess);
+
+    /**
+     * 获取暂存表单数据
+     *
+     * @param defineId
+     * @return
+     */
+    Map<String, Object> getFormDataTemporarily(String defineId);
+
 }

+ 13 - 0
flow-workflow/flow-workflow-api/src/main/java/com/flow/service/FlowTempService.java

@@ -0,0 +1,13 @@
+package com.flow.service;
+
+import com.flow.common.mybatis.service.BaseService;
+import com.flow.entity.FlowTemp;
+
+public interface FlowTempService extends BaseService<FlowTemp> {
+
+    FlowTemp saveData(FlowTemp flowTemp);
+
+    FlowTemp getByBusinessId(String businessId);
+
+    void deleteByBusinessId(String businessId);
+}

+ 7 - 0
flow-workflow/flow-workflow-biz/src/main/java/com/flow/dao/FlowTempDao.java

@@ -0,0 +1,7 @@
+package com.flow.dao;
+
+import com.flow.common.mybatis.dao.BaseDao;
+import com.flow.entity.FlowTemp;
+
+public interface FlowTempDao extends BaseDao<FlowTemp> {
+}

+ 36 - 1
flow-workflow/flow-workflow-biz/src/main/java/com/flow/service/impl/FlowDefineServiceImpl.java

@@ -11,6 +11,7 @@ import com.flow.common.mybatis.service.impl.BaseServiceImpl;
 import com.flow.common.redis.service.RedisService;
 import com.flow.dao.FlowDefineDao;
 import com.flow.entity.FlowDefine;
+import com.flow.entity.FlowTemp;
 import com.flow.entity.FormModel;
 import com.flow.entity.form.Field;
 import com.flow.entity.form.serial.SerialRule;
@@ -22,6 +23,7 @@ import com.flow.enums.ProcessStatus;
 import com.flow.model.FormInfo;
 import com.flow.model.StartProcess;
 import com.flow.service.FlowDefineService;
+import com.flow.service.FlowTempService;
 import com.google.common.collect.Lists;
 import org.apache.commons.lang3.StringUtils;
 import org.flowable.common.engine.impl.identity.Authentication;
@@ -41,6 +43,7 @@ import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 @Service
@@ -57,6 +60,8 @@ public class FlowDefineServiceImpl extends BaseServiceImpl<FlowDefineDao, FlowDe
     private RedisService<Long> redisService;
     @Autowired
     private ObjectMapper objectMapper;
+    @Autowired
+    private FlowTempService flowTempService;
 
     @Transactional(rollbackFor = Exception.class)
     @Override
@@ -142,6 +147,8 @@ public class FlowDefineServiceImpl extends BaseServiceImpl<FlowDefineDao, FlowDe
                 .businessStatus(ProcessStatus.RUNNING.toString())
                 .variables(values)
                 .start();
+        // 删除暂存
+        flowTempService.deleteByBusinessId(startProcess.getDefineId());
         try {
             runtimeService.setVariable(instanceId, "_SKIP_INITIATOR", false);
         } catch (Exception ignored) {
@@ -154,7 +161,7 @@ public class FlowDefineServiceImpl extends BaseServiceImpl<FlowDefineDao, FlowDe
         List<SerialRule> serialRules = objectMapper.convertValue(rules, new TypeReference<List<SerialRule>>() {
         });
         String key = String.format("flow:serial:%s:%s", modelKey, field.getId());
-        return serialRules.stream().map(e->e.generate(key)).collect(Collectors.joining());
+        return serialRules.stream().map(e -> e.generate(key)).collect(Collectors.joining());
     }
 
     @Override
@@ -194,4 +201,32 @@ public class FlowDefineServiceImpl extends BaseServiceImpl<FlowDefineDao, FlowDe
         List<FieldProperty> formProperties = rootNode.getFormProperties();
         return new FormInfo(define, formProperties, null);
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void storeFormDataTemporarily(StartProcess startProcess) {
+        Optional<FlowTemp> optional = flowTempService.lambdaQuery()
+                .eq(FlowTemp::getBusinessId, startProcess.getDefineId())
+                .eq(FlowTemp::getUserId, SecurityContextUtil.getUserId())
+                .oneOpt();
+        if (optional.isPresent()) {
+            FlowTemp flowTemp = optional.get();
+            flowTemp.setData(startProcess.getValues());
+            flowTempService.updateById(flowTemp);
+            return;
+        }
+        FlowTemp flowTemp = new FlowTemp();
+        flowTemp.setBusinessId(startProcess.getDefineId());
+        flowTemp.setUserId(SecurityContextUtil.getUserId());
+        flowTemp.setData(startProcess.getValues());
+        flowTempService.saveData(flowTemp);
+    }
+
+    @Override
+    public Map<String, Object> getFormDataTemporarily(String defineId) {
+        FlowTemp flowTemp = flowTempService.getByBusinessId(defineId);
+        return Optional.ofNullable(flowTemp)
+                .map(FlowTemp::getData)
+                .orElse(null);
+    }
 }

+ 40 - 0
flow-workflow/flow-workflow-biz/src/main/java/com/flow/service/impl/FlowTempServiceImpl.java

@@ -0,0 +1,40 @@
+package com.flow.service.impl;
+
+import com.flow.common.core.util.SecurityContextUtil;
+import com.flow.common.mybatis.constant.SqlConstant;
+import com.flow.common.mybatis.service.impl.BaseServiceImpl;
+import com.flow.dao.FlowTempDao;
+import com.flow.entity.FlowTemp;
+import com.flow.service.FlowTempService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class FlowTempServiceImpl extends BaseServiceImpl<FlowTempDao, FlowTemp> implements FlowTempService {
+    @Autowired
+    private FlowTempDao flowTempDao;
+
+    @Override
+    public FlowTemp saveData(FlowTemp flowTemp) {
+        flowTempDao.insert(flowTemp);
+        return flowTemp;
+    }
+
+    @Override
+    public FlowTemp getByBusinessId(String businessId) {
+        return flowTempDao.lambdaQueryChain()
+                .eq(FlowTemp::getBusinessId, businessId)
+                .eq(FlowTemp::getUserId, SecurityContextUtil.getUserId())
+                .last(SqlConstant.LIMIT1)
+                .one();
+    }
+
+    @Override
+    public void deleteByBusinessId(String businessId) {
+        flowTempDao.lambdaUpdateChain()
+                .eq(FlowTemp::getBusinessId, businessId)
+                .eq(FlowTemp::getUserId, SecurityContextUtil.getUserId())
+                .remove();
+    }
+
+}

+ 13 - 0
flow-workflow/flow-workflow-controller/src/main/java/com/flow/controller/FlowDefineController.java

@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/define")
@@ -43,4 +44,16 @@ public class FlowDefineController {
         return Result.success(formInfo);
     }
 
+    @PutMapping("/formDataTemporarily")
+    public Result<?> storeFormDataTemporarily(@RequestBody StartProcess startProcess) {
+        flowDefineService.storeFormDataTemporarily(startProcess);
+        return Result.success();
+    }
+
+    @GetMapping("/formDataTemporarily/{defineId}")
+    public Result<Map<String, Object>> getFormDataTemporarily(@PathVariable String defineId) {
+        Map<String, Object> formDataTemporarily = flowDefineService.getFormDataTemporarily(defineId);
+        return Result.success(formDataTemporarily);
+    }
+
 }

+ 3 - 1
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/FlowModel.java

@@ -1,6 +1,8 @@
 package com.flow.entity;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.SqlCondition;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;

+ 24 - 0
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/FlowTemp.java

@@ -0,0 +1,24 @@
+package com.flow.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.flow.common.mybatis.entity.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Map;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "flow_temp", autoResultMap = true)
+public class FlowTemp extends BaseEntity {
+    private String businessId;
+    private String userId;
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private Map<String, Object> data;
+}

+ 6 - 4
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/node/CallNode.java

@@ -13,8 +13,10 @@ import java.util.Objects;
 
 @EqualsAndHashCode(callSuper = true)
 @Data
-public class CallNode extends Node{
-    private String definitionId;
+public class CallNode extends Node {
+    private String targetType;
+    private String target;
+
     @Override
     public List<FlowElement> convert() {
         ArrayList<FlowElement> elements = Lists.newArrayList();
@@ -24,8 +26,8 @@ public class CallNode extends Node{
         callActivity.setExecutionListeners(this.buidEventListener());
         callActivity.setInheritVariables(true);
         callActivity.setInheritBusinessKey(true);
-        callActivity.setCalledElementType("id");
-        callActivity.setCalledElement(this.definitionId);
+        callActivity.setCalledElementType(this.targetType);
+        callActivity.setCalledElement(this.target);
         callActivity.setProcessInstanceName(this.getName());
         elements.add(callActivity);
         // 下一个节点的连线