mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	工作流 Flowable 任务自定义 Script 脚本 相关实现
This commit is contained in:
		@@ -1,7 +1,14 @@
 | 
			
		||||
package cn.iocoder.yudao.framework.flowable.core.util;
 | 
			
		||||
 | 
			
		||||
import org.flowable.bpmn.converter.BpmnXMLConverter;
 | 
			
		||||
import org.flowable.bpmn.model.BpmnModel;
 | 
			
		||||
import org.flowable.bpmn.model.FlowElement;
 | 
			
		||||
import org.flowable.common.engine.impl.identity.Authentication;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
public class FlowableUtils {
 | 
			
		||||
 | 
			
		||||
    public static void setAuthenticatedUserId(Long userId) {
 | 
			
		||||
@@ -11,4 +18,45 @@ public class FlowableUtils {
 | 
			
		||||
    public static void clearAuthenticatedUserId() {
 | 
			
		||||
        Authentication.setAuthenticatedUserId(null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得 BPMN 流程中,指定的元素们
 | 
			
		||||
     *
 | 
			
		||||
     * @param model
 | 
			
		||||
     * @param clazz 指定元素。例如说,{@link org.flowable.bpmn.model.UserTask}、{@link org.flowable.bpmn.model.Gateway} 等等
 | 
			
		||||
     * @return 元素们
 | 
			
		||||
     */
 | 
			
		||||
    public static <T extends FlowElement> List<T> getBpmnModelElements(BpmnModel model, Class<T> clazz) {
 | 
			
		||||
        List<T> result = new ArrayList<>();
 | 
			
		||||
        model.getProcesses().forEach(process -> {
 | 
			
		||||
            process.getFlowElements().forEach(flowElement -> {
 | 
			
		||||
                if (flowElement.getClass().isAssignableFrom(clazz)) {
 | 
			
		||||
                    result.add((T) flowElement);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 比较 两个bpmnModel 是否相同
 | 
			
		||||
     * @param oldModel  老的bpmn model
 | 
			
		||||
     * @param newModel 新的bpmn model
 | 
			
		||||
     */
 | 
			
		||||
    public static boolean equals(BpmnModel oldModel, BpmnModel newModel) {
 | 
			
		||||
        // 由于 BpmnModel 未提供 equals 方法,所以只能转成字节数组,进行比较
 | 
			
		||||
        return Arrays.equals(getBpmnBytes(oldModel), getBpmnBytes(newModel));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 把 bpmnModel 转换成 byte[]
 | 
			
		||||
     * @param model  bpmnModel
 | 
			
		||||
     */
 | 
			
		||||
    public  static byte[] getBpmnBytes(BpmnModel model) {
 | 
			
		||||
        if (model == null) {
 | 
			
		||||
            return new byte[0];
 | 
			
		||||
        }
 | 
			
		||||
        BpmnXMLConverter converter = new BpmnXMLConverter();
 | 
			
		||||
        return converter.convertToXML(model);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user