1.构建流程图,示例如下:
2.发起流程
public void startProcess(AirBlowingBaseInfo airBlowingBaseInfo) { List<String> personList = new ArrayList<String>(); AirTaskInfo airTaskInfo = airBlowingBaseInfo.getAirTaskInfo(); Map<String,Object> vars = new HashMap<String,Object>(); if(null != airTaskInfo.getFormCirculateuserCylinder() && !airTaskInfo.getFormCirculateuserCylinder().equals("")) { vars.put("formCirculateuserMotion",airTaskInfo.getFormCirculateuserMotion()); //此处的formCirculateuserMotion为1节点的分配用户 vars.put("formCirculateuserCylinder",airTaskInfo.getFormCirculateuserCylinder()); //此处的formCirculateuserCylinder为2节点的分配用户 } AirTaskInfo airTaskInfo1 = airTaskInfoService.get(airTaskInfo); String conmment = (airBlowingBaseInfo.getAirTaskInfo()==null||airBlowingBaseInfo.getAirTaskInfo().getAct()==null||airBlowingBaseInfo.getAirTaskInfo().getAct().getComment()==null)?"":airBlowingBaseInfo.getAirTaskInfo().getAct().getComment(); actTaskService.startProcess(airTaskInfo1.getCreateBy().getLoginName(),ActUtils.PD_AIRWAY_BLOWING_PROCESS[0], ActUtils.PD_AIRWAY_BLOWING_PROCESS[1], airTaskInfo1.getId(), "流程", vars,conmment); //此处的ActUtils.PD_AIRWAY_BLOWING_PROCESS[0]为流程图的流程标识ActUtils.PD_AIRWAY_BLOWING_PROCESS[1]为数据库中业务表名 //更新defid String defid=actTaskService.getProcessDefinitionId(ActUtils.PD_AIRWAY_BLOWING_PROCESS[0]); airTaskInfo.setProcessDefinitionId(defid); airTaskInfo.setUpdateBy(UserUtils.getUser()); airTaskInfoService.updateDefId(airTaskInfo); }
3.推进并结束流程
public void completeProcess(AirTaskInfo airTaskInfo,String cirLoginNames) { // boolean reject = false; String startName=null; List<String> personList = new ArrayList<String>(); //流程参数变量 Map<String, Object> vars = Maps.newHashMap(); // 设置意见 String comment=""; if("yes".equals(airTaskInfo.getAct().getFlag())){ comment="[同意] "+(airTaskInfo.getAct().getComment()==null?"":airTaskInfo.getAct().getComment()); }else if("no".equals(airTaskInfo.getAct().getFlag())){ comment="[驳回] "+(airTaskInfo.getAct().getComment()==null?"":airTaskInfo.getAct().getComment()); }else{ comment=airTaskInfo.getAct().getComment()==null?"":airTaskInfo.getAct().getComment(); } airTaskInfo.getAct().setComment(comment); // vars.put("pass", "yes".equals(materialTaskInfo.getAct().getFlag())? "1" : "0"); // 对不同环节的业务逻辑进行操作 String taskDefKey = airTaskInfo.getAct().getTaskDefKey(); AirTaskInfo airTaskInfo1 = this.get1(airTaskInfo.getId()); if("form_circulate_cylinder".equals(taskDefKey)){ //1节点id // String apply=airTaskInfo1.getCreateBy().getLoginName(); if("0".equals(airTaskInfo.getFormType())){ String apply=airTaskInfo1.getCreateBy().getLoginName(); vars.put("apply",apply); vars.put("pass",0); // 查询是否完成2节点 Act act = airBlowingBaseInfoDao.getEngineer(airTaskInfo1.getFormCirculateuserMotion(),airTaskInfo1.getBaseInfoId(),"2"); if (act == null) { personList.add(apply); } }else{ vars.put("planDispatch",airTaskInfo1.getPlanDispatchLoginName()); vars.put("pass",1); personList.add(airTaskInfo1.getPlanDispatchLoginName()); } // }else if("form_circulate_motion".equals(taskDefKey)){ //2节点id // String apply=airTaskInfo1.getCreateBy().getLoginName(); if("0".equals(airTaskInfo.getFormType())){ String apply=airTaskInfo1.getCreateBy().getLoginName(); vars.put("apply",apply); vars.put("pass",0); // 查询1节点是否完成 Act act = airBlowingBaseInfoDao.getEngineer(airTaskInfo1.getFormCirculateuserCylinder(),airTaskInfo1.getBaseInfoId(),"1"); if (act == null) { personList.add(apply); } }else { vars.put("planDispatch",airTaskInfo1.getPlanDispatchLoginName()); vars.put("pass",1); personList.add(airTaskInfo1.getPlanDispatchLoginName()); } // personList.add(apply); }else if("form_sign".equals(taskDefKey)){ //3节点id if(null != airTaskInfo.getFormCirculateuserCylinder() && !airTaskInfo.getFormCirculateuserCylinder().equals("")) { vars.put("formCirculateuserCylinder",airTaskInfo.getFormCirculateuserCylinder()); vars.put("formCirculateuserMotion",airTaskInfo.getFormCirculateuserMotion()); vars.put("pass",1); personList.add(airTaskInfo.getFormCirculateuserCylinder()); }else{ vars.put("pass",0); vars.put("formAudit",airTaskInfo1.getAuditLoginName()); personList.add(airTaskInfo1.getAuditLoginName()); } if("avl".equals(airTaskInfo.getSubmitType())){ comment = comment+"(使用)"; airTaskInfo.getAct().setComment(comment); } }else if("form_audit".equals(taskDefKey)){ if("yes".equals(airTaskInfo.getAct().getFlag())){ if(StringUtils.isNotEmpty(airTaskInfo1.getOtherCounterSign())) { //表单会签处理人 List<String> loginlist = Lists.newArrayList(); loginlist.add(airTaskInfo1.getOtherCounterSign()); vars.put("pass",1); vars.put("person_list",loginlist); personList.add(airTaskInfo1.getOtherCounterSign()); }else { vars.put("pass",2); vars.put("planDispatch",airTaskInfo1.getPlanDispatchLoginName()); personList.add(airTaskInfo1.getPlanDispatchLoginName()); } }else if("no".equals(airTaskInfo.getAct().getFlag())){ vars.put("pass",0); String apply=airTaskInfo1.getCreateBy().getLoginName(); vars.put("apply",apply); personList.add(apply); } }else if("form_counter_sign".equals(taskDefKey)) { vars.put("planDispatch",airTaskInfo1.getPlanDispatchLoginName()); // personList.add(airTaskInfo1.getPlanDispatchLoginName()); //多人处理同一节点用此方法 actTaskService.procParam(airTaskInfo.getAct().getTaskId(), vars,"signCount"); } else if("plan_dispatch".equals(taskDefKey)){ //试 vars.put("technicianNew",airTaskInfo1.getTestTechnicianLoginName()); personList.add(airTaskInfo1.getTestTechnicianLoginName()); }else if("technician_new".equals(taskDefKey)) { // if(airTaskInfo.getFormCirculateuser() == null || airTaskInfo.getFormCirculateuser().equals("")){ vars.put("pass",0); vars.put("testSponsor", airTaskInfo1.getTestLoginName()); personList.add(airTaskInfo1.getTestLoginName()); }else { vars.put("pass",1); vars.put("cancel",airTaskInfo.getFormCirculateuser()); personList.add(airTaskInfo.getFormCirculateuser()); } }else if("cancel".equals(taskDefKey)){ String baseInfoId = airTaskInfoDao.get(airTaskInfo.getId()).getBaseInfoId(); AirBlowingBaseInfo baseInfo = airBlowingBaseInfoDao.get(baseInfoId); // 发送邮件 // 试验发起人 if("yes".equals(airTaskInfo.getAct().getFlag())) { vars.put("pass", 0); airTaskInfo.setFormState(TestTaskInfo.FORM_STATE_04); airTaskInfo.setTestStage(TestTaskInfo.TEST_FINISH); airTaskInfoDao.updateTestStageAndFormState(airTaskInfo); }else{ vars.put("pass", 1); vars.put("technicianNew",airTaskInfo1.getTestTechnicianLoginName()); } }else if("test_sponsor".equals(taskDefKey) && Integer.valueOf(Integer.valueOf(airTaskInfo1.getProcessDefinitionId().substring(airTaskInfo1.getProcessDefinitionId().indexOf(":")+1,airTaskInfo1.getProcessDefinitionId().indexOf(":",airTaskInfo1.getProcessDefinitionId().indexOf(":")+1))))>3){//流程有改过升版可以采用这种方式使代码兼容已发起的旧流程 //4版本之后才有归档环节 String collector=airTaskInfo1.getCreateBy().getLoginName(); vars.put("collector",collector); }else if("collect_files".equals(taskDefKey) || ("test_sponsor".equals(taskDefKey) && Integer.valueOf(airTaskInfo1.getProcessDefinitionId().substring(airTaskInfo1.getProcessDefinitionId().indexOf(":")+1,airTaskInfo1.getProcessDefinitionId().indexOf(":",airTaskInfo1.getProcessDefinitionId().indexOf(":")+1)))<4)){ //归档 //4版本及之后才有归档环节进行如下操作,4版本之前在试验数据审核环节进行如下操作 String baseInfoId = airTaskInfoDao.get(airTaskInfo.getId()).getBaseInfoId(); AirBlowingBaseInfo baseInfo = airBlowingBaseInfoDao.get(baseInfoId); vars.put("signCount",0); AirBlowingTestResult airBlowingTestResult = new AirBlowingTestResult(); airBlowingTestResult.setProcessId(airTaskInfo.getProcInsId()); List<AirBlowingTestResult> testResultList = airBlowingTestResultDao.findGroupList(airBlowingTestResult); if("yes".equals(airTaskInfo.getAct().getFlag())){ vars.put("pass",1); } }else if("no".equals(airTaskInfo.getAct().getFlag())){ vars.put("pass",0); String apply=airTaskInfo1.getCreateBy().getLoginName(); vars.put("apply",apply); personList.add(apply); // 发送邮件 MailUtil.testSchemeSendEmail(airTaskInfo1.getCreateBy().getLoginName(), "审核驳回提醒", "流程:" + "\"" + baseInfo.getTaskName() + "\"" + "审核阶段被驳回"); // 试验负责人 testTechnicianLoginName MailUtil.testSchemeSendEmail(airTaskInfo1.getTestTechnicianLoginName(), "驳回提醒", "流程:" + "\"" + baseInfo.getTaskName() + "\"" + "审核阶段被驳回"); // 试验计划员 planDispatchLoginName MailUtil.testSchemeSendEmail(airTaskInfo1.getPlanDispatchLoginName(), "审核驳回提醒", "流程:" + "\"" + baseInfo.getTaskName() + "\"" + "审核阶段被驳回"); }else if("sign".equals(airTaskInfo.getAct().getFlag())){//5版本之后才有节 vars.put("pass",2); String[] users = airTaskInfo.getExceptionSigner().split(","); List<String> userList = Arrays.asList(users); vars.put("user_list",userList); } }else if("exception_sign".equals(taskDefKey)){//5版本之后才有 vars.put("pass", "yes".equals(airTaskInfo.getAct().getFlag())? "1" : "0"); actTaskService.procParam(airTaskInfo.getAct().getTaskId(), vars,"signCount"); } actTaskService.complete(airTaskInfo.getAct().getTaskId(),airTaskInfo.getAct().getProcInsId(),airTaskInfo.getAct().getComment(),"", vars); }