实际项目中的工作流工作原理

本文介绍了工作流在实际项目中的应用,特别是超时事件的处理。通过Spring MVC+Maven搭建的项目,工作流确保了数据流程的完整性和状态一致性。超时事件如审核状态超过设定时间会自动流转到超时状态。工作流通过XML配置定义状态流转,使用Quartz定时任务检测超时实例,并通过事件发布机制更新业务状态。整个流程涉及工作流定义、加载、超时检测、状态推进及事件监听等多个环节。
摘要由CSDN通过智能技术生成

现在公司开发的项目中用到了工作流,在进入本公司之前本屌丝还没有接触过工作流,所以对工作流的工作原理一直很感兴趣,一直在默默的学习,终于有一天本屌突然看懂了源码(大雾,现在我觉得看懂了可能只是骗我自己,好可怕),而且今天终于有时间来整理一下工作流,以备大家指正。
本屌公司之前的CTO是阿里的大牛,所以整个公司的项目框架我们可以看出很多阿里的风格,能接触这么厉害的技术,本屌心里好开心,废话不说了,回归正题:
项目中应用Spring  MVC+Maven,简单粗暴,工作流的作用呢,就是确保数据流程完整,保持状态一致正确,有倒计时功能的状态可以自动更新状态,发布事件。如果有监听事件的处理器就可以调用相关动作了。

那么工作流除了业务环境中的手动推进,今天我们主要讲的就是超时事件,当前状态可能只能保持10分钟或者配置文件中的特定时间,超过此事件状态失效,状态流转为time_out并且发布状态超时事件。我们准备讲一个实际状态,审核状态,如果审核中的状态持续了1个小时而没有人手动审核的话,超时。

第一。我们定义了业务的状态流转模型


我们可以看到等待复核状态后面有三个相应状态,标红的复核超时就是工作流推动的。


第二,把模型转换成XML配置

我们在项目中按照业务流程把需要工作流推动状态的几个模型的状态流转转换为工作流的模板定义。看XML

<wf_def>
    <name>transit_task</name>
    <desc>运输流程</desc>
    <next_action_name>start</next_action_name>
    <type_val_in_id>WF03</type_val_in_id>
    
    <wf_action_list>
        <wf_action>
            <pvg_required>
                <key>*</key>
                <user>*</user>
            </pvg_required>
            <need_lock>true</need_lock>
            <name>start</name>
            <desc>开始</desc>
            <executer_name>BLANK_ACTION</executer_name>
            <next_status_list>
                <next_status>
                    <caseExpr>*</caseExpr>
                    <status>in_transit</status>
                </next_status>
            </next_status_list>
        </wf_action>

</wf_action>
        <!-- <wf_action>
            <pvg_required>
                <key>*</key>
                <user>*</user>
            </pvg_required>
            <need_lock>true</need_lock>
            <name>jyy_arrive_proof</name>
            <desc>交易员确认到货</desc>
            <executer_name>BLANK_ACTION</executer_name>
            <next_status_list>
                <next_status>
                    <caseExpr>*</caseExpr>
                    <status>jyy_arrived</status>
                </next_status>
            </next_status_list>
        </wf_action>
        -->
    </wf_action_list>

    <wf_status_list>
        <!-- 取消开始运输
        <wf_status>
            <name>wait_transit</name>
            <desc>待运输</desc>
            <next_action_list>
                <next_action>
                    <name>start_transit</name>
                </next_action>
            </next_action_list>
            <action_relation>XOR</action_relation>
            <finish>false</finish>
        </wf_status>
        --><wf_status>
            <name>force_discard</name>
            <desc>强制作废</desc>
            <finish>true</finish>
        </wf_status>
    </wf_status_list>

屌大的一眼看明白了这个XML配置的主要信息是什么了,一个是wf_status_list,一个是wf_action_list。他们的list顺序就代表状态的流转顺序,不能打乱。


第三。加载我们的工作流实例配置XML

下面这个xml配置就是启动ConfigLoader扫描我们手动配置的工作流的模板的a.b.c.xml文件(即  上面我们

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值