package com.norteksoft.wf.engine.core;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.jbpm.api.listener.EventListener;
import org.jbpm.api.listener.EventListenerExecution;
import org.jbpm.pvm.internal.model.ExecutionImpl;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.wf.engine.entity.InstanceHistory;
import com.norteksoft.wf.engine.service.InstanceHistoryManager;
public class TransitionListener implements EventListener{
private static final long serialVersionUID = 1L;
public void notify(EventListenerExecution execution) throws Exception {
ExecutionImpl parent = ((ExecutionImpl)execution).getProcessInstance().getSuperProcessExecution();
if(parent == null){
String instanceId = execution.getProcessInstance().getId();
String processName = ((ExecutionImpl)execution).getProcessDefinition().getName();
String nextTask = ((ExecutionImpl)execution).getTransition().getDestination().getName();
InstanceHistoryManager instanceHistoryManager = (InstanceHistoryManager) ContextUtils.getBean("instanceHistoryManager");
//流程启动记录
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
StringBuilder msg = new StringBuilder();
msg.append(dateFormat.format(new Date())).append(", ");
msg.append("[ ").append(processName).append(" ]流程启动");
InstanceHistory ih = new InstanceHistory(ContextUtils.getCompanyId(),
instanceId, InstanceHistory.TYPE_FLOW_START,
msg.toString());
instanceHistoryManager.saveHistory(ih);
//流程进入第一个环节记录
msg = new StringBuilder();
msg.append(dateFormat.format(new Date())).append(", ");
msg.append("流程进入[ ").append(nextTask).append(" ]");
ih = new InstanceHistory(ContextUtils.getCompanyId(),
instanceId, InstanceHistory.TYPE_FLOW_INTO,
msg.toString());
ih.setTaskName(nextTask);
ih.setExecutionId(execution.getId());
instanceHistoryManager.saveHistory(ih);
}
}
}