private ProcessInstance innercreateProcess(String processDefName, final String userId,
final long parentProcInstId, final long activityInstId, final String subFlow) {
if(!StringUtils.hasText(userId))
throw new IllegalArgumentException("创建流程时,必须指定用户 ID");
final ProcessDefine processDefine = procDefRep.findPublishProcessDefine(processDefName);
if(processDefine == null)
throw new ProcessDefineNotFoundException("没有创建流程,或者流程定义版本没有发布");
//流程启动前触发事件
TriggerProcessEventUtil.beforeStart(processEngine, processDefine, null,
processDefine.getProcessObject().getEvents());
ProcessInstance processInstance = transactionTemplate.execute(new TransactionCallback<ProcessInstance>() {
public ProcessInstance doInTransaction(TransactionStatus status) {
ProcessInstance _processInstance = new ProcessInstance();
_processInstance.setProcessDefId(processDefine.getProcessDefId());
_processInstance.setProcessInstName(processDefine.getProcessDefName());
_processInstance.setCreator(userId);
_processInstance.setCurrentState(StarFlowState.PROCESS_INST_START);
_processInstance.setSubFlow(subFlow);
_processInstance.setCreateTime(new Date());
_processInstance.setLimitNum(processDefine.getLimitTime());
long _id = PrimaryKeyUtil.getPrimaryKey(Keys.PROCESSINSTID);
_processInstance.setProcessInstId(_id);
if(parentProcInstId == -1)
_processInstance.setParentProcInstId(_id);
else