package com.norteksoft.task.service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
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.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jbpm.api.ProcessEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import rtx.RtxMsgSender;
import com.norteksoft.acs.service.AcsUtils;
import com.norteksoft.acs.service.authorization.AcsApiManager;
import com.norteksoft.acs.service.organization.UserManager;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.api.entity.User;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.AsyncMailUtils;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.product.util.PropUtils;
import com.norteksoft.product.util.SystemUrls;
import com.norteksoft.task.base.enumeration.TaskCategory;
import com.norteksoft.task.base.enumeration.TaskProcessingMode;
import com.norteksoft.task.base.enumeration.TaskProcessingResult;
import com.norteksoft.task.base.enumeration.TaskState;
import com.norteksoft.task.dao.HistoryWorkflowTaskDao;
import com.norteksoft.task.dao.TaskDao;
import com.norteksoft.task.dao.WorkflowTaskDao;
import com.norteksoft.task.entity.HistoryWorkflowTask;
import com.norteksoft.task.entity.Task;
import com.norteksoft.task.entity.WorkflowTask;
import com.norteksoft.task.webservice.WorkflowTaskService;
import com.norteksoft.wf.base.enumeration.InstanceHistoryType;
import com.norteksoft.wf.base.utils.WebUtil;
import com.norteksoft.wf.engine.core.DefinitionXmlParse;
import com.norteksoft.wf.engine.entity.InstanceHistory;
import com.norteksoft.wf.engine.entity.WorkflowDefinition;
import com.norteksoft.wf.engine.entity.WorkflowInstance;
import com.norteksoft.wf.engine.entity.WorkflowType;
import com.norteksoft.wf.engine.service.DelegateMainManager;
import com.norteksoft.wf.engine.service.InstanceHistoryManager;
import com.norteksoft.wf.engine.service.WorkflowDefinitionManager;
import com.norteksoft.wf.engine.service.WorkflowInstanceManager;
import com.norteksoft.wf.engine.service.WorkflowTypeManager;
//@WebService(endpointInterface = "com.norteksoft.task.webservice.WorkflowTaskService")
@Service
@Transactional
public class WorkflowTaskManager implements WorkflowTaskService{
private Log log = LogFactory.getLog(WorkflowTaskManager.class);
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//流转历史常量
private static final String COMMA = ", ";
private static final String DELTA_START = "[ ";
private static final String DELTA_END = " ]";
private WorkflowTaskDao workflowTaskDao;
private TaskDao taskDao;
private UserManager userManager;
private ProcessEngine processEngine;
private DelegateMainManager delegateManager;
private WorkflowDefinitionManager workflowDefinitionManager;
private InstanceHistoryManager instanceHistoryManager;
private HistoryWorkflowTaskDao historyWorkflowTaskDao;
@Autowired
public void setInstanceHistoryManager(
InstanceHistoryManager instanceHistoryManager) {
this.instanceHistoryManager = instanceHistoryManager;
}
@Autowired
private WorkflowInstanceManager workflowInstanceManager;
@Autowired
private WorkflowTypeManager workflowTypeManager;
@Autowired
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
@Autowired
public void setWorkflowTaskDao(WorkflowTaskDao workflowTaskDao) {
this.workflowTaskDao = workflowTaskDao;
}
@Autowired
public void setTaskDao(TaskDao taskDao) {
this.taskDao = taskDao;
}
@Autowired
public void setProcessEngine(ProcessEngine processEngine) {
this.processEngine = processEngine;
}
@Autowired
public void setDelegateManager(DelegateMainManager delegateManager) {
this.delegateManager = delegateManager;
}
@Autowired
public void setWorkflowDefinitionManager(
WorkflowDefinitionManager workflowDefinitionManager) {
this.workflowDefinitionManager = workflowDefinitionManager;
}
@Autowired
public void setHistoryWorkflowTaskDao(
HistoryWorkflowTaskDao historyWorkflowTaskDao) {
this.historyWorkflowTaskDao = historyWorkflowTaskDao;
}
public Page<WorkflowTask> getDelegateTasks(
Long companyId, String loginName,Long userId, Page<WorkflowTask> page){
return workflowTaskDao.getDelegateTasks(companyId, loginName,userId, page);
}
public Page<WorkflowTask> getDelegateTasksByActive(
Long companyId, String loginName,Long userId, Page<WorkflowTask> page, boolean isEnd){
return workflowTaskDao.getDelegateTasks(companyId, loginName,userId, page, isEnd);
}
public Page<WorkflowTask> getTaskAsTrustee(
Long companyId, String loginName,Long userId, Page<WorkflowTask> page, boolean isEnd){
return workflowTaskDao.getTaskAsTrustee(companyId, loginName,userId, page, isEnd);
}
public List<WorkflowTask> getAllTasksByInstance(Long companyId, String instanceId){
return workflowTaskDao.getAllTasksByInstance(companyId, instanceId);
}
public Integer getDelegateTasksNum(Long companyId, String loginName,Long userId){
return workflowTaskDao.getDelegateTasksNum(companyId, loginName,userId);
}
public Integer getDelegateTasksNumByActive(Long companyId, String loginName,Long userId, Boolean isCompleted){
if(isCompleted){
Integer currentNum = workflowTaskDao.getDelegateTasksNum(companyId, loginName,userId, isCompleted);
Integer histNum = historyWorkflowTaskDao.getDelegateTasksNum(companyId, loginName,userId);
if(currentNum == null)currentNum = 0;
if(histNum == null)histNum = 0;
return currentNum+histNum;
}else{
return workflowTaskDao.getDelegateTasksNum(companyId, loginName,userId, isCompleted);
}
}
public Integer getTrusteeTasksNum(Long companyId, String loginName,Long userId, Boolean isCompleted){
if(isCompleted){
Integer currentNum = workflowTaskDao.getTrusteeTasksNum(companyId, loginName,userId, isCompleted);
Integer histNum = historyWorkflowTaskDao.getTrusteeTasksNum(companyId, loginName,userId);
if(currentNum == null)currentNum = 0;
if(histNum == null)histNum = 0;
return currentNum+histNum;
}else{
return workflowTaskDao.getTrusteeTasksNum(companyId, loginName,userId, isCompleted);
}
}
/**
* 流程被手动结束时,强制结束流程实例的当前任务
*/
@Transactional(readOnly=false)
public void endTasks(String instanceId,Long companyId){
log.debug("*** endTasks 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("instanceId:").append(instanceId)
.append(", companyId:").append(companyId)
.append("]").toString());
List<WorkflowTask> tasks = getActivityTasks(instanceId,companyId);
for(WorkflowTask task:tasks){
task.setActive(TaskState.CANCELLED.getIndex());
saveTask(task);
}
log.debug("*** endTasks 方法结束");
}
/**
* 流程被强制结束时,强制结束流程实例的当前任务
*/
@Transactional(readOnly=false)
public void compelEndTasks(String instanceId,Long companyId){
log.debug("*** endTasks 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("instanceId:").append(instanceId)
.append(", companyId:").append(companyId)
.append("]").toString());
List<WorkflowTask> tasks = getActivityTasks(instanceId,companyId);
for(WorkflowTask task:tasks){
task.setActive(TaskState.COMPLETED.getIndex());
saveTask(task);
}
log.debug("*** endTasks 方法结束");
}
/**
* 活动该流程实例的当前任务
*/
public List<WorkflowTask> getActivityTasks(String instanceId,Long companyId){
log.debug("*** getActivityTasks 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("instanceId:").append(instanceId)
.append(", companyId:").append(companyId)
.append("]").toString());
List<WorkflowTask> tasks = workflowTaskDao.getActivityTasks(instanceId,companyId);
log.debug("*** getActivityTasks 方法结束");
return tasks;
}
/**
* 活动该流程实例的当前任务
*/
public List<WorkflowTask> getActivitySignTasks(String instanceId,Long companyId){
log.debug("*** getActivityTasks 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("instanceId:").append(instanceId)
.append(", companyId:").append(companyId)
.append("]").toString());
List<WorkflowTask> tasks = workflowTaskDao.getActivitySignTasks(instanceId,companyId);
log.debug("*** getActivityTasks 方法结束");
return tasks;
}
/**
* 查询办理人的当前任务
* @param instanceId
* @param companyId
* @param loginName
* @return
*/
public WorkflowTask getMyTask(String instanceId,Long companyId,String loginName){
log.debug("*** getMyTask 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("instanceId:").append(instanceId)
.append(", companyId:").append(companyId)
.append(", loginName:").append(loginName)
.append("]").toString());
WorkflowTask task = workflowTaskDao.getMyTask(instanceId, companyId, loginName);
log.debug("*** getMyTask 方法结束");
return task;
}
/**
* 查询办理人的当前任务
* @param instanceId
* @param companyId
* @param loginName
* @return
*/
public WorkflowTask getMyTask(String instanceId,Long companyId,Long userId){
log.debug("*** getMyTask 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("instanceId:").append(instanceId)
.append(", companyId:").append(companyId)
.append(", userId:").append(userId)
.append("]").toString());
WorkflowTask task = workflowTaskDao.getMyTask(instanceId, companyId, userId);
log.debug("*** getMyTask 方法结束");
return task;
}
/**
* 删除该流程实例中的所有任务。
* @param processInstanceId
* @param companyId
*/
@Transactional(readOnly=false)
public void deleteTaskByProcessId(String processInstanceId,Long companyId) {
workflowTaskDao.deleteTaskByProcessId(processInstanceId,companyId);
}
/**
* 保存工作流任务
* @param wfTask
*/
@Transactional(readOnly=false)
public void saveTask(WorkflowTask wfTask){
workflowTaskDao.save(wfTask);
if(wfTask.getSendingMessage() && ApiFactory.getAcsService().isRtxEnable()) {
String url=null;
if(StringUtils.isEmpty(wfTask.getUrl()))return;
if(wfTask.getUrl().contains("?")){
url=SystemUrls.getSystemUrl(StringUtils.substringBefore(wfTask.getUrl(), "/"))+StringUtils.substring(wfTask.getUrl(), wfTask.getUrl().indexOf('/'))+wfTask.getId();
}else{
url=SystemUrls.getSystemUrl(StringUtils.substringBefore(wfTask.getUrl(), "/"))+StringUtils.substring(wfTask.getUrl(), wfTask.getUrl().indexOf('/'))+"?taskId="+wfTask.getId();
}
RtxMsgSender.sendNotify(wfTask.getTransactor(),
"新任务-"+wfTask.getName(),
"1",
"你有一个新任务:"+wfTask.getName(),
url,getCompanyId());
}
}
public Long getCompanyId(){
return ContextUtils.getCompanyId();
}
/**
* 领取任务
* @param taskId
*/
@Transactional(readOnly=false)
public String receive(String taskIds){
String[] taskIdStr = taskIds.split(",");
StringBuilder sb=new StringBuilder("");
int successNum=0;
int failNum=0;
for(int i=0;i<taskIdStr.length;i++){
log.debug("*** receive 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("taskId:").append(taskIdStr[i])
.append("]").toString());
Long taskId = Long.parseLong(taskIdStr[i]);
WorkflowTask task = workflowTaskDao.get(taskId);
if(task.getActive().equals(TaskState.DRAW_WAIT.getIndex())){
List<WorkflowTask> tasks = workflowTaskDao.getNotCompleteTasksByName(getCompanyId(), task.getProcessInstanceId(), task.getName());
for(WorkflowTask tsk : tasks){
if(taskId.equals(tsk.getId())){
successNum++;
task.setDrawTask(true);
tsk.setActive(TaskState.WAIT_TRANSACT.getIndex());//待办理
}else{
tsk.setActive(TaskState.HAS_DRAW_OTHER.getIndex());//已领取
}
}
}
}
failNum=taskIdStr.length-successNum;
log.debug("*** receive 方法结束");
sb.append("成功领取").append(successNum).append("个,");
sb.append("操作失败").append(failNum).append("个.");
return sb.toString();
}
/**
* 放弃领取的任务
* @return
*/
@Transactional(readOnly=false)
public String abandonReceive(Long taskId){
log.debug("*** abandonReceiveTask 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("taskId:").append(taskId)
.append("]").toString());
WorkflowTask task = workflowTaskDao.get(taskId);
if(task.getDrawTask()){
task.setDrawTask(false);
task.setActive(TaskState.DRAW_WAIT.getIndex());
}
String msg = "";
List<WorkflowTask> tasks = workflowTaskDao.getHasDrawOtherTasks(getCompanyId(), task.getProcessInstanceId(), task.getName());
for(WorkflowTask tsk : tasks){
tsk.setActive(TaskState.DRAW_WAIT.getIndex());
}
msg = "task.abandon.receive.success";
log.debug("*** abandonReceiveTask 方法结束");
return msg;
}
@Transactional(readOnly=false)
public void assigns(String taskIds,Long transactorId){
if(StringUtils.isNotEmpty(taskIds)){
User transactorUser = ApiFactory.getAcsService().getUserById(transactorId);
if(transactorUser!=null){
String[] taskIdStrs = taskIds.split(",");
for(String idStr:taskIdStrs){
assignTask(Long.parseLong(idStr), transactorUser);
//指派任务的业务补偿
assignTransactorSet(String.valueOf(transactorId), Long.parseLong(idStr));
}
}
}
}
/**
* 指派任务给指定的人员
* @param taskId
* @param transactor
*/
@Deprecated
@Transactional(readOnly=false)
public void assign(Long taskId, String transactor){
log.debug("*** assign 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("taskId:").append(taskId)
.append(", transactor:").append(transactor)
.append("]").toString());
//<s:if test="task.processingMode != '编辑式' && task.processingMode != '交办式' && task.active!=2" >
User transactorUser = ApiFactory.getAcsService().getUserByLoginName(transactor);
if(transactorUser!=null){
assignTask(taskId,transactorUser);
}
log.debug("*** assign 方法结束");
}
/**
* 指派任务给指定的人员
* @param taskId
* @param transactor
*/
@Transactional(readOnly=false)
public void assign(Long taskId, Long transactorId){
log.debug("*** assign 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("taskId:").append(taskId)
.append(", transactorId:").append(transactorId)
.append("]").toString());
User transactorUser = ApiFactory.getAcsService().getUserById(transactorId);
//<s:if test="task.processingMode != '编辑式' && task.processingMode != '交办式' && task.active!=2" >
assignTask(taskId,transactorUser);
log.debug("*** assign 方法结束");
}
public void assignTask(Long taskId, User transactorUser){
WorkflowTask task = workflowTaskDao.get(taskId);
//被指派人的新任务
WorkflowTask targetTask = task.clone();
//设置指派人任务已完成
task.setTaskProcessingResult(null);
task.setActive(TaskState.ASSIGNED.getIndex());
task.setTransactDate(new Date());
task.setNextTasks("assign to:" + transactorUser.getId());
//新任务办理人
targetTask.setId(null);
targetTask.setAssignable(true);
//任务委托设置
WorkflowInstance wi = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
String processId= "";
if(wi!=null) processId= wi.getProcessDefinitionId();
User delegateUser = delegateManager.getDelegateUser(
task.getCompanyId(), null,transactorUser.getId(), processId, task.getName());
WorkflowDefinition wfDef = workflowDefinitionManager.getWorkflowDefinitionByProcessId(processId);
//流程类型
WorkflowType type=null;
if(wfDef!=null){//修改了流程名称或类型后需要重新赋值
targetTask.setGroupName(wfDef.getName());
targetTask.setCustomType(wfDef.getCustomType());
//流程类型
type=workflowTypeManager.getWorkflowType(wfDef.getTypeId());
if(type!=null)targetTask.setCategory(type.getName());
}
if(delegateUser != null){
targetTask.setTrustor(transactorUser.getLoginName());
targetTask.setTrustorId(transactorUser.getId());
targetTask.setTrustorName(transactorUser.getName());
targetTask.setTransactor(delegateUser.getLoginName());
targetTask.setTransactorId(delegateUser.getId());
targetTask.setTransactorName(delegateUser.getName());
targetTask.setSubCompanyId(transactorUser.getSubCompanyId());
targetTask.setSubCompanyName(transactorUser.getSubCompanyName());
}else{
targetTask.setTransactor(transactorUser.getLoginName());
targetTask.setTransactorId(transactorUser.getId());
targetTask.setTransactorName(transactorUser.getName());
targetTask.setSubCompanyId(transactorUser.getSubCompanyId());
targetTask.setSubCompanyName(transactorUser.getSubCompanyName());
}
targetTask.setRead(false);
List<WorkflowTask> tasks = new ArrayList<WorkflowTask>();
tasks.add(task);
tasks.add(targetTask);
saveTasks(tasks);
//发送消息
sendMessage(targetTask,type,"指派");
//发送邮件
sendMail(task,processId);
//生成流转历史
generateAssignHistory(task,transactorUser,targetTask,delegateUser);
}
public void assignTransactorSet(String transactors,Long taskId ){
WorkflowTask task = workflowTaskDao.get(taskId);
WorkflowInstance wi = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId());
assignTransactorSet(wi,transactors,taskId);
}
/**
* 指派任务的业务补偿
* @param instance
* @param form
*/
public void assignTransactorSet(WorkflowInstance instance,String transactors,Long taskId){
Map<String,String> assignTransactorSet = DefinitionXmlParse.getAssignTransactorSet(instance.getProcessDefinitionId());
String setType=assignTransactorSet.get(DefinitionXmlParse.SET_TYPE);
String assignTransactorSetUrl=assignTransactorSet.get(DefinitionXmlParse.ASSIGN_TRANSACTOR);
if(StringUtils.isNotEmpty(assignTransactorSetUrl)){
String systemCode=WebUtil.getSystemCodeByDef(instance.getProcessDefinitionId());
if(setType.equals("http")){
WebUtil.getHttpConnectionTransactor(assignTransactorSetUrl,ContextUtils.getCompanyId(),instance.getDataId(),systemCode,transactors,taskId);
}else if(setType.equals("RESTful")){
WebUtil.restfulTransactor(assignTransactorSetUrl,ContextUtils.getCompanyId(),instance.getDataId(),systemCode,transactors,taskId);
}
}
}
/**
*生成流转历史
* @param task
* @param transactor
*/
private void generateAssignHistory(WorkflowTask task, User transactorUser,WorkflowTask delegateTask,User delegateUser) {
StringBuilder historyMessage = new StringBuilder();
//流转历史结构化
String inforOne = "";
String inforTwo = "";
String inforThree = "";
String inforFour = "";
String inforFive = "";
String inforSix = "";
String inforSeven = "";
String inforEight = "";
String inforType = "";
AcsApiManager acsApiManager = (AcsApiManager)ContextUtils.getBean("acsApiManager");
boolean hasBranch = acsApiManager.hasBranch(ContextUtils.getCompanyId());
User currentUser = ApiFactory.getAcsService().getUserById(ContextUtils.getUserId());
String userName = currentUser.getName();
if(hasBranch){
userName = userName+"("+currentUser.getSubCompanyName()+")";
}
String transactorUserName = transactorUser.getName();
if(hasBranch){
transactorUserName = transactorUserName+"("+transactorUser.getSubCompanyName()+")";
}
if(delegateUser!=null){//生成指派和委托的流转历史
User trustorUser = ApiFactory.getAcsService().getUserById(delegateTask.getTrustorId());
inforOne = trustorUser.getName();
inforTwo = trustorUser.getLoginName();
inforThree = delegateTask.getTransactorName();
inforFour = delegateTask.getTransactor();
inforFive = ContextUtils.getUserName();
inforSix = ContextUtils.getLoginName();
inforSeven = transactorUser.getName();
inforEight = transactorUser.getLoginName();
inforType = "delegateAndAssgin";
String trustorUserName = trustorUser.getName();
if(hasBranch){
trustorUserName = trustorUserName+"("+trustorUser.getSubCompanyName()+")";
}
String delegateTransactor = delegateTask.getTransactorName();
if(hasBranch){
delegateTransactor = delegateTransactor+"("+delegateUser.getSubCompanyName()+")";
}
historyMessage.append(trustorUserName)
.append("已把任务委托给了")
.append(delegateTransactor).append("。\n")
.append(dateFormat.format(new Date()))
.append(COMMA).append(userName).append("把当前任务指派给了")
.append(transactorUserName).append(DELTA_START)
.append(task.getName()).append(DELTA_END).append("\n");
}else{//生成指派流转历史
inforOne = ContextUtils.getUserName();
inforTwo = ContextUtils.getLoginName();
inforThree = transactorUser.getName();
inforFour = transactorUser.getLoginName();
historyMessage.append(dateFormat.format(new Date()))
.append(COMMA).append(userName).append("把任务指派给了")
.append(transactorUserName).append(DELTA_START)
.append(task.getName()).append(DELTA_END).append("\n");
}
InstanceHistory history = new InstanceHistory(task.getCompanyId(), task.getProcessInstanceId(), InstanceHistory.TYPE_TASK, historyMessage.toString(), task.getName());
history.setEffective(false);
history.setCreatedTime(new Date());
history.setExecutionId(task.getProcessInstanceId());
if("delegateAndAssgin".equals(inforType)){//委托+指派
history.setInforOne(inforOne);
history.setInforTwo(inforTwo);
history.setInforThree(inforThree);
history.setInforFour(inforFour);
history.setInforFive(inforFive);
history.setInforSix(inforSix);
history.setInforSeven(inforSeven);
history.setInforEight(inforEight);
history.setHistoryType(InstanceHistoryType.HISTORY_DELEGATE_AND_ASSIGN);
}else{//指派
history.setInforOne(inforOne);
history.setInforTwo(inforTwo);
history.setInforThree(inforThree);
history.setInforFour(inforFour);
history.setHistoryType(InstanceHistoryType.HISTORY_ASSIGN);
}
instanceHistoryManager.saveHistory(history);
}
/**
* 消息提醒
* @param task
* @param type
*/
private void sendMessage(WorkflowTask task,WorkflowType type,String customType){
if(StringUtils.isNotEmpty(task.getTransactor())){//子流程时Transactor为null
try {
if(StringUtils.isNotEmpty(customType)){
ApiFactory.getPortalService().addMessage("task", ContextUtils.getUserName(), ContextUtils.getUserId(), task.getTransactorId(),type==null?customType+":待办任务":customType+":"+type.getName(), task.getTitle(), "/task/message-task.htm?id="+task.getId());
}else{
ApiFactory.getPortalService().addMessage("task", ContextUtils.getUserName(), ContextUtils.getUserId(), task.getTransactorId(),type==null?"待办任务":type.getName(), task.getTitle(), "/task/message-task.htm?id="+task.getId());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void sendMail(WorkflowTask task,String processId){
if(StringUtils.isNotEmpty(task.getTransactor())){//子流程时Transactor为null
try{
boolean isMailNotice=DefinitionXmlParse.isMailNotice(processId, task.getName());
if(isMailNotice){
String mailContent=PropUtils.getProp("mail.properties", "task.notice.content");
if(StringUtils.isNotEmpty(mailContent)){
mailContent=mailContent.replace("${url}", getTaskUrl(task));
}
com.norteksoft.product.api.entity.User user=ApiFactory.getAcsService().getUserByLoginName(task.getTransactor());
if(user==null){
throw new RuntimeException("用户不存在:"+task.getTransactor());
}else if(StringUtils.isEmpty(user.getEmail())){
throw new RuntimeException("用户邮件地址没有输入:"+task.getTransactor());
}else{
AsyncMailUtils.sendMail(user.getEmail(), task.getTitle(),mailContent );
}
}
}catch (Exception e) {
e.printStackTrace();
log.error(PropUtils.getExceptionInfo(e));
}
}
}
/**
* 批量保存Task
* @param tasks
*/
@Transactional(readOnly=false)
public void saveTasks(List<WorkflowTask> tasks){
for(WorkflowTask task : tasks){
saveTask(task);
}
}
public List<String> getParticipantsTransactor(Long companyId,
String instanceId) {
return workflowTaskDao.getParticipantsTransactor(companyId, instanceId);
}
public List<Long> getParticipantsTransactorId(Long companyId,
String instanceId) {
return workflowTaskDao.getParticipantsTransactorId(companyId, instanceId);
}
/**
* 查询task
* @param id
* @return
*/
public WorkflowTask getTask(Long id){
return workflowTaskDao.getTask(id);
}
/**
* 删除Task
* @param task
*/
@Transactional(readOnly=false)
public void deleteTask(WorkflowTask task){
workflowTaskDao.delete(task);
}
/**
* 根据名称删除Task
* @param companyId
* @param instanceId
* @param taskName
*/
@Transactional(readOnly=false)
public void deleteTasksByName(Long companyId, String instanceId, String[] taskName){
log.debug("*** deleteTasksByName 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append(", instanceId:").append(instanceId)
.append(", taskName:").append(taskName)
.append("]").toString());
workflowTaskDao.deleteTasksByName(companyId, instanceId, taskName);
log.debug("*** deleteTasksByName 方法结束");
}
/**
* 查询流程实例的第一个任务
* @param companyId
* @param instanceId
* @param transactor
* @return
*/
public WorkflowTask getFirstTaskByInstance(Long companyId, String instanceId, String transactor,Long userId) {
return workflowTaskDao.getFirstTaskByInstance(companyId, instanceId, transactor,userId);
}
/**
* 根据流程名字和实例id查询workflowTask
* @param instanceId
* @param taskName
* @return
*/
public List<WorkflowTask> getWorkflowTasks(String instanceId, String taskName) {
return workflowTaskDao.getWorkflowTasks(instanceId, taskName);
}
/**
* 查询流程实例所有已经生成的任务
* @param companyId
* @param instanceId
* @return
*/
public List<String> getTaskNamesByInstance(Long companyId, String instanceId){
log.debug("*** getTaskNamesByInstance 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append(", instanceId:").append(instanceId)
.append("]").toString());
List<WorkflowTask> tasks = workflowTaskDao.find("from WorkflowTask wft where wft.companyId=? and wft.processInstanceId=? and wft.specialTask=? and (wft.active=? or wft.active=? or wft.active=? or wft.active=?)",
companyId, instanceId, false,TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.DRAW_WAIT.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex());
List<String> result = new ArrayList<String>();
for(WorkflowTask task : tasks){
if(!result.contains(task.getName())){
result.add(task.getName());
}
}
log.debug("*** getTaskNamesByInstance 方法结束");
return result;
}
/**
* 查询所有任务
* @return
*/
public List<Task> getAllTasks(){
return taskDao.getAll();
}
public List<WorkflowTask> getTasksByActivity(Long companyId, String executionId, String taskName){
return taskDao.find("from WorkflowTask wft where wft.companyId=? and wft.executionId=? and wft.name=? and wft.active = 0 and wft.distributable=0",
companyId, executionId, taskName);
}
/**
* 查询用户所有未完成任务(不是分页)
* @param page
*/
public List<WorkflowTask> getAllTasksByUser(Long companyId, String loginName){
return taskDao.find("from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and (t.active=? or t.active=? or t.active=? or t.active=?) order by t.groupName,t.createdTime desc",
companyId, loginName,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex());
}
/**
* 查询用户所有未完成任务(不是分页)
* @param page
*/
public List<WorkflowTask> getAllTasksByUser(Long companyId, Long userId){
return taskDao.find("from Task t where t.companyId = ? and (t.transactorId is not null and t.transactorId=?) and t.visible = true and (t.active=? or t.active=? or t.active=? or t.active=?) order by t.groupName,t.createdTime desc",
companyId, userId,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex());
}
/**
* 分页查询用户已完成任务
* @param companyId
* @param loginName
* @param page
*/
public void getReadTasksByUser(Long companyId, String loginName,Long userId, Page<WorkflowTask> page) {
workflowTaskDao.getReadTasksByUser(companyId,loginName,userId,page);
}
/**
* 分页查询用户已完成任务
* @param companyId
* @param loginName
* @param page
*/
public void getCompletedTasksByUser(Long companyId, String loginName,Long userId, Page<WorkflowTask> page) {
workflowTaskDao.getCompletedTasksByUser(companyId, loginName,userId, page);
}
/**
* 根据任务名称查询任务
* @param instanceId
* @param name
* @return
*/
public List<WorkflowTask> getTasksByName(Long companyId, String instanceId, String name){
return workflowTaskDao.getTasksByName(companyId, instanceId, name);
}
/**
* 根据任务名称查询任务,不含指派
* @param instanceId
* @param name
* @return
*/
public List<WorkflowTask> getNoAssignTasksByName(Long companyId, String instanceId, String taskName,Integer groupNum) {
return workflowTaskDao.getNoAssignTasksByName(companyId, instanceId, taskName,groupNum);
}
/**
* 根据办理人查询办理人未完成任务
* @param companyId
* @param stransactor
* @return
*/
public List<Task> getTasksByTransactor(Long companyId, String stransactor){
return null;
}
/**
* 返回对应办理模式的所有环节
* @param processInstanceId
* @param processingMode
* @return
*/
public List<String> getCountersignByProcessInstanceId(String processInstanceId,TaskProcessingMode processingMode){
return workflowTaskDao.getCountersignByProcessInstanceId(processInstanceId, processingMode);
}
/**
* 自定义流程中取会签环节名称
*/
public List<String> getSignByProcessInstanceId(String processInstanceId,TaskProcessingMode processingMode){
return workflowTaskDao.getSignByProcessInstanceId(processInstanceId, processingMode);
}
/**
* 根据办理结果查询环节
*/
public List<WorkflowTask> getCountersignByProcessInstanceIdResult(String processInstanceId,String taskName,TaskProcessingResult result){
return workflowTaskDao.getCountersignByProcessInstanceIdResult(processInstanceId, taskName, result);
}
/**
* 获得审批任务组数
* @param processInstanceId
* @param taskName
* @param result
* @return
*/
public List<Integer> getGroupNumByTaskName(String processInstanceId,String taskName){
return workflowTaskDao.getGroupNumByTaskName(processInstanceId, taskName);
}
@Transactional(readOnly=false)
public void deleteWorkflowTask(List<Long> ids) {
workflowTaskDao.deleteTaskByIds(ids);
}
public List<WorkflowTask> getCountersigns(Long id) {
WorkflowTask wt = workflowTaskDao.get(id);
return workflowTaskDao.getCountersigns(wt.getProcessInstanceId(), wt.getName());
}
public List<WorkflowTask> getProcessCountersigns(Long id) {
WorkflowTask wt = workflowTaskDao.get(id);
return workflowTaskDao.getCountersigns(id,wt.getProcessInstanceId(), wt.getName());
}
public List<String> getCountersignsHandler(Long id,Integer handlingState){
WorkflowTask wt = workflowTaskDao.get(id);
if(wt==null){throw new RuntimeException("获得会签环节的会签办理人时任务不能为null");}
return workflowTaskDao.getCountersignsHandler(wt.getProcessInstanceId(), wt.getName(),handlingState);
}
@Transactional(readOnly=false)
public void deleteCountersignHandler(Long taskId, Collection<String> users) {
WorkflowTask wt = workflowTaskDao.get(taskId);
if(wt==null){throw new RuntimeException("减签时任务不能为null");}
workflowTaskDao.deleteCountersignHandler(wt.getProcessInstanceId(), wt.getName(),users);
}
@Transactional(readOnly=false)
public void deleteSignHandler(Long taskId, Collection<Long> userIds) {
WorkflowTask wt = workflowTaskDao.get(taskId);
if(wt==null){throw new RuntimeException("减签时任务不能为null");}
workflowTaskDao.deleteSignHandler(wt.getProcessInstanceId(), wt.getName(),userIds);
}
public Set<String> getHandledTransactors(String workflowId) {
Set<String> result = new HashSet<String>();
List<String> transactors = workflowTaskDao.getHandledTransactors(workflowId);
if(transactors.size()<=0){
transactors = historyWorkflowTaskDao.getHandledTransactors(workflowId);
}
result.addAll(transactors);
return result;
}
public Set<Long> getHandledTransactorIds(String workflowId){
Set<Long> result = new HashSet<Long>();
List<Long> transactors = workflowTaskDao.getHandledTransactorIds(workflowId);
if(transactors.size()<=0){
transactors = historyWorkflowTaskDao.getHandledTransactorIds(workflowId);
}
result.addAll(transactors);
return result;
}
public Set<String> getAllHandleTransactors(String workflowId) {
Set<String> result = new HashSet<String>();
List<String> transactors = workflowTaskDao.getAllHandleTransactors(workflowId);
if(transactors.size()<=0){
transactors = historyWorkflowTaskDao.getAllHandleTransactors(workflowId);
}
result.addAll(transactors);
return result;
}
public Set<Long> getAllHandleTransactorIds(String workflowId) {
Set<Long> result = new HashSet<Long>();
List<Long> transactors = workflowTaskDao.getAllHandleTransactorIds(workflowId);
if(transactors.size()<=0){
transactors = historyWorkflowTaskDao.getAllHandleTransactorIds(workflowId);
}
result.addAll(transactors);
return result;
}
/**
* 得到所有需要催办的task
*/
public List<WorkflowTask> getNeedReminderTasks(){
return workflowTaskDao.getNeedReminderTasks();
}
/**
* 获得 已完成的任务
*/
public List<WorkflowTask> getCompletedTasks(String workflowId,
Long companyId) {
return workflowTaskDao.getCompletedTasks( workflowId,
companyId);
}
/**
* 查询任务
* @param tasks
* @param names
* @param values
*/
public void searchTask(Page<Task> tasks, List<String> names, List<String> values, String finish){
if(Boolean.valueOf(finish)){
taskDao.findFinishTaskForPage(tasks, names, values);
}else{
taskDao.findUNFinishTaskForPage(tasks, names, values);
}
}
public List<WorkflowTask> getNeedReminderTasks(String loginName,Long userId,
Long companyId) {
return workflowTaskDao.getNeedReminderTasks(loginName,userId,companyId);
}
public List<WorkflowTask> getTasksOrderByWdfName(String definitionName,
String loginName) {
return workflowTaskDao.getTasksOrderByWdfName(definitionName, loginName);
}
public List<WorkflowTask> getTasksOrderByWdfName(String definitionName,
Long userId) {
return workflowTaskDao.getTasksOrderByWdfName(definitionName, userId);
}
public List<WorkflowTask> getCompletedTasksByTaskName(String workflowId,
Long companyId,String taskName){
return workflowTaskDao.getCompletedTasksByTaskName(workflowId,companyId,taskName);
}
/**
* 根据当前用户查询未完成任务总数
* @param companyId 公司id
* @param loginName 当前用户登录名
* @return 未完成任务总数
*/
public Integer getTasksNumByTransactor(Long companyId, String loginName){
return workflowTaskDao.getNotCompleteTasksNumByTransactor(companyId, loginName);
}
/**
* 根据当前用户查询未完成任务总数
* @param companyId 公司id
* @param loginName 当前用户登录名
* @return 未完成任务总数
*/
public Integer getTasksNumByTransactor(Long companyId, Long userId){
return workflowTaskDao.getNotCompleteTasksNumByTransactor(companyId, userId);
}
/**
* 查找公司中所有的超期任务
* @param companyId
* @return
*/
public List<WorkflowTask> getOverdueTasks(Long companyId) {
return workflowTaskDao.getOverdueTasks(companyId);
}
/**
* 查找当前办理人所有的超期任务的总数
* @param companyId
* @param transactorName
* @return
*/
public Map<String,Integer> getOverdueTasksNumByTransactor(Long companyId) {
List<WorkflowTask> list=workflowTaskDao.getOverdueTasks(companyId);
Map<String,Integer> map=new HashMap<String,Integer>();
for(WorkflowTask task:list){
map.put(task.getTransactor(), workflowTaskDao.getOverdueTasksNumByTransactor(companyId, task.getTransactor(),task.getTransactorId()));
}
return map;
}
/**
* 查找公司中所有的超期任务,包括已完成的任务
* @param companyId
* @return
*/
public List<WorkflowTask> getTotalOverdueTasks(Long companyId) {
return workflowTaskDao.getTotalOverdueTasks(companyId);
}
/**
* 查找当前办理人所有的超期任务的总数,包括已完成的任务
* @param companyId
* @param transactorName
* @return
*/
public Map<String,Integer> getTotalOverdueTasksNumByTransactor(Long companyId) {
List<WorkflowTask> list=workflowTaskDao.getTotalOverdueTasks(companyId);
Map<String,Integer> map=new HashMap<String,Integer>();
for(WorkflowTask task:list){
map.put(task.getTransactor(), workflowTaskDao.getTotalOverdueTasksNumByTransactor(companyId, task.getTransactor()));
}
List<HistoryWorkflowTask> histlist=historyWorkflowTaskDao.getTotalOverdueTasks(companyId);
for(HistoryWorkflowTask task:histlist){
Integer taskNum = map.get(task.getTransactor());
if(taskNum==null||taskNum.equals(0)){
map.put(task.getTransactor(), historyWorkflowTaskDao.getTotalOverdueTasksNumByTransactor(companyId, task.getTransactor()));
}else{
map.put(task.getTransactor(), taskNum+historyWorkflowTaskDao.getTotalOverdueTasksNumByTransactor(companyId, task.getTransactor()));
}
}
return map;
}
/**
* 查找当前办理人所有的超期任务的总数,包括已完成的任务
* @param companyId
* @param transactorName
* @return Map<Long,Integer>:key 办理人id,value该办理人对应的过期任务
*/
public Map<Long,Integer> getTotalOverdueTasksNumByTransactorId(Long companyId) {
List<WorkflowTask> list=workflowTaskDao.getTotalOverdueTasks(companyId);
Map<Long,Integer> map=new HashMap<Long,Integer>();
for(WorkflowTask task:list){
map.put(task.getTransactorId(), workflowTaskDao.getTotalOverdueTasksNumByTransactorId(companyId, task.getTransactorId()));
}
List<HistoryWorkflowTask> histlist=historyWorkflowTaskDao.getTotalOverdueTasks(companyId);
for(HistoryWorkflowTask task:histlist){
Integer taskNum = map.get(task.getTransactor());
if(taskNum==null||taskNum.equals(0)){
map.put(task.getTransactorId(), historyWorkflowTaskDao.getTotalOverdueTasksNumByTransactorId(companyId, task.getTransactorId()));
}else{
map.put(task.getTransactorId(), taskNum+historyWorkflowTaskDao.getTotalOverdueTasksNumByTransactorId(companyId, task.getTransactorId()));
}
}
return map;
}
public List<String> getTransactorsExceptTask(Long taskId) {
if(taskId==null)return null;
WorkflowTask task=getTask(taskId);
return workflowTaskDao.getTransactorsExceptTask(task);
}
public List<Long> getTransactorIdsExceptTask(Long taskId) {
if(taskId==null)return null;
WorkflowTask task=getTask(taskId);
return workflowTaskDao.getTransactorIdsExceptTask(task);
}
/**
* 根据“任务组”查询任务列表
* @param companyId
* @param instanceId
* @param taskName
* @return
*/
public List<WorkflowTask> getTaskOrderByGroupNum(Long companyId,String instanceId,String taskName){
return workflowTaskDao.getTaskOrderByGroupNum(companyId,instanceId,taskName);
}
public List<WorkflowTask> getActivityTasksByName(String instanceId,Long companyId,String taskName) {
return workflowTaskDao.getActivityTasksByName(instanceId, companyId, taskName);
}
public List<String[]> getActivityTaskTransactors(String instanceId,Long companyId) {
return workflowTaskDao.getActivityTaskTransactors(instanceId,companyId);
}
public List<WorkflowTask> getActivityTaskByInstance(String instanceId,Long companyId) {
return workflowTaskDao.getActivityTaskByInstance(instanceId,companyId);
}
public List<String> getActivityTaskPrincipals(String instanceId,Long companyId) {
return workflowTaskDao.getActivityTaskPrincipals(instanceId,companyId);
}
public List<Long> getActivityTaskPrincipalIds(String instanceId,Long companyId) {
return workflowTaskDao.getActivityTaskPrincipalIds(instanceId,companyId);
}
public List<String[]> getActivityTaskPrincipalsDetail(String instanceId,Long companyId) {
return workflowTaskDao.getActivityTaskPrincipalsDetail(instanceId,companyId);
}
public List<WorkflowTask> getActivityPrincipalTask(String instanceId,Long companyId) {
return workflowTaskDao.getActivityPrincipalTask(instanceId,companyId);
}
public List<String> getCompletedTaskNames(String workflowId,
Long companyId) {
return workflowTaskDao.getCompletedTaskNames(workflowId, companyId);
}
public String receive(Long taskId) {
log.debug("*** receive 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("taskId:").append(taskId)
.append("]").toString());
if(taskId==null){log.debug("领取任务时,任务id不能为null");throw new RuntimeException("领取任务时,任务id不能为null");}
WorkflowTask task = workflowTaskDao.get(taskId);
if(task==null){log.debug("领取任务时,任务不能为null");throw new RuntimeException("领取任务时,任务不能为null");}
String msg = "task.not.need.receive";
if(task.getActive().equals(TaskState.DRAW_WAIT.getIndex())){
List<WorkflowTask> tasks = workflowTaskDao.getNotCompleteTasksByName(getCompanyId(), task.getProcessInstanceId(), task.getName());
for(WorkflowTask tsk : tasks){
if(taskId.equals(tsk.getId())){
task.setDrawTask(true);
tsk.setActive(TaskState.WAIT_TRANSACT.getIndex());
}else{
tsk.setActive(TaskState.HAS_DRAW_OTHER.getIndex());
}
}
msg = "task.receive.success";
}
log.debug("*** receive 方法结束");
return msg;
}
/**
* 流程被暂停时,强制暂停的当前任务
*/
@Transactional(readOnly=false)
public void pauseTasks(String instanceId,Long companyId){
log.debug("*** pauseTasks 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("instanceId:").append(instanceId)
.append(", companyId:").append(companyId)
.append("]").toString());
List<WorkflowTask> tasks = getActivityTasks(instanceId,companyId);
for(WorkflowTask task:tasks){
task.setPaused(true);
saveTask(task);
}
log.debug("*** pauseTasks 方法结束");
}
/**
* 流程被暂停时,强制暂停的当前任务
*/
@Transactional(readOnly=false)
public void continueTasks(String instanceId,Long companyId){
log.debug("*** continueTasks 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("instanceId:").append(instanceId)
.append(", companyId:").append(companyId)
.append("]").toString());
List<WorkflowTask> tasks = workflowTaskDao.getPauseTasksByInstance(instanceId,companyId);
for(WorkflowTask task:tasks){
task.setPaused(false);
saveTask(task);
String processId= processEngine.getExecutionService().findProcessInstanceById(task.getProcessInstanceId()).getProcessDefinitionId();
WorkflowDefinition wfDef = workflowDefinitionManager.getWorkflowDefinitionByProcessId(processId);
//流程类型
WorkflowType type=null;
if(wfDef!=null){
//流程类型
type=workflowTypeManager.getWorkflowType(wfDef.getTypeId());
}
//生成消息提醒
if(task.getTransactor()!=null){
sendMessage(task, type,"");
}
//*******************邮件通知*************************
sendMail(task,processId);
}
log.debug("*** continueTasks 方法结束");
}
/**
* 批量移除任务中根据办理人查询当前任务列表
* @param tasks
* @param transactorName
* @param typeId
* @param defCode
* @param wfdId
*/
public void getActivityTasksByTransactorName(Page<WorkflowTask> tasks,Long typeId, String defCode,Long wfdId){
workflowTaskDao.getActivityTasksByTransactorName(tasks, typeId, defCode, wfdId);
}
public void getAllTasksByUser(Long companyId, String loginName,
Page<WorkflowTask> page) {
workflowTaskDao.getAllTasksByUser(companyId, loginName, page);
}
public void getAllTasksByUser(Long companyId, Long userId,
Page<WorkflowTask> page) {
workflowTaskDao.getAllTasksByUser(companyId, userId, page);
}
public List<WorkflowTask> getTasksByInstance(List<String> instanceIds,String taskName,String recieveUser,Long recieveId,String consignor,Long consignorId,Long companyId){
return workflowTaskDao.getTasksByInstance(instanceIds, taskName,recieveUser,recieveId,consignor,consignorId,companyId);
}
public List<String> getActiveTaskNameWithoutSpecial(String instanceId){
return workflowTaskDao.getActiveTaskNameWithoutSpecial(instanceId);
}
/**
* 获得所有流程名称
* @param isComplete
* @return
*/
public List<Object[]> getGroupNames(String taskCategory){
if(TaskCategory.COMPLETE.equals(taskCategory)){
return workflowTaskDao.getAllCompleteTaskGroupNames(ContextUtils.getCompanyId(), ContextUtils.getLoginName(),ContextUtils.getUserId());
}else if(TaskCategory.CANCEL.equals(taskCategory)){
return workflowTaskDao.getAllCancelTaskGroupNames(ContextUtils.getCompanyId(), ContextUtils.getLoginName(),ContextUtils.getUserId());
}else{
return workflowTaskDao.getAllActiveTaskGroupNames(ContextUtils.getCompanyId(), ContextUtils.getLoginName(),ContextUtils.getUserId());
}
}
/**
* 获得所有流程自定义类别
* @param isComplete
* @return
*/
public List<Object[]> getCustomTypes(String taskCategory){
if(TaskCategory.COMPLETE.equals(taskCategory)){
return workflowTaskDao.getAllCompleteTaskCustomTypes(ContextUtils.getCompanyId(), ContextUtils.getLoginName(),ContextUtils.getUserId());
}else if(TaskCategory.CANCEL.equals(taskCategory)){
return workflowTaskDao.getAllCancelTaskCustomTypes(ContextUtils.getCompanyId(), ContextUtils.getLoginName(),ContextUtils.getUserId());
}else{
return workflowTaskDao.getAllActiveTaskCustomTypes(ContextUtils.getCompanyId(), ContextUtils.getLoginName(),ContextUtils.getUserId());
}
}
/**
* 分页查询用户所有未完成任务
* @param page
*/
public void getAllTasksByGroupName(Long companyId, String loginName,Long userId, Page<Task> page,String typeName){
taskDao.getAllTasksByUserType(companyId, loginName,userId, page,typeName);
}
/**
* 获得办理任务页面
*/
@Transactional(readOnly=true)
public String getTaskUrl(Task task){
return getTaskUrl(task.getUrl(),task.getId());
}
@Transactional(readOnly=true)
public String getTaskUrl(String taskUrl,Long taskId ){
String url=taskUrl;
if(!taskUrl.contains("http://")&&taskUrl.contains("?")){
url=SystemUrls.getSystemUrl(StringUtils.substringBefore(taskUrl, "/"))+StringUtils.substring(taskUrl, taskUrl.indexOf('/'))+taskId;
}else if(!taskUrl.contains("http://")){
url=SystemUrls.getSystemUrl(StringUtils.substringBefore(taskUrl, "/"))+StringUtils.substring(taskUrl, taskUrl.indexOf('/'))+"?taskId="+taskId;
}
//重新加载页面样式
if(!url.contains("_r=1")){
if(url.contains("?")){
url=url+"&_r=1";
}else{
url=url+"?_r=1";
}
}
return url;
}
public WorkflowTask getLastCompletedTaskByTaskName(String workflowId,
Long companyId,String taskName){
return workflowTaskDao.getLastCompletedTaskByTaskName(workflowId,companyId,taskName);
}
public List<WorkflowTask> getActivityTasksByNameWithout(String workflowId,
Long taskId, String taskName) {
return workflowTaskDao.getActivityTasksByNameWithout(workflowId, taskId, taskName);
}
/**
* 根据办理人查找待办理的委托任务
* @param workflowId
* @param transactor
* @return
*/
public List<WorkflowTask> getActivityTrustorTasksByTransactor(String workflowId,String transactor,Long userId,Long taskId) {
return workflowTaskDao.getActivityTrustorTasksByTransactor(workflowId, transactor,userId,taskId);
}
public List<String> getTransactorsByTask(String name,String transactor,Long userId,String processId){
return workflowTaskDao.getTransactorsByTask(name,transactor,userId,processId);
}
/**
* 根据办理人查询当前实例中的任务
* @param transactor 办理人登录名
* @param workflowId 实例id
* @return
*/
public List<WorkflowTask> getTaskByTransactor(String transactor,String workflowId){
return workflowTaskDao.getTaskByTransactor(transactor, workflowId);
}
/**
* 根据办理人查询当前实例中的任务
* @param userId 办理人id
* @param workflowId 实例id
* @return
*/
public List<WorkflowTask> getTaskByTransactor(Long userId,String workflowId){
return workflowTaskDao.getTaskByTransactor(userId, workflowId);
}
public List<HistoryWorkflowTask> getHistoryTaskByTransactor(String transactor,String workflowId){
return historyWorkflowTaskDao.getTaskByTransactor(transactor, workflowId);
}
public List<HistoryWorkflowTask> getHistoryTaskByTransactor(Long userId,String workflowId){
return historyWorkflowTaskDao.getTaskByTransactor(userId, workflowId);
}
public Set<String> getAllTaskTransactors(String workflowId){
Set<String> result = new HashSet<String>();
result.addAll(workflowTaskDao.getAllTaskTransactors(workflowId));
result.addAll(historyWorkflowTaskDao.getAllTaskTransactors(workflowId));
return result;
}
public Set<String> getAllTaskTrustors(String workflowId){
Set<String> result = new HashSet<String>();
result.addAll(workflowTaskDao.getAllTaskTrustors(workflowId));
result.addAll(historyWorkflowTaskDao.getAllTaskTrustors(workflowId));
return result;
}
/**
* 查询当前环节的办理人和委托人集合
* @param workflowId 实例id
* @param taskName 任务名称
* @return 办理人列表
*/
public Set<String> getTransactorsByName(String workflowId,String taskName) {
List<String> transactors = workflowTaskDao.getTransactorsByName(workflowId, taskName);
List<String> trustors = workflowTaskDao.getTrustorsByName(workflowId, taskName);
List<String> HistTransactors = historyWorkflowTaskDao.getTransactorsByName(workflowId, taskName);
List<String> HistTrustors = historyWorkflowTaskDao.getTrustorsByName(workflowId, taskName);
Set<String> result = new HashSet<String>();
result.addAll(transactors);
result.addAll(trustors);
result.addAll(HistTransactors);
result.addAll(HistTrustors);
return result;
}
public Set<Long> getAllTaskTransactorIds(String workflowId){
Set<Long> result = new HashSet<Long>();
result.addAll(workflowTaskDao.getAllTaskTransactorIds(workflowId));
result.addAll(historyWorkflowTaskDao.getAllTaskTransactorIds(workflowId));
return result;
}
public Set<Long> getAllTaskTrustorIds(String workflowId){
Set<Long> result = new HashSet<Long>();
result.addAll(workflowTaskDao.getAllTaskTrustorIds(workflowId));
result.addAll(historyWorkflowTaskDao.getAllTaskTrustorIds(workflowId));
return result;
}
/**
* 查询当前环节的办理人和委托人集合
* @param workflowId 实例id
* @param taskName 任务名称
* @return 办理人列表
*/
public Set<Long> getTransactorIdsByName(String workflowId,String taskName) {
List<Long> transactors = workflowTaskDao.getTransactorIdsByName(workflowId, taskName);
List<Long> trustors = workflowTaskDao.getTrustorIdsByName(workflowId, taskName);
List<Long> HistTransactors = historyWorkflowTaskDao.getTransactorIdsByName(workflowId, taskName);
List<Long> HistTrustors = historyWorkflowTaskDao.getTrustorIdsByName(workflowId, taskName);
Set<Long> result = new HashSet<Long>();
result.addAll(transactors);
result.addAll(trustors);
result.addAll(HistTransactors);
result.addAll(HistTrustors);
return result;
}
}