【功能优化】 删除表单数据触发器
This commit is contained in:
parent
009f1889a9
commit
cbdc081cfe
|
@ -17,7 +17,8 @@ import java.util.Arrays;
|
||||||
public enum BpmTriggerTypeEnum implements ArrayValuable<Integer> {
|
public enum BpmTriggerTypeEnum implements ArrayValuable<Integer> {
|
||||||
|
|
||||||
HTTP_REQUEST(1, "发起 HTTP 请求"),
|
HTTP_REQUEST(1, "发起 HTTP 请求"),
|
||||||
FORM_UPDATE(2, "更新流程表单");
|
FORM_UPDATE(2, "更新流程表单数据"),
|
||||||
|
FORM_DELETE(3, "删除流程表单数据");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 触发器执行动作类型
|
* 触发器执行动作类型
|
||||||
|
|
|
@ -14,6 +14,7 @@ import org.hibernate.validator.constraints.URL;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 仿钉钉流程设计模型节点 VO")
|
@Schema(description = "管理后台 - 仿钉钉流程设计模型节点 VO")
|
||||||
@Data
|
@Data
|
||||||
|
@ -393,8 +394,11 @@ public class BpmSimpleModelNodeVO {
|
||||||
@Schema(description = "条件组", example = "{}")
|
@Schema(description = "条件组", example = "{}")
|
||||||
private ConditionGroups conditionGroups;
|
private ConditionGroups conditionGroups;
|
||||||
|
|
||||||
@Schema(description = "修改的表单字段", example = "userName")
|
@Schema(description = "修改的表单字段", example = "{}")
|
||||||
private Map<String, Object> updateFormFields;
|
private Map<String, Object> updateFormFields;
|
||||||
|
|
||||||
|
@Schema(description = "删除表单字段", example = "[]")
|
||||||
|
private Set<String> deleteFields;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import jakarta.validation.Valid;
|
||||||
import org.flowable.engine.history.HistoricProcessInstance;
|
import org.flowable.engine.history.HistoricProcessInstance;
|
||||||
import org.flowable.engine.runtime.ProcessInstance;
|
import org.flowable.engine.runtime.ProcessInstance;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -148,15 +149,6 @@ public interface BpmProcessInstanceService {
|
||||||
*/
|
*/
|
||||||
void updateProcessInstanceReject(ProcessInstance processInstance, String reason);
|
void updateProcessInstanceReject(ProcessInstance processInstance, String reason);
|
||||||
|
|
||||||
// ========== Event 事件相关方法 ==========
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 处理 ProcessInstance 完成事件,例如说:审批通过、不通过、取消
|
|
||||||
*
|
|
||||||
* @param instance 流程任务
|
|
||||||
*/
|
|
||||||
void processProcessInstanceCompleted(ProcessInstance instance);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新 ProcessInstance 的变量
|
* 更新 ProcessInstance 的变量
|
||||||
*
|
*
|
||||||
|
@ -165,4 +157,20 @@ public interface BpmProcessInstanceService {
|
||||||
*/
|
*/
|
||||||
void updateProcessInstanceVariables(String id, Map<String, Object> variables);
|
void updateProcessInstanceVariables(String id, Map<String, Object> variables);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除 ProcessInstance 的变量
|
||||||
|
*
|
||||||
|
* @param processInstanceId 流程编号
|
||||||
|
* @param variableNames 流程变量名
|
||||||
|
*/
|
||||||
|
void removeProcessInstanceVariables(String processInstanceId, Collection<String> variableNames);
|
||||||
|
|
||||||
|
// ========== Event 事件相关方法 ==========
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理 ProcessInstance 完成事件,例如说:审批通过、不通过、取消
|
||||||
|
*
|
||||||
|
* @param instance 流程任务
|
||||||
|
*/
|
||||||
|
void processProcessInstanceCompleted(ProcessInstance instance);
|
||||||
}
|
}
|
||||||
|
|
|
@ -776,6 +776,16 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
|
||||||
BpmReasonEnum.REJECT_TASK.format(reason));
|
BpmReasonEnum.REJECT_TASK.format(reason));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateProcessInstanceVariables(String id, Map<String, Object> variables) {
|
||||||
|
runtimeService.setVariables(id, variables);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeProcessInstanceVariables(String processInstanceId, Collection<String> variableNames) {
|
||||||
|
runtimeService.removeVariables(processInstanceId, variableNames);
|
||||||
|
}
|
||||||
|
|
||||||
// ========== Event 事件相关方法 ==========
|
// ========== Event 事件相关方法 ==========
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -809,10 +819,4 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
|
||||||
BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceStatusEvent(this, instance, status));
|
BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceStatusEvent(this, instance, status));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateProcessInstanceVariables(String id, Map<String, Object> variables) {
|
|
||||||
runtimeService.setVariables(id, variables);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
package cn.iocoder.yudao.module.bpm.service.task.trigger;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
||||||
|
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
|
||||||
|
import cn.iocoder.yudao.module.bpm.enums.definition.BpmTriggerTypeEnum;
|
||||||
|
import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils;
|
||||||
|
import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.SimpleModelUtils;
|
||||||
|
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BPM 删除流程表单数据触发器
|
||||||
|
*
|
||||||
|
* @author jason
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class BpmFormDeleteTrigger implements BpmTrigger {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private BpmProcessInstanceService processInstanceService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BpmTriggerTypeEnum getType() {
|
||||||
|
return BpmTriggerTypeEnum.FORM_DELETE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(String processInstanceId, String param) {
|
||||||
|
// 1. 解析删除流程表单数据配置
|
||||||
|
List<BpmSimpleModelNodeVO.TriggerSetting.FormTriggerSetting> settings = JsonUtils.parseObject(param, new TypeReference<>() {});
|
||||||
|
if (CollUtil.isEmpty(settings)) {
|
||||||
|
log.error("[execute][流程({}) 删除流程表单数据触发器配置为空]", processInstanceId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.获取流程变量
|
||||||
|
Map<String, Object> processVariables = processInstanceService.getProcessInstance(processInstanceId).getProcessVariables();
|
||||||
|
|
||||||
|
// 3.获取需要删除的表单字段
|
||||||
|
Set<String> deleteFields = new HashSet<>();
|
||||||
|
settings.forEach(setting -> {
|
||||||
|
if (CollUtil.isEmpty(setting.getDeleteFields())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 配置了条件,判断条件是否满足
|
||||||
|
boolean isFieldDeletedNeeded = true;
|
||||||
|
if (setting.getConditionType() != null) {
|
||||||
|
String conditionExpression = SimpleModelUtils.buildConditionExpression(
|
||||||
|
setting.getConditionType(), setting.getConditionExpression(), setting.getConditionGroups());
|
||||||
|
isFieldDeletedNeeded = BpmnModelUtils.evalConditionExpress(processVariables, conditionExpression);
|
||||||
|
}
|
||||||
|
if (isFieldDeletedNeeded) {
|
||||||
|
deleteFields.addAll(setting.getDeleteFields());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 4. 删除流程变量
|
||||||
|
if (CollUtil.isNotEmpty(deleteFields)) {
|
||||||
|
processInstanceService.removeProcessInstanceVariables(processInstanceId, deleteFields);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue