基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-抄送服务处理

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。

1、因为仿钉钉设计器里抄送人是一个服务任务,所以要根据这个服务任务进行处理

2、前端就是一个抄送,选择人

3、这里用了jeecg的选择人组件

javascript 复制代码
<el-form-item prop="users" label="指定人员" v-if="activeData.assigneeType === 'user'">
      <div style="width:100%">
        <j-select-user-by-dept 
          :zIndex="3000"
          v-model:value="activeData.users" 
          :multi="true" 
          :placeholder="`请选择${type}人`"
          @getSelectResult="handleSelectUsers">
        </j-select-user-by-dept>
      </div>
    
    </el-form-item>

4、后端对这个处理如下:

java 复制代码
public class CcNode extends AssigneeNode {
    // 表单属性
    private List<FormProperty> formProperties = new ArrayList<>();
    // 操作权限
    private Map<String, Boolean> operations = new LinkedHashMap<>();

    @Override
    public List<FlowElement> convert() {
        ArrayList<FlowElement> elements = new ArrayList<>();
        // 服务节点
        ServiceTask serviceTask = new ServiceTask();
        serviceTask.setId(this.getId());
        serviceTask.setName(this.getName());
        // serviceTask.setAsynchronous(true);
        serviceTask.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_CLASS);
        serviceTask.setImplementation("org.jeecg.modules.flowable.ServiceTask.ccDelegate");
        //增加扩展属性 add by nbacheng
        Map<String, List<ExtensionElement>> extensionElements = new HashMap<String, List<ExtensionElement>>();
        ExtensionElement extensionElementTotal = new ExtensionElement();
        extensionElementTotal.setName("flowable:properties"); 
        ExtensionElement extensionElement = new ExtensionElement();
        extensionElement.setName("flowable:property");
        ExtensionAttribute extensionAttributeName = new ExtensionAttribute();
        extensionAttributeName.setName("name");
        extensionAttributeName.setValue("ccUserList");
        extensionElement.addAttribute(extensionAttributeName);
        ExtensionAttribute extensionAttributeValue = new ExtensionAttribute();
        extensionAttributeValue.setName("value");
        extensionAttributeValue.setValue(StringUtils.join(this.getUsers(), ","));
        extensionElement.addAttribute(extensionAttributeValue);
        extensionElementTotal.addChildElement(extensionElement);
        extensionElements.put("ccUserList", CollUtil.newArrayList(extensionElementTotal));
        serviceTask.setExtensionElements(extensionElements);
        elements.add(serviceTask);
        // 下一个节点的连线
        Node child = this.getChild();
        SequenceFlow sequenceFlow = this.buildSequence(child);
        elements.add(sequenceFlow);
        // 下一个节点
        if (Objects.nonNull(child)) {
            child.setBranchId(this.getBranchId());
            List<FlowElement> flowElements = child.convert();
            elements.addAll(flowElements);
        }
        return elements;
    }

}

4、实际的效果图与xml

相关推荐
第二只羽毛7 分钟前
重载和继承的实践
java·开发语言
王嘉俊92512 分钟前
设计模式--适配器模式:优雅解决接口不兼容问题
java·设计模式·适配器模式
王嘉俊92513 分钟前
设计模式--组合模式:统一处理树形结构的优雅设计
java·设计模式·组合模式
道199320 分钟前
50 台小型无人车与50套穿戴终端 5 公里范围内通信组网方案深度研究
java·后端·struts
迎風吹頭髮26 分钟前
UNIX下C语言编程与实践35-UNIX 守护进程编写:后台执行、脱离终端、清除掩码与信号处理
java·c语言·unix
光军oi42 分钟前
全栈开发杂谈————JAVA微服务全套技术栈详解
java·开发语言·微服务
帮帮志42 分钟前
目录【系列文章目录】-(关于帮帮志,关于作者)
java·开发语言·python·链表·交互
聪明的笨猪猪43 分钟前
Java Spring “MVC ”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
Boop_wu2 小时前
[数据结构] Map和Set
java·数据结构·算法
一勺菠萝丶2 小时前
Mac 上用 Homebrew 安装 JDK 8(适配 zsh 终端)完整教程
java·python·macos