add 添加任务催办,任务改派

This commit is contained in:
songgaoshuai 2023-10-27 16:43:56 +08:00
parent 06bf090b52
commit 5912983704
8 changed files with 133 additions and 12 deletions

View File

@ -11,6 +11,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.workflow.domain.bo.ProcessInstanceBo; import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo; import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.bo.TaskUrgingBo;
import org.dromara.workflow.domain.vo.ProcessInstanceVo; import org.dromara.workflow.domain.vo.ProcessInstanceVo;
import org.dromara.workflow.service.IActProcessInstanceService; import org.dromara.workflow.service.IActProcessInstanceService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -125,4 +126,16 @@ public class ActProcessInstanceController extends BaseController {
public TableDataInfo<ProcessInstanceVo> getCurrentSubmitByPage(ProcessInstanceBo processInstanceBo) { public TableDataInfo<ProcessInstanceVo> getCurrentSubmitByPage(ProcessInstanceBo processInstanceBo) {
return iActProcessInstanceService.getCurrentSubmitByPage(processInstanceBo); return iActProcessInstanceService.getCurrentSubmitByPage(processInstanceBo);
} }
/**
* 任务催办(给当前任务办理人发送站内信邮件短信等)
*
* @param taskUrgingBo 任务催办
*/
@Log(title = "流程实例管理", businessType = BusinessType.INSERT)
@PostMapping("/taskUrging")
public R<Void> taskUrging(@RequestBody TaskUrgingBo taskUrgingBo) {
return toAjax(iActProcessInstanceService.taskUrging(taskUrgingBo));
}
} }

View File

@ -212,4 +212,15 @@ public class ActTaskController extends BaseController {
} }
/**
* 修改任务办理人
*
* @param taskIds 任务id
* @param userId 办理人id
*/
@Log(title = "任务管理", businessType = BusinessType.UPDATE)
@PutMapping("/updateAssignee/{taskIds}/{userId}")
public R<Void> updateAssignee(@PathVariable String[] taskIds, @PathVariable String userId) {
return toAjax(iActTaskService.updateAssignee(taskIds, userId));
}
} }

View File

@ -0,0 +1,34 @@
package org.dromara.workflow.domain.bo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 任务催办
*
* @author may
*/
@Data
public class TaskUrgingBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程实例id
*/
private String processInstanceId;
/**
* 消息类型
*/
private List<String> messageType;
/**
* 催办内容为空默认系统内置信息
*/
private String message;
}

View File

@ -3,6 +3,7 @@ package org.dromara.workflow.service;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.workflow.domain.bo.ProcessInstanceBo; import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo; import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.bo.TaskUrgingBo;
import org.dromara.workflow.domain.vo.ProcessInstanceVo; import org.dromara.workflow.domain.vo.ProcessInstanceVo;
import java.util.List; import java.util.List;
@ -93,4 +94,12 @@ public interface IActProcessInstanceService {
* @return 结果 * @return 结果
*/ */
TableDataInfo<ProcessInstanceVo> getCurrentSubmitByPage(ProcessInstanceBo processInstanceBo); TableDataInfo<ProcessInstanceVo> getCurrentSubmitByPage(ProcessInstanceBo processInstanceBo);
/**
* 任务催办(给当前任务办理人发送站内信邮件短信等)
*
* @param taskUrgingBo 任务催办
* @return 结果
*/
boolean taskUrging(TaskUrgingBo taskUrgingBo);
} }

View File

@ -109,4 +109,13 @@ public interface IActTaskService {
* @return 流程实例id * @return 流程实例id
*/ */
String backProcess(BackProcessBo backProcessBo); String backProcess(BackProcessBo backProcessBo);
/**
* 修改任务办理人
*
* @param taskIds 任务id
* @param userId 办理人id
* @return 结果
*/
boolean updateAssignee(String[] taskIds, String userId);
} }

View File

