Browse Source

add 增加修改流程变量接口

songgaoshuai 11 tháng trước cách đây
mục cha
commit
9375578925

+ 12 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwInstanceController.java

@@ -13,6 +13,7 @@ import org.dromara.workflow.common.ConditionalOnEnable;
 import org.dromara.workflow.domain.bo.FlowCancelBo;
 import org.dromara.workflow.domain.bo.FlowInstanceBo;
 import org.dromara.workflow.domain.bo.FlowInvalidBo;
+import org.dromara.workflow.domain.bo.FlowVariableBo;
 import org.dromara.workflow.domain.vo.FlowInstanceVo;
 import org.dromara.workflow.service.IFlwInstanceService;
 import org.springframework.validation.annotation.Validated;
@@ -142,6 +143,17 @@ public class FlwInstanceController extends BaseController {
         return R.ok(flwInstanceService.instanceVariable(instanceId));
     }
 
+    /**
+     * 修改流程变量
+     *
+     * @param bo 参数
+     */
+    @RepeatSubmit()
+    @PutMapping("/updateVariable")
+    public R<Void> updateVariable(@Validated @RequestBody FlowVariableBo bo) {
+        return toAjax(flwInstanceService.updateVariable(bo));
+    }
+
     /**
      * 作废流程
      *

+ 39 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowVariableBo.java

@@ -0,0 +1,39 @@
+package org.dromara.workflow.domain.bo;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import org.dromara.common.core.validate.AddGroup;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 流程变量参数
+ *
+ * @author may
+ */
+@Data
+public class FlowVariableBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 流程实例id
+     */
+    @NotNull(message = "流程实例id为空", groups = AddGroup.class)
+    private Long instanceId;
+
+    /**
+     * 流程变量key
+     */
+    @NotNull(message = "流程变量key为空", groups = AddGroup.class)
+    private String key;
+
+    /**
+     * 流程变量value
+     */
+    @NotNull(message = "流程变量value为空", groups = AddGroup.class)
+    private String value;
+
+}

+ 9 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java

@@ -6,6 +6,7 @@ import org.dromara.warm.flow.orm.entity.FlowInstance;
 import org.dromara.workflow.domain.bo.FlowCancelBo;
 import org.dromara.workflow.domain.bo.FlowInstanceBo;
 import org.dromara.workflow.domain.bo.FlowInvalidBo;
+import org.dromara.workflow.domain.bo.FlowVariableBo;
 import org.dromara.workflow.domain.vo.FlowInstanceVo;
 
 import java.util.List;
@@ -125,6 +126,14 @@ public interface IFlwInstanceService {
      */
     Map<String, Object> instanceVariable(Long instanceId);
 
+    /**
+     * 更新流程变量
+     *
+     * @param bo 参数
+     * @return 结果
+     */
+    boolean updateVariable(FlowVariableBo bo);
+
     /**
      * 设置流程变量
      *

+ 25 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java

@@ -39,6 +39,7 @@ import org.dromara.workflow.common.enums.TaskStatusEnum;
 import org.dromara.workflow.domain.bo.FlowCancelBo;
 import org.dromara.workflow.domain.bo.FlowInstanceBo;
 import org.dromara.workflow.domain.bo.FlowInvalidBo;
+import org.dromara.workflow.domain.bo.FlowVariableBo;
 import org.dromara.workflow.domain.vo.FlowHisTaskVo;
 import org.dromara.workflow.domain.vo.FlowInstanceVo;
 import org.dromara.workflow.handler.FlowProcessEventHandler;
@@ -356,6 +357,30 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
         return Map.of("variableList", variableList, "variable", flowInstance.getVariable());
     }
 
+    /**
+     * 设置流程变量
+     *
+     * @param bo 参数
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateVariable(FlowVariableBo bo) {
+        FlowInstance flowInstance = flowInstanceMapper.selectById(bo.getInstanceId());
+        if (flowInstance == null) {
+            throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE);
+        }
+        try {
+            Map<String, Object> variableMap = new HashMap<>(Optional.ofNullable(flowInstance.getVariableMap()).orElse(Collections.emptyMap()));
+            variableMap.put(bo.getKey(), bo.getValue());
+            flowInstance.setVariable(FlowEngine.jsonConvert.objToStr(variableMap));
+            flowInstanceMapper.updateById(flowInstance);
+        } catch (Exception e) {
+            log.error("设置流程变量失败: {}", e.getMessage(), e);
+            throw new ServiceException(e.getMessage());
+        }
+        return true;
+    }
+
     /**
      * 设置流程变量
      *