工作流主要适用于反射机制
创建工作流表
例如,主键|工作流代码|工作流内容
其中,内容为Json格式
工作流的内容如下
{
' procCode': 'OPS ',
' procName': 'c端补(乘客信息补全) )、
' taskControlVoList': [
{
' sortNo': '10 ',
'任务代码' : ' Opc ',
“taskName':”检查是否存在相应的订单信息,
' tasklassname ' : ' com.xf.flow.service.impl.order people 10 serv impl '
(,
{
' sortNo': '20 ',
'任务代码' : ' OPD ',
“taskname”:“乘客数据库库存减少”,
' tasklassname ' : ' com.xf.flow.service.impl.order people 20 serv impl '
(,
{
' sortNo': '90 ',
'任务代码' : ' RSP ',
' taskName': '响应消息',
' tasklassname ' : ' com.xf.flow.service.impl.apiresponseservimpl '
}
]
}
3.java代码现在从工作流代码中检索当前工作流
4 .获取JSON str ——3354 JSON对象——3354 taskcontrolvolist
5.java工作流代码
@Override
publicapiresponsedeal (string item no,Object objVo,String skey,InnerVo innerVo ) {
apiresponseapiresponse=newapiresponse (;
查询itemNo捕获进程的示例
proccontrolvoproccontrolvo=codelibrarydao.queryprocconfig (item no );
if(proccontrolvo==null ) {
returnnewapiresponse (responsecodeenums.stream _ no _ exist );
}
listtaskcontrolvolist=proccontrolvo.gettaskcontrolvolist (;
taskcontrolvolist.sort () TaskControlVo h2,TaskControlVo h2 )- h1.getSortNo ).comPareto )- h1.getSortNo ) );
iteratorittask=taskcontrolvolist.iterator (
//初始化内部数据表
string data no=taskmanagerserv.initdata (item no,skey,innerVo );
//循环地依次执行流程任务
String taskNo=null;
wile(ittask.Hasnext () ) )。
taskcontrolvotaskcontrolvo=it task.next (;
stringtaskclassname=taskcontrolvo.gettasklassname (;
stringtaskitemno=taskcontrolvo.gettaskcode (;
string taskname=taskcontrolvo.get taskname (;
try {
//初始化任务
taskno=taskmanagerserv.init task (task item no,dataNo,innerVo );
//执行任务
taskservtaskserv=(taskserv ) springfactory.getbean ) class.forname (task class name );
taskserv.init(taskno,objVo );
taskanswervotaskanwservo=task serv.deal (taskno,objVo );
//判断任务的执行结果
API response=taskanwservo.getapiresponse (;
if (string utils.equals (responsecodeenums.success.get status (,apiResponse.getStatus ) ) )
//完成任务
logger.info ('=============taskexecutesuccess! taskCode={},taskName={},status={},msg={},nextTask={} ',
taskItemNo,taskName,apiResponse.getStatus (,apiResponse.getMessage ),taskAnwserVo.isNextTask );
taskmanagerserv.fintask(taskno,apiResponse.getMessage ) );
}else {
//异常任务
logger.info ('=============taskexecuteerror! taskCode={},taskName={},status={},msg={},nextTask={} ',
taskItemNo,taskName,apiResponse.getStatus (,apiResponse.getMessage ),taskAnwserVo.isNextTask );
taskmanagerserv.errtask(taskno,apiResponse.getMessage ) );
}
//判断流程是否继续
if (! taskAnwserVo.isNextTask (
布雷克;
}
}catch(exceptione ) {
//异常任务
字符串错误msg=getstack trace (e;
taskmanagerserv.errtask(taskno,errorMsg );
logger.error ('================executetaskerror! skey={},taskControlVo={},errorMsg={} ',skey,taskControlVo,errorMsg;
//响应异常
returnnewapiresponse (responsecodeenums.flow _ error;
}
}
if (string utils.equals (responsecodeenums.success.get status (,apiResponse.getStatus ) ) )
//归档完成过程
taskmanagerserv.findata(datano );
}
返回API响应;
}
image.png
SpringFactory实现类
//*
* Created by
*/
@Component
publicclassspringfactoryimplementsapplicationcontextaware {
私有应用程序上下文;
@Override
publicvoidsetapplicationcontext (应用程序上下文应用程序上下文) throws BeansException {
if (spring factory.application context==null )
spring factory.application context=application context;
}
}
获取//APP上下文
publicstaticapplicationcontextgetapplicationcontext (
返回应用程序上下文;
}
用name获取Bean。
publicstaticobjectgetbean (字符串名称) {
返回获取上下文().getbean ) name;
}
在类中获取Bean。
publicstatictgetbean (类分类) {
返回getapplicationcontext ().getbean ) clazz;
}
返回name和Clazz指定的Bean
publicstatictgetbean (字符串名称,Class clazz ) {
返回getapplicationcontext ().getbean ) name,clazz );
}
}