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

java工作流_Java 实现简单工作流工作流主要运用到反射机制创建一张工作流表如:主键|工作流Code|工作流内容其中工作流,内容为Json格式工作流内容如下{“procCode”:”OPS”,”procName”:”c端补齐(乘客信息补全)”,”taskControlVoList”:[{“sortNo”:”10″,”taskCode”:”OPC”,”taskName”:”检查对应的订单信息是否存在”,”taskl…

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

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

创建一张工作流表

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

}

a61bdc490364

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.net/156591.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何查看centos版本信息_怎么查看ie浏览器的版本

    如何查看centos版本信息_怎么查看ie浏览器的版本详细讲解查看CentOS版本信息的命令。   (一)查看已经安装的CentOS版本信息   1.cat/etc/issue查看版本  cat 缩写concatenate cat命令可以用来显示、合并文件。  CentOSrelease6.6(Final)  CentOS发行版6.6    etc 初期etc的英文名…

    2022年4月19日
  • 如何解决高并发,秒杀问题[通俗易懂]

    如何解决高并发,秒杀问题[通俗易懂]相信不少人会被这个问题困扰,分享大家一篇这样的文章,希望能够帮到你!一、秒杀业务为什么难做?1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息);2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据;3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如:小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万…

    2022年5月31日
  • vue时间日期格式化

    vue时间日期格式化//对Date的扩展,将Date转化为指定格式的String//例子://(newDate()).Format("yyyy-MM-ddhh:mm:ss.S")==>2006-07-0208:09:04.423//(newDate()).Format("yyyy-M-dh:m:s…

    2022年5月23日
  • Spring+Spring MVC+MyBatis_java的图书管理系统

    Spring+Spring MVC+MyBatis_java的图书管理系统资源下载:https://download.csdn.net/download/weixin_44893902/35123371练习点设计:添加、删除、修改一、语言和环境实现语言:JAVA语言。环境要求:MyEclipse/Eclipse+Tomcat+MySql。使用技术:Jsp+Servlet+JavaBean或SpringMVC+Spring+Mybatis。二、实现功能为了方便学校对图书进行管理,开发一套BS结构的图书信息管理系统,主要功能如下:首页默认.

    2022年9月26日
  • hashmap和hashtable的区别,说法错误的是_javamap的用法

    hashmap和hashtable的区别,说法错误的是_javamap的用法HashMap和Hashtable的区别一、HashMap简介HashMap是在JDK1.2中引入的Map的实现类。1.HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。2.HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurren…

    2022年9月18日
  • STM32 的优先级NVIC配置

    STM32 的优先级NVIC配置1、NVIC优先级介绍2、NVIC优先级比较提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱):*强调内容***NVIC_PriorityGroup_0>NVIC_PriorityGroup_1>NVIC_PriorityGroup_2>NVIC_PriorityGroup_3>NVIC_PriorityGroup_4前提条件2:“组”优先级别>“抢”占优先级别>“副”优先级别前提

    2022年5月20日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号