package cn.com.lzt.useractiviti.data.util; import cn.com.lzt.useractiviti.data.util.tools.DefaultActivitiTools; import com.lowagie.text.Element; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.history.HistoricProcessInstance; import org.apache.commons.lang.StringUtils; import org.jeecgframework.core.util.ApplicationContextUtil; import org.jeecgframework.web.system.service.SystemService; import org.jeecgframework.workflow.common.WorkFlowGlobals; import org.jeecgframework.workflow.pojo.base.TPProcess; import org.jeecgframework.workflow.pojo.base.TSBusConfig; import org.jeecgframework.workflow.processconfig.entity.TProcessBusconfigEntity; import org.springframework.context.ApplicationContext; import org.springframework.util.ClassUtils; import javax.servlet.http.HttpServletResponse; import java.util.Date; import java.util.List; import java.util.Map; public abstract class ActivitiTools { protected String procInstId; protected String busId; protected String title ; protected Date requestTime; protected String tableName; protected ActivitiPdfExport pdfExport; protected HistoricProcessInstance process; protected static SystemService systemService; static { ApplicationContext context = ApplicationContextUtil.getContext(); systemService=context.getBean(SystemService.class); } public ActivitiTools(){ pdfExport = new ActivitiPdfExport(); } public List printElementList(){ printBusinessInfo(); printActivitiInfo(); List list = pdfExport.getFinalList(); return list; } public void exportToResponse(HttpServletResponse res) { printBusinessInfo(); printActivitiInfo(); pdfExport.export(res); } public void view(HttpServletResponse res) { printBusinessInfo(); printActivitiInfo(); pdfExport.view(res); } public static ActivitiTools getInstanceByConfigId(String configId){ TProcessBusconfigEntity busconfigEntity = systemService.getEntity(TProcessBusconfigEntity.class,configId); String activitiConfigClass = busconfigEntity.getActivitiConfigClass(); ActivitiTools tools = null; if(StringUtils.isBlank(activitiConfigClass)){//没有处理类 tools = new DefaultActivitiTools(); }else { try { Class clazz = ClassUtils.forName(activitiConfigClass, ActivitiTools.class.getClassLoader()); tools = (ActivitiTools) clazz.newInstance(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } return tools; } public static ActivitiTools getInstance(String procInstId){ return getInstance(procInstId,false); } public static ActivitiTools getInstance(String procInstId,boolean returnDefault){ ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // ProcessInstance process = processEngine.getRuntimeService() // .createProcessInstanceQuery().includeProcessVariables().processInstanceId(procInstId).singleResult(); HistoricProcessInstance process = processEngine.getHistoryService() .createHistoricProcessInstanceQuery().includeProcessVariables() .processInstanceId(procInstId) .singleResult(); String procDefId = null; String title = null; Date requestTime = null; String busId =null; if(process!=null){ procDefId = process.getProcessDefinitionId(); Map varMap = process.getProcessVariables(); title = varMap.get(WorkFlowGlobals.BPM_BIZ_TITLE).toString(); busId = process.getBusinessKey(); requestTime = process.getStartTime(); } if(StringUtils.isBlank(procDefId)){ return null; } String procKey =procDefId.substring(0,20); //查流程 TPProcess processEntity = systemService.findUniqueByProperty(TPProcess.class,"processkey",procKey); String processId = processEntity.getId(); //查处理类 TSBusConfig busConfig = systemService.findUniqueByProperty(TSBusConfig.class,"TPProcess.id",processId); String configId = busConfig.getConfigId(); TProcessBusconfigEntity busconfigEntity = systemService.getEntity(TProcessBusconfigEntity.class,configId); String activitiConfigClass = busconfigEntity.getActivitiConfigClass(); ActivitiTools tools = null; if(StringUtils.isBlank(activitiConfigClass)){//没有处理类 if(returnDefault) { tools = new DefaultActivitiTools(); }else { return null; } }else { try { Class clazz = ClassUtils.forName(activitiConfigClass, ActivitiTools.class.getClassLoader()); tools = (ActivitiTools) clazz.newInstance(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } if(tools!=null) { tools.procInstId=procInstId; tools.busId = busId; tools.title = title; tools.requestTime=requestTime; tools.process = process; if(process.getDurationInMillis()!=null &&process.getDurationInMillis()>0) { //不是很严谨,但是前端控制只有流程中和审批通过能打印,撤回等操作不能打印 tools.pdfExport.accessImg(true); } tools.tableName=busconfigEntity.getRealTablename(); } return tools; } protected void printActivitiInfo(){ pdfExport.title(title); pdfExport.requestTime(requestTime).procInstId(procInstId); } protected abstract void printBusinessInfo(); public abstract String replaceProcessTitle(Map dataForm); protected boolean isProcessFinished(){ if(process==null) return false; return process.getDurationInMillis()!=null &&process.getDurationInMillis()>0; } public String getProcInstId() { return procInstId; } public void setProcInstId(String procInstId) { this.procInstId = procInstId; } public String getBusId() { return busId; } public void setBusId(String busId) { this.busId = busId; } public ActivitiPdfExport getPdfExport() { return pdfExport; } public void setPdfExport(ActivitiPdfExport pdfExport) { this.pdfExport = pdfExport; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Date getRequestTime() { return requestTime; } public void setRequestTime(Date requestTime) { this.requestTime = requestTime; } }