基于jeecgboot-vue3的Flowable流程支持bpmn流程设计器与仿钉钉流程设计器-编辑多版本处理

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

1、前端编辑带有仿钉钉流程的处理

javascript 复制代码
/** 编辑流程设计弹窗页面 */
  const handleLoadXml = (row) => {
    console.log("handleLoadXml row",row)
    const params = {
      flowKey: row.key,
      version: row.version
    } 
    queryByKeyAndVersion(params).then(res => {
      console.log("queryByKeyAndVersion res",res)
      if (res.code === 200 && res.result.hasOwnProperty("id")) {
        ddDesignerData.id = res.result.flowKey
        ddDesignerData.name = res.result.name
        flowJsonData.value = JSON.parse(res.result.flowJson)
        flowJsonData.value.category = row.category
        flowJsonData.value.appType = row.appType
        ddDesignerData.version = res.result.version
        designerData.form.processType.push({id: row.category,appType: row.appType})
        ddDesignerOpen.value = true
      }
      else {
        designerData.title = "流程设计 - " + row.name;
        designerData.deploymentId = row.deploymentId;
        designerData.form = {
          processType: [],
          processName: row.name,
          processKey: row.key
        }
        if (row &&row.deploymentId) {
          const selectItem = categorys.value.find(item => item.id == row.category);
          modelForm.processType = selectItem; //以便编辑保存的时候获取到processType
          designerData.form.processType.push(selectItem);
          designerData.loading = true;
          console.log("designerData",designerData)
          handleReadImage(row.deploymentId);
          designerData.title = "编辑流程图";  
        }
        xmlFrame.width = '90%'
      }
    })  
  }

2、后端检查是否有相应的仿钉钉flowKey和版本号相同的仿钉钉数据

java 复制代码
<mapper namespace="org.jeecg.modules.flowable.FlowDd.mapper.FlowDdMapper">

  <select id="selectByKeyAndVersion" resultType="org.jeecg.modules.flowable.FlowDd.entity.FlowDd">
        select * from flow_dd
        where flow_key= #{flowKey} and version = #{version} limit 1
    </select>
</mapper>

3、前端编辑后保存

javascript 复制代码
const ddSave = (data: any) => {
    console.log("ddSave data",data)
    saveXmlJson(data).then(res => {
      if(res.code === 200) {
        createMessage.success(res.message);
        ddDesignerData.loading = false;
        ddDesignerOpen.value = false;
        getList();
      }  
    })
  }  

其中前端数据如下:

javascript 复制代码
const save = () => {
  const processModel = {
    code: pCode.value,
    name: pName.value,
    icon: {
      name: 'el:HomeFilled',
      color: '#409EFF'
    },
    process: props.process,
    flowJson: JSON.stringify(props.process),
    category: props.processType[0].id,
    appType: props.processType[0].appType,
    enable: true,
    version: props.version,
    sort: 0,
    groupId: '',
    remark: ''
  }
  emit('save', processModel);
}

4、后端保存跟原来差不多

java 复制代码
@Override
	@Transactional(rollbackFor = Exception.class)
	public Result saveDdModel(ProcessModel processModel) {
		try {
			FlowSaveXmlVo vo = new FlowSaveXmlVo();
	        BpmnModel bpmnModel = processModel.toBpmnModel();
	        FlowDd flowDd = new FlowDd();
	        flowDd.setId(processModel.getId());
	        flowDd.setName(processModel.getName());
	        flowDd.setFlowKey(processModel.getCode());
	        flowDd.setVersion(processModel.getVersion()+1);
	        //String flowJson = JSON.toJSONString(processModel);//有问题,会转换成大写的问题
	        String flowJson = processModel.getFlowJson();
	        flowDd.setFlowJson(flowJson);
	        flowDdService.save(flowDd);
	        String xml = new String(new BpmnXMLConverter().convertToXML(bpmnModel));
	        vo.setAppType(processModel.getAppType());
	        vo.setCategory(processModel.getCategory());
	        vo.setXml(xml);
	        vo.setDesignerType("DingDing");
	        return this.saveXmlMode(vo);
    	} catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("创建失败: e=" + e.getMessage());
        }
	}

5、效果图

上面是v2版本了,对应bpmn图

编辑仿钉钉界面

仿钉钉保存后数据

相关推荐
向宇it11 分钟前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
小蜗牛慢慢爬行13 分钟前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
星河梦瑾1 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富1 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想1 小时前
JMeter 使用详解
java·jmeter
言、雲1 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
TT哇1 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
Yvemil72 小时前
《开启微服务之旅:Spring Boot 从入门到实践》(三)
java
Anna。。2 小时前
Java入门2-idea 第五章:IO流(java.io包中)
java·开发语言·intellij-idea
.生产的驴2 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven