流程结合业务数据

业务流程结合工作流



先执行自己业务系统的业务流程,比如说数据导入、查询等,之后再提交给工作流引擎,去执行工作流审批。

因为公司使用的是宏天的框架,所以本文的所有流程都基于宏天流程来进行。


一、业务流程

本文只是一个示例,基于公司的业务拿来做演示。

可以看到有①②③④四个步骤。
简单说一下业务流程,选择一项资金,根据模板导入数据到数据库,经过各种校验之后,在第三步的时候将处理好的数据提交给流程引擎。
在这里插入图片描述

二、具体方法

因为业务数据要提交给流程引擎,肯定是需要载体来承接业务数据,所以肯定需要表单。
表单的创建步骤:建模->表单->绑定流程
建模
在这里插入图片描述
创建表单
在这里插入图片描述
绑定流程
在这里插入图片描述

实现思路:手动启动流程,将业务数据写入到表单表.

处理数据,因为宏天启动流程的时候需要将模之间的关系进行绑定,再用base64进行编码,并且需要注意表字段的大小写和建模、表单的字段大小写是否一致。

private StartFlowParamObject getStartFlowParamObject(TbBpmDefinition bpmDefinition, MsjxFormMain msjxFormMain, List<MsjxFormSubObj> msjxFormSubObjList, MsjxFormSubSupport msjxFormSubSupport) {
		// 设置流程信息
        StartFlowParamObject startFlowParamObject = new StartFlowParamObject();
        startFlowParamObject.setDefId(xxx);
        startFlowParamObject.setTbDefId(xxx);
        startFlowParamObject.setProcessType(xxx);
        startFlowParamObject.setFormType("inner");
        startFlowParamObject.setSupportMobile(0);
        // 将实体类转为map
        Map<String, Object> msjx = BeanUtil.beanToMap(xxx, true, true);
        List<Map<String, Object>> subMsjhmdbdzb = new ArrayList<>();
        List<Map<String, Object>> subMsjhfczjxxbdzb = new ArrayList<>();
        msjxFormSubObjList.forEach(xxx-> {
            Map<String, Object> toMap = BeanUtil.beanToMap(xxx, true, true);
            // 表单的key 需要换成自己定义的
            表单key.add(transformUpperCase(toMap));
        });
        Map<String, Object> toMap = BeanUtil.beanToMap(xxx, true, true);
        subMsjhfczjxxbdzb.add(transformUpperCase(toMap));
        Map<String, Object> dataMap = new HashMap<>();
        // 时间处理
        Map<String, Object> msjx2Upper = transformUpperCase(msjx);
        msjx2Upper.put(xxx, 表单key);
        msjx2Upper.put(xxx, 子表单key);
        dataMap.put(xxx, msjx2Upper);
        String dataJson = JSONUtil.toJsonStr(dataMap);
        // 转为base64编码
        String encode = cn.hutool.core.codec.Base64.encode(dataJson);
        startFlowParamObject.setData(encode);
        return startFlowParamObject;
    }

处理好表单数据之后,调用宏天框架的保存草稿方法

StartResult startResult = iProcessService.saveDraft(startFlowParamObject);

用户提交审核的时候再调用启动流程的方法(可能是新启动的流程、也可能是退回、撤回的流程)

 // 草稿则启动流程 、 退回撤回则完成任务
            if ("draft".equals(status)) {
                DefaultProcessInstCmd cmd = new DefaultProcessInstCmd();
                cmd.setFlowKey(bpmDefinition.getDefKey());
                cmd.setDataMode(ActionCmd.DATA_MODE_BO);
                cmd.setActionName("startFlow");
                cmd.setInstId(instId);
                processInstanceService.startProcessInst(cmd);
            } else {
                // 获取任务id
                List<String> taskList = bpmProcessInstanceManager.getBpmTaskIdByInstId(instId);
                if (CollUtil.isEmpty(taskList)) {
                    return new CommonResult(false, "任务id不存在!");
                }
                DoNextParamObject doNextParamObject = new DoNextParamObject();
                doNextParamObject.setReviewDate(DateUtil.today());
                doNextParamObject.setFormKey(表单key);
                doNextParamObject.setAccount(baseContext.getCurrentUserAccout());
                doNextParamObject.setTaskId(taskList.get(0));
                doNextParamObject.setActionName("agree");
                doNextParamObject.setOpinion("重新提交");
                //doNextParamObject.setData();
                doNextParamObject.setFormType("inner");
                doNextParamObject.setAgentLeaderId("0");
                CommonResult<String> commonResult = iFlowService.complete(doNextParamObject).get();
                if (!commonResult.getState()) {
                    return new CommonResult<>(false, "流程启动失败:" + commonResult.getMessage(), "");
                }
            }

上面这种方法只能适用数据量比较小的,如果数据量比较需要,自己根据流程和表单的关联关系,自己批量写入来实现。

总结

本文比较适合有点流程基础查阅,写的不好请见谅。
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值