package test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jbpm.api.Configuration;
import org.jbpm.api.JbpmException;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.TaskService;
import org.jbpm.api.activity.ActivityExecution;
import org.jbpm.api.activity.ExternalActivityBehaviour;
import org.jbpm.api.model.Transition;
import org.jbpm.api.task.Task;
import org.jbpm.pvm.internal.env.BasicEnvironment;
import org.jbpm.pvm.internal.env.EnvironmentImpl;
import org.jbpm.pvm.internal.history.HistoryEvent;
import org.jbpm.pvm.internal.history.events.TaskActivityStart;
import org.jbpm.pvm.internal.model.ExecutionImpl;
import org.jbpm.pvm.internal.script.ScriptManager;
import org.jbpm.pvm.internal.session.DbSession;
import org.jbpm.pvm.internal.task.TaskImpl;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
public class CustomSign implements ExternalActivityBehaviour{
private String description;
@Override
public void execute(ActivityExecution aexe) throws Exception {
// TODO Auto-generated method stub
ExecutionImpl exe = (ExecutionImpl)aexe;
DbSession session = EnvironmentImpl.getFromCurrent(DbSession.class);
Session sessionA=null;
sessionA = EnvironmentImpl.getFromCurrent(Session.class);
//获取变量
//标题
String strTitle = (String)exe.getVariable("Title").toString();
//拟办意见
String strNiBan = (String)exe.getVariable("NiBan").toString();
//办公室主任意见
String strBGSZRYijian = (String)exe.getVariable("BGSZRYijian").toString();
//副主任意见
String strFZRYijian = (String)exe.getVariable( "FZRYijian").toString();
//主任意见
String strZRYijian = (String)exe.getVariable("ZRYijian").toString();
//所选择的会签部门
String strDepartmentSel = (String)exe.getVariable("participant").toString();
//获取会签部门对象
Department department=new Department();
department=(Department)sessionA.createCriteria(Department.class).
add(Restrictions.eq("DeptId", Integer.parseInt(strDepartmentSel))).uniqueResult();
//生成变量Map
Map mainMap = new HashMap();
Map subMap = new HashMap();
subMap.put("Title", strTitle);
subMap.put("NiBan", strNiBan);
subMap.put("BGSZRYijian", strBGSZRYijian);
subMap.put("FZRYijian", strFZRYijian);
subMap.put("ZRYijian", strZRYijian);
//会签人数
//map.put("SignNum", pariticipants.length);
//会签同意人数
//map.put("SignAgreeNum", "0");
mainMap=subMap;
//1:为customer1创建一个task,好让流程停留在customer1
//1.1定义task对象
TaskImpl mainTask = session.createTask();
mainTask.setAssignee(null);
mainTask.setName("会签");
mainTask.setActivityName(aexe.getActivityName());
mainTask.setExecution(exe);
mainTask.setExecutionDbid(exe.getDbid());
mainTask.setSignalling(false);
//练习*/*/*/*/*/*/*/*/**/////
description = evaluateExpression(description);
//把这个task与流程实例关联起来
mainTask.setProcessInstance(exe.getProcessInstance());
//1.2保存这个对象
session.save(mainTask);
//1.3把这个对象和history连接起来
HistoryEvent.fire(new TaskActivityStart(mainTask),exe);
//2:为主task创建多个子task,每个参与会签的人员一个task
String users = "";//(String) exe.getVariable("hqrs");
if (department.getUserIds().length()>0)
{
users=department.getUserIds();
}
//获取所有用户信息
List<CustomUser> customUserList=new ArrayList<CustomUser>();
customUserList =(List<CustomUser>) sessionA.createCriteria(CustomUser.class).add(Restrictions.isNotNull("LoginName")).list();
//添加可减签人员列表
String customUserSel="";
customUserSel="可减签人员::<select type=\"select\" name=\"customUserSel\" id=\"customUserSel\">";
List<String> hqUsers = new ArrayList<String>();
for(String user : users.split(",")){
CustomUser customUser=new CustomUser();
customUser=(CustomUser)sessionA.createCriteria(CustomUser.class).
add(Restrictions.eq("UserId", Integer.parseInt(user))).uniqueResult();
hqUsers.add(customUser.getLoginName());
TaskImpl subTask = mainTask.createSubTask();
subTask.setActivityName(aexe.getActivityName());
subTask.setAssignee(customUser.getLoginName());
subTask.setFormResourceName("receiveForm.jsp");
subTask.setVariables(subMap);
subTask.setSuperTask(mainTask);
//subTask.setProcessInstance((ExecutionImpl) aexe.getProcessInstance());
//子对象不应该有execution对象,它使用父task的execution对象
// subTask.setExecution(exe);
subTask.setName(mainTask.getName()+"_"+customUser.getUserName());
subTask.setSignalling(false);
subTask.setExecutionDbid(exe.getDbid());
subTask.setSuperTaskDbid(mainTask.getDbid());
customUserList.remove(customUser);
customUserSel=customUserSel+"<option value=\""+subTask.getId()+"\">";
customUserSel=customUserSel+customUser.getUserName();
customUserSel=customUserSel+"</option>";
session.save(subTask);
HistoryEvent.fire(new TaskActivityStart(subTask),exe);
}
customUserSel=customUserSel+"</select>";
//添加可加签人员列表
String customUserHave="";
customUserHave="可加签人员::<select type=\"select\" name=\"customUserHave\" id=\"customUserHave\">";
for(CustomUser customUser:customUserList){
customUserHave=customUserHave+"<option value=\""+customUser.getLoginName()+"\">";
customUserHave=customUserHave+customUser.getUserName();
customUserHave=customUserHave+"</option>";
}
customUserHave=customUserHave+"</select><br/>";
//可以减签下拉框字符串
mainMap.put("CustomUserSel", customUserSel);
//可以加签下拉框字符串
mainMap.put("CustomUser", customUserHave);
mainTask.setVariables(mainMap);
//把应该参与会签的人员保存下来,后面好用到
exe.setVariable("hqUsers", hqUsers);
//4.4相比4.3在Custom节点execution后新加了对((ExecutionImpl) execution).historyAutomatic()的调用,
//这将在HistoryActivityInstance表中加一条自动历史记录,会造成如果Custom节点产生了Task,
//则根据execution取得的HistoryTaskInstanceActivity是错误的,因此先存下来,后面好恢复
exe.setVariable("historyAi", exe.getHistoryActivityInstanceDbid());
//3:让流程停留在这里,等待signal
exe.waitForSignal();
}
@Override
public void signal(ActivityExecution aexe, String outComingName, Map<String, ?> params)throws Exception {
// TODO Auto-generated method stub
ProcessEngine engine = Configuration.getProcessEngine();
ExecutionImpl exe =(ExecutionImpl)aexe;
TaskService ts = engine.getTaskService();
//1:判断这个人是否应该参与会签
List hqUsers= (List<String>) exe.getVariable("hqUsers");
String user = (String)params.get("LoginUser");
if(!hqUsers.contains(user)){
//继续等待
//System.out.println("你不能参与会签");
exe.waitForSignal();
return;
}
//2:判断这个人是否会签过了
//2.1先找到主task
TaskImpl mainTask = (TaskImpl)ts.createTaskQuery().processInstanceId(exe.getProcessInstance()
.getId()).activityName("副主任会签").uniqueResult();
//String strAddSign = ts.getVariable(mainTask.getId(), "AddSign").toString();
/*if ("0".equals(strAddSign))
{*/
//2.2找到所有的子task
List<Task> subTaskList = ts.getSubTasks(mainTask.getId());
boolean hasHQ = true;
for(Task subTa
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
会签.rar (81个子文件)
会签
src
huigao.png 3KB
CustomUser.hbm.xml 893B
Department.hbm.xml 893B
jbpm.mail.properties 72B
leave.jpdl.xml 993B
leave.zip 11KB
logging.properties 635B
receiveFile.jpdl.xml 1KB
jbpm.hibernate.cfg.xml 1KB
jbpm.cfg.xml 642B
test
ProcessEventListener.java 2KB
AssignTask.java 5KB
SignEventListener.java 2KB
Sign.java 7KB
Department.java 569B
CustomUser.java 583B
Comm.java 1KB
AddSign.java 7KB
test.java 4KB
CustomSign.java 21KB
jbpm.mail.templates.examples.xml 418B
receiveFile.png 4KB
.classpath 841B
build
classes
huigao.png 3KB
CustomUser.hbm.xml 893B
Department.hbm.xml 893B
jbpm.mail.properties 72B
leave.jpdl.xml 993B
leave.zip 11KB
logging.properties 635B
receiveFile.jpdl.xml 1KB
jbpm.hibernate.cfg.xml 1KB
jbpm.cfg.xml 642B
test
Department.class 1KB
AssignTask.class 6KB
CustomSign.class 12KB
CustomUser.class 1KB
SignEventListener.class 4KB
ProcessEventListener.class 3KB
Comm.class 2KB
test.class 5KB
Sign.class 6KB
AddSign.class 7KB
jbpm.mail.templates.examples.xml 418B
receiveFile.png 4KB
.settings
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.common.project.facet.core.xml 345B
org.eclipse.core.resources.prefs 109B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.component 469B
.jsdtscope 503B
org.eclipse.jdt.core.prefs 364B
WebContent
META-INF
MANIFEST.MF 39B
index.jsp 3KB
doLogin.jsp 116B
deploy.jsp 829B
start.jsp 413B
pic.jsp 913B
login.jsp 583B
submit.jsp 4KB
remove.jsp 311B
view.jsp 1KB
checkLogin.jsp 99B
receiveForm.jsp 7KB
WEB-INF
lib
jta.jar 15KB
dom4j.jar 307KB
javassist.jar 460KB
hibernate-core.jar 2.17MB
junit.jar 118KB
commons-logging.jar 52KB
jbpm.jar 1.06MB
mail.jar 437KB
slf4j-api.jar 17KB
antlr.jar 433KB
slf4j-jdk14.jar 8KB
jtds-1.2.5.jar 295KB
activation.jar 68KB
commons-collections.jar 546KB
log4j.jar 359KB
web.xml 710B
.project 1KB
共 81 条
- 1
zheng_yandong
- 粉丝: 1
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- javaweb毕业设计-java作业管理系统设计(源代码+lw)(可做课程设计).rar
- 我的自己111111111
- 判断一个数是否为质数以及通过C语言实现.docx
- IPv4-HEADER-03 测试数据
- 高级网络人才培训专家-X00070005 第32章 ISDN和DCC
- 高级网络人才培训专家-X00070004 第31章 配置帧中继
- IPv4-HEADER-02测试数据
- tensorflow-2.6.2-cp38-cp38-manylinux2010-x86-64.whl
- tensorflow-2.6.2-cp37-cp37m-win-amd64.whl
- RV180-Firmware-1.0.5.4.img
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页