package com.mossle.bpm.listener;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Resource;
import com.mossle.api.org.OrgConnector;
import com.mossle.api.user.UserConnector;
import com.mossle.bpm.cmd.CompleteTaskWithCommentCmd;
import com.mossle.bpm.graph.ActivitiHistoryGraphBuilder;
import com.mossle.bpm.graph.Edge;
import com.mossle.bpm.graph.Graph;
import com.mossle.bpm.graph.Node;
import com.mossle.bpm.persistence.domain.BpmConfRule;
import com.mossle.bpm.persistence.domain.BpmConfUser;
import com.mossle.bpm.persistence.manager.BpmConfRuleManager;
import com.mossle.bpm.persistence.manager.BpmConfUserManager;
import com.mossle.bpm.support.DefaultTaskListener;
import com.mossle.bpm.support.MapVariableScope;
import com.mossle.core.spring.ApplicationContextHelper;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.impl.HistoricActivityInstanceQueryImpl;
import org.activiti.engine.impl.Page;
import org.activiti.engine.impl.cmd.GetDeploymentProcessDefinitionCmd;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.el.ExpressionManager;
import org.activiti.engine.impl.identity.Authentication;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.HistoricActivityInstanceEntity;
import org.activiti.engine.impl.persistence.entity.HistoricProcessInstanceEntity;
import org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.pvm.PvmTransition;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.impl.pvm.process.TransitionImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
public class CopyTaskListener extends DefaultTaskListener {
public static final int TYPE_COPY = 3;
private static Logger logger = LoggerFactory
.getLogger(CopyTaskListener.class);
private BpmConfUserManager bpmConfUserManager;
@Override
public void onCreate(DelegateTask delegateTask) throws Exception {
List<BpmConfUser> bpmConfUsers = bpmConfUserManager
.find("from BpmConfUser where bpmConfNode.bpmConfBase.processDefinitionId=? and bpmConfNode.code=?",
delegateTask.getProcessDefinitionId(), delegateTask
.getExecution().getCurrentActivityId());
logger.debug("{}", bpmConfUsers);
ExpressionManager expressionManager = Context
.getProcessEngineConfiguration().getExpressionManager();
try {
for (BpmConfUser bpmConfUser : bpmConfUsers) {
logger.debug("status : {}, type: {}", bpmConfUser.getStatus(),
bpmConfUser.getType());
logger.debug("value : {}", bpmConfUser.getValue());
String value = expressionManager
.createExpression(bpmConfUser.getValue())
.getValue(delegateTask).toString();
if (bpmConfUser.getStatus() == 1) {
if (bpmConfUser.getType() == TYPE_COPY) {
this.copyTask(delegateTask, value);
}
}
}
} catch (Exception ex) {
logger.debug(ex.getMessage(), ex);
}
}
public void copyTask(DelegateTask delegateTask, String userId) {
// 创建新任务
TaskEntity task = TaskEntity.create(new Date());
task.setProcessDefinitionId(delegateTask.getProcessDefinitionId());
task.setAssigneeWithoutCascade(userId);
// task.setParentTaskIdWithoutCascade(delegateTask.getParentTaskId());
task.setNameWithoutCascade(delegateTask.getName());
task.setTaskDefinitionKey(delegateTask.getTaskDefinitionKey());
task.setExecutionId(delegateTask.getExecutionId());
task.setPriority(delegateTask.getPriority());
task.setProcessInstanceId(delegateTask.getProcessInstanceId());
task.setExecutionId(delegateTask.getExecutionId());
task.setDescriptionWithoutCascade(delegateTask.getDescription());
task.setCategory("copy");
Context.getCommandContext().getTaskEntityManager().insert(task);
}
@Resource
public void setBpmConfUserManager(BpmConfUserManager bpmConfUserManager) {
this.bpmConfUserManager = bpmConfUserManager;
}
}