java工作流的优点是什么?怎么优雅地实现它?

BSO 2020-08-26 14:53:31 java常见问答 5642

在我们日常的使用之中,java工作流的应用也是非常重要的。那我们为什么要运用java工作流呢?接下来为大家介绍一下java工作流的优点,以及怎么优雅地实现它。

首先,说一下工作流系统的优点。它有效地实现了工作流程的自动化,大大提高了企业运营效率,并且在一定程度上改善了企业资源的利用,同时提高了企业运作的灵活性和适应性。对于提高量化考核业务处理的效率、减少浪费(时间就是金钱)也作出了巨大的贡献。

相对于手工处理工作流程,一方面由于手工无法对整个流程状况进行有效跟踪、了解,另一方面难免会出现人为的失误和时间上的延时导致效率低下,特别是无法进行量化统计,不利于查询、报表及绩效评估。由此可见,java工作流的优点十分明显,使用程度极高。

下面为大家展示如何优雅地实现java工作流。

首先,我们需要知道的是Apache Commons Chain 中的角色有:chain、context、command。

java工作流的优点

一般情况下,假如在我们订单系统有这样的业务,就是退票的时候,会根据核损后的订单价格,给客人退钱,但是订单的金额,由几部分组成。它包括现金、商旅卡、有优惠券。所以根据需求,我们需要一个工作流来走下退款流程,那么我们的流程流转的步骤就是这样的:

先退商旅卡-----如果还有余额退现金-----还有余额再退优惠券,通过分析这样的需求,适合直接使用工具。下面是代码展示:

先引入包

<dependency>
            <groupId>commons-chain</groupId>
            <artifactId>commons-chain</artifactId>
            <version>1.2</version>
        </dependency>

编写command

/**
 * 退商旅卡Cash
 
 */
@Slf4j
public class RefundBusinessCardCommand implements Command
{
    public boolean execute(Context context) throws Exception
    {
        RefundContext refundContext = (RefundContext) context;
        log.info("orderId:{} 退款开始,第一步:退商旅卡,金额:{}", refundContext.getOrderId(), "10");
        return false;
    }
}
/**
 * 退现金

 */
@Slf4j
public class RefundCashCommand implements Command
{
    public boolean execute(Context context) throws Exception
    {
        RefundContext refundContext = (RefundContext) context;
        log.info("orderId:{}退款开始,第二步:退现金,金额:{}", refundContext.getOrderId(), "5");
        return false;
    }
}
/**
 * 退优惠券
 
 */
@Slf4j
public class RefundPromotionCommand implements Command
{
    public boolean execute(Context context) throws Exception
    {
        RefundContext refundContext = (RefundContext) context;
        log.info("orderId:{} 退款开始,第二步:退优惠券,金额:{}", refundContext.getOrderId(), "20");
        return false;
    }
}
 
     /
 @Data
 public class RefundContext extends ContextBase
 {
     /**
      * 订单号
      */
     private Integer orderId;
 }
/**
 *
 * 退票的工作流实现
 */
public class RefundTicketChain extends ChainBase
{
    public void init()
    {
        //退商旅卡
        this.addCommand(new RefundBusinessCardCommand());
        //退现金
        this.addCommand(new RefundCashCommand());
        //退优惠券
        this.addCommand(new RefundPromotionCommand());
    }
    public static void main(String[] args) throws Exception
    {
        RefundTicketChain refundTicketChain = new RefundTicketChain();
        refundTicketChain.init();
        RefundContext context = new RefundContext();
        context.setOrderId(1621940242);
        refundTicketChain.execute(context);
    }
}

java工作流对工作的益处很多,这就要求我们能更好地掌握和使用它。更多有关于java常见问题,敬请关注奇Q工具网。

推荐阅读:

java工作流是什么?哪些工作流框架比较好?

高并发java实现方式有哪些?该怎么实现?

java实例,java多对多关系示例