jbpm框架活动标志

流程图活动包括:

1:开始活动

      不能有分支,不能有多个开始活动,连线不能指向开始活动

2:结束活动

      end 普通结束

      end-cancel 取消结束

      end-error 异常结束

      PS:每个结束虽然长的不一样,功能一样,不一样的地方体现在his_task里的COUCOME描述,主要针对不用业务

3:状态活动state

     指的是流程走到该状态节点就停了,如果继续往下走只能调用

     processEngine.getExecutionService().singalExecutionById(executionId,"连线name")进行通知才能往下走。

     例如业务逻辑:当走到某节点需要所有人做反馈,当所有人反馈有调用上面的api进行唤醒

     PS:走到该节点在task表里没数据,在execution表里会记录当前节点是属于state状态,等待唤醒

4:判断活动 decision

     4.1:定义一个decisionhandle类,实现 DecisionHandle接口里的decide函数,返回的是判断活动下一步的路线

      

public class PriceDecisionHandle implements DecisionHandler {

	/**
	 * 执行判断,返回的是连线
	 */
	@Override
	public String decide(OpenExecution execution) {
		// TODO Auto-generated method stub
		String linkName = "to task2";

		double price = (double) execution.getVariable("price");

		if (price > 200) {
			linkName = "to task3";
		}
		System.out.println(linkName);
		return linkName;
	}

}

     4.2:指定的decision的handle class ,见图片

      


           4.3:在启动或执行task任务时设置流程变量

    

		//启动时设置流程变量
		String executionId = "financeDecision-1";
		
		Map<String, Object> map = new HashMap<String, Object>();

		map.put("price", 580d);
		
		ProcessInstance processInstance = pe.getExecutionService().startProcessInstanceById(executionId, map);

             4.4 当teamleader任务用户执行任务时会通过反射路径执行 decide函数 返回路径 跳转到指定的task

5:分支合并活动

     PS:使用场景,当一个流程需要2个人同时审批才能通过,如图(CEO和CFO同时审批后才能END)

      

 启动时在task表里会同时存储2条数据,在CEO和CFO全都执行完各自的任务后才能进行join合并并且end结束。


6:自定义活动

PS:自定义活动是用户可以自定义自己的行为,定义一个实现类,实现ExternalActivityBehaviour,其中可分为2中执行策略 1:执行完毕后直接跳转到下一个流程节点2:在该自定义节点停留等待唤醒(execute函数里执行ActivityExecution类型参数的wait函数execution. waitForSignal()),如图

public class Customer implements ExternalActivityBehaviour {

	/**
	 * 不管哪种策略都会执行该函数,也是第一步执行
	 */
	@Override
	public void execute(ActivityExecution execution) throws Exception {
		// TODO Auto-generated method stub
		
		execution.waitForSignal(); //等待唤醒之后执行signal
		
		System.out.println("execute执行");
	}

	/**
	 * 只有当execute(...)里执行了execution.waitForSignal()函数代表等待,之后执行(precessEngine.
	 * getExecutionService().signalsignalExecutionById())才会进行执行该函数
	 */
	@Override
	public void signal(ActivityExecution arg0, String arg1, Map<String, ?> arg2) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("signal执行");
	}

}
















基于python实现的粒子群的VRP(车辆配送路径规划)问题建模求解+源码+项目文档+算法解析,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值