前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java工作流_Java 实现简单工作流

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

作者头像
全栈程序员站长
发布2022-09-08 11:42:15
1.5K0
发布2022-09-08 11:42:15
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

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

创建一张工作流表

如:主键 | 工作流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(SpringFactory.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);

}

}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156591.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档