@ -20,15 +20,14 @@ import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.ActHiProcinst; import org.dromara.workflow.domain.ActHiProcinst;
import org.dromara.workflow.domain.bo.ProcessInstanceBo; import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo; import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.vo.ActHistoryInfoVo; import org.dromara.workflow.domain.bo.TaskUrgingBo;
import org.dromara.workflow.domain.vo.GraphicInfoVo; import org.dromara.workflow.domain.vo.*;
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
import org.dromara.workflow.domain.vo.TaskVo;
import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator; import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator;
import org.dromara.workflow.flowable.cmd.DeleteExecutionCmd; import org.dromara.workflow.flowable.cmd.DeleteExecutionCmd;
import org.dromara.workflow.flowable.cmd.ExecutionChildByExecutionIdCmd; import org.dromara.workflow.flowable.cmd.ExecutionChildByExecutionIdCmd;
import org.dromara.workflow.service.IActHiProcinstService; import org.dromara.workflow.service.IActHiProcinstService;
import org.dromara.workflow.service.IActProcessInstanceService; import org.dromara.workflow.service.IActProcessInstanceService;
import org.dromara.workflow.utils.WorkflowUtils;
import org.flowable.bpmn.model.*; import org.flowable.bpmn.model.*;
import org.flowable.engine.*; import org.flowable.engine.*;
import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricActivityInstance;
@ -533,4 +532,29 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
long count = query.count(); long count = query.count();
return new TableDataInfo<>(list, count); return new TableDataInfo<>(list, count);
} }
/**
* 任务催办(给当前任务办理人发送站内信邮件短信等)
*
* @param taskUrgingBo 任务催办
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean taskUrging(TaskUrgingBo taskUrgingBo) {
try {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(taskUrgingBo.getProcessInstanceId()).singleResult();
if (processInstance == null) {
throw new ServiceException("任务已结束!");
}
String message = taskUrgingBo.getMessage();
if (StringUtils.isBlank(message)) {
message = "您的【" + processInstance.getName() + "】单据还未审批,请您及时处理。";
}
List<Task> list = taskService.createTaskQuery().processInstanceId(taskUrgingBo.getProcessInstanceId()).list();
WorkflowUtils.sendMessage(list, processInstance.getName(), taskUrgingBo.getMessageType(), message);
} catch (ServiceException e) {
throw new ServiceException(e.getMessage());
}
return true;
}
} }

View File

@ -157,7 +157,7 @@ public class ActTaskServiceImpl implements IActTaskService {
UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus()); UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus());
managementService.executeCommand(updateBusinessStatusCmd); managementService.executeCommand(updateBusinessStatusCmd);
} else { } else {
sendMessage(list, processInstance.getName(), completeTaskBo.getMessageType(),null); sendMessage(list, processInstance.getName(), completeTaskBo.getMessageType(), null);
} }
return true; return true;
} catch (Exception e) { } catch (Exception e) {
@ -171,11 +171,11 @@ public class ActTaskServiceImpl implements IActTaskService {
* @param list 任务 * @param list 任务
* @param name 流程名称 * @param name 流程名称
* @param messageType 消息类型 * @param messageType 消息类型
* @param message 消息内容为空则发送默认配置的消息内容 * @param message 消息内容为空则发送默认配置的消息内容
*/ */
@Async @Async
public void sendMessage(List<Task> list, String name, List<String> messageType,String message) { public void sendMessage(List<Task> list, String name, List<String> messageType, String message) {
WorkflowUtils.sendMessage(list, name, messageType,message); WorkflowUtils.sendMessage(list, name, messageType, message);
} }
/** /**
@ -597,7 +597,7 @@ public class ActTaskServiceImpl implements IActTaskService {
} }
//发送消息 //发送消息
String message = "您的【" + processInstance.getName() + "】单据已经被驳回,请您注意查收。"; String message = "您的【" + processInstance.getName() + "】单据已经被驳回,请您注意查收。";
sendMessage(list, processInstance.getName(), backProcessBo.getMessageType(),message); sendMessage(list, processInstance.getName(), backProcessBo.getMessageType(), message);
//删除流程实例垃圾数据 //删除流程实例垃圾数据
for (ExecutionEntity executionEntity : executionEntities) { for (ExecutionEntity executionEntity : executionEntities) {
DeleteExecutionCmd deleteExecutionCmd = new DeleteExecutionCmd(executionEntity.getId()); DeleteExecutionCmd deleteExecutionCmd = new DeleteExecutionCmd(executionEntity.getId());
@ -609,4 +609,24 @@ public class ActTaskServiceImpl implements IActTaskService {
} }
return task.getProcessInstanceId(); return task.getProcessInstanceId();
} }
/**
* 修改任务办理人
*
* @param taskIds 任务id
* @param userId 办理人id
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updateAssignee(String[] taskIds, String userId) {
try {
List<Task> list = taskService.createTaskQuery().taskIds(Arrays.asList(taskIds)).taskTenantId(TenantHelper.getTenantId()).list();
for (Task task : list) {
taskService.setAssignee(task.getId(), userId);
}
} catch (Exception e) {
throw new ServiceException("修改失败:" + e.getMessage());
}
return true;
}
} }

View File

@ -40,6 +40,7 @@ import org.flowable.identitylink.api.history.HistoricIdentityLink;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamReader;
@ -346,10 +347,10 @@ public class WorkflowUtils {
* @param messageType 消息类型 * @param messageType 消息类型
* @param message 消息内容为空则发送默认配置的消息内容 * @param message 消息内容为空则发送默认配置的消息内容
*/ */
public static void sendMessage(List<Task> list, String name, List<String> messageType,String message) { public static void sendMessage(List<Task> list, String name, List<String> messageType, String message) {
Set<Long> userIds = new HashSet<>(); Set<Long> userIds = new HashSet<>();
if(StringUtils.isBlank(message)){ if (StringUtils.isBlank(message)) {
message = "有新的【" + name + "】单据已经提交至您的待办,请及时处理。"; message = "有新的【" + name + "】单据已经提交至您的待办,请及时处理。";
} }
for (Task t : list) { for (Task t : list) {
ParticipantVo taskParticipant = WorkflowUtils.getCurrentTaskParticipant(t.getId()); ParticipantVo taskParticipant = WorkflowUtils.getCurrentTaskParticipant(t.getId());