您的位置 首页 java

java工作流_Java 实现简单工作流

工作流主要运用到反射机制

创建一张工作流表

如:主键 | 工作流 Code | 工作流内容

其中工作流,内容为 Json 格式

工作流内容如下

{

“procCode”: “OPS”,

“procName”: “c端补齐(乘客信息补全)”,

“taskControlVoList”: [

{

“sortNo”: “10”,

“taskCode”: “OPC”,

“taskName”: “检查对应的订单信息是否存在”,

“tasklassName”: “com.xf.flow.service.impl.OrderPeople10ServImpl”

},

{

“sortNo”: “20”,

“taskCode”: “OPD”,

“taskName”: “乘客数据库落库”,

“tasklassName”: “com.xf.flow.service.impl.OrderPeople20ServImpl”

},

{

“sortNo”: “90”,

“taskCode”: “RSP”,

“taskName”: “响应消息”,

“tasklassName”: “com.xf.flow.service.impl.ApiResponseServImpl”

}

]

}

3.java代码现根据工作流的Code 获取当前的工作流

4.jsonStr ————>JsonObject————>获取taskControlVoList

5. java 的工作流代码

@Override

public ApiResponse deal(String itemNo, Object objVo, String skey, InnerVo innerVo) {

ApiResponse apiResponse = new ApiResponse();

//查询itemNo获取流程实例

ProcControlVo procControlVo = codeLibraryDao.queryProcConfig(itemNo);

if (procControlVo == null) {

return new ApiResponse(ResponseCodeEnums.stream_no_exist);

}

List taskControlVoList = procControlVo.getTaskControlVoList();

taskControlVoList.sort((TaskControlVo h1, TaskControlVo h2) -> h1.getSortNo().compareTo(h2.getSortNo()));

iterator itTask = taskControlVoList.iterator();

//初始化内部数据表

String dataNo = taskManagerServ.initData(itemNo,skey,innerVo);

//循环依次执行流程任务

String taskNo = null;

while (itTask.hasNext()){

TaskControlVo taskControlVo = itTask.next();

String taskClassName = taskControlVo.getTasklassName();

String taskItemNo = taskControlVo.getTaskCode();

String taskName = taskControlVo.getTaskName();

try {

//初始化任务

taskNo = taskManagerServ.initTask(taskItemNo,dataNo,innerVo);

//执行任务

TaskServ taskServ = (TaskServ) SpringFactory.getBean(Class.forName(taskClassName));

taskServ.init(taskNo,objVo);

TaskAnswerVo taskAnwserVo = taskServ.deal(taskNo,objVo);

//判断任务执行结果

apiResponse = taskAnwserVo.getApiResponse();

if(StringUtils.equals(ResponseCodeEnums.success.getStatus(),apiResponse.getStatus())) {

//完成任务

logger.info(“==========>>>>> task execute success !!! taskCode={}, taskName={}, status={}, msg ={}, nextTask={}”,

taskItemNo,taskName,apiResponse.getStatus(),apiResponse.getMessage(),taskAnwserVo.isNextTask());

taskManagerServ.finTask(taskNo, apiResponse.getMessage());

}else {

//异常任务

logger.info(“==========>>>>> task execute error !!! taskCode={}, taskName={}, status={}, msg={}, nextTask={}”,

taskItemNo,taskName,apiResponse.getStatus(),apiResponse.getMessage(),taskAnwserVo.isNextTask());

taskManagerServ.errTask(taskNo, apiResponse.getMessage());

}

//判断流程是否继续

if (!taskAnwserVo.isNextTask()){

break;

}

} catch ( Exception e) {

//异常任务

String errorMsg = getStackTrace(e);

taskManagerServ.errTask(taskNo, errorMsg);

logger.error(“==========>>>>> Execute Task Error!!! skey={}, taskControlVo={}, errorMsg={}”,skey,taskControlVo,errorMsg);

//响应异常

return new ApiResponse(ResponseCodeEnums.flow_error);

}

}

if(StringUtils.equals(ResponseCodeEnums.success.getStatus(),apiResponse.getStatus())) {

//归档完成流程

taskManagerServ.finData(dataNo);

}

return apiResponse;

}

image.png

SpringFactory实现类

/**

* Created by

*/

@Component

public class SpringFactory implements ApplicationContextAware {

private static ApplicationContext applicationContext;

@Override

public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

if( Spring Factory.applicationContext == null) {

SpringFactory.applicationContext = applicationContext;

}

}

//获取applicationContext

public static ApplicationContext getApplicationContext() {

return applicationContext;

}

//通过name获取 Bean .

public static Object getBean(String name){

return getApplicationContext().getBean(name);

}

//通过class获取Bean.

public static T getBean(Class clazz){

return getApplicationContext().getBean(clazz);

}

//通过name,以及Clazz返回指定的Bean

public static T getBean(String name,Class clazz){

return getApplicationContext().getBean(name, clazz);

}

}

文章来源:智云一二三科技

文章标题:java工作流_Java 实现简单工作流

文章地址:https://www.zhihuclub.com/183052.shtml

关于作者: 智云科技

热门文章

网站地图