5.2 开发过程详解
5.2.1 数据结构介绍
业务表: 报案信息表 调度信息表 查勘信息表 定损信息表 立案信息表 结案信息表
报案信息表:prplregist id registNO reportDate reportorName damageDate damageAddress
标识列 报案号 报案日期 报案人姓名 出险日期 出险区域 Prplregist Prplcasedispatch prplcheck prpldefloss prplclaim prplclaim
调度信息表: prplcasedispatch id registNo
查勘信息表:prplcheck id registNo checkType damageDate lossType damageAddress reportorName
定损信息表:prpldefloss id policyNo registNo sendDate deflossDate
标识列 报案号 标识列 报案号 查勘类别 出险日期 损失类型 出险区域 报案人姓名 标识列 保单号 报案号 发送日期 定损日期
立案信息表:prplclaim id registNo clainNo
结案信息表:prplendcase id endcaseNo endcaseDate sumPaid
中间表 prplbpmmain Id Processid Taskid curNodeName mainNo 标识列,主键 当前的流程号 当前的任务号 当前所处的节点名称 报案号 标识列 结案号 结案日期 总赔付金额 标识列 报案号 立案号 注:实际开发过程中,视实际需求在增减业务表或者增减业务表中的字段。
5.2.2 JBPM引擎类主要方法介绍
由于开发的设计思想是通过用户的前台输入报案号等主要信息,通过action层传到service层再传到JBPMEngine类中,所以在开发过程中程序开发人员在传递好用户输入的参数以外只需关注如何调用JBPM引擎类的相关方法即可,下面就结合流程的流转逐一介绍引擎类方法。
5.2.2.1 报案环节
用户输入报案号后,通过调用JBPMEngine的startWorkFlowByDefinitionName方法启
动预先设计好的流程模板,开启流程。此方法要求传入三个参数,分别是模板名称、用户代码和一个标志位。下面是方法体:
public BpmTask startWorkFlowByDefinitionName(final String definitionName,final String usercode,final boolean flag){ return (BpmTask)jbpmTemplate.execute(new JbpmCallback(){ public BpmTask doInJbpm(JbpmContext context) { ProcessDefinition ProcessInstance processInstance=new definition=getDefinitionByName(definitionName); ProcessInstance(definition); Token token = processInstance.getRootToken(); token.signal(); List
if (flag){ nexttaskInstance.start(); } context.save(processInstance); return createWorkflowTask(null, nexttaskInstance,null); } } }); 在开启流程的同时调用该类的createWorkflowTask方法用户保存当前的流程相关信息,例
如流程id,当前的任务id以及任务名称等,保存在BPMTask对象中返回给调用者(BPMTask也是一个中间表实体类,在arch4框架中封装),然后调用该方法的service类在获取到返回的BPMTask对象,取出必要的信息存在中间表实体对象中保存在数据库中,以便为下一环节使用这些信息做好准备。
5.2.2.2 调度环节
调度环节是一个比较特殊的环节,因为它不光要处理好和报案环节类似的调度环节的相关事务,还有一个任务就是开启子流程,也就是触发第二个模板的开启。此处调度环节的service调用的是JBPMEngine的startSubProcessByTaskId方法,此方法需要传递四个参数,分
别是当前的任务号、子模板的名称、用户代码以及一个标志位。下面是该方法的方法体: public BpmTask startSubProcessByTaskId(final String taskId,final String definitionName,final String usercode,final Boolean flag){ return (BpmTask)jbpmTemplate.execute(new JbpmCallback(){ public BpmTask doInJbpm(JbpmContext context){ System.out.println(\ + taskId); TaskInstance ProcessInstance Long taskInstance=context.loadTaskInstance(new Long(taskId)); processInstance=taskInstance.getToken().getProcessInstance(); parentId=(Long)processInstance.getContextInstance().getVariable(\ntId\);
ProcessDefinition