package com.norteksoft.product.api.impl;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import com.norteksoft.acs.entity.organization.Department;
import com.norteksoft.acs.service.AcsUtils;
import com.norteksoft.bs.options.service.OptionGroupManager;
import com.norteksoft.bs.rank.service.RankManager;
import com.norteksoft.mms.form.dao.GeneralDao;
import com.norteksoft.mms.form.entity.AutomaticallyFilledField;
import com.norteksoft.mms.form.entity.FormControl;
import com.norteksoft.mms.form.entity.FormView;
import com.norteksoft.mms.form.enumeration.DataType;
import com.norteksoft.mms.form.jdbc.JdbcSupport;
import com.norteksoft.mms.form.service.FormViewManager;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.api.FileService;
import com.norteksoft.product.api.WorkflowAttachmentService;
import com.norteksoft.product.api.WorkflowDataDictService;
import com.norteksoft.product.api.WorkflowDefinitionService;
import com.norteksoft.product.api.WorkflowDocumentService;
import com.norteksoft.product.api.WorkflowFormService;
import com.norteksoft.product.api.WorkflowHistoryService;
import com.norteksoft.product.api.WorkflowInstanceService;
import com.norteksoft.product.api.WorkflowOpinionService;
import com.norteksoft.product.api.WorkflowPermissionService;
import com.norteksoft.product.api.WorkflowRightService;
import com.norteksoft.product.api.WorkflowTaskService;
import com.norteksoft.product.api.entity.BusinessSystem;
import com.norteksoft.product.api.entity.DataDictionary;
import com.norteksoft.product.api.entity.Option;
import com.norteksoft.product.api.entity.OptionGroup;
import com.norteksoft.product.api.entity.TaskPermission;
import com.norteksoft.product.api.entity.User;
import com.norteksoft.product.api.entity.WorkflowInstance;
import com.norteksoft.product.api.entity.WorkflowTask;
import com.norteksoft.product.api.utils.BeanUtil;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.product.util.ParameterUtils;
import com.norteksoft.product.util.PropUtils;
import com.norteksoft.product.util.ThreadParameters;
import com.norteksoft.product.web.struts2.Struts2Utils;
import com.norteksoft.task.base.enumeration.TaskProcessingMode;
import com.norteksoft.task.base.enumeration.TaskProcessingResult;
import com.norteksoft.task.base.enumeration.TaskSource;
import com.norteksoft.task.base.enumeration.TaskState;
import com.norteksoft.task.entity.TaskSetting;
import com.norteksoft.wf.base.enumeration.CommonStrings;
import com.norteksoft.wf.base.enumeration.CompleteTaskTipType;
import com.norteksoft.wf.base.enumeration.DataDictUseType;
import com.norteksoft.wf.base.enumeration.ProcessState;
import com.norteksoft.wf.base.exception.NotFoundEnabledWorkflowDefinitionException;
import com.norteksoft.wf.engine.client.DictQueryCondition;
import com.norteksoft.wf.engine.client.FormFlowable;
import com.norteksoft.wf.engine.client.WorkflowInfo;
import com.norteksoft.wf.engine.core.DefinitionXmlParse;
import com.norteksoft.wf.engine.core.ExecutionVariableCommand;
import com.norteksoft.wf.engine.dao.WorkflowTypeDao;
import com.norteksoft.wf.engine.entity.Document;
import com.norteksoft.wf.engine.entity.DocumentFile;
import com.norteksoft.wf.engine.entity.Opinion;
import com.norteksoft.wf.engine.entity.WorkflowAttachment;
import com.norteksoft.wf.engine.entity.WorkflowAttachmentFile;
import com.norteksoft.wf.engine.entity.WorkflowDefinition;
import com.norteksoft.wf.engine.entity.WorkflowType;
import com.norteksoft.wf.engine.service.DataDictionaryManager;
import com.norteksoft.wf.engine.service.OfficeManager;
import com.norteksoft.wf.engine.service.TaskService;
import com.norteksoft.wf.engine.service.WorkflowAttachmentManager;
import com.norteksoft.wf.engine.service.WorkflowDefinitionManager;
import com.norteksoft.wf.engine.service.WorkflowInstanceManager;
import com.norteksoft.wf.engine.service.WorkflowRightsManager;
import com.norteksoft.wf.engine.service.WorkflowTypeManager;
/**
* 流程管理
* 管理流程的部署、启动、结束等
* @author x
* <br>com.norteksoft.api包下的类才是公开提供给用户使用的api。
*/
@Service
@Transactional
public class WorkflowClientManager implements WorkflowDefinitionService,WorkflowInstanceService,WorkflowTaskService,
WorkflowHistoryService,WorkflowFormService,WorkflowOpinionService,WorkflowDocumentService,WorkflowAttachmentService,WorkflowDataDictService,WorkflowRightService,WorkflowPermissionService{
private Log log = LogFactory.getLog(WorkflowClientManager.class);
private static String LOGMESSAGE_METHOD_PARAMETER = " method parameter: ";
private static final String LOG_METHOD_BEGIN=PropUtils.LOG_METHOD_BEGIN;
private static final String LOG_METHOD_END=PropUtils.LOG_METHOD_END;
private static final String LOG_CONTENT=PropUtils.LOG_CONTENT;
private static final String LOG_FLAG=PropUtils.LOG_FLAG;
private TaskService taskService;
private WorkflowInstanceManager workflowInstanceManager;
private WorkflowDefinitionManager workflowDefinitionManager;
// private BasicTypeManager basicTypeManager;
private DataDictionaryManager dataDictionaryManager;
private FormViewManager formManager;
private WorkflowRightsManager workflowRightsManager;
private OfficeManager officeManager;
private WorkflowAttachmentManager workflowAttachmentManager;
private GeneralDao generalDao;
private OptionGroupManager optionGroupManager;
private RankManager rankManager;
private WorkflowTypeManager workflowTypeManager;
private AcsUtils acsUtils;
@Autowired
private WorkflowTypeDao workflowTypeDao;
@Autowired
private JdbcSupport jdbcDao;
@Autowired
public void setRankManager(RankManager rankManager) {
this.rankManager = rankManager;
}
@Autowired
public void setOptionGroupManager(OptionGroupManager optionGroupManager) {
this.optionGroupManager = optionGroupManager;
}
@Autowired
public void setGeneralDao(GeneralDao generalDao) {
this.generalDao = generalDao;
}
@Autowired
public void setWorkflowAttachmentManager(
WorkflowAttachmentManager workflowAttachmentManager) {
this.workflowAttachmentManager = workflowAttachmentManager;
}
@Autowired
public void setOfficeManager(OfficeManager officeManager) {
this.officeManager = officeManager;
}
@Autowired
private ProcessEngine processEngine;
@Autowired
public void setWorkflowRightsManager(
WorkflowRightsManager workflowRightsManager) {
this.workflowRightsManager = workflowRightsManager;
}
@Autowired
public void setWorkflowTypeManager(WorkflowTypeManager workflowTypeManager) {
this.workflowTypeManager = workflowTypeManager;
}
@Autowired
public void setTaskService(TaskService taskService) {
log.debug("taskService" + taskService);
this.taskService = taskService;
}
@Autowired
public void setFormViewManager(FormViewManager formManager) {
this.formManager = formManager;
}
@Autowired
public void setWorkflowInstanceManager(
WorkflowInstanceManager workflowInstanceManager) {
log.debug("workflowInstanceManager" + workflowInstanceManager);
this.workflowInstanceManager = workflowInstanceManager;
}
@Autowired
public void setWorkflowDefinitionManager(
WorkflowDefinitionManager workflowDefinitionManager) {
log.debug("workflowDefinitionManager" + workflowDefinitionManager);
this.workflowDefinitionManager = workflowDefinitionManager;
}
@Autowired
public void setAcsUtils(AcsUtils acsUtils) {
this.acsUtils = acsUtils;
}
public void setProcessEngine(ProcessEngine processEngine) {
this.processEngine = processEngine;
}
public WorkflowTask getTask(Long taskId){
Assert.notNull(taskId, "获得task时taskId不能为null");
return BeanUtil.turnToModelTask(taskService.getWorkflowTask(taskId));
}
/**
* 查询当前用户所在公司
* @return
*/
public Long getCompanyId(FormFlowable entity){
Assert.notNull(ContextUtils.getCompanyId(), "companyId不能为null");
if(ContextUtils.getCompanyId()!=null){
return ContextUtils.getCompanyId();
}else if(entity!=null){
return entity.getCompanyId();
}
return null;
}
/**
* 查询当前用户登录名
* @return
*/
public String getLoginName(){
return ContextUtils.getLoginName();
}
/**
* 手动结束流程 ,entity.workflowInfo.processState将被设置为手动结束
* @param entity 走流程的实体
*/
public void endInstance(FormFlowable entity){
log.debug(LOG_METHOD_BEGIN+"WorkflowClientManager+endInstance(FormFlowable entity)"+LOG_FLAG);
log.debug(LOG_CONTENT+"entity"+LOG_FLAG+entity);
log.debug(LOG_CONTENT+"entity.getWorkflowInfo()***"+LOG_FLAG+entity.getWorkflowInfo());
log.debug(LOG_CONTENT+"entity.getWorkflowInfo().getWorkflowId()"+LOG_FLAG+entity.getWorkflowInfo().getWorkflowId());
Assert.notNull(entity,"FormFlowable不能为空");
if(entity.getWorkflowInfo()==null || entity.getWorkflowInfo().getWorkflowId()==null){
log.debug("entity.getWorkflowInfo()不能为null或entity.getWorkflowInfo().getWorkflowId()不能为null");
log.debug(LOG_METHOD_END+"WorkflowClientManager+endInstance(FormFlowable entity)"+LOG_FLAG);
throw new RuntimeException("entity.getWorkflowInfo()不能为null或entity.getWorkflowInfo().getWorkflowId()不能为null");
}
WorkflowInstance workflow = getInstance(entity.getWorkflowInfo().getWorkflowId());
if(workflow==null){
log.debug("流程实例不能为null");
throw new RuntimeException("流程实例不能为null");
}
log.debug(LOG_CONTENT+"结束JBPM流程实例开始"+LOG_FLAG);
processEngine.getExecutionService().endProcessInstance(workflow.getProcessInstanceId(),"cancel");
log.debug(LOG_CONTENT+"结束JBPM流程实例结束"+LOG_FLAG);
workflow.setProcessState(ProcessState.MANUAL_END);
workflow.setEndTime(new Date(System.currentTimeMillis()));
workflowInstanceManager.saveWorkflowInstance(BeanUtil.turnToWorkflowInstance(workflow));
log.debug(LOG_CONTENT+"结束当前实例对应的当前任务开始"+LOG_FLAG);
taskService.endTasks(workflow.getProcessInstanceId(),workflow.getCompanyId());
log.debug(LOG_CONTENT+"结束当前实例对应的当前任务开始"+LOG_FLAG);
entity.getWorkflowInfo().setProcessState(ProcessState.MANUAL_END);
log.debug(LOG_CONTENT+"workflow.getProcessState"+LOG_FLAG+workflow.getProcessState());
log.debug(LOG_CONTENT+"entity.getWorkflowInfo().getProcessState"+LOG_FLAG+entity.getWorkflowInfo().getProcessState());
log.debug(LOG_METHOD_END+"WorkflowClientManager+endInstance(FormFlowable entity)"+LOG_FLAG);
}
/**
* 手动结束流程
* @param workflowId 流程实例id
*/
public void endInstance(String workflowId){
log.debug(LOG_METHOD_BEGIN+"WorkflowClientManager+endInstance(String workflowId)"+LOG_FLAG);
log.debug(LOG_CONTENT+"workflowId"+LOG_FLAG+workflowId);
WorkflowInstance wi = getInstance(workflowId);
log.debug(LOG_CONTENT+"WorkflowInstance"+LOG_FLAG+wi);
endInstance(wi);
log.debug(LOG_METHOD_END+"WorkflowClientManager+endInstance(String workflowId)"+LOG_FLAG);
}
/**
* 手动结束流程
* @param workflow 流程实例
*/
public void endInstance(WorkflowInstance workflow){
log.debug(LOG_METHOD_BEGIN+"WorkflowClientManager+endInstance(WorkflowInstance workflow)"+LOG_FLAG);
log.debug(LOG_CONTENT+"结束JBPM流程实例开始"+LOG_FLAG);
processEngine.getExecutionService().endProcessInstance(workflow.getProcessInstanceId(),"cancel");
log.debug(LOG_CONTENT+"结束JBPM流程实例结束"+LOG_FLAG);
workflow.setProcessState(ProcessState.MANUAL_END);
workflow.setEndTime(new Date(System.currentTimeMillis()));
workflowInstanceManager.saveWorkflowInstance(BeanUtil.turnToWorkflowInstance(workflow));
log.debug(LOG_CONTENT+"结束当前实例对应的当前任务开始"+LOG_FLAG);
taskService.endTasks(workflow.getProcessInstanceId(),workflow.getCompanyId());
log.debug(LOG_CONTENT+"结束当前实例对应的当前任务开始"+LOG_FLAG);
FormView form = formManager.getFormView(workflow.getFormId());
if(StringUtils.isNotEmpty(form.getDataTable().getEntityName())){
Object entity = generalDao.getObject(form.getDataTable().getEntityName(), workflow.getDataId());
try {
BeanUtils.setProperty(entity, "workflowInfo.processState", ProcessState.MANUAL_END);
generalDao.save(entity);
log.debug(LOG_CONTENT+"entity.getWorkflowInfo().getProcessState"+LOG_FLAG+BeanUtils.getProperty(entity, "workflowInfo.processState"));
} catch (IllegalAccessException e) {
log.debug("为bean设置属性异常:" + e.getMessage());
} catch (InvocationTargetException e) {
log.debug("为bean设置属性异常:" +e.getMessage());
}catch (NoSuchMethodException e) {
log.debug("获得bean属性workflowInfo.processState时的异常:" +e.getMessage());
}
}else{
jdbcDao.updateTable("UPDATE "+form.getDataTable().getName()+" SET PROCESS_STATE="+ProcessState.MANUAL_END.getIndex()+" WHERE ID="+workflow.getDataId());
}
log.debug(LOG_CONTENT+"workflow.getProcessState"+LOG_FLAG+workflow.getProcessState());
log.debug(LOG_METHOD_END+"WorkflowClientManager+endInstance(WorkflowInstance workflow)"+LOG_FLAG);
}
@Deprecated
public void endInstance(com.norteksoft.wf.engine.entity.WorkflowInstance workflow){
log.debug(LOG_METHOD_BEGIN+"WorkflowClientManager+endInstance(WorkflowInstance workflow)"+LOG_FLAG);
log.debug(LOG_CONTENT+"结束JBPM流程实例开始"+LOG_FLAG);
processEngine.getExecutionService().endProcessInstance(workflow.getProcessInstanceId(),"cancel");
log.debug(LOG_CONTENT+"结束JBPM流程实例结束"+LOG_FLAG);
workflow.setProcessState(ProcessState.MANUAL_END);
workflow.setEndTime(new Date(System.currentTimeMillis()));
workflowInstanceManager.saveWorkflowInstance(workflow);
log.debug(LOG_CONTENT+"结束当前实例对应的当前任务开始"+LOG_FLAG);
taskService.endTasks(workflow.getProcessInstanceId(),workflow.getCompanyId());
log.debug(LOG_CONTENT+"结束当前实例对应的当前任务开始"+LOG_FLAG);
FormView form = formManager.getFormView(workflow.getFormId());
if(StringUtils.isNotEmpty(form.getDataTable().getEntityName())){
Object entity = generalDao.getObject(form.getDataTable().getEntityName(), workflow.getDataId());
try {
BeanUtils.setProperty(entity, "workflowInfo.processState", ProcessState.MANUAL_END);
generalDao.save(entity);
log.debug(LOG_CONTENT+"entity.getWorkflowInfo().getProcessState"+LOG_FLAG+BeanUtils.getProperty(entity, "workflowInfo.processState"));
} catch (IllegalAccessException e) {
log.debug("为bean设置属性异常:" + e.getMessage());
} catch (InvocationTargetException e) {
log.debug("为bean设置属性异常:" +e.getMessage());
}catch (NoSuchMethodException e) {
log.debug("获得bean属性workflowInfo.processState时的异常:" +e.getMessage());
}
}else{
jdbcDao.updateTable("UPDATE "+form.getDataTable().getName()+" SET PROCESS_STATE="+ProcessState.MANUAL_END.getIndex()+" WHERE ID="+workflow.getDataId());
}
log.debug(LOG_CONTENT+"workflow.getProcessState"+LOG_FLAG+workflow.getProcessState());
log.debug(LOG_METHOD_END+"WorkflowClientManager+endInstance(WorkflowInstance workflow)"+LOG_FLAG);
}
/**
* 查询所有启用的流程定义
* @return
*/
public List<com.norteksoft.product.api.entity.WorkflowDefinition> getWorkflowDefinitions() {
List<WorkflowDefinition> list=workflowDefinitionManager.getActiveDefinition();
List<com.norteksoft.product.api.entity.WorkflowDefinition> result=new ArrayList<com.norteksoft.product.api.entity.WorkflowDefinition>();
for(WorkflowDefinition definition:list){
result.add(getWorkflowDefinitionParameter(definition));
}
return result;
}
/**
* 用户保存实体后,根据流程定义名称来启动流程,如果流程启动,则不做任何处理直接返回
* @param workflowDefinitionCode
*/
public void startInstance(String workflowDefinitionCode, FormFlowable entity){
log.debug(LOG_METHOD_BEGIN+"发起实例,WorkflowClientManager+startInstance(String workflowDefinitionCode, FormFlowable entity)"+LOG_FLAG);
log.debug(LOG_CONTENT+"workflowDefinitionCode"+LOG_FLAG+workflowDefinitionCode);
Assert.notNull(entity,"FormFlowable实体不能为null");
log.debug(LOG_CONTENT+"entity"+LOG_FLAG+entity);
WorkflowDefinition definition = getEnabledHighestVersionDefinition(workflowDefinitionCode,getCompanyId(entity));
log.debug(LOG_CONTENT+"发起的流程"+LOG_FLAG+definition);
startInstance(definition,entity);
log.debug(LOG_METHOD_END+"发起实例,WorkflowClientManager+startInstance(String workflowDefinitionCode, FormFlowable entity)"+LOG_FLAG);
}
/**
* 用户保存实体后,根据流程定义名称来启动流程,如果流程启动,则不做任何处理直接返回
* @param workflowDefinitionName
*/
public void startInstance(Long workflowDefinitionId,FormFlowable entity){
Assert.notNull(workflowDefinitionId,"流程定义id不能为null");
Assert.notNull(entity,"FormFlowable实体不能为null");
log.debug(LOG_METHOD_BEGIN+"发起实例,WorkflowClientManager+startInstance(Long workflowDefinitionId,FormFlowable entity)"+LOG_FLAG);
WorkflowDefinition definition = this.getWorkflowDefinitionById(workflowDefinitionId);
log.debug(LOG_CONTENT+"发起的流程"+LOG_FLAG+definition);
startInstance(definition, entity);
log.debug(LOG_METHOD_END+"发起实例,WorkflowClientManager+startInstance(Long workflowDefinitionId,FormFlowable entity)"+LOG_FLAG);
}
public String startInstance(WorkflowDefinition workflowDefinition,FormFlowable entity){
Assert.notNull(workflowDefinition,"流程定义不能为null");
Assert.notNull(entity,"FormFlowable实体不能为null");
log.debug(LOG_METHOD_BEGIN+"发起实例,WorkflowClientManager+startInstance(WorkflowDefinition workflowDefinition,FormFlowable entity)"+LOG_FLAG);
log.debug(LOG_CONTENT+"entity.getWorkflowInfo()"+LOG_FLAG+entity.getWorkflowInfo());
int priority = 6;
//如果流程已经启动 直接返回实例的id
if(entity.getWorkflowInfo()!=null&&entity.getWorkflowInfo().getWorkflowId()!=null){
log.debug(LOG_CONTENT+"entity.getWorkflowInfo().getWorkflowId()"+LOG_FLAG+entity.getWorkflowInfo().getWorkflowId());
log.debug(LOG_CONTENT+"entity.getWorkflowInfo().getPriority()"+LOG_FLAG+entity.getWorkflowInfo().getPriority());
log.debug(LOG_CONTENT+"该流程已发起"+LOG_FLAG);
log.debug(LOG_METHOD_END+"发起实例,WorkflowClientManager+startInstance(WorkflowDefinition workflowDefinition,FormFlowable entity)"+LOG_FLAG);
return entity.getWorkflowInfo().getWorkflowId();
}
if(entity.getWorkflowInfo()!=null&&entity.getWorkflowInfo().getPriority()!=null) priority = entity.getWorkflowInfo().getPriority();
log.debug(LOG_CONTENT+"发起JBPM实例开始"+LOG_FLAG);
String instanceId = workflowInstanceManager.startWorkflowInstance(workflowDefinition.getProcessId(),priority,entity.getId());
log.debug(LOG_CONTENT+"流程实例Id,instanceId"+LOG_FLAG+instanceId);
log.debug(LOG_CONTENT+"发起JBPM实例结束"+LOG_FLAG);
com.norteksoft.wf.engine.entity.WorkflowInstance workflow = workflowInstanceManager.getWorkflowInstance(instanceId);
if(workflow==null){
log.debug("流程实例不能为null");
throw new RuntimeException("流程实例不能为null");
}
Assert.notNull(getLoginName(), "当前登录名不可为null");
com.norteksoft.task.entity.WorkflowTask task= taskService.getFirstTask(instanceId,getLoginName());
if(task==null){
log.debug("第一环节任务不能为null");
throw new RuntimeException("第一环节任务不能为null");
}
log.debug(LOG_CONTENT+"任务task"+LOG_FLAG+task);
log.debug(LOG_CONTENT+"entity.getId()"+LOG_FLAG+entity.getId());
workflow.setDataId(entity.getId());
WorkflowInfo workflowInfo = entity.getWorkflowInfo();
log.debug(LOG_CONTENT+"entity.getWorkflowInfo()"+LOG_FLAG+workflowInfo);
if(workflowInfo==null){
workflowInfo = new WorkflowInfo();
}
workflow.setCurrentActivity(task.getName());
workflowInfo.setWorkflowDefinitionId(workflowDefinition.getProcessId());
workflowInfo.setWorkflowDefinitionName(workflowDefinition.getName());
workflowInfo.setWorkflowDefinitionCode(workflowDefinition.getCode());
workflowInfo.setWorkflowDefinitionVersion(workflowDefinition.getVersion());
workflowInfo.setWorkflowId(instanceId);
workflowInfo.setFirstTaskId(task.getId());
workflowInfo.setCurrentActivityName(task.getName());
workflowInfo.setFormId(workflow.getFormId());
entity.setWorkflowInfo(workflowInfo);
workflowInstanceManager.saveFormFlowable(entity);
workflowInstanceManager.saveWorkflowInstance(workflow);
log.debug(LOG_CONTENT+"流程实例workflow"+LOG_FLAG+workflow);
log.debug(LOG_METHOD_END+"发起实例,WorkflowClientManager+startInstance(WorkflowDefinition workflowDefinition,FormFlowable entity)"+LOG_FLAG);
return instanceId;
}
/**
* 启动子流程
* @param subWorkflowDefinition
* @param entity
* @param parentWorkflowId
* @param parentExcutionId
* @return
*/
public String startSubProcess(String subWorkflowDefinitionId,FormFlowable entity,Map<String,Object> subNeedVariableMap ){
log.debug(LOG_METHOD_BEGIN+"发起子流程,WorkflowClientManager+startSubProcess(String subWorkflowDefinitionId,FormFlowable entity,Map<String,Object> subNeedVariableMap )"+LOG_FLAG);
if(subWorkflowDefinitionId==null){
log.debug(LOG_METHOD_END+"子流程Id为null,发起无效"+LOG_FLAG);
log.debug(LOG_METHOD_END+"发起子流程,WorkflowClientManager+startInstance(WorkflowDefinition workflowDefinition,FormFlowable entity)"+LOG_FLAG);
return null;
}
WorkflowDefinition wd = workflowDefinitionManager.getWorkflowDefinitionByProcessId(subWorkflowDefinitionId);
String result=startSubProcess(wd,entity,subNeedVariableMap);
log.debug(LOG_CONTENT+"WorkflowClientManager+发起子流程的返回结果result"+LOG_FLAG+result);
log.debug(LOG_METHOD_END+"发起子流程,WorkflowClientManager+startInstance(WorkflowDefinition workflowDefinition,FormFlowable entity)"+LOG_FLAG);
return result;
}
/**
* 启动子流程
* @param subWorkflowDefinition
* @param entity
* @param parentWorkflowId
* @param parentExcutionId
* @return
*/
public String startSubProcess(WorkflowDefinition subWorkflowDefinition,FormFlowable entity,Map<String,Object> subNeedVariableMap){
log.debug(LOG_METHOD_BEGIN+"发起子流程,WorkflowClientManager+startSubProcess(WorkflowDefinition subWorkflowDefinition,FormFlowable entity,Map<String,Object> subNeedVariableMap)"+LOG_FLAG);
log.debug(LOG_CONTENT+"entity.getWorkflowInfo()"+LOG_FLAG+entity.getWorkflowInfo());
int priority = 6;
//如果流程已经启动 直接返回实例的id
if(entity.getWorkflowInfo()!=null&&entity.getWorkflowInfo().getPriority()!=null) priority = entity.getWorkflowInfo().getPriority();
log.debug(LOG_CONTENT+"子流程实例变量CommonStrings.PRIORITY"+LOG_FLAG+priority);
log.debug(LOG_CONTENT+"子流程实例变量CommonStrings.FORM_DATA_ID"+LOG_FLAG+entity.getId());
subNeedVariableMap.put("priority", priority);
subNeedVariableMap.put(CommonStrings.FORM_DATA_ID, entity.getId());
log.debug(LOG_CONTENT+"发起子流程JBPM实例开始"+LOG_FLAG);
ProcessInstance pi = processEngine.getExecutionService()
.startProcessInstanceById(subWorkflowDefinition.getProcessId(),subNeedVariableMap);
log.debug(LOG_CONTENT+"发起子流程JBPM实例结束"+LOG_FLAG);
String instanceId = pi.getId();
log.debug(LOG_CONTENT+"子流程实例ID,instanceId"+LOG_FLAG+instanceId);
com.norteksoft.wf.engine.entity.WorkflowInstance workflow = workflowInstanceManager.getWorkflowInstance(instanceId);
workflow.setDataId(entity.getId());
WorkflowInfo workflowInfo = entity.getWorkflowInfo();
log.debug(LOG_CONTENT+"entity.getWorkflowInfo()"+LOG_FLAG+workflowInfo);
//TODO workflowInfo在父子流程公用实体时,会存在冲突问题
if(workflowInfo==null){
workflowInfo = new WorkflowInfo();
}
workflowInfo.setWorkflowDefinitionId(subWorkflowDefinition.getProcessId());
workflowInfo.setWorkflowDefinitionName(subWorkflowDefinition.getName());
workflowInfo.setWorkflowDefinitionCode(subWorkflowDefinition.getCode());
workflowInfo.setWorkflowDefinitionVersion(subWorkflowDefinition.getVersion());
workflowInfo.setWorkflowId(instanceId);
workflowInfo.setFirstTaskId(workflow.getFirstTaskId());
workflowInfo.setCurrentActivityName(workflow.getCurrentActivity());
workflowInfo.setFormId(workflow.getFormId());
entity.setWorkflowInfo(workflowInfo);
Map<String,String> parameterSetting=DefinitionXmlParse.getParameterSetting(workflow.getProcessDefinitionId());
String formViewUrl = parameterSetting.get(DefinitionXmlParse.FORM_VIEW_URL);
if(StringUtils.isEmpty(formViewUrl)){
formViewUrl = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_VIEW_URL);
}
String parameterName = parameterSetting.get(DefinitionXmlParse.FORM_VIEW_URL_PARAMETER_NAME);
if(StringUtils.isEmpty(parameterName)){
parameterName = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_VIEW_PARAMTER_NAME);
}
if(StringUtils.isNotEmpty(formViewUrl)){
String joinSign = StringUtils.contains(formViewUrl, "?") ? "&" : "?";
formViewUrl = ContextUtils.getSystemCode()+formViewUrl + joinSign + parameterName + "=";
}
log.debug(LOG_CONTENT + "查看表单的url"+LOG_FLAG + formViewUrl);
workflow.setFormUrl(formViewUrl);
String urgenUrl = parameterSetting.get(DefinitionXmlParse.URGEN_URL);
if(StringUtils.isEmpty(urgenUrl)){
urgenUrl = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_URGEN_URL);
}
String urgenParameterName = parameterSetting.get(DefinitionXmlParse.URGEN_URL_PARAMETER_NAME);
if(StringUtils.isEmpty(urgenParameterName)){
urgenParameterName = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_URGEN_PARAMTER_NAME);
}
if(StringUtils.isNotEmpty(urgenUrl)){
String joinSign = StringUtils.contains(urgenUrl, "?") ? "&" : "?";
urgenUrl = ContextUtils.getSystemCode()+urgenUrl + joinSign + urgenParameterName + "=";
}
log.debug(LOG_CONTENT + "应急处理的url"+LOG_FLAG + urgenUrl);
workflow.setEmergencyUrl(urgenUrl);
workflowInstanceManager.saveFormFlowable(entity);
workflowInstanceManager.saveWorkflowInstance(workflow);
log.debug(LOG_CONTENT+"子流程实例workflow"+LOG_FLAG+workflow);
log.debug(LOG_METHOD_END+"发起子流程,WorkflowClientManager+startSubProcess(WorkflowDefinition subWorkflowDefinition,FormFlowable entity,Map<String,Object> subNeedVariableMap)"+LOG_FLAG);
return instanceId;
}
/**
* 提交该流程实例的第一个任务
* @param workflowDefinitionName
* @param entity
* @param urlMap
* @return
*/
public CompleteTaskTipType submitWorkflowById(String workflowId,FormFlowable entity){
log.debug(LOG_METHOD_BEGIN+"提交流程,WorkflowClientManager+submitWorkflowById(String workflowId,FormFlowable entity)"+LOG_FLAG);
log.debug(LOG_CONTENT + "String workflowId:" +LOG_FLAG+ workflowId);
log.debug(LOG_CONTENT + "FormFlowable entity:"+LOG_FLAG + entity);
Assert.notNull(entity, "FormFlowable实体不可为null");
Assert.notNull(entity.getWorkflowInfo(), "entity.getWorkflowInfo()不可为null");
log.debug(LOG_CONTENT + "entity.getWorkflowInfo().getProcessState()"+LOG_FLAG + entity.getWorkflowInfo().getProcessState());
if(entity.getWorkflowInfo().getProcessState()!=ProcessState.UNSUBMIT){
log.debug(LOG_CONTENT + "流程已经被提交,此次提交无效"+LOG_FLAG );
log.debug(LOG_METHOD_END+"提交流程,WorkflowClientManager+submitWorkflowById(String workflowId,FormFlowable entity)"+LOG_FLAG);
return CompleteTaskTipType.MESSAGE.setContent("任务已完成");
}
String processId = null;
com.norteksoft.wf.engine.entity.WorkflowInstance workflow = workflowInstanceManager.getWorkflowInstance(workflowId);
if(workflow==null){
log.debug("流程实例不能为null");
throw new RuntimeException("流程实例不能为null");
}
processId = workflow.getProcessDefinitionId();
log.debug(LOG_CONTENT+"流程实例workflow" +LOG_FLAG + workflow);
Assert.notNull(getLoginName(), "当前登录名不可为空");
log.debug(LOG_CONTENT+"当前登录名getLoginName():" +LOG_FLAG+getLoginName());
com.norteksoft.task.entity.WorkflowTask task = taskService.getFirstTask(workflowId, getLoginName());
Assert.notNull(task,"查询的第一个任务不应该为空");
//设置第一个任务可见
task.setVisible(true);
taskService.addTitle(task, processId,null);
taskService.saveTask(task);
log.debug(LOG_CONTENT+"firstTask:"+LOG_FLAG + task);
//如果实体中设置了流向名,设置流向名给引擎
if(StringUtils.isNotEmpty(entity.getWorkflowInfo().getTransitionName()))this.setTransitionName(task.getId(), entity.getWorkflowInfo().getTransitionName());
//如果实体中设置了新的办理人,设置办理人给引擎
if(StringUtils.isNotEmpty(entity.getWorkflowInfo().getNewTransactor()))this.setNewTransactor(task.getId(), entity.getWorkflowInfo().getNewTransactor());
CompleteTaskTipType completeTaskTipType = taskService.completeWorkflowTask(task, TaskProcessingResult.SUBMIT);
log.debug(LOG_CONTENT+"第一环节任务完成结果"+LOG_FLAG + completeTaskTipType);
workflow.setSubmitTime(new Date(System.currentTimeMillis()));
if(completeTaskTipType==CompleteTaskTipType.OK&&workflow.getProcessState()==ProcessState.UNSUBMIT){
workflow.setProcessState(ProcessState.SUBMIT);
workflowInstanceManager.saveWorkflowInstance(workflow);
entity.getWorkflowInfo().setProcessState(ProcessState.SUBMIT);
entity.getWorkflowInfo().setState(workflow.getCurrentCustomState());
entity.getWorkflowInfo().setSubmitTime(workflow.getSubmitTime());
workflowInstanceManager.saveFormFlowable(entity);
}
Map<String,String> parameterSetting=DefinitionXmlParse.getParameterSetting(workflow.getProcessDefinitionId());
String formViewUrl = parameterSetting.get(DefinitionXmlParse.FORM_VIEW_URL);
if(StringUtils.isEmpty(formViewUrl)){
formViewUrl = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_VIEW_URL);
}
String parameterName = parameterSetting.get(DefinitionXmlParse.FORM_VIEW_URL_PARAMETER_NAME);
if(StringUtils.isEmpty(parameterName)){
parameterName = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_VIEW_PARAMTER_NAME);
}
if(StringUtils.isNotEmpty(formViewUrl)){
String joinSign = StringUtils.contains(formViewUrl, "?") ? "&" : "?";
formViewUrl = ContextUtils.getSystemCode()+formViewUrl + joinSign + parameterName + "=";
}
log.debug(LOG_CONTENT+"查看表单url"+LOG_FLAG + formViewUrl);
workflow.setFormUrl(formViewUrl);
String urgenUrl = parameterSetting.get(DefinitionXmlParse.URGEN_URL);
if(StringUtils.isEmpty(urgenUrl)){
urgenUrl = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_URGEN_URL);
}
String urgenParameterName = parameterSetting.get(DefinitionXmlParse.URGEN_URL_PARAMETER_NAME);
if(StringUtils.isEmpty(urgenParameterName)){
urgenParameterName = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_URGEN_PARAMTER_NAME);
}
if(StringUtils.isNotEmpty(urgenUrl)){
String joinSign = StringUtils.contains(urgenUrl, "?") ? "&" : "?";
urgenUrl = ContextUtils.getSystemCode()+urgenUrl + joinSign + urgenParameterName + "=";
}
log.debug(LOG_CONTENT+"应急处理url"+LOG_FLAG + urgenUrl);
workflow.setEmergencyUrl(urgenUrl);
workflowInstanceManager.saveWorkflowInstance(workflow);
log.debug(LOG_CONTENT+"流程实例设置了值后workflow" +LOG_FLAG + workflow);
log.debug(LOG_CONTENT+"提交流程返回结果" +LOG_FLAG + completeTaskTipType);
log.debug(LOG_METHOD_END+"提交流程,WorkflowClientManager+submitWorkflowById(String workflowId,FormFlowable entity)"+LOG_FLAG);
return completeTaskTipType;
}
@Deprecated
public CompleteTaskTipType submitWorkflowById(String workflowId,FormFlowable entity, Map<String,String> urlMap){
log.debug(LOGMESSAGE_METHOD_PARAMETER + "String workflowId:" + workflowId);
log.debug(LOGMESSAGE_METHOD_PARAMETER + "FormFlowable entity:" + entity);
log.debug(LOGMESSAGE_METHOD_PARAMETER + "Map<String,String> urlMap:" + urlMap.toString());
Assert.notNull(entity, "表单实体不可为空");
Assert.notNull(entity.getWorkflowInfo(), "entity.getWorkflowInfo()不可为空");
if(entity.getWorkflowInfo().getProcessState()!=ProcessState.UNSUBMIT) return CompleteTaskTipType.MESSAGE.setContent("任务已完成");
com.norteksoft.wf.engine.entity.WorkflowInstance workflow = workflowInstanceManager.getWorkflowInstance(workflowId);
Assert.notNull(workflow, "workflow不可为空");
log.debug("workflow" + workflow);
Assert.notNull(getLoginName(), "当前登录名不可为null");
log.debug("getLoginName():" +getLoginName());
com.norteksoft.task.entity.WorkflowTask task = taskService.getFirstTask(workflowId, getLoginName());
Assert.notNull(task,"查询的第一个任务不应该为空");
log.debug("firstTask:" + task);
Assert.notNull(getProcessUrl(urlMap),"url不应该为null");
taskService.executionVariableCommand(new ExecutionVariableCommand(workflowId, getProcessUrl(urlMap)));
CompleteTaskTipType completeTaskTipType = taskService.completeWorkflowTask(task, TaskProcessingResult.SUBMIT);
if(completeTaskTipType==CompleteTaskTipType.OK){
workflow.setProcessState(ProcessState.SUBMIT);
workflow.setSubmitTime(new Date(System.currentTimeMillis()));
entity.getWorkflowInfo().setProcessState(ProcessState.SUBMIT);
entity.getWorkflowInfo().setState(workflow.getCurrentCustomState());
entity.getWorkflowInfo().setSubmitTime(workflow.getSubmitTime());
workflowInstanceManager.saveFormFlowable(entity);
}
Map<String,String> parameterSetting=DefinitionXmlParse.getParameterSetting(workflow.getProcessDefinitionId());
String formViewUrl = parameterSetting.get(DefinitionXmlParse.FORM_VIEW_URL);
if(StringUtils.isEmpty(formViewUrl)){
formViewUrl = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_VIEW_URL);
}
String parameterName = parameterSetting.get(DefinitionXmlParse.FORM_VIEW_URL_PARAMETER_NAME);
if(StringUtils.isEmpty(parameterName)){
parameterName = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_VIEW_PARAMTER_NAME);
}
if(StringUtils.isNotEmpty(formViewUrl)){
String joinSign = StringUtils.contains(formViewUrl, "?") ? "&" : "?";
formViewUrl = ContextUtils.getSystemCode()+formViewUrl + joinSign + parameterName + "=";
}
workflow.setFormUrl(formViewUrl);
workflowInstanceManager.saveWorkflowInstance(workflow);
return completeTaskTipType;
}
public CompleteTaskTipType submitInstance(String workflowDefinitionCode, FormFlowable entity){
log.debug(LOG_METHOD_BEGIN+"提交流程,WorkflowClientManager+submitInstance(String workflowDefinitionCode, FormFlowable entity)"+LOG_FLAG);
log.debug(LOG_CONTENT + "String workflowDefinitionName:"+LOG_FLAG + workflowDefinitionCode);
log.debug(LOG_CONTENT + "FormFlowable entity:" +LOG_FLAG+ entity);
Assert.notNull(entity, "FormFlowable实体不能为null");
log.debug(LOG_CONTENT +"entity.getWorkflowInfo()" +LOG_FLAG+ entity.getWorkflowInfo());
String workflowId = null;
if(entity.getWorkflowInfo()==null || entity.getWorkflowInfo().getWorkflowId() == null){
log.debug(LOG_CONTENT +"compayId" +LOG_FLAG+ getCompanyId(entity));
WorkflowDefinition definition = getEnabledHighestVersionDefinition(workflowDefinitionCode,getCompanyId(entity));
log.debug(LOG_CONTENT +"提交的流程" +LOG_FLAG+ definition);
workflowId = startInstance(definition, entity) ;
}else{
Assert.notNull(entity.getWorkflowInfo(), "entity.getWorkflowInfo()不能为null");
log.debug(LOG_CONTENT +"实例Id,entity.getWorkflowInfo().getWorkflowId()" +LOG_FLAG+ entity.getWorkflowInfo().getWorkflowId());
workflowId = entity.getWorkflowInfo().getWorkflowId();
}
log.debug(LOG_CONTENT+"实例Id,workflowId"+LOG_FLAG + workflowId);
CompleteTaskTipType result=submitWorkflowById(workflowId,entity);
log.debug(LOG_CONTENT+"提交流程返回结果result"+LOG_FLAG + result);
log.debug(LOG_METHOD_END+"提交流程,WorkflowClientManager+submitInstance(String workflowDefinitionCode, FormFlowable entity)"+LOG_FLAG);
return result;
}
/**
* 提交流程
* 提交前用户保存自己的实体;
* 如果流程没有启动,则启动流程并提交
* 若流程已经在保存时启动了,则只提交流程
*/
@Deprecated
public CompleteTaskTipType submitInstance(String definitionCode, FormFlowable entity, Map<String,String> urlMap){
log.debug(LOGMESSAGE_METHOD_PARAMETER + "String workflowDefinitionName:" + definitionCode);
log.debug(LOGMESSAGE_METHOD_PARAMETER + "FormFlowable entity:" + entity);
log.debug(LOGMESSAGE_METHOD_PARAMETER + "Map<String,String> urlMap:" + urlMap);
Assert.notNull(entity, "entity不能为空");
log.debug("workflowInfo:" + entity.getWorkflowInfo());
String workflowId = null;
if(entity.getWorkflowInfo()==null || entity.getWorkflowInfo().getWorkflowId() == null){
WorkflowDefinition definition = getEnabledHighestVersionDefinition(definitionCode,getCompanyId(entity));
workflowId = startInstance(definition, entity) ;
}else{
workflowId = entity.getWorkflowInfo().getWorkflowId();
}
log.debug("workflowId" + workflowId);
return submitWorkflowById(workflowId,entity,urlMap);
}
/**
* 提交流程
* 提交前用户保存自己的实体;
* 如果流程没有启动,则启动流程并提交
* 若流程已经在保存时启动了,则只提交流程
* @param workflowDefinitionId 工作流定义id
* @param entity
* @param urlMap
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*/
public CompleteTaskTipType submitInstance(Long workflowDefinitionId, FormFlowable entity){
log.debug(LOG_METHOD_BEGIN+"提交流程,WorkflowClientManager+submitInstance(Long workflowDefinitionId, FormFlowable entity)"+LOG_FLAG);
WorkflowDefinition definition = this.getWorkflowDefinitionById(workflowDefinitionId);
log.debug(LOG_CONTENT + "提交的流程definition"+LOG_FLAG + definition);
log.debug(LOG_CONTENT + "entity.getWorkflowInfo()"+LOG_FLAG + entity.getWorkflowInfo());
String instanceId = entity.getWorkflowInfo() == null ? startInstance(definition, entity) : entity.getWorkflowInfo().getWorkflowId();
log.debug(LOG_CONTENT + "流程实例Id,instanceId"+LOG_FLAG +instanceId);
CompleteTaskTipType result=submitWorkflowById(instanceId,entity);
log.debug(LOG_CONTENT+"提交流程返回结果result"+LOG_FLAG + result);
log.debug(LOG_METHOD_END+"提交流程,WorkflowClientManager+submitInstance(Long workflowDefinitionId, FormFlowable entity)"+LOG_FLAG);
return result;
}
@Deprecated
public CompleteTaskTipType submitInstance(Long workflowDefinitionId, FormFlowable entity, Map<String,String> urlMap){
WorkflowDefinition definition = this.getWorkflowDefinitionById(workflowDefinitionId);
String instanceId = entity.getWorkflowInfo() == null ? startInstance(definition, entity) : entity.getWorkflowInfo().getWorkflowId();
return submitWorkflowById(instanceId,entity,urlMap);
}
/**
* 提交流程
* 提交前用户保存自己的实体;
* 如果流程没有启动,则启动流程并提交
* 若流程已经在保存时启动了,则只提交流程
* @param workflowDefinition 流程定义
* @param entity
* @param urlMap
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*/
public CompleteTaskTipType submitInstance(WorkflowDefinition workflowDefinition, FormFlowable entity){
log.debug(LOG_METHOD_BEGIN+"提交流程,WorkflowClientManager+submitInstance(WorkflowDefinition workflowDefinition, FormFlowable entity)"+LOG_FLAG);
log.debug(LOG_CONTENT + "entity.getWorkflowInfo()"+LOG_FLAG + entity.getWorkflowInfo());
String instanceId = entity.getWorkflowInfo() == null ? startInstance(workflowDefinition, entity) : entity.getWorkflowInfo().getWorkflowId();
log.debug(LOG_CONTENT + "流程实例Id,instanceId"+LOG_FLAG +instanceId);
CompleteTaskTipType result=submitWorkflowById(instanceId,entity);
log.debug(LOG_CONTENT+"提交流程返回结果result"+LOG_FLAG + result);
log.debug(LOG_METHOD_END+"提交流程,WorkflowClientManager+submitInstance(WorkflowDefinition workflowDefinition, FormFlowable entity)"+LOG_FLAG);
return result;
}
@Deprecated
public CompleteTaskTipType submitInstance(WorkflowDefinition workflowDefinition, FormFlowable entity, Map<String,String> urlMap){
String instanceId = entity.getWorkflowInfo() == null ? startInstance(workflowDefinition, entity) : entity.getWorkflowInfo().getWorkflowId();
return submitWorkflowById(instanceId,entity,urlMap);
}
/* 将用户定义的任务办理URL处理为流程Execution中的变量URL
* @param urlMap
* @return
*/
private Map<String, String> getProcessUrl(Map<String,String> urlMap){
Map<String,String> map = new HashMap<String,String>();
WorkflowDefinition wfd = null;
for(String wfdName:urlMap.keySet()){
if(wfdName.equals(WorkflowInstanceService.WF_FORM_URL)) continue;
wfd = getEnabledHighestVersionDefinition(wfdName);//workflowDefinitionManager.getLatestVersion(wfdName, this.getCompanyId());
log.debug("url的表单名:"+wfdName);
log.debug("workflowDefinition:"+wfd);
map.put(CommonStrings.TASK_URL_PREFIX + wfd.getProcessId(), urlMap.get(wfdName));
}
return map;
}
/**
* 获取最新流程定义
* @param workflowDefinitionName
* @param companyId
* @return
*/
public WorkflowDefinition getLatestVersionWorkflowDefinition(String workflowDefinitionName,Long companyId){
return workflowDefinitionManager.getLatestVersion(workflowDefinitionName, companyId);
}
/**
* 获取启用且版本最高的流程定义
* @param workflowDefinitionCode
* @param companyId
* @exception NotFoundEnabledWorkflowDefinitionException if not found started workflowDefinition by workflowDefinitionName
* @return 流程定义
*/
public com.norteksoft.product.api.entity.WorkflowDefinition getEnabledHighestVersionWorkflowDefinition(String workflowDefinitionCode){
WorkflowDefinition definition = workflowDefinitionManager.getEnabledHighestVersionWorkflowDefinition(workflowDefinitionCode);
if(definition==null) throw new NotFoundEnabledWorkflowDefinitionException("not found started workflowDefinition by name:"+workflowDefinitionCode);
return getWorkflowDefinitionParameter(definition);
}
/**
* 获取启用且版本最高的流程定义
* @param workflowDefinitionCode
* @param companyId
* @exception NotFoundEnabledWorkflowDefinitionException if not found started workflowDefinition by workflowDefinitionName
* @return 流程定义
*/
private WorkflowDefinition getEnabledHighestVersionDefinition(String workflowDefinitionCode){
WorkflowDefinition definition = workflowDefinitionManager.getEnabledHighestVersionWorkflowDefinition(workflowDefinitionCode);
if(definition==null) throw new NotFoundEnabledWorkflowDefinitionException("not found started workflowDefinition by name:"+workflowDefinitionCode);
return definition;
}
/**
* 获取启用且版本最高的流程定义
* @param workflowDefinitionCode
* @param companyId
* @exception NotFoundEnabledWorkflowDefinitionException if not found started workflowDefinition by workflowDefinitionName
* @return 流程定义
*/
private WorkflowDefinition getEnabledHighestVersionDefinitionBySystem(String workflowDefinitionCode,Long systemId){
WorkflowDefinition definition = workflowDefinitionManager.getEnabledHighestVersionWorkflowDefinitionBySystem(workflowDefinitionCode,systemId);
if(definition==null) throw new NotFoundEnabledWorkflowDefinitionException("not found started workflowDefinition by name:"+workflowDefinitionCode);
return definition;
}
/**
* 获取启用且版本最高的流程定义
* @param workflowDefinitionCode
* @param companyId
* @exception NotFoundEnabledWorkflowDefinitionException if not found started workflowDefinition by workflowDefinitionName
* @return 流程定义
*/
private WorkflowDefinition getEnabledHighestVersionDefinition(String workflowDefinitionCode,Long companyId){
Assert.notNull(companyId,"获取启用且版本最高的流程定义时公司id不能为null");
WorkflowDefinition definition = workflowDefinitionManager.getEnabledHighestVersionWorkflowDefinition(workflowDefinitionCode,companyId);
if(definition==null){
log.debug("not found started workflowDefinition by name:"+workflowDefinitionCode);
throw new NotFoundEnabledWorkflowDefinitionException("not found started workflowDefinition by name:"+workflowDefinitionCode);
}
return definition;
}
private com.norteksoft.product.api.entity.WorkflowDefinition getWorkflowDefinitionParameter(WorkflowDefinition definition){
com.norteksoft.product.api.entity.WorkflowDefinition wdp=new com.norteksoft.product.api.entity.WorkflowDefinition();
wdp.setCode(definition.getCode());
wdp.setId(definition.getId());
wdp.setName(definition.getName());
wdp.setVersion(definition.getVersion());
wdp.setFormCode(definition.getFormCode());
wdp.setFromVersion(definition.getFromVersion());
return wdp;
}
/**
* 删除流程实例 。如果业务实体的workflowInfo为空或workflowInfo.workflowId为空,将不会发生任何操作
* @param entity 业务实体
*/
public void deleteInstance(FormFlowable entity){
log.debug(LOG_METHOD_BEGIN+"删除实例任务等,WorkflowClientManager+deleteInstance(FormFlowable entity)"+LOG_FLAG);
log.debug(LOG_CONTENT + "entity"+LOG_FLAG + entity);
log.debug(LOG_CONTENT + "entity.getWorkflowInfo()"+LOG_FLAG + entity.getWorkflowInfo());
log.debug(LOG_CONTENT + "entity.getWorkflowInfo().getWorkflowId()"+LOG_FLAG + entity.getWorkflowInfo().getWorkflowId());
if(entity==null || entity.getWorkflowInfo()==null || entity.getWorkflowInfo().getWorkflowId() == null){
log.debug(LOG_CONTENT + "该表单未发起对应的流程实例,所以不需删除实例"+LOG_FLAG );
log.debug(LOG_METHOD_END+"提交流程,WorkflowClientManager+deleteInstance(FormFlowable entity)"+LOG_FLAG);
return ;
}
workflowInstanceManager.deleteWorkflowInstance(workflowInstanceManager.getWorkflowInstance(entity.getWorkflowInfo().getWorkflowId()),false);
log.debug(LOG_METHOD_END+"删除实例任务等,WorkflowClientManager+deleteInstance(FormFlowable entity)"+LOG_FLAG);
}
/**
* 删除流程实例
* @param workflowId 工作流id
*/
public void deleteInstance(String workflowId){
log.debug(LOG_METHOD_BEGIN+"删除实例任务等,WorkflowClientManager+deleteInstance(String workflowId)"+LOG_FLAG);
com.norteksoft.wf.engine.entity.WorkflowInstance wfi = workflowInstanceManager.getWorkflowInstance(workflowId);
log.debug(LOG_CONTENT + "要删除的实例WorkflowInstance"+LOG_FLAG + wfi);
workflowInstanceManager.deleteWorkflowInstance(wfi,false);
log.debug(LOG_METHOD_END+"删除实例任务等,WorkflowClientManager+deleteInstance(String workflowId)"+LOG_FLAG);
}
/**
* 根据TaskId完成任务,没有办理意见
* @param taskId
* @param result
* @return false时,需要设置办理人,true时任务完成
*/
public CompleteTaskTipType completeWorkflowTask(Long taskId, TaskProcessingResult result,String allOriginalUsers){
Assert.notNull(taskId,"completeWorkflowTask中,taskId(任务id不能为null");
log.debug(LOG_METHOD_BEGIN+"完成任务,WorkflowClientManager+completeWorkflowTask(Long taskId, TaskTransact result,String allOriginalUsers)"+LOG_FLAG);
com.norteksoft.task.entity.WorkflowTask task=taskService.getWorkflowTask(taskId);
log.debug(LOG_CONTENT + "当前任务"+LOG_FLAG + task);
CompleteTaskTipType completeResult=taskService.completeWorkflowTask(task,result,TaskSetting.getTaskSettingInstance().setAllOriginalUsers(allOriginalUsers));
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成任务,WorkflowClientManager+completeWorkflowTask(Long taskId, TaskTransact result,String allOriginalUsers)"+LOG_FLAG);
return completeResult;
}
/**
* 完成交互的任务
* @param taskId
* @param operation
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*/
public CompleteTaskTipType completeInteractiveWorkflowTask(Long taskId ,String allOriginalUsers){
log.debug(LOG_METHOD_BEGIN+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(Long taskId ,String allOriginalUsers)"+LOG_FLAG);
log.debug(LOG_CONTENT + "当前任务Id"+LOG_FLAG + taskId);
log.debug(LOG_CONTENT + "原办理人登录名"+LOG_FLAG + allOriginalUsers);
CompleteTaskTipType completeResult=taskService.completeInteractiveWorkflowTask(taskId,allOriginalUsers);
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(Long taskId ,String allOriginalUsers)"+LOG_FLAG);
return completeResult;
}
/**
* 完成交互的任务
* @param taskId
* @param operation
* @param transcators 下一环节办理人
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*/
public CompleteTaskTipType completeInteractiveWorkflowTask(Long taskId, Collection<String> transcators,String allOriginalUsers){
Assert.notNull(taskId,"任务id不能为null");
log.debug(LOG_METHOD_BEGIN+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(Long taskId, Collection<String> transcators,String allOriginalUsers)"+LOG_FLAG);
log.debug(LOG_CONTENT + "当前任务Id"+LOG_FLAG + taskId);
log.debug(LOG_CONTENT + "下一环节办理人登录名"+LOG_FLAG + transcators);
log.debug(LOG_CONTENT + "原办理人登录名"+LOG_FLAG + allOriginalUsers);
CompleteTaskTipType completeResult=taskService.completeInteractiveWorkflowTask(taskId, transcators,allOriginalUsers);
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(Long taskId, Collection<String> transcators,String allOriginalUsers)"+LOG_FLAG);
return completeResult;
}
/**
* 完成交互的任务
* @param taskId
* @param operation
* @param transcators 下一环节办理人
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*/
public CompleteTaskTipType completeInteractiveWorkflowTask(Long taskId,String allOriginalUsers, String... transcators){
Assert.notNull(taskId,"任务id不能为null");
log.debug(LOG_METHOD_BEGIN+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(Long taskId,String allOriginalUsers, String... transcators)"+LOG_FLAG);
log.debug(LOG_CONTENT + "当前任务Id"+LOG_FLAG + taskId);
log.debug(LOG_CONTENT + "下一环节办理人登录名"+LOG_FLAG + transcators);
log.debug(LOG_CONTENT + "原办理人登录名"+LOG_FLAG + allOriginalUsers);
CompleteTaskTipType completeResult= taskService.completeInteractiveWorkflowTask(taskId, allOriginalUsers,transcators);
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(Long taskId,String allOriginalUsers, String... transcators)"+LOG_FLAG);
return completeResult;
}
@Deprecated
public CompleteTaskTipType completeInteractiveWorkflowTask(com.norteksoft.task.entity.WorkflowTask task,String allOriginalUsers){
log.debug(LOG_METHOD_BEGIN+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String allOriginalUsers)"+LOG_FLAG);
log.debug(LOG_CONTENT + "当前任务"+LOG_FLAG + task);
log.debug(LOG_CONTENT + "原办理人登录名"+LOG_FLAG + allOriginalUsers);
CompleteTaskTipType completeResult= taskService.completeInteractiveWorkflowTask(task,allOriginalUsers);
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String allOriginalUsers)"+LOG_FLAG);
return completeResult;
}
/**
* 完成交互的任务
* @param task
* @param operation
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*/
public CompleteTaskTipType completeInteractiveWorkflowTask(WorkflowTask task,String allOriginalUsers){
log.debug(LOG_METHOD_BEGIN+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String allOriginalUsers)"+LOG_FLAG);
log.debug(LOG_CONTENT + "当前任务"+LOG_FLAG + task);
log.debug(LOG_CONTENT + "原办理人登录名"+LOG_FLAG + allOriginalUsers);
CompleteTaskTipType completeResult= taskService.completeInteractiveWorkflowTask(BeanUtil.turnToTask(task),allOriginalUsers);
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String allOriginalUsers)"+LOG_FLAG);
return completeResult;
}
/**
* 完成交互的任务
* @param task
* @param operation
* @param transcators 下一环节办理人
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*/
public CompleteTaskTipType completeInteractiveWorkflowTask(WorkflowTask task,Collection<String> transcators,String allOriginalUsers){
log.debug(LOG_METHOD_BEGIN+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,Collection<String> transcators,String allOriginalUsers)"+LOG_FLAG);
log.debug(LOG_CONTENT + "当前任务"+LOG_FLAG + task);
log.debug(LOG_CONTENT + "原办理人登录名"+LOG_FLAG + allOriginalUsers);
CompleteTaskTipType completeResult= taskService.completeInteractiveWorkflowTask(BeanUtil.turnToTask(task), transcators,allOriginalUsers);
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,Collection<String> transcators,String allOriginalUsers)"+LOG_FLAG);
return completeResult;
}
@Deprecated
public CompleteTaskTipType completeInteractiveWorkflowTask(com.norteksoft.task.entity.WorkflowTask task,Collection<String> transcators,String allOriginalUsers){
log.debug(LOG_METHOD_BEGIN+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,Collection<String> transcators,String allOriginalUsers)"+LOG_FLAG);
log.debug(LOG_CONTENT + "当前任务"+LOG_FLAG + task);
log.debug(LOG_CONTENT + "原办理人登录名"+LOG_FLAG + allOriginalUsers);
CompleteTaskTipType completeResult= taskService.completeInteractiveWorkflowTask(task, transcators,allOriginalUsers);
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,Collection<String> transcators,String allOriginalUsers)"+LOG_FLAG);
return completeResult;
}
public CompleteTaskTipType completeInteractiveWorkflowTask(WorkflowTask task,String allOriginalUsers,String... transcators){
log.debug(LOG_METHOD_BEGIN+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String allOriginalUsers,String... transcators)"+LOG_FLAG);
log.debug(LOG_CONTENT + "当前任务"+LOG_FLAG + task);
log.debug(LOG_CONTENT + "原办理人登录名"+LOG_FLAG + allOriginalUsers);
CompleteTaskTipType completeResult=taskService.completeInteractiveWorkflowTask(BeanUtil.turnToTask(task), allOriginalUsers,transcators);
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String allOriginalUsers,String... transcators)"+LOG_FLAG);
return completeResult;
}
@Deprecated
public CompleteTaskTipType completeInteractiveWorkflowTask(com.norteksoft.task.entity.WorkflowTask task,String allOriginalUsers,String... transcators){
log.debug(LOG_METHOD_BEGIN+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String allOriginalUsers,String... transcators)"+LOG_FLAG);
log.debug(LOG_CONTENT + "当前任务"+LOG_FLAG + task);
log.debug(LOG_CONTENT + "原办理人登录名"+LOG_FLAG + allOriginalUsers);
CompleteTaskTipType completeResult=taskService.completeInteractiveWorkflowTask(task, allOriginalUsers,transcators);
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String allOriginalUsers,String... transcators)"+LOG_FLAG);
return completeResult;
}
/**
* 完成交互的任务
* @param task
* @param operation
* @param transcators 下一环节办理人
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*/
public CompleteTaskTipType completeInteractiveWorkflowTask(WorkflowTask task,String transcators,String allOriginalUsers){
log.debug(LOG_METHOD_BEGIN+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String transcators,String allOriginalUsers)"+LOG_FLAG);
log.debug(LOG_CONTENT + "当前任务"+LOG_FLAG + task);
log.debug(LOG_CONTENT + "原办理人登录名"+LOG_FLAG + allOriginalUsers);
CompleteTaskTipType completeResult=taskService.completeInteractiveWorkflowTask(BeanUtil.turnToTask(task), transcators,allOriginalUsers);
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String transcators,String allOriginalUsers)"+LOG_FLAG);
return completeResult;
}
@Deprecated
public CompleteTaskTipType completeInteractiveWorkflowTask(com.norteksoft.task.entity.WorkflowTask task,String transcators,String allOriginalUsers){
log.debug(LOG_METHOD_BEGIN+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String transcators,String allOriginalUsers)"+LOG_FLAG);
log.debug(LOG_CONTENT + "当前任务"+LOG_FLAG + task);
log.debug(LOG_CONTENT + "原办理人登录名"+LOG_FLAG + allOriginalUsers);
CompleteTaskTipType completeResult=taskService.completeInteractiveWorkflowTask(task, transcators,allOriginalUsers);
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_END+"完成交互任务,WorkflowClientManager+completeInteractiveWorkflowTask(WorkflowTask task,String transcators,String allOriginalUsers)"+LOG_FLAG);
return completeResult;
}
/**
* 完成任务
*/
public CompleteTaskTipType completeWorkflowTask(WorkflowTask task, TaskProcessingResult result,String allOriginalUsers){
log.debug(LOG_METHOD_BEGIN+"完成任务,WorkflowClientManager+completeWorkflowTask(WorkflowTask task, TaskTransact result,String allOriginalUsers)"+LOG_FLAG);
CompleteTaskTipType completeResult=taskService.completeWorkflowTask(BeanUtil.turnToTask(task),result,TaskSetting.getTaskSettingInstance().setAllOriginalUsers(allOriginalUsers));
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_BEGIN+"完成任务,WorkflowClientManager+completeWorkflowTask(WorkflowTask task, TaskTransact result,String allOriginalUsers)"+LOG_FLAG);
return completeResult;
}
@Deprecated
public CompleteTaskTipType completeWorkflowTask(com.norteksoft.task.entity.WorkflowTask task, TaskProcessingResult result,String allOriginalUsers){
log.debug(LOG_METHOD_BEGIN+"完成任务,WorkflowClientManager+completeWorkflowTask(WorkflowTask task, TaskTransact result,String allOriginalUsers)"+LOG_FLAG);
CompleteTaskTipType completeResult=taskService.completeWorkflowTask(task,result,TaskSetting.getTaskSettingInstance().setAllOriginalUsers(allOriginalUsers));
log.debug(LOG_CONTENT + "完成任务的返回值"+LOG_FLAG + completeResult);
log.debug(LOG_METHOD_BEGIN+"完成任务,WorkflowClientManager+completeWorkflowTask(WorkflowTask task, TaskTransact result,String allOriginalUsers)"+LOG_FLAG);
return completeResult;
}
/**
* 查询下环节任务的办理人
* @param taskId
* @return Map<String[办理模式,任务名] ,List<String[用户名称,用户登录名称] >>
*/
public Map<String[], List<String[]>> getNextTasksCandidates(Long taskId){
Assert.notNull(taskId,"查询下环节任务的办理人时,任务id不能为null");
return taskService.getNextTasksCandidates(taskService.getWorkflowTask(taskId));
}
/**
* 根据任务id获得流程定义的id. 如果对应的任务不存在,则返回null
* @param taskId 任务id
* @return 流程定义id
*/
public Long getWorkflowDefinitionIdByTask(Long taskId){
com.norteksoft.task.entity.WorkflowTask task = taskService.getWorkflowTask(taskId);
if(task==null) return null;
com.norteksoft.wf.engine.entity.WorkflowInstance instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
Assert.notNull(instance,"任务id为"+taskId+"的任务存在,而实例却不存在。");
return instance.getWorkflowDefinitionId();
}
/**
* 用定义id查询流程定义
* @param workflowDefinitionId 定义id
* @return 流程定义
*/
public com.norteksoft.product.api.entity.WorkflowDefinition getWorkflowDefinition(Long workflowDefinitionId){
WorkflowDefinition wfd = workflowDefinitionManager.getWfDefinition(workflowDefinitionId);
if(wfd == null) throw new RuntimeException("没有查询到流程定义,流程定义ID["+workflowDefinitionId+"]");
return getWorkflowDefinitionParameter(wfd);
}
/**
* 用定义id查询流程定义
* @param workflowDefinitionId 定义id
* @return 流程定义
*/
public WorkflowDefinition getWorkflowDefinitionById(Long workflowDefinitionId){
Assert.notNull(workflowDefinitionId,"流程定义id不能为null");
return workflowDefinitionManager.getWfDefinition(workflowDefinitionId);
}
/**
* 根据流程实例ID查询流程定义.如果对应的工作流实例不存在,则返回null;
* @param workflowId
* @return 流程定义
*/
public WorkflowDefinition getWorkflowDefinitionByWorkflowId(String workflowId){
WorkflowInstance workflow = getInstance(workflowId);
log.debug("工作流实例:"+workflow);
if(workflow==null) return null;
log.debug("对应流程定义id为:"+workflow.getWorkflowDefinitionId());
return getWorkflowDefinitionById(workflow.getWorkflowDefinitionId());
}
/**
* 根据实例id查询流程实例
* @param workflowId 流程实例的唯一标识
* @return 流程实例
*/
public WorkflowInstance getInstance(String workflowId){
return BeanUtil.turnToModelWorkflowInstance(workflowInstanceManager.getWorkflowInstance(workflowId));
}
/**
* 查询流程定义
* @param processId 流程id
* @return 流程定义
*/
public WorkflowDefinition getWorkflowDefinition(String processId){
return workflowDefinitionManager.getWorkflowDefinitionByProcessId(processId);
}
/**
* 根据task查询流程实例表单ID.
* @param taskId 任务id
* @return 表单id
*/
public Long getFormIdByTask(Long taskId){
com.norteksoft.task.entity.WorkflowTask task = taskService.getWorkflowTask(taskId);
if(task==null) return null;
return getFormIdByTask(task);
}
/**
* 根据task查询流程实例表单ID
* @param task 任务
* @return 表单id
*/
public Long getFormIdByTask(WorkflowTask task){
com.norteksoft.wf.engine.entity.WorkflowInstance workflow = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
if(workflow==null) return null;
return workflow.getFormId();
}
@Deprecated
public Long getFormIdByTask(com.norteksoft.task.entity.WorkflowTask task){
com.norteksoft.wf.engine.entity.WorkflowInstance workflow = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
if(workflow==null) return null;
return workflow.getFormId();
}
/**
* 根据task查询业务实体的ID
* @param taskId 任务id
* @return 业务实体的ID
*/
public Long getDataIdByTask(Long taskId){
com.norteksoft.task.entity.WorkflowTask task = taskService.getWorkflowTask(taskId);
return getDataIdByTask(task);
}
/**
* 根据task查询流程业务实体的ID
* @param task 任务
* @return 业务实体的ID
*/
public Long getDataIdByTask(WorkflowTask task){
Assert.notNull(task, "任务不能为null");
com.norteksoft.wf.engine.entity.WorkflowInstance instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
if(instance==null){
log.debug("WorkflowInstance实体不能为null");
throw new RuntimeException("任务不能为null");
}
return instance.getDataId();
}
@Deprecated
public Long getDataIdByTask(com.norteksoft.task.entity.WorkflowTask task){
Assert.notNull(task, "任务不能为null");
com.norteksoft.wf.engine.entity.WorkflowInstance instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
if(instance==null){
log.debug("WorkflowInstance实体不能为null");
throw new RuntimeException("任务不能为null");
}
return instance.getDataId();
}
/**
* 根据task查询流程业务实体的ID
* @param task 任务
* @param companyId
* @return 业务实体的ID
*/
public Long getDataIdByTask(WorkflowTask task,Long companyId){
Assert.notNull(task, "任务不能为null");
com.norteksoft.wf.engine.entity.WorkflowInstance instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId(),companyId);
if(instance==null){
log.debug("WorkflowInstance实体不能为null");
throw new RuntimeException("WorkflowInstance实体不能为null");
}
return instance.getDataId();
}
@Deprecated
public Long getDataIdByTask(com.norteksoft.task.entity.WorkflowTask task,Long companyId){
Assert.notNull(task, "任务不能为null");
com.norteksoft.wf.engine.entity.WorkflowInstance instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId(),companyId);
if(instance==null){
log.debug("WorkflowInstance实体不能为null");
throw new RuntimeException("WorkflowInstance实体不能为null");
}
return instance.getDataId();
}
/**
* 通过流程定义ID查询所有的环节名称
* @param workflowDefinitionId 定义id
* @return 环节名称封装成的集合
*/
public List<String> getTachesByProcessDefinition(Long workflowDefinitionId){
WorkflowDefinition wfd = workflowDefinitionManager.getWfDefinition(workflowDefinitionId);
return getTachesByprocessId(wfd.getProcessId());
}
/**
* 通过流程定义ID查询所有的环节名称
* @param jbpmDefinitionId
* @return 环节名封装的集合
*/
public List<String> getTachesByprocessId(String processId){
return DefinitionXmlParse.getTaskNames(processId);
}
/**
* 完成任务并加签(目前收文使用)
* @param taskId
* @param users
*/
public void additional(Long taskId, List<String> users, Integer grade){
taskService.generateTask(taskId, users,TaskSource.ADD_SIGN);
}
/**
* 加签
* @param taskId 任务id
* @param users 需要加签的人
*/
@Deprecated
public void additional(Long taskId, Collection<String> users){
taskService.generateTask(taskId, users,TaskSource.ADD_SIGN);
}
/**
* 加签
* @param taskId 任务id
* @param users 需要加签的人
*/
public void addSign(Long taskId, Collection<String> users){
addSigner(taskId, users);
}
public void addSigner(Long taskId, Collection<String> users){
Assert.notNull(taskId,"加签时,任务id不能为null");
taskService.generateTask(taskId, users,TaskSource.ADD_SIGN);
}
/**
* 加签
* @param taskId 任务id
* @param users 需要加签的人
*/
@Deprecated
public void additional(Long taskId, String... users){
taskService.generateTask(taskId, Arrays.asList(users),TaskSource.ADD_SIGN);
}
/**
* 加签
* @param taskId 任务id
* @param users 需要加签的人
*/
public void addSign(Long taskId, String... users){
addSigner(taskId, Arrays.asList(users));
}
public void addSigner(Long taskId, String... users){
Assert.notNull(taskId,"加签时任务id不能为null");
taskService.generateTask(taskId, Arrays.asList(users),TaskSource.ADD_SIGN);
}
/**
* 减签
* @param taskId 任务id
* @param users 需要减签的人
*/
public void reduceHandlers(Long taskId,Collection<String> users){
removeSigner(taskId, users);
}
public void removeSigner(Long taskId,Collection<String> users){
Assert.notNull(taskId,"减签时任务id不能为null");
taskService.deleteCountersignHandler(taskId, users);
}
/**
* 减签
* @param taskId 任务id
* @param users 需要减签的人
*/
public void reduceHandlers(Long taskId,String... users){
removeSigner(taskId, Arrays.asList(users));
}
public void removeSigner(Long taskId,String... users){
Assert.notNull(taskId,"减签时任务id不能为null");
taskService.deleteCountersignHandler(taskId, Arrays.asList(users));
}
/**
* 获得该会签环节的会签办理人
* @param taskId
* @param handlingState 该办理人对任务的完成状态 {@link com.norteksoft.task.entity.Task#COMPLETED}}、 {@link com.norteksoft.task.entity.Task#WAIT_TRANSACT}}
* @return 办理人登录名的集合
*/
public List<String> getCountersignHandlers(Long taskId,Integer handlingState){
return getCountersignTransactors(taskId,handlingState);
}
public List<String> getCountersignTransactors(Long taskId,Integer handlingState){
Assert.notNull(taskId,"获得会签环节的会签办理人时任务id不能为null");
return taskService.getCountersignsHandler(taskId,handlingState);
}
/**
* 取回任务
*/
public String retrieve(Long taskId){
Assert.notNull(taskId,"取回任务时任务id不能为null");
return taskService.retrieve(taskId);
}
/**
* 给流程实例设置数据ID
* @param wfInstanceId
* @param id
*/
public void setDataId(String wfInstanceId, Long id) {
com.norteksoft.wf.engine.entity.WorkflowInstance workflowInstance = workflowInstanceManager.getWorkflowInstance(wfInstanceId);
if(workflowInstance==null||workflowInstance.getDataId()!=null) return;
workflowInstance.setDataId(id);
workflowInstanceManager.saveWorkflowInstance(workflowInstance);
}
/**
* 根据task查询业务实体的ID
* @param taskId 任务id
* @return 业务实体的ID
*/
public Long getFormFlowableIdByTask(Long taskId){
com.norteksoft.task.entity.WorkflowTask task = taskService.getWorkflowTask(taskId);
return getDataIdByTask(task);
}
/**
* 根据task查询流程业务实体的ID
* @param task 任务
* @return 业务实体的ID
*/
public Long getFormFlowableIdByTask(WorkflowTask task){
com.norteksoft.wf.engine.entity.WorkflowInstance instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
return instance.getDataId();
}
@Deprecated
public Long getFormFlowableIdByTask(com.norteksoft.task.entity.WorkflowTask task){
com.norteksoft.wf.engine.entity.WorkflowInstance instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
return instance.getDataId();
}
/**
* 将任务交办给指定的人员
* @param taskId 需指派的任务
* @param transactor 指定的人员
*/
public void assign(Long taskId, String transactor){
Assert.notNull(taskId,"将任务交办或指派给指定的人员时,任务id不能为null");
taskService.assign(taskId, transactor);
}
/**
* 将任务交办给指定的人员
* @param taskId 需指派的任务
* @param transactor 指定的人员
*/
public void assign(Long taskId, List<String> transactors){
taskService.assign(taskId, transactors);
}
/**
* 流程实例能退回到的环节名称
* @param taskId 任务ID
* @return List<String> size等于0时表示当前不能退回到任何环节
*/
@Deprecated
public List<String> canBackNames(Long taskId){
return getReturnableTaskNames(taskId);
}
/**
* 流程实例能退回到的环节名称
* @param taskId 任务ID
* @return List<String> size等于0时表示当前不能退回到任何环节
*/
@Deprecated
public List<String> backToTaskNames(Long taskId){
return getReturnableTaskNames(taskId);
}
public List<String> getReturnableTaskNames(Long taskId){
Assert.notNull(taskId,"获得流程实例能退回到的环节名称时,任务id不能为null");
com.norteksoft.task.entity.WorkflowTask task = taskService.getWorkflowTask(taskId);
Assert.notNull(task,"获得流程实例能退回到的环节名称时,任务不能为null");
return taskService.canBackNames(task.getProcessInstanceId());
}
/**
* 退回到某环节
* @param taskId 任务ID
* @param backTo 退回到的环节名称
*/
public void goBack(Long taskId, String backTo){
returnTaskTo(taskId, backTo);
}
public void returnTaskTo(Long taskId, String taskName){
Assert.notNull(taskId,"退回到某环节时,任务id不能为null");
WorkflowTask task = this.getTask(taskId);
Assert.notNull(task,"退回到某环节时,任务不能为null");
taskService.goBack(task.getProcessInstanceId(), taskName);
}
/**
* 在环节办理时,当前环节办理人是否有权删除流程实例
* @param workflowId
* @param taskName
* @return true 为可以,false为不可以
*/
public boolean canDeleteInstanceInTask(FormFlowable entity, String taskName){
String workflowId=entity.getWorkflowInfo()==null?null:entity.getWorkflowInfo().getWorkflowId();
return canDeleteInstanceInTask(workflowId,taskName);
}
/**
* 在环节办理时,当前环节办理人是否有权删除流程实例
* @param workflowId
* @param taskName
* @return true 为可以,false为不可以
*/
public boolean canDeleteInstanceInTask(String instanceId, String taskName){
if(StringUtils.isNotEmpty(instanceId)){
com.norteksoft.wf.engine.entity.WorkflowInstance workflow = workflowInstanceManager.getWorkflowInstance(instanceId);
if(workflow==null) return false;
return taskService.canDeleteByTask(workflow, taskName);
}
return false;
}
/**
* 根据流程名称查询第一环节的字段编辑权限,以JSON格式返回
* @param definitionCode 流程编号
* @return json格式的字段编辑权限
*/
public String getFieldPermissionNotStarted(String definitionCode){
WorkflowDefinition definition = this.getEnabledHighestVersionDefinition(definitionCode);
return workflowRightsManager.getFieldPermissionNotStarted(definition);
}
public String getFieldPermissionNotStarted(String definitionCode, Integer version){
WorkflowDefinition definition = getWfdByCodeAndVersion(definitionCode, version,ContextUtils.getCompanyId(),ContextUtils.getSystemId());
return workflowRightsManager.getFieldPermissionNotStarted(definition);
}
/**
* 根据流程定义查询第一个环节的权限
* @param definitionId
* @return 返回json格式表示的字段可编辑状态信息
*/
public String getFieldPermissionNotStarted(Long definitionId){
WorkflowDefinition definition = workflowDefinitionManager.getWfDefinition(definitionId);
return workflowRightsManager.getFieldPermissionNotStarted(definition);
}
/**
* 查询流程中环节的字段编辑权限
* @param entity
* @param task
* @return 返回json格式表示的字段可编辑状态信息
*/
public String getFieldPermission(Long taskId){
com.norteksoft.task.entity.WorkflowTask task = taskService.getTask(taskId);
if(viewForm(task))return getFieldPermission(false);
return workflowRightsManager.getFieldPermission(task);
}
/**
* 当前表单是否是查看
* @param task
* @return
*/
private boolean viewForm(WorkflowTask task){
return task.getProcessingMode()==TaskProcessingMode.TYPE_READ||task.getActive().equals(TaskState.COMPLETED.getIndex())||task.getActive().equals(TaskState.ASSIGNED.getIndex())
||task.getActive().equals(TaskState.CANCELLED.getIndex())||task.getActive().equals(TaskState.DRAW_WAIT.getIndex());
}
@Deprecated
private boolean viewForm(com.norteksoft.task.entity.WorkflowTask task){
return task.getProcessingMode()==TaskProcessingMode.TYPE_READ||task.getActive().equals(TaskState.COMPLETED.getIndex())||task.getActive().equals(TaskState.ASSIGNED.getIndex())
||task.getActive().equals(TaskState.CANCELLED.getIndex())||task.getActive().equals(TaskState.DRAW_WAIT.getIndex());
}
/**
* 所有字段可编辑状态信息查询
* @param editable 当editable为false时 表示所有字段都禁止填写
* @return 返回json格式表示的字段可编辑状态信息
*/
public String getFieldPermission(boolean editable){
return workflowRightsManager.getFieldPermission(editable);
}
//======================================================================================
/**
* 根据流程名称查询最新的流程定义表单
* @param workflowDefinitionName
* @return html
*/
public String getLastHtmlByWorkflowDefinitionName(String processDefinitionName){
return getLastHtmlByWorkflowDefinitionName(processDefinitionName, null);
}
/**
* @return html
*/
public String getLastHtmlByWorkflowDefinitionName(String processDefinitionName, FormFlowable entity){
return taskService.getLastHtmlByWorkflowDefinitionName(entity, processDefinitionName);
}
/**
* 通过自定义实体获取填写了数据的HTML片段
* @param entity extends FormFlowable
* @param htmlParameterName html片段中变量的key eg: obj.name,则htmlParameterName为obj
* @return
*/
public String getHtmlByData(FormFlowable entity){
return taskService.getHtmlByData(entity);
}
private List<com.norteksoft.product.api.entity.Opinion> getOpinions(List<Opinion> opinions){
List<com.norteksoft.product.api.entity.Opinion> opins=new ArrayList<com.norteksoft.product.api.entity.Opinion>();
for(Opinion opinion:opinions){
opins.add(getOpinion(opinion));
}
return opins;
}
private com.norteksoft.product.api.entity.Opinion getOpinion(Opinion opinion){
com.norteksoft.product.api.entity.Opinion opin=new com.norteksoft.product.api.entity.Opinion(opinion.getId(),opinion.getOpinion(),opinion.getCreatedTime(),opinion.getTaskId(),opinion.getCustomField(),opinion.getTaskName(),opinion.getTaskCode(),opinion.getTransactor());
opin.setDepartmentName(opinion.getDepartmentName());
com.norteksoft.acs.entity.organization.User user=acsUtils.getUser(opinion.getCompanyId(), opin.getTransactor());
if(user!=null)opin.setTransactorName(user.getName());
opin.setDelegateFlag(opinion.getDelegateFlag());
return opin;
}
/**
* 查询表单的办理意见
* @param workflowId
*/
public List<com.norteksoft.product.api.entity.Opinion> getOpinions(FormFlowable entity) {
if(entity == null) throw new RuntimeException("没有给定查询办理意见的查询条件:流程流转实体(FormFlowable)");
if(entity.getWorkflowInfo() == null) throw new RuntimeException("流程流转实体(FormFlowable)[id:"+entity.getId()+"]还没有启动流程(WorkflowInfo为null).");
return getOpinions(workflowInstanceManager.getOpinionsByInstanceId(entity.getWorkflowInfo().getWorkflowId(),getCompanyId(entity)));
}
/**
* 查询表单的办理意见
* @param workflowId
*/
public List<Opinion> getOpinions(String workflowId) {
com.norteksoft.wf.engine.entity.WorkflowInstance wi=workflowInstanceManager.getWorkflowInstance(workflowId);
return workflowInstanceManager.getOpinionsByInstanceId(workflowId,wi.getCompanyId());
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinions(Long taskId) {
com.norteksoft.task.entity.WorkflowTask task=taskService.getWorkflowTask(taskId);
if(task == null) throw new RuntimeException("没有查询到任务,任务ID["+taskId+"]");
return getOpinions(workflowInstanceManager.getOpinions(taskId,task.getCompanyId()));
}
/**
* 查询整个实例中具体办理模式的附件
* @param workflowId
* @return 附件列表
*/
public List<Opinion> getOpinions(String workflowId, TaskProcessingMode taskMode){
com.norteksoft.wf.engine.entity.WorkflowInstance wi=workflowInstanceManager.getWorkflowInstance(workflowId);
if(wi == null) throw new RuntimeException("没有查询到流程实例,实例ID["+workflowId+"]");
return this.workflowInstanceManager.getOpinions(workflowId, wi.getCompanyId(), taskMode);
}
/**
* 查询整个实例中具体办理模式的附件
* @param entity
* @return 附件列表
*/
public List<com.norteksoft.product.api.entity.Opinion> getOpinions(FormFlowable entity,TaskProcessingMode taskMode){
Assert.notNull(entity,"查询意见列表的流程实体不可为空");
Assert.notNull(taskMode,"查询意见列表的环节办理方式不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(this.getOpinions(entity.getWorkflowInfo().getWorkflowId(), taskMode));
}
/**
* 查询整个实例中具体环节的附件
* @param workflowId
* @return 附件列表
*/
public List<Opinion> getOpinions(String workflowId, String taskName){
com.norteksoft.wf.engine.entity.WorkflowInstance wi=workflowInstanceManager.getWorkflowInstance(workflowId);
if(wi == null) throw new RuntimeException("没有查询到流程实例,实例ID["+workflowId+"]");
return this.workflowInstanceManager.getOpinions(workflowId, wi.getCompanyId(), taskName);
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinions(FormFlowable entity,String taskNam){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(taskNam,"环节名称不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(getOpinions(entity.getWorkflowInfo().getWorkflowId(), taskNam));
}
public List<Opinion> getOpinionsExceptTaskMode(String workflowId,
TaskProcessingMode taskMode) {
com.norteksoft.wf.engine.entity.WorkflowInstance wi=workflowInstanceManager.getWorkflowInstance(workflowId);
if(wi == null) throw new RuntimeException("没有查询到流程实例,实例ID["+workflowId+"]");
return workflowInstanceManager.getOpinionsExceptTaskMode(workflowId, wi.getCompanyId(), taskMode);
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsExceptTaskMode(FormFlowable entity,
TaskProcessingMode taskMode) {
return getOpinionsExcludeTaskMode(entity, taskMode);
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsExcludeTaskMode(FormFlowable entity,TaskProcessingMode taskMode){
Assert.notNull(entity,"查询意见列表的流程实体不可为空");
Assert.notNull(taskMode,"查询意见列表的环节办理方式不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(getOpinionsExceptTaskMode(entity.getWorkflowInfo().getWorkflowId(),taskMode));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsExceptTaskName(FormFlowable entity,
String taskName) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(workflowInstanceManager.getOpinionsExceptTaskName(entity.getWorkflowInfo().getWorkflowId(), getCompanyId(entity), taskName));
}
/**
* 查询表单的办理意见
* @param workflowId
*/
public com.norteksoft.product.api.entity.Opinion getOpinionById(Long opinionId) {
Assert.notNull(opinionId,"意见ID不能为空");
Opinion op = workflowInstanceManager.getOpinionsById(opinionId);
Assert.notNull(op,"没有查询到意见,意见ID["+opinionId+"]");
return getOpinion(op);
}
/**
* 保存意见
* @param opinion
*/
public void saveOpinion(com.norteksoft.product.api.entity.Opinion opinionp){
Opinion opinion=null;
if(opinionp.getId()==null){
opinion=new Opinion();
opinion.setCreatedTime(new Date());
}else{
opinion=workflowInstanceManager.getOpinionsById(opinionp.getId());
}
opinion.setCustomField(opinionp.getCustomField());
opinion.setOpinion(opinionp.getOpinion());
if(opinionp.getTaskId()!=null){
WorkflowTask task = this.getTask(opinionp.getTaskId());
opinion.setTaskMode(task.getProcessingMode());
opinion.setTaskName(task.getName());
opinion.setCompanyId(task.getCompanyId());
opinion.setWorkflowId(task.getProcessInstanceId());
opinion.setTaskId(opinionp.getTaskId());
opinion.setTransactor(task.getTransactor());
opinion.setDelegateFlag(StringUtils.isEmpty(task.getTrustor())?false:true);
Long mainDepartmentId = acsUtils.getUserByLoginName(task.getTransactor()).getMainDepartmentId();
if(mainDepartmentId!=null){
Department dept=acsUtils.getDepartmentById(mainDepartmentId);
opinion.setDepartmentName(dept.getName());
}
opinion.setTaskCode(task.getCode());
}
workflowInstanceManager.saveOpinion(opinion);
}
/**
* 删除意见
* @param opinionId
*/
public void deleteOpinion(Long opinionId) {
workflowInstanceManager.deleteOpinion(opinionId);
}
/**
* 查询表单的附件列表
* @param loanForm
* @return
*/
public List<WorkflowAttachment> getAttachments(String workflowId) {
com.norteksoft.wf.engine.entity.WorkflowInstance wi=workflowInstanceManager.getWorkflowInstance(workflowId);
return workflowInstanceManager.getAttachments(workflowId,wi.getCompanyId());
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachments(Long taskId) {
Assert.notNull(taskId, "taskId不能为null");
Assert.notNull(getLoginName(), "当前登录名不可为null");
com.norteksoft.task.entity.WorkflowTask task=taskService.getTask(taskId);
List<WorkflowAttachment> attchments=workflowInstanceManager.getAttachments(taskId,task.getCompanyId());
boolean delRight=attachmentDeleteRight(taskId);
for(WorkflowAttachment att:attchments){
//用户有创建附件权限,即使没有删除权限也可删除自己当前环节创建的附件;用户有删除权限,可删除当前环节的所有附件
if(getLoginName().equals(att.getTransactor())||delRight){
att.setDeleteSetting(true);
}
}
return getAttachments(attchments);
}
/**
* 查询表单的附件列表
* @param loanForm
* @return
*/
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachments(FormFlowable entity) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
ThreadParameters params=new ThreadParameters(getCompanyId(entity));
ParameterUtils.setParameters(params);
return getAllAttachments(entity.getWorkflowInfo().getWorkflowId());
}
/**
* 查询整个实例中具体办理模式的附件
* @param workflowId
* @return 附件列表
*/
public List<WorkflowAttachment> getAttachments(String workflowId, TaskProcessingMode taskMode){
return workflowAttachmentManager.getAttachments(workflowId, taskMode);
}
/**
* 查询整个实例中具体办理模式的附件
* @param entity
* @return 附件列表
*/
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachments(FormFlowable entity,TaskProcessingMode taskMode){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(taskMode,"任务模式不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getAllAttachments(entity.getWorkflowInfo().getWorkflowId());
}
/**
* 查询整个实例中具体环节的附件
* @param workflowId
* @return 附件列表
*/
public List<WorkflowAttachment> getAttachments(String workflowId, String taskName){
return workflowAttachmentManager.getAttachments(workflowId, taskName);
}
/**
* 查询整个实例中具体环节的附件
* @param entity
* @return 附件列表
*/
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachments(FormFlowable entity,String taskName){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(taskName,"任务名称不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getAllAttachments(entity.getWorkflowInfo().getWorkflowId(),taskName);
}
/**
* 保存附件
* @param attachment
*/
public void saveAttachment(com.norteksoft.product.api.entity.WorkflowAttachment doc){
WorkflowAttachment document=null;
Assert.notNull(doc, "附件workflowAttachment不能为null");
if(doc.getId()==null){
document=new WorkflowAttachment();
document.setCreatedTime(new Date());
}else{
document=workflowInstanceManager.getAttachment(doc.getId());
if(document==null){
log.debug("附件不能为null");
throw new RuntimeException("附件不能为null");
}
}
document.setCustomField(doc.getCustomField());
document.setFileName(doc.getFileName());
document.setFileSize(doc.getFileSize());
document.setFileType(doc.getFileType());
if(doc.getTaskId()!=null){
com.norteksoft.task.entity.WorkflowTask task = taskService.getTask(doc.getTaskId());
if(task==null){
log.debug("任务不能为null");
throw new RuntimeException("任务不能为null");
}
document.setTaskId(doc.getTaskId());
document.setTaskMode(task.getProcessingMode());
document.setTaskName(task.getName());
document.setWorkflowId(task.getProcessInstanceId());
document.setCompanyId(task.getCompanyId());
}
FileService fileService =(FileService)ContextUtils.getBean("fileService");
document.setFilePath(fileService.saveFile(doc.getFileBody()));
workflowInstanceManager.saveAttachment(document);
}
/**
* 删除附件
* @param attachmentId
*/
public void deleteAttachment(Long attachmentId){
workflowInstanceManager.deleteAttachment(attachmentId);
}
/**
* 获得附件
* @param attachmentId
* @return 附件实体
*/
public com.norteksoft.product.api.entity.WorkflowAttachment getAttachment(Long attachmentId){
return getAttach(workflowInstanceManager.getAttachment(attachmentId));
}
private com.norteksoft.product.api.entity.WorkflowAttachment getAttachment(WorkflowAttachment doc){
com.norteksoft.product.api.entity.WorkflowAttachment docment=new com.norteksoft.product.api.entity.WorkflowAttachment();
docment.setId(doc.getId());
docment.setFileName(doc.getFileName());
docment.setFileSize(doc.getFileSize());
docment.setFileType(doc.getFileType());
docment.setTaskId(doc.getTaskId());
docment.setDepartmentName(doc.getDepartmentName());
docment.setTransactor(doc.getTransactor());
docment.setDeleteSetting(doc.getDeleteSetting());
docment.setTaskName(doc.getTaskName());
docment.setWorkflowId(doc.getWorkflowId());
docment.setFilePath(doc.getFilePath());
// //得到文件内容
// WorkflowAttachmentFile file=getAttachmentFile(doc.getId());
// docment.setFileBody(file.getContent());
docment.setCreateDate(doc.getCreatedTime());
return docment;
}
private com.norteksoft.product.api.entity.WorkflowAttachment getAttach(WorkflowAttachment doc){
com.norteksoft.product.api.entity.WorkflowAttachment docment=new com.norteksoft.product.api.entity.WorkflowAttachment();
docment.setId(doc.getId());
docment.setFileName(doc.getFileName());
docment.setFileSize(doc.getFileSize());
docment.setFileType(doc.getFileType());
docment.setTaskId(doc.getTaskId());
docment.setDepartmentName(doc.getDepartmentName());
docment.setTransactor(doc.getTransactor());
docment.setDeleteSetting(doc.getDeleteSetting());
docment.setTaskName(doc.getTaskName());
docment.setWorkflowId(doc.getWorkflowId());
docment.setFilePath(doc.getFilePath());
//得到文件内容
WorkflowAttachmentFile file=getAttachmentFile(doc.getId());
if(file!=null){
docment.setFileBody(file.getContent());
}else{
FileService fileService =(FileService)ContextUtils.getBean("fileService");
byte[] fileBody = fileService.getFile(doc.getFilePath());
docment.setFileBody(fileBody);
}
docment.setCreateDate(doc.getCreatedTime());
return docment;
}
private List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachments(List<WorkflowAttachment> docs){
List<com.norteksoft.product.api.entity.WorkflowAttachment> results=new ArrayList<com.norteksoft.product.api.entity.WorkflowAttachment>();
for(WorkflowAttachment doc:docs){
results.add(getAttachment(doc));
}
return results;
}
/**
* 获得正文列表
* @param loanForm
* @return
*/
public List<com.norteksoft.product.api.entity.Document> getDocuments(FormFlowable formFlowable) {
Assert.notNull(formFlowable, "FormFlowable实体不能为null");
if(ContextUtils.getCompanyId()==null){
ThreadParameters params=new ThreadParameters(formFlowable.getCompanyId());
ParameterUtils.setParameters(params);
}
return getDocuments(formFlowable.getWorkflowInfo().getWorkflowId());
}
public List<com.norteksoft.product.api.entity.Document> getDocuments(Long taskId) {
Assert.notNull(taskId, "taskId不能为null");
Assert.notNull(getLoginName(), "当前登录名不可为null");
com.norteksoft.task.entity.WorkflowTask task=taskService.getTask(taskId);
if(task==null){
log.debug("任务不能为null");
throw new RuntimeException("任务不能为null");
}
List<Document> docs=workflowInstanceManager.getDocuments(taskId,task.getCompanyId());
boolean delRight=officialTextDeleteRight(taskId);
for(Document doc:docs){
//用户有创建正文权限,即使没有删除权限也可删除自己当前环节创建的正文;用户有删除权限,可删除当前环节的所有正文
if(getLoginName().equals(doc.getCreator())||delRight){
doc.setDeleteSetting(true);
}
}
return getDocuments(docs);
}
private List<com.norteksoft.product.api.entity.Document> getDocuments(List<Document> docs){
List<com.norteksoft.product.api.entity.Document> results=new ArrayList<com.norteksoft.product.api.entity.Document>();
for(Document doc:docs){
results.add(getDocument(doc));
}
return results;
}
private com.norteksoft.product.api.entity.Document getDocument(Document doc){
com.norteksoft.product.api.entity.Document docment=new com.norteksoft.product.api.entity.Document();
docment.setId(doc.getId());
docment.setCustomField(doc.getCustomField());
docment.setDescript(doc.getRemark());
docment.setFileName(doc.getFileName());
docment.setFilePath(doc.getFilePath());
docment.setFileSize(doc.getFileSize());
docment.setFileType(doc.getFileType());
docment.setStatus(doc.getStatus());
docment.setSubject(doc.getSubject());
docment.setTaskId(doc.getTaskId());
docment.setDeleteSetting(doc.getDeleteSetting());
docment.setTaskName(doc.getTaskName());
docment.setWorkflowId(doc.getWorkflowId());
//得到文件内容
// DocumentFile file=getDocumentFile(doc.getId());
// docment.setFileBody(file.getFileBody());
docment.setCreateDate(doc.getCreatedTime());
return docment;
}
private com.norteksoft.product.api.entity.Document getDoc(Document doc){
com.norteksoft.product.api.entity.Document docment=new com.norteksoft.product.api.entity.Document();
docment.setId(doc.getId());
docment.setCustomField(doc.getCustomField());
docment.setDescript(doc.getRemark());
docment.setFileName(doc.getFileName());
docment.setFilePath(doc.getFilePath());
docment.setFileSize(doc.getFileSize());
docment.setFileType(doc.getFileType());
docment.setStatus(doc.getStatus());
docment.setSubject(doc.getSubject());
docment.setTaskId(doc.getTaskId());
docment.setDeleteSetting(doc.getDeleteSetting());
docment.setTaskName(doc.getTaskName());
docment.setWorkflowId(doc.getWorkflowId());
//得到文件内容
DocumentFile file=getDocumentFile(doc.getId());
if(file!=null){
docment.setFileBody(file.getFileBody());
}else{
FileService fileService =(FileService)ContextUtils.getBean("fileService");
byte[] fileBody = fileService.getFile(doc.getFilePath());
docment.setFileBody(fileBody);
}
docment.setCreateDate(doc.getCreatedTime());
return docment;
}
/**
* 返回包装好的正文实例
* @param loanForm
* @param fileType
* @param taskId
* @return 正文实例
*/
public com.norteksoft.product.api.entity.Document createDocument(FormFlowable entity,String fileType) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"必须先启动流程,才能上传正文");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"必须先启动流程,才能上传正文");
return createDocument(entity.getWorkflowInfo().getWorkflowId(),fileType,getCompanyId(entity));
}
public com.norteksoft.product.api.entity.Document createDocument(String workflowId,String fileType,Long companyId) {
Document document = new Document();
java.util.Date dt = new java.util.Date();
Long recordId = new Long(dt.getTime());
String fileName = recordId+fileType;
// document.setRecordId(recordId);
document.setFileType(fileType);
document.setFileName(fileName);
document.setWorkflowId(workflowId);
WorkflowInstance instance = this.getInstance(workflowId);
document.setTaskName(instance.getCurrentActivity());
document.setCompanyId(companyId);
return getDocument(document);
}
/**
* 查询正文实例
* @param documentId
* @return 正文实例
*/
public com.norteksoft.product.api.entity.Document getDocument(Long documentId) {
return getDoc(workflowInstanceManager.getDocument(documentId));
}
public DocumentFile getDocumentFile(Long documentId){
return workflowInstanceManager.getDocumentFile(documentId);
}
public void deleteDocument(Long documentId){
workflowInstanceManager.deleteDocument(documentId);
}
/**
* 根据formId查询所有表单字段
* @param formId
* @return 字段列表
*/
public List<FormControl> getFormControls(Long formId){
return formManager.getControls(formId);
}
/**
* 查询办理人的当前任务
* @param entity 走流程的表单
* @param loginname 办理人的登录名
* @return 如果流程已经启动 ,返回当前任务;否则,返回null
*/
@Deprecated
public WorkflowTask getMyTask(FormFlowable entity,String loginname){
return getActiveTaskByLoginName(entity, loginname);
}
public WorkflowTask getActiveTaskByLoginName(FormFlowable entity,String loginName){
if(entity.getWorkflowInfo()==null) return null;
return BeanUtil.turnToModelTask(taskService.getMyTask(entity.getWorkflowInfo().getWorkflowId(), getCompanyId(entity),loginName));
}
public WorkflowTask getActiveTaskByLoginName(String workflowId,String loginName){
if(workflowId==null) return null;
return BeanUtil.turnToModelTask(taskService.getMyTask(workflowId, getCompanyId(null),loginName));
}
/**
* 完成分发任务
* @param taskId
* @param receivers 分发到的用户登录名列表
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*/
public CompleteTaskTipType completeDistributeTask(Long taskId, List<String> receivers){
Assert.notNull(taskId,"完成分发任务时,任务id不能为null");
return taskService.completeDistributeTask(taskId, receivers);
}
public CompleteTaskTipType completeDistributeTask(Long taskId, String... receivers){
Assert.notNull(taskId,"完成分发任务时,任务id不能为null");
return taskService.completeDistributeTask(taskId, Arrays.asList(receivers));
}
/**
* 返回当前用户编辑意见的权限
*/
public boolean editOpinion( Long taskId ){
TaskPermission taskPermission=getActivityPermission(taskId);
return taskPermission.getOpinionEditable();
}
/**
* 返回当前用户编辑意见的权限
*/
public boolean mustOpinion(Long taskId ){
TaskPermission taskPermission=getActivityPermission(taskId);
return taskPermission.getOpinionRequired();
}
/**
* 流程还未启动时编辑意见的权限
*/
public boolean editOpinionNotStarted(String definitionCode ){
TaskPermission taskPermission=getActivityPermission(definitionCode);
return taskPermission.getOpinionEditable();
}
/**
* 流程还未启动时编辑意见的权限
*/
public boolean editOpinionNotStarted(Long workflowDefinitionId ){
WorkflowDefinition definition = this.getWorkflowDefinitionById(workflowDefinitionId);
TaskPermission taskPermission=getActivityPermission(definition.getCode(),definition.getVersion());
return taskPermission.getOpinionEditable();
}
/**
* 流程还未启动时意见是否必填
*/
public boolean mustOpinionNotStarted(String definitionCode){
TaskPermission taskPermission=getActivityPermission(definitionCode);
return taskPermission.getOpinionRequired();
}
/**
* 流程还未启动时意见是否必填
*/
public boolean mustOpinionNotStarted(Long workflowDefinitionId){
WorkflowDefinition definition = this.getWorkflowDefinitionById(workflowDefinitionId);
TaskPermission taskPermission=getActivityPermission(definition.getCode(),definition.getVersion());
return taskPermission.getOpinionRequired();
}
//----------- 附件
public boolean attachmentAddRightNotStarted(String definitionCode) {
Assert.notNull(definitionCode, "流程定义编号definitionCode不能为null");
TaskPermission taskPermission=getActivityPermission(definitionCode);
return taskPermission.getAttachmentCreateable();
}
public boolean attachmentAddRightNotStarted(Long workflowDefinitionId) {
Assert.notNull(workflowDefinitionId, "workflowDefinitionId不能为null");
WorkflowDefinition definition = this.getWorkflowDefinitionById(workflowDefinitionId);
TaskPermission taskPermission=getActivityPermission(definition.getCode(),definition.getVersion());
return taskPermission.getAttachmentCreateable();
}
public boolean attachmentDeleteRightNotStarted(String definitionCode) {
TaskPermission taskPermission=getActivityPermission(definitionCode);
return taskPermission.getAttachmentDeletable();
}
public boolean attachmentDeleteRightNotStarted(Long workflowDefinitionId) {
WorkflowDefinition definition = this.getWorkflowDefinitionById(workflowDefinitionId);
TaskPermission taskPermission=getActivityPermission(definition.getCode(),definition.getVersion());
return taskPermission.getAttachmentDeletable();
}
public boolean attachmentDownloadRightNotStarted(String definitionCode) {
TaskPermission taskPermission=getActivityPermission(definitionCode);
return taskPermission.getAttachmentDownloadable();
}
public boolean attachmentDownloadRightNotStarted(Long workflowDefinitionId) {
WorkflowDefinition definition = this.getWorkflowDefinitionById(workflowDefinitionId);
TaskPermission taskPermission=getActivityPermission(definition.getCode(),definition.getVersion());
return taskPermission.getAttachmentDownloadable();
}
/**
* 上传附件的权限
* @param workflowId 工作流id
* @param taskId 任务id
* @param companyId 公司id
* @return 有权限返回true,否则返回false
*/
public boolean attachmentAddRight(Long taskId){
Assert.notNull(taskId, "taskId不能为null");
TaskPermission taskPermission=getActivityPermission(taskId);
return taskPermission.getAttachmentCreateable();
}
/**
* 删除附件的权限
* @param taskId 任务id
* @param companyId 公司id
* @return 有权限返回true,否则返回false
*/
public boolean attachmentDeleteRight(Long taskId ){
Assert.notNull(taskId, "taskId不能为null");
TaskPermission taskPermission=getActivityPermission(taskId);
return taskPermission.getAttachmentDeletable();
}
/**
* 下载附件的权限
* @param taskId 任务id
* @return 有权限返回true,否则返回false
*/
public boolean attachmentDownloadRight(Long taskId ){
Assert.notNull(taskId, "taskId不能为null");
TaskPermission taskPermission=getActivityPermission(taskId);
return taskPermission.getAttachmentDownloadable();
}
//----------- 附件 end-----
//----------- 正文 --------
public boolean officialTextCreateRightNotStarted(String definitionCode) {
Assert.notNull(definitionCode, "definitionCode不能为null");
TaskPermission taskPermission=getActivityPermission(definitionCode);
if(taskPermission==null){
log.debug("TaskPermission实体不能为null");
throw new RuntimeException("TaskPermission实体不能为null");
}
return taskPermission.getDocumentCreateable();
}
public boolean officialTextCreateRightNotStarted(Long workflowDefinitionId) {
WorkflowDefinition definition = this.getWorkflowDefinitionById(workflowDefinitionId);
TaskPermission taskPermission=getActivityPermission(definition.getCode(),definition.getVersion());
if(taskPermission==null){
log.debug("TaskPermission实体不能为null");
throw new RuntimeException("TaskPermission实体不能为null");
}
return taskPermission.getDocumentCreateable();
}
/**
* 返回环节办理人是否具有创建正文的权限
*/
public boolean officialTextCreateRight(Long taskId){
Assert.notNull(taskId, "taskId不能为null");
TaskPermission taskPermission=getActivityPermission(taskId);
if(taskPermission==null){
log.debug("TaskPermission实体不能为null");
throw new RuntimeException("TaskPermission实体不能为null");
}
return taskPermission.getDocumentCreateable();
}
public boolean officialTextEditRight(Long taskId){
Assert.notNull(taskId, "taskId不能为null");
TaskPermission taskPermission=getActivityPermission(taskId);
if(taskPermission==null){
log.debug("TaskPermission实体不能为null");
throw new RuntimeException("TaskPermission实体不能为null");
}
return taskPermission.getDocumentEditable();
}
/**
* 返回环节办理人是否具有创建正文的权限
*/
public boolean officialTextDeleteRight(Long taskId){
Assert.notNull(taskId, "taskId不能为null");
TaskPermission taskPermission=getActivityPermission(taskId);
if(taskPermission==null){
log.debug("TaskPermission实体不能为null");
throw new RuntimeException("TaskPermission实体不能为null");
}
return taskPermission.getDocumentDeletable();
}
public boolean officialTextDownloadRight(Long taskId) {
TaskPermission taskPermission=getActivityPermission(taskId);
return taskPermission.getDocumentDownloadable();
}
public boolean officialTextPrintRight(Long taskId) {
TaskPermission taskPermission=getActivityPermission(taskId);
return taskPermission.getDocumentPrintable();
}
public String officialTextRights(Long taskId) {
return getDocumentPermission(taskId);
}
//----正文权限 end-- --
/**
* 自动填写实体,在转向办理页面时,根据本环节定义的自动填写字段,来自动填充实体
* @param entity 需要自动填写的实体
* @param wfDefinationName 流程定义名称
* @param taskId 任务id 如果该id为空,将填充第一个环节的值
*/
public void autoFilledEntityBeforeByDefinationName(FormFlowable entity,String definitionCode){
fillEntityByDefinition(entity, definitionCode);
}
public void fillEntityByDefinition(FormFlowable entity,String wfDefinationCode){
autoFilledEntityBeforeByDefinitionId(entity, getEnabledHighestVersionDefinition(wfDefinationCode).getId(),null);
}
public void fillEntityByDefinition(FormFlowable entity,String wfDefinationCode, Integer version){
autoFilledEntityBeforeByDefinitionId(entity, getWorkflowDefinitionByCodeAndVersion(wfDefinationCode, version).getId(),null);
}
/**
* 自动填写实体,在转向办理页面时,根据本环节定义的自动填写字段,来自动填充实体
* @param entity 需要自动填写的实体 流程必须启动
* @param taskId 任务id
*/
public void autoFilledEntityBefore(FormFlowable entity,Long taskId){
fillEntityByTask(entity, taskId,null);
}
public void fillEntityByTask(FormFlowable entity,Long taskId){
Assert.notNull(entity, "FormFlowable实体不能为null");
com.norteksoft.task.entity.WorkflowTask task = taskService.getTask(taskId);
if(task==null){
log.debug("任务不能为null");
throw new RuntimeException("任务不能为null");
}
if(entity.getWorkflowInfo()==null){
log.debug("WorkflowInfo实体不能为null");
throw new RuntimeException("WorkflowInfo实体不能为null");
}
com.norteksoft.wf.engine.entity.WorkflowInstance instance=workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
String processId=null;
if(entity==null){
if(instance!=null)
processId=instance.getProcessDefinitionId();
}else{
processId=entity.getWorkflowInfo().getWorkflowDefinitionId();
}
WorkflowDefinition definition = workflowDefinitionManager.getWorkflowDefinitionByProcessId(processId);
if(definition==null){
log.debug("WorkflowDefinition实体不能为null");
throw new RuntimeException("WorkflowDefinition实体不能为null");
}
log.debug("WorkflowDefinition:"+ definition);
FormView form = formManager.getCurrentFormViewByCodeAndVersion(definition.getFormCode(), definition.getFromVersion());
if(form==null){
log.debug("FormView实体不能为null");
throw new RuntimeException("FormView实体不能为null");
}
log.debug("Form" + form);
Object value;
Map<String,Object> valueMap = new HashMap<String,Object>();
List<AutomaticallyFilledField> filledField = DefinitionXmlParse.getBeforeFilledFields(definition.getProcessId(),task.getName());
log.debug("filledField:" + filledField);
for(AutomaticallyFilledField aff :filledField){
value = getAutoFilledFieldValue(formManager.getControls(form.getId()),aff,entity,null);
log.debug("value:" + value);
valueMap.put(aff.getName(), value);
}
try {
BeanUtils.populate(entity, valueMap);
} catch (IllegalAccessException e) {
log.debug("为bean设置属性异常:" + e.getMessage());
} catch (InvocationTargetException e) {
log.debug("为bean设置属性异常:" +e.getMessage());
}
}
public void fillEntityByTask(FormFlowable entity,Long taskId,Map data){
com.norteksoft.task.entity.WorkflowTask task = taskService.getTask(taskId);
if(task==null){
log.debug("任务不能为null");
throw new RuntimeException("任务不能为null");
}
com.norteksoft.wf.engine.entity.WorkflowInstance instance=workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
String processId=null;
if(entity==null){
if(instance!=null)
processId=instance.getProcessDefinitionId();
}else{
if(entity.getWorkflowInfo()==null){
log.debug("WorkflowInfo实体不能为null");
throw new RuntimeException("WorkflowInfo实体不能为null");
}
processId=entity.getWorkflowInfo().getWorkflowDefinitionId();
}
WorkflowDefinition definition = workflowDefinitionManager.getWorkflowDefinitionByProcessId(processId);
if(definition==null){
log.debug("WorkflowDefinition实体不能为null");
throw new RuntimeException("WorkflowDefinition实体不能为null");
}
log.debug("WorkflowDefinition:"+ definition);
FormView form = formManager.getCurrentFormViewByCodeAndVersion(definition.getFormCode(), definition.getFromVersion());
if(form==null){
log.debug("FormView实体不能为null");
throw new RuntimeException("FormView实体不能为null");
}
log.debug("Form" + form);
Object value;
List<AutomaticallyFilledField> filledField = DefinitionXmlParse.getBeforeFilledFields(definition.getProcessId(),task.getName());
log.debug("filledField:" + filledField);
if(entity!=null){
Map<String,Object> valueMap = new HashMap<String,Object>();
try {
for(AutomaticallyFilledField aff :filledField){
value = getAutoFilledFieldValue(formManager.getControls(form.getId()),aff,entity,null);
log.debug("value:" + value);
valueMap.put(aff.getName(), value);
}
BeanUtils.populate(entity, valueMap);
} catch (IllegalAccessException e) {
log.debug("为bean设置属性异常:" + e.getMessage());
} catch (InvocationTargetException e) {
log.debug("为bean设置属性异常:" +e.getMessage());
}
}else{
if(data!=null){
for(AutomaticallyFilledField aff :filledField){
value = getAutoFilledFieldValue(formManager.getControls(form.getId()),aff,null,data);
log.debug("value:" + value);
data.put(JdbcSupport.FORM_FIELD_PREFIX_STRING+aff.getName(), value);
}
}
}
}
/**
* 自动填写实体,在转向办理页面时,根据本环节定义的自动填写字段,来自动填充实体
* @param entity 需要自动填写的实体
* @param wfDefinationId 流程定义ID
* @param taskId 任务id 如果该id为空,将填充第一个环节的值
*/
public void autoFilledEntityBeforeByDefinitionId(FormFlowable entity,Long definitionId){
log.debug(LOGMESSAGE_METHOD_PARAMETER + "FormFlowable entity" + entity);
WorkflowDefinition definition = workflowDefinitionManager.getWfDefinition(definitionId);
if(definition==null){
log.debug("WorkflowDefinition实体不能为null");
throw new RuntimeException("WorkflowDefinition实体不能为null");
}
log.debug("WorkflowDefinition:"+ definition);
FormView form = formManager.getCurrentFormViewByCodeAndVersion(definition.getFormCode(), definition.getFromVersion());
if(form==null){
log.debug("FormView实体不能为null");
throw new RuntimeException("FormView实体不能为null");
}
log.debug("Form" + form);
String taskName = null;
taskName = DefinitionXmlParse.getFirstTaskName(definition.getProcessId());
Object value;
Map<String,Object> valueMap = new HashMap<String,Object>();
List<AutomaticallyFilledField> filledField = DefinitionXmlParse.getBeforeFilledFields(definition.getProcessId(),taskName);
log.debug("filledField:" + filledField);
try {
for(AutomaticallyFilledField aff :filledField){
value = getAutoFilledFieldValue(formManager.getControls(form.getId()),aff,entity,null);
log.debug("value:" + value);
valueMap.put(aff.getName(), value);
}
BeanUtils.populate(entity, valueMap);
} catch (IllegalAccessException e) {
log.debug("为bean设置属性异常:" + e.getMessage());
} catch (InvocationTargetException e) {
log.debug("为bean设置属性异常:" +e.getMessage());
}
}
/**
* 自动填写实体,在转向办理页面时,根据本环节定义的自动填写字段,来自动填充实体
* @param entity 需要自动填写的实体
* @param wfDefinationId 流程定义ID
* @param taskId 任务id 如果该id为空,将填充第一个环节的值
*/
public void autoFilledEntityBeforeByDefinitionId(FormFlowable entity,Long definitionId,Map data){
log.debug(LOGMESSAGE_METHOD_PARAMETER + "FormFlowable entity" + entity);
WorkflowDefinition definition = workflowDefinitionManager.getWfDefinition(definitionId);
if(definition==null){
log.debug("WorkflowDefinition实体不能为null");
throw new RuntimeException("WorkflowDefinition实体不能为null");
}
log.debug("WorkflowDefinition:"+ definition);
FormView form = formManager.getCurrentFormViewByCodeAndVersion(definition.getFormCode(), definition.getFromVersion());
if(form==null){
log.debug("FormView实体不能为null");
throw new RuntimeException("FormView实体不能为null");
}
log.debug("Form" + form);
String taskName = null;
taskName = DefinitionXmlParse.getFirstTaskName(definition.getProcessId());
Object value;
List<AutomaticallyFilledField> filledField = DefinitionXmlParse.getBeforeFilledFields(definition.getProcessId(),taskName);
log.debug("filledField:" + filledField);
if(entity!=null){
Map<String,Object> valueMap = new HashMap<String,Object>();
try {
for(AutomaticallyFilledField aff :filledField){
value = getAutoFilledFieldValue(formManager.getControls(form.getId()),aff,entity,null);
log.debug("value:" + value);
valueMap.put(aff.getName(), value);
}
BeanUtils.populate(entity, valueMap);
} catch (IllegalAccessException e) {
log.debug("为bean设置属性异常:" + e.getMessage());
} catch (InvocationTargetException e) {
log.debug("为bean设置属性异常:" +e.getMessage());
}
}else{
if(data!=null){
for(AutomaticallyFilledField aff :filledField){
value = getAutoFilledFieldValue(formManager.getControls(form.getId()),aff,null,data);
log.debug("value:" + value);
Object myobj = data.get(JdbcSupport.FORM_FIELD_PREFIX_STRING+aff.getName());
if(myobj!=null){//是数组
String str=myobj.getClass().getName();
if(str.indexOf("[")==0){//是数组
data.put(JdbcSupport.FORM_FIELD_PREFIX_STRING+aff.getName(), value==null?new String[]{""}:new String[]{value.toString()});
}
}else{//不是数组
data.put(JdbcSupport.FORM_FIELD_PREFIX_STRING+aff.getName(), value);
}
}
}
}
}
private Object getAutoFilledFieldValue(List<FormControl> fields,AutomaticallyFilledField aff,FormFlowable entity,Map data){
log.debug(LOGMESSAGE_METHOD_PARAMETER + fields);
if(StringUtils.isEmpty(aff.getValue()))return null;
FormControl field = getFieldbyName(fields,aff.getName() );
log.debug("field:" + field);
Object value ;
log.debug("dataType:" + field.getDataType());
if(field.getDataType()==DataType.TIME||field.getDataType()==DataType.DATE){
value = getFormatCurrentTime(aff);
}else if(field.getDataType()==DataType.TEXT||field.getDataType()==DataType.CLOB){
value = getValue(aff);
try{
String originalValue = "";
if(entity==null){//自定义表单
Object myobj = data.get(JdbcSupport.FORM_FIELD_PREFIX_STRING+aff.getName());
if(myobj!=null){//是数组
String str=myobj.getClass().getName();
if(str.indexOf("[")==0){//是数组
if(value==null){
originalValue="";
}else{
originalValue=((String[])myobj)[0];
}
}else{
originalValue=myobj.toString();
}
}else{//不是数组
originalValue = "";
}
}else{//标准表单
originalValue = BeanUtils.getProperty(entity, aff.getName());
}
if(aff.getFillType().equals(AutomaticallyFilledField.AUTO_FILLED_FILL_TYPE_ADDITIONAL)){
if(value!=null&&StringUtils.isNotEmpty(originalValue)){//如果配的值不为空且数据库中的值也不为空时,则其值为追加后的值
value = originalValue+","+value;
}else if(value==null&&StringUtils.isNotEmpty(originalValue)){//如果配的值为空且数据库的值不为空时,则其值为数据库中的值不作修改
value= originalValue;
}
}else if(aff.getFillType().equals(AutomaticallyFilledField.AUTO_FILLED_FILL_TYPE_ADDED_TO_THE_BEGINNING)){
if(value!=null&&StringUtils.isNotEmpty(originalValue)){
value = value + ","+originalValue;
}else if(value==null&&StringUtils.isNotEmpty(originalValue)){
value= originalValue;
}
}
}catch (Exception e) {
log.debug(PropUtils.getExceptionInfo(e));
}
}else{
value = aff.getValue();
}
return value;
}
/*
* 从List中取出英文名为enName的Field
*/
private FormControl getFieldbyName(List<FormControl> fields , String enName){
for(FormControl field:fields){
if(field.getName().trim().equals(enName.trim())) return field;
}
return null;
}
private Date getFormatCurrentTime(AutomaticallyFilledField aff){
return StringUtils.contains(aff.getValue(), CommonStrings.CURRENTTIME) ? new Date() :null;
}
private String getValue(AutomaticallyFilledField aff){
return taskService.getValue(aff, null);
}
public List<WorkflowAttachment> getAttachmentsExceptTaskMode(String workflowId,
TaskProcessingMode taskMode) {
return workflowAttachmentManager.getAttachmentsExceptTaskMode(workflowId,taskMode);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachmentsExceptTaskMode(FormFlowable entity,
TaskProcessingMode taskMode) {
return getAttachmentsExceptTaskMode(entity, taskMode);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachmentsExcludeTaskMode(FormFlowable entity,TaskProcessingMode taskMode){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(taskMode,"任务模式不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getAttachmentsExcludeTaskMode(entity.getWorkflowInfo().getWorkflowId(),taskMode);
}
public List<WorkflowAttachment> getAttachmentsExceptTaskName(String workflowId,
String taskName) {
return workflowAttachmentManager.getAttachmentsExceptTaskName(workflowId,taskName);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachmentsExceptTaskName(FormFlowable entity,
String taskName) {
return getAttachmentsExcludeTaskName(entity, taskName);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachmentsExcludeTaskName(FormFlowable entity,String taskName){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(taskName,"任务名称不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getAttachmentsExcludeTaskName(entity.getWorkflowInfo().getWorkflowId(),taskName);
}
/**
* 根据条件查询数据字典
*/
public List<DataDictionary> queryDataDict(DictQueryCondition condition) {
if(condition == null) throw new RuntimeException(" 没有给定查询数据字典的条件: DictQueryCondition. ");
return BeanUtil.turnToModelDataDictionaryList(dataDictionaryManager.queryDataDict(condition.getCondition(), condition.getConditionValues()));
}
@Autowired
public void setDataDictionaryManager(
DataDictionaryManager dataDictionaryManager) {
this.dataDictionaryManager = dataDictionaryManager;
}
/**
* 根据数据字典IDs查询办理人登录名
*/
public List<String> getCandidate(List<Long> dictIds) {
List<String> result = new ArrayList<String>();
Set<String[]> users = dataDictionaryManager.getCandidate(dictIds);
for(String[] user : users){
result.add(user[0]);
}
return result;
}
/**
* 根据数据字典IDs查询办理人登录名及用户名
*/
@Deprecated
public Set<String[]> getCandidateNames(List<Long> dictIds) {
return dataDictionaryManager.getCandidate(dictIds);
}
/**
* 根据数据字典ID查询办理人登录名
*/
public List<String> getCandidate(Long dictId) {
List<String> result = new ArrayList<String>();
Set<String[]> users = dataDictionaryManager.getCandidate(dictId, new HashSet<String[]>());
for(String[] user : users){
result.add(user[0]);
}
return result;
}
/**
* 根据数据字典ID查询办理人登录名及用户名
*/
@Deprecated
public Set<String[]> getCandidateNames(Long dictId) {
Set<String[]> loginNames = new HashSet<String[]>();
return dataDictionaryManager.getCandidate(dictId, loginNames);
}
/**
* 根据数据字典IDs查询数据字典
*/
public List<DataDictionary> queryDataDict(List<Long> ids) {
if(ids == null) throw new RuntimeException("没有给定查询数据字的查询条件: 数据字典的ID集合. ");
List<DataDictionary> dicts = new ArrayList<DataDictionary>();
for(Long id : ids){
dicts.add(queryDataDict(id));
}
return dicts;
}
/**
* 根据数据字典ID查询数据字典
*/
public DataDictionary queryDataDict(Long id) {
return BeanUtil.turnToModelDataDictionary(dataDictionaryManager.getDataDict(id));
}
/**
* 根据用户ID查询该用户的直属领导
* @param userId
* @return
*/
public User getDirectLeader(Long userId) {
return BeanUtil.turnToModelUser(rankManager.getDirectLeader(userId));
}
/**
* 根据用户登录名查询该用户的直属领导
* @param loginName
* @return
*/
public User getDirectLeader(String loginName) {
return BeanUtil.turnToModelUser(rankManager.getDirectLeader(loginName));
}
public List<User> getDirectLeaders(String loginName) {
return BeanUtil.turnToModelUserList(rankManager.getDirectLeaders(loginName));
}
public WorkflowAttachmentFile getAttachmentFile(Long attachmentId) {
return workflowInstanceManager.getAttachmentFileByAttachmentId(attachmentId);
}
public void saveAttachmentFile(com.norteksoft.product.api.entity.WorkflowAttachment doc,WorkflowAttachment document) {
Assert.notNull(document.getId(), "附件id不能为null");
WorkflowAttachmentFile attachmentFile=workflowInstanceManager.getAttachmentFileByAttachmentId(document.getId());
if(attachmentFile==null){
attachmentFile=new WorkflowAttachmentFile();
}
attachmentFile.setAttachmentId(document.getId());
attachmentFile.setCompanyId(document.getCompanyId());
attachmentFile.setContent(doc.getFileBody());
workflowInstanceManager.saveAttachmentFile(attachmentFile);
}
/**
* 返回表单打印权限
*/
public boolean formPrintRightNotStarted(String definitionCode){
TaskPermission taskPermission=getActivityPermission(definitionCode);
return taskPermission.getFormPrintable();
}
/**
* 返回表单打印权限
*/
public boolean formPrintRightNotStarted(Long definitionId){
WorkflowDefinition definition = this.getWorkflowDefinitionById(definitionId);
if(definition==null){
log.debug("WorkflowDefinition实体不能为null");
throw new RuntimeException("WorkflowDefinition实体不能为null");
}
TaskPermission taskPermission=getActivityPermission(definition.getCode(),definition.getVersion());
return taskPermission.getFormPrintable();
}
/**
* 返回表单权限
*/
public boolean formPrintRight(Long taskId ){
TaskPermission taskPermission=getActivityPermission(taskId);
return taskPermission.getFormPrintable();
}
/**
* 返回流转历史的查看权限
*/
public boolean historyAuthorization(Long taskId ){
TaskPermission taskPermission=getActivityPermission(taskId);
return taskPermission.getHistoryVisible();
}
/**
* 返回查看会签结果的权限
*/
public boolean viewMeetingResultRight(Long taskId ){
TaskPermission taskPermission=getActivityPermission(taskId);
return taskPermission.getCountersignResultVisible();
}
/**
* 返回查看投票结果的权限
*/
public boolean viewVoteResultRight(Long taskId ){
TaskPermission taskPermission=getActivityPermission(taskId);
return taskPermission.getVoteResultVisible();
}
public List<Document> getDocuments(String workflowId,
TaskProcessingMode taskMode) {
return officeManager.getDocuments(workflowId,taskMode);
}
public List<com.norteksoft.product.api.entity.Document> getDocuments(FormFlowable entity,
TaskProcessingMode taskMode) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getAllDocuments(entity.getWorkflowInfo().getWorkflowId(),taskMode);
}
public List<Document> getDocuments(String workflowId, String taskName) {
return officeManager.getDocuments(workflowId,taskName);
}
public List<com.norteksoft.product.api.entity.Document> getDocuments(FormFlowable entity, String taskName) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getAllDocuments(entity.getWorkflowInfo().getWorkflowId(),taskName);
}
public List<Document> getDocumentsByCustomField(String workflowId,
String customField) {
return officeManager.getDocumentsByCustomField(workflowId,customField);
}
public List<com.norteksoft.product.api.entity.Document> getDocumentsByCustomField(FormFlowable entity,
String customField) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getAllDocumentsByCustomField(entity.getWorkflowInfo().getWorkflowId(),customField);
}
public List<Document> getDocumentsExceptCustomField(String workflowId,
String customField) {
return officeManager.getDocumentsExceptCustomField(workflowId,customField);
}
public List<com.norteksoft.product.api.entity.Document> getDocumentsExceptCustomField(FormFlowable entity,
String customField) {
return getDocumentsExcludeCustomField(entity, customField);
}
public List<com.norteksoft.product.api.entity.Document> getDocumentsExcludeCustomField(FormFlowable entity,
String customField) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getDocumentsExcludeCustomField(entity.getWorkflowInfo().getWorkflowId(),customField);
}
public List<Document> getDocumentsExceptTaskMode(String workflowId,
TaskProcessingMode taskMode) {
return officeManager.getDocumentsExceptTaskMode(workflowId,taskMode);
}
public List<com.norteksoft.product.api.entity.Document> getDocumentsExceptTaskMode(FormFlowable entity,
TaskProcessingMode taskMode) {
return getDocumentsExcludeTaskMode(entity, taskMode);
}
public List<com.norteksoft.product.api.entity.Document> getDocumentsExcludeTaskMode(FormFlowable entity,TaskProcessingMode taskMode){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getDocumentsExcludeTaskMode(entity.getWorkflowInfo().getWorkflowId(),taskMode);
}
public List<Document> getDocumentsExceptTaskName(String workflowId,
String taskName) {
return officeManager.getDocumentsExceptTaskName(workflowId,taskName);
}
public List<com.norteksoft.product.api.entity.Document> getDocumentsExceptTaskName(FormFlowable entity,
String taskName) {
return getDocumentsExcludeTaskName(entity, taskName);
}
public List<com.norteksoft.product.api.entity.Document> getDocumentsExcludeTaskName(FormFlowable entity,String taskName){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getDocumentsExcludeTaskName(entity.getWorkflowInfo().getWorkflowId(),taskName);
}
public Collection<String> getNeedFillFields(Long taskId) {
com.norteksoft.task.entity.WorkflowTask task = taskService.getTask(taskId);
if(task==null){
log.debug("任务不能为null");
throw new RuntimeException("任务不能为null");
}
if(!(task.getActive().equals(TaskState.WAIT_TRANSACT.getIndex())||task.getActive().equals(TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex())))return new ArrayList<String>();
return workflowRightsManager.getNeedFillFields(task);
}
public Collection<String> getNeedFillFieldsNotStarted(String definitionCode) {
WorkflowDefinition definition = this.getEnabledHighestVersionDefinition(definitionCode);
return workflowRightsManager.getNeedFillFieldsNotStarted(definition);
}
public Collection<String> getNeedFillFieldsNotStarted(Long definitionId) {
WorkflowDefinition definition = workflowDefinitionManager.getWfDefinition(definitionId);
return workflowRightsManager.getNeedFillFieldsNotStarted(definition);
}
@Deprecated
public Collection<String> getforbiddenFields(Long taskId) {
com.norteksoft.task.entity.WorkflowTask task = taskService.getTask(taskId);
return workflowRightsManager.getforbiddenFields(task);
}
public Collection<String> getForbiddenFields(Long taskId) {
com.norteksoft.task.entity.WorkflowTask task = taskService.getTask(taskId);
return workflowRightsManager.getforbiddenFields(task);
}
@Deprecated
public Collection<String> getforbiddenFieldsNotStarted(String definitionCode) {
WorkflowDefinition definition = this.getEnabledHighestVersionDefinition(definitionCode);
return workflowRightsManager.getforbiddenFieldsNotStarted(definition);
}
public Collection<String> getForbiddenFieldsNotStarted(String definitionCode) {
WorkflowDefinition definition = this.getEnabledHighestVersionDefinition(definitionCode);
return workflowRightsManager.getforbiddenFieldsNotStarted(definition);
}
@Deprecated
public Collection<String> getforbiddenFieldsNotStarted(Long definitionId) {
WorkflowDefinition definition = workflowDefinitionManager.getWfDefinition(definitionId);
return workflowRightsManager.getforbiddenFieldsNotStarted(definition);
}
public Collection<String> getForbiddenFieldsNotStarted(Long definitionId) {
WorkflowDefinition definition = workflowDefinitionManager.getWfDefinition(definitionId);
return workflowRightsManager.getforbiddenFieldsNotStarted(definition);
}
/**
* 设置新的办理人到工作流引擎中
* @param taskId 任务id
* @param newTransactor 新的办理人
*/
public void setNewTransactor(Long taskId, String newTransactor) {
taskService.setNewTransactor(taskId,newTransactor);
}
/**
* 设置新的流向名到工作流引擎中
* @param taskId 任务id
* @param transitionName 流向名
*/
public void setTransitionName(Long taskId, String transitionName) {
taskService.setTransitionName(taskId,transitionName);
}
public String drawTask(Long taskId) {
Assert.notNull(taskId,"领取任务时任务id不能为null");
return taskService.receive(taskId);
}
/**
* 查询所有的选项组
*/
public List<OptionGroup> getOptionGroups() {
return BeanUtil.turnToModelOptionGroupList(optionGroupManager.getOptionGroups());
}
/**
* 根据选项组查询选项
*/
public List<Option> getOptionsByGroup(Long optionGroupId) {
return BeanUtil.turnToModelOptionList(optionGroupManager.getOptionsByGroup(optionGroupId));
}
public OptionGroup getOptionGroupByCode(String code) {
return BeanUtil.turnToModelOptionGroup(optionGroupManager.getOptionGroupByCode(code));
}
public OptionGroup getOptionGroupByName(String name) {
return BeanUtil.turnToModelOptionGroup(optionGroupManager.getOptionGroupByName(name));
}
public List<Option> getOptionsByGroupCode(String code) {
return BeanUtil.turnToModelOptionList(optionGroupManager.getOptionsByGroupCode(code));
}
public List<Option> getOptionsByGroupName(String name) {
return BeanUtil.turnToModelOptionList(optionGroupManager.getOptionsByGroupName(name));
}
public CompleteTaskTipType completeTacheChoice(Long taskId,
String transitionName) {
return selectActivity(taskId, transitionName);
}
public CompleteTaskTipType selectActivity(Long taskId, String transitionName){
Assert.notNull(taskId,"完成选择环节的任务时,任务id不能为null");
return taskService.completeTacheChoice(taskId, transitionName);
}
public User getDirectLeader(Long userId, Long companyId) {
return BeanUtil.turnToModelUser(rankManager.getDirectLeader(userId,companyId));
}
public User getDirectLeader(String loginName, Long companyId) {
return BeanUtil.turnToModelUser(rankManager.getDirectLeader(loginName,companyId));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsByCustomField(FormFlowable entity,
String customField) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(workflowInstanceManager.getOpinionsByCustomField(entity.getWorkflowInfo().getWorkflowId(),customField));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsExceptCustomField(FormFlowable entity,
String customField) {
return getOpinionsExcludeCustomField(entity, customField);
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsExcludeCustomField(FormFlowable entity,String customField){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(workflowInstanceManager.getOpinionsExceptCustomField(entity.getWorkflowInfo().getWorkflowId(),customField));
}
public List<WorkflowAttachment> getAttachmentsByCustomField(
String workflowId, String customField) {
return workflowAttachmentManager.getAttachmentsByCustomField(workflowId,customField);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachmentsByCustomField(
FormFlowable entity, String customField) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(customField,"自定义类别不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getAllAttachmentsByCustomField(entity.getWorkflowInfo().getWorkflowId(),customField);
}
public List<WorkflowAttachment> getAttachmentsExceptCustomField(
String workflowId, String customField) {
return workflowAttachmentManager.getAttachmentsExceptCustomField(workflowId,customField);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachmentsExceptCustomField(
FormFlowable entity, String customField) {
return getAttachmentsExcludeCustomField(entity, customField);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachmentsExcludeCustomField(FormFlowable entity,String customField){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(customField,"自定义正文类别不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getAttachmentsExcludeCustomField(entity.getWorkflowInfo().getWorkflowId(),customField);
}
/**
* 根据数据字典typNo和用途查询数据字典
* @param ids
* @return
*/
public List<DataDictionary> queryDataDict(String typeNo,DataDictUseType dataDictUseType){
return BeanUtil.turnToModelDataDictionaryList(dataDictionaryManager.queryDataDict(typeNo, dataDictUseType));
}
public List<WorkflowTask> getWorkflowTasksByDefinitonName(String definitionName,
String loginName) {
return BeanUtil.turnToModelTaskList(taskService.getWorkflowTasksByDefinitonName(definitionName,loginName));
}
/**
* 生成抄送任务
* @param taskId 当前任务的id
* @param transactors 将该任务抄送给谁
*/
@Deprecated
public void createCopyTaches(Long taskId, List<String> transactors) {
taskService.createCopyTaches(taskId,transactors,null,null);
}
/**
* 生成抄送任务
* @param taskId 当前任务的id
* @param transactors 将该任务抄送给谁
* @param title
* @param url
*/
@Deprecated
public void createCopyTaches(Long taskId, List<String> transactors,String title,String url) {
createCopyTasks(taskId,transactors,title,url);
}
/**
* 生成抄送任务
* @param taskId 当前任务的id
* @param transactors 将该任务抄送给谁
* @param title
* @param url
*/
public void createCopyTasks(Long taskId, List<String> transactors,String title,String url){
Assert.notNull(taskId,"生成抄送任务时,任务id不能为null");
taskService.createCopyTaches(taskId,transactors,title,url);
}
@Deprecated
public List<WorkflowTask> getOverdueTasks(Long companyId) {
return BeanUtil.turnToModelTaskList(taskService.getOverdueTasks(companyId));
}
public List<WorkflowTask> getOverdueTasks() {
return getActiveOverdueTasks();
}
public List<WorkflowTask> getActiveOverdueTasks(){
return BeanUtil.turnToModelTaskList(taskService.getOverdueTasks());
}
@Deprecated
public Map<String, Integer> getOverdueTasksNumByTransactor(Long companyId) {
return taskService.getOverdueTasksNumByTransactor(companyId);
}
public Map<String, Integer> getOverdueTasksNumByTransactor() {
return taskService.getOverdueTasksNumByTransactor();
}
@Deprecated
public Integer getTasksNumByTransactor(Long companyId, String loginName) {
return taskService.getTasksNumByTransactor(companyId, loginName);
}
@Deprecated
public Integer getTasksNumByTransactor(String loginName ) {
return getActiveTaskCountByTransactor(loginName);
}
public Integer getActiveTaskCountByTransactor(String loginName){
return taskService.getTasksNumByTransactor(loginName);
}
@Deprecated
public List<WorkflowTask> getTotalOverdueTasks(Long companyId) {
return BeanUtil.turnToModelTaskList(taskService.getTotalOverdueTasks(companyId));
}
@Deprecated
public List<WorkflowTask> getTotalOverdueTasks() {
return getAllOverdueTasks();
}
public List<WorkflowTask> getAllOverdueTasks(){
return BeanUtil.turnToModelTaskList(taskService.getTotalOverdueTasks());
}
@Deprecated
public Map<String, Integer> getTotalOverdueTasksNumByTransactor(
Long companyId) {
return taskService.getTotalOverdueTasksNumByTransactor(companyId);
}
public Map<String, Integer> getTotalOverdueTasksNumByTransactor() {
return getOverdueTaskCountGroupByTransactor();
}
public Map<String,Integer> getOverdueTaskCountGroupByTransactor(){
return taskService.getTotalOverdueTasksNumByTransactor();
}
@Deprecated
public Long getFormFlowableIdByTask(Long taskId, Long companyId) {
com.norteksoft.task.entity.WorkflowTask task = taskService.getWorkflowTask(taskId);
return getDataIdByTask(task,companyId);
}
public List<Object[]> getTaskAndOpinion(Long taskId) {
com.norteksoft.task.entity.WorkflowTask task = taskService.getWorkflowTask(taskId);
return workflowInstanceManager.getTaskAndOpinion( task);
}
@Deprecated
public void getAllTasksByUser(Long companyId, String loginName,
Page<com.norteksoft.task.entity.WorkflowTask> page) {
taskService.getAllTasksByUser(companyId, loginName,page);
}
@Deprecated
public List<com.norteksoft.task.entity.WorkflowTask> getAllTasksByUser(Long companyId, String loginName) {
return taskService.getAllTasksByUser(companyId, loginName);
}
@Deprecated
public void getUnDoneTasksByUser(String loginName,
Page<com.norteksoft.task.entity.WorkflowTask> page) {
taskService.getAllTasksByUser(ContextUtils.getCompanyId(), loginName,page);
}
public List<WorkflowTask> getUnDoneTasksByUser( String loginName) {
return getActiveTasksByLoginName(loginName);
}
public List<WorkflowTask> getActiveTasksByLoginName(String loginName){
Assert.notNull(ContextUtils.getCompanyId(),"公司id不能为null");
return BeanUtil.turnToModelTaskList(taskService.getAllTasksByUser(ContextUtils.getCompanyId(), loginName));
}
public void startInstance(String definitionCode,
Integer definitionVersion, FormFlowable entity) {
Assert.notNull(entity,"FormFlowable实体不能为null");
WorkflowDefinition definition = getEnabledWorkflowDefinitionByCodeAndVersion(definitionCode,definitionVersion,getCompanyId(entity));
startInstance(definition,entity);
}
public WorkflowDefinition getEnabledWorkflowDefinitionByCodeAndVersion(String definitionCode,
Integer definitionVersion,Long companyId){
WorkflowDefinition definition = workflowDefinitionManager.getEnabledWorkflowDefinitionByCodeAndVersion(definitionCode,definitionVersion,companyId);
Assert.notNull(companyId,"companyId不能为null");
if(definition==null){
log.debug("not found started workflowDefinition by code:"+definitionCode);
throw new NotFoundEnabledWorkflowDefinitionException("not found started workflowDefinition by code:"+definitionCode);
}
return definition;
}
public WorkflowDefinition getWfdByCodeAndVersion(String definitionCode,
Integer definitionVersion,Long companyId,Long systemId){
Assert.notNull(definitionVersion, "definitionVersion不能为null");
Assert.notNull(companyId, "companyId不能为null");
Assert.notNull(systemId, "systemId不能为null");
WorkflowDefinition definition = workflowDefinitionManager.getWorkflowDefinitionByCodeAndVersion(definitionCode,definitionVersion,companyId,systemId);
if(definition==null) throw new NotFoundEnabledWorkflowDefinitionException("not found started workflowDefinition by code:"+definitionCode);
return definition;
}
public CompleteTaskTipType submitInstance(String definitionCode,
Integer definitionVersion, FormFlowable entity) {
log.debug(LOGMESSAGE_METHOD_PARAMETER + "String workflowDefinitionCode:" + definitionCode);
log.debug(LOGMESSAGE_METHOD_PARAMETER + "Integer workflowDefinitionVersion:" + definitionVersion);
log.debug(LOGMESSAGE_METHOD_PARAMETER + "FormFlowable entity:" + entity);
Assert.notNull(entity, "entity不能为空");
log.debug("workflowInfo:" + entity.getWorkflowInfo());
String workflowId = null;
if(entity.getWorkflowInfo()==null || entity.getWorkflowInfo().getWorkflowId() == null){
WorkflowDefinition definition = getEnabledWorkflowDefinitionByCodeAndVersion(definitionCode,definitionVersion,getCompanyId(entity));
workflowId = startInstance(definition, entity) ;
}else{
workflowId = entity.getWorkflowInfo().getWorkflowId();
}
log.debug("workflowId" + workflowId);
return submitWorkflowById(workflowId,entity);
}
public List<String> getCandidateAddition(List<Long> dictIds) {
return dataDictionaryManager.getCandidateAddition(dictIds);
}
public List<String> getCandidateAddition(Long dictId) {
List<String> loginNames=new ArrayList<String>();
return dataDictionaryManager.getCandidateAddition(dictId, loginNames);
}
public void saveDocument(com.norteksoft.product.api.entity.Document doc) {
if(doc==null){
log.debug("com.norteksoft.product.api.entity.Document实体不能为null");
throw new RuntimeException("com.norteksoft.product.api.entity.Document实体不能为null");
}
Document document=null;
if(doc.getId()==null){
document=new Document();
document.setCreatedTime(new Date());
}else{
document=workflowInstanceManager.getDocument(doc.getId());
}
if(document==null){
log.debug("com.norteksoft.product.api.entity.Document实体不能为null");
throw new RuntimeException("com.norteksoft.product.api.entity.Document实体不能为null");
}
document.setCustomField(doc.getCustomField());
document.setRemark(doc.getDescript());
document.setFileName(doc.getFileName());
document.setFilePath(doc.getFilePath());
document.setFileSize(doc.getFileSize());
document.setFileType(doc.getFileType());
document.setStatus(doc.getStatus());
document.setSubject(doc.getSubject());
if(doc.getTaskId()!=null){
document.setTaskId(doc.getTaskId());
com.norteksoft.task.entity.WorkflowTask task = taskService.getTask(doc.getTaskId());
document.setTaskMode(task.getProcessingMode());
document.setTaskName(task.getName());
document.setWorkflowId(task.getProcessInstanceId());
document.setCompanyId(task.getCompanyId());
document.setCreator(task.getTransactor());
document.setCreatorName(task.getTransactorName());
}
workflowInstanceManager.saveDocument(document);
DocumentFile file=workflowInstanceManager.getDocumentFile(document.getId());
if(file!=null){//兼容xtsoa历史文
saveDocumentFile(doc,document,file);
}else{
FileService fileService =(FileService)ContextUtils.getBean("fileService");
document.setFilePath(fileService.saveFile(doc.getFileBody()));
}
workflowInstanceManager.saveDocument(document);
}
private void saveDocumentFile(com.norteksoft.product.api.entity.Document doc,Document document,DocumentFile file){
file.setDocumentId(document.getId());
file.setCompanyId(document.getCompanyId());
file.setFileBody(doc.getFileBody());
workflowInstanceManager.saveDocumentFile(file);
}
public List<com.norteksoft.product.api.entity.WorkflowDefinition> getWorkflowDefinitionsByTypeCode(String typeNo) {
WorkflowType type = workflowTypeManager.getWorkflowType(typeNo);
if(type == null) throw new RuntimeException("没有查询到流程类型,流程编号["+typeNo+"]");
List<WorkflowDefinition> wfds=workflowDefinitionManager.getWfDefinitionsByType(type.getCompanyId(), type.getId());
List<com.norteksoft.product.api.entity.WorkflowDefinition> result=new ArrayList<com.norteksoft.product.api.entity.WorkflowDefinition>();
for(WorkflowDefinition definition:wfds){
result.add(getWorkflowDefinitionParameter(definition));
}
return result;
}
public HashMap<String, String> getUserNames(List<Long> dictIds) {
return dataDictionaryManager.getUserNames(dictIds);
}
public HashMap<String, String> getUserNames(Long dictId) {
HashMap<String, String> loginNames = new HashMap<String, String>();
return dataDictionaryManager.getUser(dictId, loginNames);
}
private TaskProcessingMode getTaskMode(FormFlowable entity){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"必须先启动流程 ");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"必须先启动流程 ");
String activityTaskName = entity.getWorkflowInfo().getCurrentActivityName();
log.debug("当前环节的名字:" + activityTaskName);
return getTaskMode(activityTaskName,entity.getWorkflowInfo().getWorkflowId());
}
private TaskProcessingMode getTaskMode(String activityTaskName,String instanceId ){
Assert.notNull(instanceId,"参数instanceId不可为空");
WorkflowInstance instance = this.getInstance(instanceId);
String processingMode = DefinitionXmlParse.getTaskProcessingMode(
instance.getProcessDefinitionId(), activityTaskName);
return TaskProcessingMode.getTaskModeFromStringToEnum(processingMode);
}
public void saveDocument(com.norteksoft.product.api.entity.Document doc, FormFlowable entity) {
if(doc==null){
log.debug("com.norteksoft.product.api.entity.Document实体不能为null");
throw new RuntimeException("com.norteksoft.product.api.entity.Document实体不能为null");
}
Document document=null;
if(doc.getId()==null){
document=new Document();
document.setCreatedTime(new Date());
}else{
document=workflowInstanceManager.getDocument(doc.getId());
}
if(document==null){
log.debug("com.norteksoft.product.api.entity.Document实体不能为null");
throw new RuntimeException("com.norteksoft.product.api.entity.Document实体不能为null");
}
document.setCustomField(doc.getCustomField());
document.setRemark(doc.getDescript());
document.setFileName(doc.getFileName());
document.setFilePath(doc.getFilePath());
document.setFileSize(doc.getFileSize());
document.setFileType(doc.getFileType());
document.setStatus(doc.getStatus());
document.setSubject(doc.getSubject());
if(entity.getWorkflowInfo()!=null){
document.setTaskMode(getTaskMode(entity));
document.setTaskName(entity.getWorkflowInfo().getCurrentActivityName());
document.setWorkflowId(entity.getWorkflowInfo().getWorkflowId());
}
document.setCompanyId(getCompanyId(entity));
workflowInstanceManager.saveDocument(document);
DocumentFile file=workflowInstanceManager.getDocumentFile(document.getId());
if(file!=null){//兼容xtsoa历史文
saveDocumentFile(doc,document,file);
}else{
FileService fileService =(FileService)ContextUtils.getBean("fileService");
document.setFilePath(fileService.saveFile(doc.getFileBody()));
}
workflowInstanceManager.saveDocument(document);
}
public void saveAttachment(com.norteksoft.product.api.entity.WorkflowAttachment attachment,
FormFlowable entity) {
Assert.notNull(attachment, "附件attachment不能为null");
Assert.notNull(entity, "实体entity不能为null");
Assert.notNull(entity.getWorkflowInfo(), "entity.getWorkflowInfo()不能为null");
saveAttachment(attachment,entity.getWorkflowInfo().getWorkflowId());
}
public List<String> getCandidate(String title) {
return dataDictionaryManager.getCandidate(title);
}
public boolean isFirstTask(Long taskId) {
if(taskId==null)return true;
WorkflowTask task=getTask(taskId);
Assert.notNull(task,"判断是否是第一环节任务时,任务不能为null");
WorkflowInstance wi=getInstance(task.getProcessInstanceId());
Assert.notNull(wi,"判断是否是第一环节任务时,流程实例不能为null");
String firstTaskName=DefinitionXmlParse.getFirstTaskName(wi.getProcessDefinitionId());
if(task.getName().equals(firstTaskName)){
return true;
}
return false;
}
public List<String> getTransactorsExceptTask(Long taskId) {
return getTransactorsExcludeGivenTask(taskId);
}
public List<String> getTransactorsExcludeGivenTask(Long taskId){
Assert.notNull(taskId,"任务id不能为null");
return taskService.getTransactorsExceptTask(taskId);
}
@Deprecated
public CompleteTaskTipType assignTask(Long taskId,
Collection<String> transcators) {
return taskService.assignTask(taskId, transcators);
}
public CompleteTaskTipType assignTask(Long taskId, String transcator) {
return taskService.assignTask(taskId, transcator);
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinions(FormFlowable entity, String... taskNames) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(workflowInstanceManager.getOpinions(entity.getWorkflowInfo().getWorkflowId(), getCompanyId(entity), taskNames));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsExceptTaskName(
FormFlowable entity, String... taskNames) {
return getOpinionsExcludeTaskName(entity, taskNames);
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsExcludeTaskName(FormFlowable entity,String... taskNames){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(workflowInstanceManager.getOpinionsExceptTaskName(entity.getWorkflowInfo().getWorkflowId(), this.getCompanyId(entity), taskNames));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsByTacheCode(FormFlowable entity,
String tacheCode) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(workflowInstanceManager.getOpinionsByTacheCode(entity.getWorkflowInfo().getWorkflowId(), this.getCompanyId(entity), tacheCode));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsByTacheCode(FormFlowable entity,
String... tacheCodes) {
return getOpinionsByTaskCode(entity, tacheCodes);
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsByTaskCode(FormFlowable entity,String... tacheCodes){
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(workflowInstanceManager.getOpinionsByTacheCode(entity.getWorkflowInfo().getWorkflowId(), this.getCompanyId(entity), tacheCodes));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsByTaskName(FormFlowable entity,
String taskName) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(workflowInstanceManager.getOpinionsByTaskName(entity.getWorkflowInfo().getWorkflowId(), this.getCompanyId(entity), taskName));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsByTaskName(FormFlowable entity,
String... taskNames) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getOpinions(workflowInstanceManager.getOpinionsByTaskName(entity.getWorkflowInfo().getWorkflowId(), this.getCompanyId(entity), taskNames));
}
public List<com.norteksoft.product.api.entity.WorkflowDefinition> getWorkflowDefinitionsByCode(
String workflowDefinitionCode) {
List<WorkflowDefinition> wfds=workflowDefinitionManager.getWfDefinitionsByCode(workflowDefinitionCode);
List<com.norteksoft.product.api.entity.WorkflowDefinition> result=new ArrayList<com.norteksoft.product.api.entity.WorkflowDefinition>();
for(WorkflowDefinition definition:wfds){
result.add(getWorkflowDefinitionParameter(definition));
}
return result;
}
public CompleteTaskTipType completeWorkflowTask(Long taskId,
TaskProcessingResult result) {
return completeWorkflowTask(taskId, result, null);
}
public CompleteTaskTipType completeWorkflowTask(WorkflowTask task,
TaskProcessingResult result) {
return completeWorkflowTask(task,result,null);
}
public List<DataDictionary> queryDataDicts(String loginName) {
return BeanUtil.turnToModelDataDictionaryList(dataDictionaryManager.queryDataDicts(loginName));
}
public void setTaskRead(Long taskId) {
Assert.notNull(taskId,"任务id不能为null");
WorkflowTask task=getTask(taskId);
Assert.notNull(task,"任务不能为null");
task.setRead(true);
taskService.saveTask(BeanUtil.turnToTask(task));
}
public com.norteksoft.product.api.entity.WorkflowDefinition getWorkflowDefinitionByCodeAndVersion(
String workflowDefinitionCode, Integer workflowDefinitionVersion) {
WorkflowDefinition wfd = getWfdByCodeAndVersion(workflowDefinitionCode, workflowDefinitionVersion,ContextUtils.getCompanyId(),ContextUtils.getSystemId());
if(wfd == null) throw new RuntimeException(
"没有查询到流程定义,流程编号["+workflowDefinitionCode+
"], 流程版本号["+workflowDefinitionVersion+"], 公司ID["+ContextUtils.getCompanyId()+"], 系统ID["+ContextUtils.getSystemId()+"]");
return getWorkflowDefinitionParameter(wfd);
}
public com.norteksoft.product.api.entity.WorkflowDefinition getWorkflowDefinitionByCodeAndVersion(
String workflowDefinitionCode, Integer workflowDefinitionVersion,Long systemId) {
WorkflowDefinition wfd = getWfdByCodeAndVersion(workflowDefinitionCode, workflowDefinitionVersion,ContextUtils.getCompanyId(),systemId);
if(wfd == null) throw new RuntimeException(
"没有查询到流程定义,流程编号["+workflowDefinitionCode+
"], 流程版本号["+workflowDefinitionVersion+"], 公司ID["+ContextUtils.getCompanyId()+"], 系统ID["+ContextUtils.getSystemId()+"]");
return getWorkflowDefinitionParameter(wfd);
}
public CompleteTaskTipType taskJump(String workflowId, String backTo,
Long companyId) {
Assert.notNull(companyId,"环节跳转时,公司id不能为null");
return taskService.taskJump(workflowId, backTo, companyId);
}
public boolean isInstanceComplete(FormFlowable entity) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
com.norteksoft.wf.engine.entity.WorkflowInstance instance=workflowInstanceManager.getWorkflowInstance(entity.getWorkflowInfo().getWorkflowId());
Assert.notNull(instance,"instance不能为空 ");
if(instance.getProcessState()==ProcessState.END||instance.getProcessState()==ProcessState.MANUAL_END)return true;
return false;
}
public void saveAttachment(com.norteksoft.product.api.entity.WorkflowAttachment attachment,
Long taskId) {
Assert.notNull(taskId, "taskId不能为null");
Assert.notNull(attachment, "附件attachment不能为null");
WorkflowTask task = this.getTask(taskId);
WorkflowAttachment document=null;
if(attachment.getId()==null){
document=new WorkflowAttachment();
}else{
document=workflowInstanceManager.getAttachment(attachment.getId());
}
document.setFileName(attachment.getFileName());
document.setFileSize(attachment.getFileSize());
document.setFileType(attachment.getFileType());
attachment.setTaskId(taskId);
if(task!=null){
document.setTaskMode(task.getProcessingMode());
document.setTaskName(task.getName());
document.setWorkflowId(task.getProcessInstanceId());
}
document.setCompanyId(task.getCompanyId());
FileService fileService =(FileService)ContextUtils.getBean("fileService");
document.setFilePath(fileService.saveFile(attachment.getFileBody()));
workflowInstanceManager.saveAttachment(document);
}
public void saveOpinion(com.norteksoft.product.api.entity.Opinion opinionp, Long taskId) {
Opinion opinion=null;
if(opinionp.getId()==null){
opinion=new Opinion();
}else{
opinion=workflowInstanceManager.getOpinionsById(opinionp.getId());
}
opinion.setCustomField(opinionp.getCustomField());
opinion.setOpinion(opinionp.getOpinion());
opinion.setCreatedTime(new Date());
if(taskId!=null){
WorkflowTask task = this.getTask(taskId);
opinion.setTaskMode(task.getProcessingMode());
opinion.setTaskName(task.getName());
opinion.setCompanyId(task.getCompanyId());
opinion.setWorkflowId(task.getProcessInstanceId());
opinion.setTaskId(taskId);
opinion.setTransactor(task.getTransactor());
opinion.setDelegateFlag(StringUtils.isEmpty(task.getTrustor())?false:true);
Long mainDepartmentId = acsUtils.getUserByLoginName(task.getTransactor()).getMainDepartmentId();
if(mainDepartmentId!=null){
Department dept=acsUtils.getDepartmentById(mainDepartmentId);
opinion.setDepartmentName(dept.getName());
}
opinion.setTaskCode(task.getCode());
}
workflowInstanceManager.saveOpinion(opinion);
}
public CompleteTaskTipType isNeedChoiceTache(WorkflowTask task) {
return getOptionalTasks(task);
}
@Deprecated
public CompleteTaskTipType isNeedChoiceTache(com.norteksoft.task.entity.WorkflowTask task) {
return getOptionalTasks(task);
}
public CompleteTaskTipType getOptionalTasks(WorkflowTask task){
return taskService.isNeedChoiceTache(BeanUtil.turnToTask(task));
}
@Deprecated
public CompleteTaskTipType getOptionalTasks(com.norteksoft.task.entity.WorkflowTask task){
return taskService.isNeedChoiceTache(task);
}
public List<String[]> getActivityTaskTransactors(FormFlowable entity) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getActivityTaskTransactors(entity.getWorkflowInfo().getWorkflowId());
}
public Set<String> getHandledTransactors(FormFlowable entity) {
return getCompletedTaskTransactor(entity);
}
public Set<String> getCompletedTaskTransactor(FormFlowable entity){
String workflowId=null;
if(entity.getWorkflowInfo()!=null){
workflowId=entity.getWorkflowInfo().getWorkflowId();
}
if(workflowId==null)return null;
WorkflowInstance wi=getInstance(workflowId);
return taskService.getHandledTransactors(BeanUtil.turnToWorkflowInstance(wi));
}
public Set<String> getHandledTransactors(Long taskId) {
return getCompletedTaskTransactor(taskId);
}
public Set<String> getCompletedTaskTransactor(Long taskId){
if(taskId==null)return null;
WorkflowTask task=getTask(taskId);
Assert.notNull(task,"任务不能为null");
WorkflowInstance wi=getInstance(task.getProcessInstanceId());
Assert.notNull(wi,"流程实例不能为null");
return taskService.getHandledTransactors(BeanUtil.turnToWorkflowInstance(wi));
}
public TaskPermission getActivityPermission(Long taskId) {
return workflowRightsManager.getActivityPermission(taskId);
}
public TaskPermission getActivityPermission(String definitionCode) {
WorkflowDefinition definition = this.getEnabledHighestVersionDefinition(definitionCode);
return workflowRightsManager.getActivityPermission(definition);
}
public TaskPermission getActivityPermission(String definitionCode,
Integer definitionVersion) {
WorkflowDefinition definition = this.getWfdByCodeAndVersion(definitionCode, definitionVersion,ContextUtils.getCompanyId(),ContextUtils.getSystemId());
return workflowRightsManager.getActivityPermission(definition);
}
public String getDocumentPermission(Long taskId) {
StringBuilder editType = new StringBuilder("-1");// "-1,0,1,1,0,0,1,1";//查看保留痕迹
if(taskId==null)return null;
com.norteksoft.task.entity.WorkflowTask task=taskService.getTask(taskId);
if(task==null)return null;
//是否保户文档
if((TaskState.WAIT_TRANSACT.getIndex().equals(task.getActive())|| TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex().equals(task.getActive()))&&workflowRightsManager.officialTextEditRight(task)){
editType.append(",0");
}else{
editType.append(",1");
}
//是否显示痕迹
if(workflowRightsManager.officialTextViewTrace(task)){
editType.append(",1");
}else{
editType.append(",0");
}
//是否保留痕迹
if(workflowRightsManager.officialTextRetainTrace(task)){
editType.append(",1");
}else{
editType.append(",0");
}
editType.append(",0,0,1,1");
return editType.toString();
}
public void saveTask(WorkflowTask task) {
taskService.saveTask(BeanUtil.turnToTask(task));
}
@Deprecated
public void saveTask(com.norteksoft.task.entity.WorkflowTask task) {
taskService.saveTask(task);
}
public Map<String, String> getExtendFields(FormFlowable entity) {
if(entity.getWorkflowInfo()==null)return new HashMap<String, String>();
WorkflowInstance instance = this.getInstance(entity.getWorkflowInfo().getWorkflowId());
return getExtendFields(instance);
}
public Map<String, String> getExtendFields(Long taskId) {
if(taskId==null)return new HashMap<String, String>();
com.norteksoft.task.entity.WorkflowTask task=taskService.getTask(taskId);
if(task==null)return new HashMap<String, String>();
WorkflowInstance instance = this.getInstance(task.getProcessInstanceId());
return getExtendFields(instance);
}
private Map<String, String> getExtendFields(WorkflowInstance instance){
if(instance==null)return new HashMap<String, String>();
Long definitionId=instance.getWorkflowDefinitionId();
if(definitionId==null)return new HashMap<String, String>();
WorkflowDefinition definition = workflowDefinitionManager.getWfDefinition(definitionId);
if(definition==null)return new HashMap<String, String>();
return DefinitionXmlParse.getExtendFields(definition.getProcessId());
}
public void fillEntityByDefinition(Map data, String wfDefinationCode,Long... systemId) {
Long sysId=ContextUtils.getSystemId();
if(systemId.length>0){
sysId=systemId[0];
}
autoFilledEntityBeforeByDefinitionId(null, getEnabledHighestVersionDefinitionBySystem(wfDefinationCode,sysId).getId(),data);
}
public void fillEntityByDefinition(Map data, String wfDefinationCode,
Integer version,Long... systemId) {
Long sysId=ContextUtils.getSystemId();
if(systemId.length>0){
sysId=systemId[0];
}
autoFilledEntityBeforeByDefinitionId(null, getWorkflowDefinitionByCodeAndVersion(wfDefinationCode, version,sysId).getId(),data);
}
public void fillEntityByTask(Map data, Long taskId) {
fillEntityByTask(null, taskId,data);
}
public com.norteksoft.product.api.entity.Document createDocument(
String instanceId, String fileType) {
Assert.notNull(instanceId,"参数实例id不可为空");
Assert.notNull(ContextUtils.getCompanyId(), "公司Id不能为null");
return createDocument(instanceId,fileType,ContextUtils.getCompanyId());
}
public List<com.norteksoft.product.api.entity.Document> getDocuments(
String instanceId) {
Assert.notNull(instanceId, "instanceId实例id不能为null");
Assert.notNull(ContextUtils.getCompanyId(), "公司Id不能为null");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<Document> docs=workflowInstanceManager.getDocuments(instanceId,ContextUtils.getCompanyId());
for(Document doc:docs){
//用户有创建正文权限,即使没有删除权限也可删除自己当前环节创建的正文
if(getLoginName().equals(doc.getCreator())){
doc.setDeleteSetting(true);
}
}
return getDocuments(docs);
}
public List<com.norteksoft.product.api.entity.Document> getDocumentsExcludeCustomField(
String instanceId, String customField) {
Assert.notNull(instanceId, "instanceId实例id不能为null");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<Document> docs=getDocumentsExceptCustomField(instanceId,customField);
for(Document doc:docs){
//用户有创建正文权限,即使没有删除权限也可删除自己当前环节创建的正文
if(getLoginName().equals(doc.getCreator())){
doc.setDeleteSetting(true);
}
}
return getDocuments(docs);
}
public List<com.norteksoft.product.api.entity.Document> getDocumentsExcludeTaskMode(
String instanceId, TaskProcessingMode taskMode) {
Assert.notNull(instanceId, "instanceId实例id不能为null");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<Document> docs=getDocumentsExceptTaskMode(instanceId,taskMode);
for(Document doc:docs){
//用户有创建正文权限,即使没有删除权限也可删除自己当前环节创建的正文
if(getLoginName().equals(doc.getCreator())){
doc.setDeleteSetting(true);
}
}
return getDocuments(docs);
}
public List<com.norteksoft.product.api.entity.Document> getDocumentsExcludeTaskName(
String instanceId, String taskName) {
Assert.notNull(instanceId, "instanceId实例id不能为null");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<Document> docs=getDocumentsExceptTaskName(instanceId,taskName);
for(Document doc:docs){
//用户有创建正文权限,即使没有删除权限也可删除自己当前环节创建的正文
if(getLoginName().equals(doc.getCreator())){
doc.setDeleteSetting(true);
}
}
return getDocuments(docs);
}
public List<com.norteksoft.product.api.entity.Document> getAllDocuments(
String instanceId, String taskName) {
Assert.notNull(instanceId, "instanceId实例id不能为null");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<Document> docs=getDocuments(instanceId,taskName);
for(Document doc:docs){
//用户有创建正文权限,即使没有删除权限也可删除自己当前环节创建的正文
if(getLoginName().equals(doc.getCreator())){
doc.setDeleteSetting(true);
}
}
return getDocuments(docs);
}
public List<com.norteksoft.product.api.entity.Document> getAllDocumentsByCustomField(
String instanceId, String customField) {
Assert.notNull(instanceId, "instanceId实例id不能为null");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<Document> docs=getDocumentsByCustomField(instanceId,customField);
for(Document doc:docs){
//用户有创建正文权限,即使没有删除权限也可删除自己当前环节创建的正文
if(getLoginName().equals(doc.getCreator())){
doc.setDeleteSetting(true);
}
}
return getDocuments(docs);
}
public List<com.norteksoft.product.api.entity.Document> getAllDocuments(
String instanceId, TaskProcessingMode taskMode) {
Assert.notNull(instanceId, "instanceId实例id不能为null");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<Document> docs=getDocuments(instanceId,taskMode);
for(Document doc:docs){
//用户有创建正文权限,即使没有删除权限也可删除自己当前环节创建的正文
if(getLoginName().equals(doc.getCreator())){
doc.setDeleteSetting(true);
}
}
return getDocuments(docs);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachmentsExcludeCustomField(
String instanceId, String customField) {
Assert.notNull(instanceId, "instanceId实例id不能为null");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<WorkflowAttachment> attchments=workflowAttachmentManager.getAttachmentsExceptCustomField(instanceId,customField);
for(WorkflowAttachment att:attchments){
//用户有创建附件权限,即使没有删除权限也可删除自己当前环节创建的附件
if(getLoginName().equals(att.getTransactor())){
att.setDeleteSetting(true);
}
}
return getAttachments(attchments);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachmentsExcludeTaskMode(
String instanceId, TaskProcessingMode taskMode) {
Assert.notNull(taskMode,"任务模式不可为空");
Assert.notNull(instanceId, "instanceId实例id不能为null");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<WorkflowAttachment> attchments=getAttachmentsExceptTaskMode(instanceId,taskMode);
for(WorkflowAttachment att:attchments){
//用户有创建附件权限,即使没有删除权限也可删除自己当前环节创建的附件
if(getLoginName().equals(att.getTransactor())){
att.setDeleteSetting(true);
}
}
return getAttachments(attchments);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAttachmentsExcludeTaskName(
String instanceId, String taskName) {
Assert.notNull(taskName,"任务名称不可为空");
Assert.notNull(instanceId, "instanceId实例id不能为null");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<WorkflowAttachment> attchments=getAttachmentsExceptTaskName(instanceId,taskName);
for(WorkflowAttachment att:attchments){
//用户有创建附件权限,即使没有删除权限也可删除自己当前环节创建的附件
if(getLoginName().equals(att.getTransactor())){
att.setDeleteSetting(true);
}
}
return getAttachments(attchments);
}
public void saveAttachment(
com.norteksoft.product.api.entity.WorkflowAttachment attachment,
String instanceId) {
Assert.notNull(attachment, "附件attachment不能为null");
Assert.notNull(instanceId, "instanceId实例id不能为null");
WorkflowAttachment document=null;
if(attachment.getId()==null){
document=new WorkflowAttachment();
}else{
document=workflowInstanceManager.getAttachment(attachment.getId());
}
document.setFileName(attachment.getFileName());
document.setFileSize(attachment.getFileSize());
document.setFileType(attachment.getFileType());
WorkflowInstance instance=getInstance(instanceId);
if(instance!=null){
document.setTaskMode(getTaskMode(instance.getCurrentActivity(),instanceId));
document.setTaskName(instance.getCurrentActivity());
document.setWorkflowId(instanceId);
document.setCompanyId(instance.getCompanyId());
}
FileService fileService =(FileService)ContextUtils.getBean("fileService");
document.setFilePath(fileService.saveFile(attachment.getFileBody()));
workflowInstanceManager.saveAttachment(document);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAllAttachments(
String instanceId) {
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
Assert.notNull(ContextUtils.getCompanyId(), "公司id不能为null");
List<WorkflowAttachment> attchments=workflowInstanceManager.getAttachments(instanceId,ContextUtils.getCompanyId());
for(WorkflowAttachment att:attchments){
//用户有创建附件权限,即使没有删除权限也可删除自己当前环节创建的附件
if(getLoginName().equals(att.getTransactor())){
att.setDeleteSetting(true);
}
}
return getAttachments(attchments);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAllAttachments(
String instanceId, TaskProcessingMode taskMode) {
Assert.notNull(taskMode,"任务模式不可为空");
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<WorkflowAttachment> attchments=getAttachments(instanceId, taskMode);
for(WorkflowAttachment att:attchments){
//用户有创建附件权限,即使没有删除权限也可删除自己当前环节创建的附件
if(getLoginName().equals(att.getTransactor())){
att.setDeleteSetting(true);
}
}
return getAttachments(attchments);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAllAttachments(
String instanceId, String taskName) {
Assert.notNull(taskName,"任务名称不可为空");
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<WorkflowAttachment> attchments=getAttachments(instanceId, taskName);
for(WorkflowAttachment att:attchments){
//用户有创建附件权限,即使没有删除权限也可删除自己当前环节创建的附件
if(getLoginName().equals(att.getTransactor())){
att.setDeleteSetting(true);
}
}
return getAttachments(attchments);
}
public List<com.norteksoft.product.api.entity.WorkflowAttachment> getAllAttachmentsByCustomField(
String instanceId, String customField) {
Assert.notNull(customField,"自定义类别不可为空");
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(getLoginName(), "当前用户登录名不能为null");
List<WorkflowAttachment> attchments=workflowAttachmentManager.getAttachmentsByCustomField(instanceId,customField);
for(WorkflowAttachment att:attchments){
//用户有创建附件权限,即使没有删除权限也可删除自己当前环节创建的附件
if(getLoginName().equals(att.getTransactor())){
att.setDeleteSetting(true);
}
}
return getAttachments(attchments);
}
public Map startCustomInstance(String definitionCode) {
Assert.notNull(definitionCode,"definitionCode不可为空");
WorkflowDefinition definition = getEnabledHighestVersionDefinition(definitionCode,ContextUtils.getCompanyId());
Assert.notNull(definition,"definition不可为空");
return startMyCustomInstance(definition.getProcessId());
}
// processId jBPM流程定义ID
private Map startMyCustomInstance(String processId){
Map myresult=new HashMap();
Map<String,String[]> parameterMap = Struts2Utils.getRequest().getParameterMap();
Map<String,String[]> parameter = new HashMap<String, String[]>();
parameter.putAll(parameterMap);
String instanceId = null;
// 从参数中获取 instanceId
String[] instanceIds = parameter.get("instance_id");
if(instanceIds != null && StringUtils.isNotEmpty(instanceIds[0])){
instanceId = instanceIds[0];
}
// 是否新发起流程
boolean isNewStart = false;
if(instanceId == null){
// 发起流程
instanceId = workflowInstanceManager.startWorkflowInstance(processId, 6,null);
parameter.put("instance_id", new String[]{instanceId});
isNewStart = true;
}
// 保存数据
Long dataId = saveData(parameter);
parameter.put("id", new String[]{dataId+""});
if(isNewStart){
com.norteksoft.wf.engine.entity.WorkflowInstance workflow = workflowInstanceManager.getWorkflowInstance(instanceId);
Assert.notNull(workflow,"发起流程后流程实例不可为空");
Assert.notNull(getLoginName(), "当前登录名不可为null");
com.norteksoft.task.entity.WorkflowTask task= taskService.getFirstTask(instanceId,getLoginName());
if(task==null){
log.debug("第一环节任务不能为null");
throw new RuntimeException("第一环节任务不能为null");
}
workflow.setDataId(dataId);
workflow.setProcessState(ProcessState.UNSUBMIT);
workflow.setCurrentActivity(task.getName());
workflowInstanceManager.saveWorkflowInstance(workflow);
//设置工作流相关的一些字段的值
FormView formView=formManager.getFormView(workflow.getFormId());
//Object data = jdbcDao.getDataMap(formView.getDataTable().getName(), dataId);
//Map<String, String[]> result=(Map<String, String[]>)data;
WorkflowDefinition workflowDefinition = workflowDefinitionManager.getWorkflowDefinitionByProcessId(processId);
parameter.put("form_code", new String[]{formView.getCode()});
parameter.put("form_version", new String[]{formView.getVersion()+""});
parameter.put("workflow_definition_id", new String[]{processId});
parameter.put("workflow_definition_name", new String[]{workflowDefinition.getName()});
parameter.put("workflow_definition_code", new String[]{workflowDefinition.getCode()});
parameter.put("workflow_definition_version", new String[]{workflowDefinition.getVersion()+""});
parameter.put("first_task_id", new String[]{task.getId()+""});
parameter.put("current_activity_name", new String[]{task.getName()});
parameter.put("form_id", new String[]{workflow.getFormId()+""});
parameter.put("process_state", new String[]{ProcessState.UNSUBMIT.getIndex()+""});
saveData(parameter);
}
myresult.put("dataId", dataId);
myresult.put("instanceId", instanceId);
return myresult;
}
public Long saveData(Map<String,String[]> parameter){
String formCode=null;
Integer formVersion=null;
String[] formCodes=parameter.get(JdbcSupport.FORM_CODE);
if(formCodes!=null){
formCode=formCodes[0];
}
String[] formVersions=parameter.get(JdbcSupport.FORM_VERSION);
if(formVersions!=null){
formVersion=Integer.valueOf(formVersions[0]);
}
Long id = null;
if(StringUtils.isNotEmpty(formCode)&&formVersion!=null){
FormView form = formManager.getFormViewByCodeAndVersion(ContextUtils.getCompanyId(), formCode, formVersion);
if(form!=null){
List<FormControl> controls = formManager.getControls(form);
String[] ids = new String[1];
Object idobj=parameter.get("id");
if(idobj instanceof Long){
ids[0]=idobj+"";
}else{
ids=(String[])idobj;
}
if(ids != null && StringUtils.isNotEmpty(ids[0])){
id = jdbcDao.updateTable(parameter, form, controls, Long.parseLong(ids[0]));
}else{
id = jdbcDao.insertTable(parameter, form, controls);
}
}
}
return id;
}
public Map startCustomInstance(String definitionCode, Integer definitionVersion) {
Assert.notNull(definitionCode,"definitionCode不可为空");
Assert.notNull(definitionVersion,"definitionVersion不可为空");
Assert.notNull(ContextUtils.getCompanyId(),"公司id不可为空");
WorkflowDefinition definition = getEnabledWorkflowDefinitionByCodeAndVersion(definitionCode,definitionVersion,ContextUtils.getCompanyId());
Assert.notNull(definition,"definition不可为空");
return startMyCustomInstance(definition.getProcessId());
}
public Map startCustomInstance(Long definitionId) {
Assert.notNull(definitionId,"definitionId不可为空");
WorkflowDefinition definition = this.getWorkflowDefinitionById(definitionId);
Assert.notNull(definition,"definition不可为空");
return startMyCustomInstance(definition.getProcessId());
}
public Map submitCustomInstance(String definitionCode) {
Assert.notNull(definitionCode,"definitionCode不可为空");
Assert.notNull(ContextUtils.getCompanyId(),"公司id不可为空");
WorkflowDefinition definition = getEnabledHighestVersionDefinition(definitionCode,ContextUtils.getCompanyId());
Assert.notNull(definition,"definition不可为空");
Map myresult=startMyCustomInstance(definition.getProcessId());
String instanceId=(String)myresult.get("instanceId");
com.norteksoft.wf.engine.entity.WorkflowInstance workflow = workflowInstanceManager.getWorkflowInstance(instanceId);
CompleteTaskTipType result=submitCustomInstance(workflow);
Map completeResult= new HashMap();
completeResult.put("dataId",(Long)myresult.get("dataId"));
completeResult.put("instanceId",instanceId);
completeResult.put("result",result);
return completeResult;
}
private CompleteTaskTipType submitCustomInstance(com.norteksoft.wf.engine.entity.WorkflowInstance workflow){
String workflowId = workflow.getProcessInstanceId();
if(workflow==null){
log.debug("流程实例不能为null");
throw new RuntimeException("流程实例不能为null");
}
String processId = workflow.getProcessDefinitionId();
log.debug(LOG_CONTENT+"流程实例workflow" +LOG_FLAG + workflow);
Assert.notNull(getLoginName(), "当前登录名不可为空");
log.debug(LOG_CONTENT+"当前登录名getLoginName():" +LOG_FLAG+getLoginName());
com.norteksoft.task.entity.WorkflowTask task = taskService.getFirstTask(workflowId, getLoginName());
Assert.notNull(task,"查询的第一个任务不应该为空");
//设置第一个任务可见
task.setVisible(true);
taskService.addTitle(task, processId,null);
taskService.saveTask(task);
log.debug(LOG_CONTENT+"firstTask:"+LOG_FLAG + task);
CompleteTaskTipType completeTaskTipType = taskService.completeWorkflowTask(task, TaskProcessingResult.SUBMIT);
log.debug(LOG_CONTENT+"第一环节任务完成结果"+LOG_FLAG + completeTaskTipType);
workflow.setSubmitTime(new Date(System.currentTimeMillis()));
if(completeTaskTipType==CompleteTaskTipType.OK&&workflow.getProcessState()==ProcessState.UNSUBMIT){
workflow.setProcessState(ProcessState.SUBMIT);
}
Map<String,String> parameterSetting=DefinitionXmlParse.getParameterSetting(workflow.getProcessDefinitionId());
String formViewUrl = parameterSetting.get(DefinitionXmlParse.FORM_VIEW_URL);
if(StringUtils.isEmpty(formViewUrl)){
formViewUrl = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_VIEW_URL);
}
String parameterName = parameterSetting.get(DefinitionXmlParse.FORM_VIEW_URL_PARAMETER_NAME);
if(StringUtils.isEmpty(parameterName)){
parameterName = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_VIEW_PARAMTER_NAME);
}
if(StringUtils.isNotEmpty(formViewUrl)){
String joinSign = StringUtils.contains(formViewUrl, "?") ? "&" : "?";
String systemCode=ContextUtils.getSystemCode();
WorkflowDefinition definition = workflowDefinitionManager.getWorkflowDefinitionByProcessId(processId);
if(definition!=null){
BusinessSystem system=ApiFactory.getAcsService().getSystemById(definition.getSystemId());
if(system!=null)systemCode=system.getCode();
}
formViewUrl = systemCode+formViewUrl + joinSign + parameterName + "=";
}
log.debug(LOG_CONTENT+"查看表单url"+LOG_FLAG + formViewUrl);
workflow.setFormUrl(formViewUrl);
String urgenUrl = parameterSetting.get(DefinitionXmlParse.URGEN_URL);
if(StringUtils.isEmpty(urgenUrl)){
urgenUrl = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_URGEN_URL);
}
String urgenParameterName = parameterSetting.get(DefinitionXmlParse.URGEN_URL_PARAMETER_NAME);
if(StringUtils.isEmpty(urgenParameterName)){
urgenParameterName = PropUtils.getProp(CommonStrings.WORKFLOW_PARAMETER_URL, CommonStrings.FORM_URGEN_PARAMTER_NAME);
}
if(StringUtils.isNotEmpty(urgenUrl)){
String joinSign = StringUtils.contains(urgenUrl, "?") ? "&" : "?";
String systemCode=ContextUtils.getSystemCode();
WorkflowDefinition definition = workflowDefinitionManager.getWorkflowDefinitionByProcessId(processId);
if(definition!=null){
BusinessSystem system=ApiFactory.getAcsService().getSystemById(definition.getSystemId());
if(system!=null)systemCode=system.getCode();
}
urgenUrl = systemCode+urgenUrl + joinSign + urgenParameterName + "=";
}
log.debug(LOG_CONTENT+"应急处理url"+LOG_FLAG + urgenUrl);
workflow.setEmergencyUrl(urgenUrl);
workflowInstanceManager.saveWorkflowInstance(workflow);
log.debug(LOG_CONTENT+"流程实例设置了值后workflow" +LOG_FLAG + workflow);
log.debug(LOG_CONTENT+"提交流程返回结果" +LOG_FLAG + completeTaskTipType);
log.debug(LOG_METHOD_END+"提交流程,WorkflowClientManager+submitWorkflowById(String workflowId,FormFlowable entity)"+LOG_FLAG);
return completeTaskTipType;
}
public Map submitCustomInstance(String definitionCode,
Integer definitionVersion) {
Assert.notNull(definitionCode,"definitionCode不可为空");
Assert.notNull(definitionVersion,"definitionVersion不可为空");
Assert.notNull(ContextUtils.getCompanyId(),"公司id不可为空");
WorkflowDefinition definition = getEnabledWorkflowDefinitionByCodeAndVersion(definitionCode,definitionVersion,ContextUtils.getCompanyId());
Assert.notNull(definition,"definition不可为空");
Map myresult=startMyCustomInstance(definition.getProcessId());
String instanceId=(String)myresult.get("instanceId");
com.norteksoft.wf.engine.entity.WorkflowInstance workflow = workflowInstanceManager.getWorkflowInstance(instanceId);
CompleteTaskTipType result=submitCustomInstance(workflow);
Map completeResult= new HashMap();
completeResult.put("dataId",(Long)myresult.get("dataId"));
completeResult.put("instanceId",instanceId);
completeResult.put("result",result);
return completeResult;
}
public Map submitCustomInstance(Long definitionId) {
Assert.notNull(definitionId,"definitionId不可为空");
WorkflowDefinition definition = this.getWorkflowDefinitionById(definitionId);
Assert.notNull(definition,"definition不可为空");
Map myresult=startMyCustomInstance(definition.getProcessId());
String instanceId=(String)myresult.get("instanceId");
com.norteksoft.wf.engine.entity.WorkflowInstance workflow = workflowInstanceManager.getWorkflowInstance(instanceId);
CompleteTaskTipType result=submitCustomInstance(workflow);
Map completeResult= new HashMap();
completeResult.put("dataId",(Long)myresult.get("dataId"));
completeResult.put("instanceId",instanceId);
completeResult.put("result",result);
return completeResult;
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinions(
String instanceId, String... taskNames) {
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(ContextUtils.getCompanyId(),"公司id不可为空");
return getOpinions(workflowInstanceManager.getOpinions(instanceId, ContextUtils.getCompanyId(), taskNames));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsByCustomField(
String instanceId, String customField) {
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(customField,"参数customField不可为空");
return getOpinions(workflowInstanceManager.getOpinionsByCustomField(instanceId,customField));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsByTaskCode(
String instanceId, String... taskCodes) {
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(ContextUtils.getCompanyId(),"公司id不可为空");
return getOpinions(workflowInstanceManager.getOpinionsByTacheCode(instanceId,ContextUtils.getCompanyId(), taskCodes));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsExcludeCustomField(
String instanceId, String customField) {
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(customField,"参数customField不可为空");
return getOpinions(workflowInstanceManager.getOpinionsExceptCustomField(instanceId,customField));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsExcludeTaskMode(
String instanceId, TaskProcessingMode taskMode) {
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(taskMode,"参数taskMode不可为空");
return getOpinions(getOpinionsExceptTaskMode(instanceId,taskMode));
}
public List<com.norteksoft.product.api.entity.Opinion> getOpinionsExcludeTaskName(
String instanceId, String... taskName) {
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(ContextUtils.getCompanyId(),"公司id不可为空");
return getOpinions(workflowInstanceManager.getOpinionsExceptTaskName(instanceId, ContextUtils.getCompanyId(), taskName));
}
public List<com.norteksoft.product.api.entity.Opinion> getAllOpinions(
String instanceId) {
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(ContextUtils.getCompanyId(),"公司id不可为空");
return getOpinions(workflowInstanceManager.getOpinionsByInstanceId(instanceId,ContextUtils.getCompanyId()));
}
public List<com.norteksoft.product.api.entity.Opinion> getAllOpinions(
String instanceId, TaskProcessingMode taskMode) {
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(taskMode,"参数taskMode不可为空");
return getOpinions(this.getOpinions(instanceId, taskMode));
}
public List<com.norteksoft.product.api.entity.Opinion> getAllOpinions(
String instanceId, String taskName) {
Assert.notNull(instanceId,"参数instanceId不可为空");
Assert.notNull(taskName,"参数taskName不可为空");
return getOpinions(getOpinions(instanceId, taskName));
}
public List<WorkflowType> getApproveSystemWorkflowTypes() {
return workflowTypeDao.getApproveSystemWorkflowTypes();
}
public List<String> getActivityTaskPrincipals(String workflowId) {
Assert.notNull(workflowId,"workflowId不能为空 ");
return taskService.getActivityTaskPrincipals(workflowId);
}
public List<String[]> getActivityTaskTransactors(String workflowId) {
Assert.notNull(workflowId,"workflowId不能为空 ");
return taskService.getActivityTaskTransactors(workflowId);
}
public List<com.norteksoft.product.api.entity.WorkflowDefinition> getWorkflowDefinitionsByFormCodeAndVersion(
String formCode, Integer version) {
List<WorkflowDefinition> list= workflowDefinitionManager.getAllEnableDefinitionsByformCodeAndVersion(formCode, version);
List<com.norteksoft.product.api.entity.WorkflowDefinition> result=new ArrayList<com.norteksoft.product.api.entity.WorkflowDefinition>();
for(WorkflowDefinition definition:list){
result.add(getWorkflowDefinitionParameter(definition));
}
return result;
}
public Map getDataByTaskId(Long taskId) {
WorkflowTask task = getTask(taskId);
com.norteksoft.wf.engine.entity.WorkflowInstance wi = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
WorkflowDefinition def = workflowDefinitionManager.getWfDefinition(wi.getWorkflowDefinitionId());
FormView formview = formManager.getCurrentFormViewByCodeAndVersion(def.getFormCode(), def.getFromVersion());
return jdbcDao.getDataMap(formview.getDataTable().getName(), wi.getDataId());
}
public List<WorkflowTask> getActivityTasks(FormFlowable entity) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return BeanUtil.turnToModelTaskList(taskService.getActivityTasks(entity.getWorkflowInfo().getWorkflowId(), getCompanyId(entity)));
}
public List<WorkflowTask> getActivityTasks(String workflowId) {
Assert.notNull(workflowId,"workflowId不能为空 ");
return BeanUtil.turnToModelTaskList(taskService.getActivityTasks(workflowId, getCompanyId(null)));
}
public String abandonReceive(Long taskId) {
return taskService.abandonReceive(taskId);
}
public List<com.norteksoft.product.api.entity.WorkflowDefinition> getWorkflowDefinitionsByName(
String typeNo, String name) {
WorkflowType type = workflowTypeManager.getWorkflowType(typeNo);
if(type == null) throw new RuntimeException("没有查询到流程类型,流程编号["+typeNo+"]");
List<WorkflowDefinition> wfds = workflowDefinitionManager.getWfDefinitionsByName(type.getCompanyId(), type.getId(), name);
List<com.norteksoft.product.api.entity.WorkflowDefinition> result=new ArrayList<com.norteksoft.product.api.entity.WorkflowDefinition>();
for(WorkflowDefinition definition:wfds){
result.add(getWorkflowDefinitionParameter(definition));
}
return result;
}
public String returnTask( Long taskId) {
return taskService.goBackTask(taskId);
}
public List<String[]> getActivityTaskPrincipalsDetail(FormFlowable entity) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getActivityTaskPrincipalsDetail(entity.getWorkflowInfo().getWorkflowId());
}
public List<String[]> getActivityTaskPrincipalsDetail(String workflowId) {
Assert.notNull(workflowId,"workflowId不能为空 ");
return taskService.getActivityTaskPrincipalsDetail(workflowId);
}
public List<String> getActivityTaskPrincipals(FormFlowable entity) {
Assert.notNull(entity,"参数不可为空");
Assert.notNull(entity.getWorkflowInfo(),"workflowInfo不能为空");
Assert.notNull(entity.getWorkflowInfo().getWorkflowId(),"workflowInfo的workflowId不能为空 ");
return getActivityTaskPrincipals(entity.getWorkflowInfo().getWorkflowId());
}
}