HandleAbstractJBPMAction


包 com.hjy.ssh.action; 进口 com.hjy.ssh.beans.AbstractApply; 导入 java.lang.reflect.Method; 导入 java.lang.reflect.Proxy; 导入 javax.annotation.Resource; 导入 org.jbpm.api.ProcessInstance; 导入 org.springframework.context.annotation.Scope;导入 org.springframework.stereotype.Controller; 导入 java.lang.reflect.InvocationHandler; 导入 java.util.Map; 导入 com.hjy.ssh.service.JBPMService; 导入 com.opensymphony.xwork2.ActionSupport; @Controller @Scope("prototype") public class StartAbstractJBPM extends ActionSupport { private static final long serialVersionUID = 1L; //定义1个属性变量 private Map<String, Object> variablesMap; 私人字符串 pdKey;受保护的 JBPMService jbpmService;public void common(String pdKey,Map<String, Object> variablesMap,JBPMService jbpmService){ this. 变量映射=变量映射;this.pdKey=pdKey; this.jbpmService=jbpmService; } //想尝试可能根据其他方式传参话太费力 /*public StartAbstractJBPM(String pdKey,Map<String, Object> variablesMap,JBPMService jbpmService){ this.variablesMap=variablesMap; this.pdKey=pdKey; this.jbpmService=jbpmService; }*/ //动态代理类唯一接口代理(不支持方法类该类),该代理类都需要实现InvocationHandler类,实现invoke。invoke就是调用被代理接口的所有时需要调用的invoke返回的值是被代理接口的1个实现类 public class LogHandler1 implements InvocationHandler{ // 目标对象 private Object targetObject; //绑定关系,也就是关联到哪一个接口(以及具体的实现类绑定)的哪些方法将被调用时,执行调用方法。//该方法用于为指定类组件器、1组接口及用途理器生成动态代理类实例 //第1个参数指定生成代理对象的类加载器,需要将其指定为和目标对象同1个加载//第2个参数要实现和目标对象1样的接口,所以只需要通过目标对象的实现接口//第3个参数防御这些被拦截的方法在被拦截时需要哪一个Invoke方法 //调用代理对象根据目标Handler的目标返回1个return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(),this); } @Override //关联的实现类的方法被调用时将被执行 // InvocationHandler接口的方法proxy表示代理,方法表示原对象被调用的方法,args表示方法的参数public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("start-->>"); for(int i=0;i<args.length;i++){ System.out.println(args[i]); 对象 ret=null; try{ //原对象方法调用前处理日志信息 System.out.println("satrt-->>"); //启动流程ProcessInstance pi=(ProcessInstance) jbpmService.startProcessInstanceByKey(pdKey,variablesMap); //调用目标方法 AbstractApply abstractApply=(AbstractApply)args[0]; abstractApply.setExecuteId(pi.getId()); args[0]=抽象应用;ret=method.invoke(targetObject, args);/** 提交申请 ,启开工作流--想成是表格程序*/ public String edit() throws Exception { Long stuCourseId=model.getId(); //提交申请 //封装申请信息,学生的申请信息 StuCourseApply stuCourseApply = new StuCourseApply(); stuCourseApply.setStuCourseId(stuCourseId); newCourse=new String(newCourse.getBytes("iso⑻859⑴"),"utf⑻"); newTeacher=new String(newTeacher.getBytes("iso⑻859⑴"),"utf⑻"); stuCourseApply.setApplicant(getCurrentUser()); // 申请人当前用户 stuCourseApply.setOldCourse(model.getCourse()); stuCourseApply.setNewCourse(newCourse); stuCourseApply.setNewTeacher(newTeacher); stuCourseApply.setOldTeacher(model.getTeacher()); stuCourseApply.setTitle("修改课程信息"); String processDefinitionKeyStr=new String(processDefinitionKey.getBytes("iso⑻859⑴"),"utf⑻"); 学习课程申请。setProcessDefinitionKey(processDefinitionKeyStr); // 调用业务方法(保存申请信息) // 1,设置属性并保存stuCourseApply stuCourseApply.setApplyTime(sdf.format(new Date())); // 申请时间,当前时间 stuCourseApply.setStatus(StuCourseApply.STATUS_RUNNING); //动漫保存? stuCourseApplyService.save(stuCourseApply); // 2,准备流程变量 Map<String, Object> variablesMap = new HashMap<String, Object>(); variablesMap.put("stuCourseApply", stuCourseApply); //获得流程定义的key String pdKey = stuCourseApply.getProcessDefinitionKey(); // 3,启动流程实例开始流转并带上流程变量(当前的申请信息),调用函数程序 // 调用业务,保存申请信息 startAbstractJBPM.common(pdKeyMap, jbpmService); StartAbstractJBPM.LogHandler1 logHandler = startAbstractJBPM.new LogHandler1(); //解除代理中设置值了//stuCourseApply.setExecuteId(pi.getId()); StuCourseApplyService stuCourseApplyService1=(StuCourseApplyService)logHandler.newProxyInstanceStart(stuCourseApplyService); stuCourseApplyService1.save(stuCourseApply); 返回“toStuApplicationList”;// 成功后转到“我的申请查询” }

posted @ 2021-08-26 16:41  v17166570219  阅读(27)  评论(0)    收藏  举报