上一篇文章《实战项目之使用LiteFlow编写一个流程引擎(四)》我们已经把积木搭建好了,接下来我们就组合规则即可,按照之前的流程图,我们来组装下规则,
首先在项目的resources目录下创建一个文件夹,名称为config,再创建一个flow.el.xml的文件
flow.el.xml文件里面的内容如下:
<?xml version="1.0" encoding="UTF-8"?> <flow> <chain name="admiss"> IF(useragefunction, IF(preregistrationfunction, THEN(freshgraduatefunction,freshgraduatebillrulefunction,freshgraduatebillfunction,admissionsuccessfunction) ,THEN(returnstudentfunction,returnstudentbillrulefunction,returnstudentbillfunction,admissionsuccessfunction) ) ,admissionfailfunction); </chain> </flow>
备注:
1、这里的IF,THEN等都是LiteFlow的规则引擎语法,详情建议参考官网----《LiteFlow官网文档》
2、这里出现THEN的时候,代表的是这些积木就挨个按顺序执行。详情参考官网文档。
规则编写完毕之后,我们再完善下对应的接口,也就是刚才创建的StudentController,此时完善后的代码如下:
package com.school.admission.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.school.admission.context.AdmissionContext; import com.school.admission.model.AdmissionResult; import com.school.admission.model.BaseResponse; import com.school.admission.model.StudentPoJO; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.flow.LiteflowResponse; @RestController public class StudentController { @Autowired private FlowExecutor flowExecutor; @RequestMapping("/admiss") public BaseResponse admission(@RequestBody @Validated StudentPoJO student) { LiteflowResponse response = flowExecutor.execute2Resp("admiss", student, AdmissionContext.class); AdmissionResult result = response.getContextBean(AdmissionContext.class).getResult(); return BaseResponse.success(result); } }
这里使用起来就比较简单,在execute2Resp方法里面,第一个参数是流程引擎的id,也就是配置文件里面配置的chain-name,第二个参数可以看作是requestData,也就是我们需要使某个方法生效,那么我们需要向这个方法传递的动态参数。第三个参数是定义的一个类,这个类的主要作用是在整个流程引擎里面承接上下文的数据传递及最后的responseData使用。
到这里我们整个代码就写完了,完整的代码也提供给大家,登录后即可看到下载地址。
还没有评论,来说两句吧...