Merge branch 'main' of http://47.97.8.94:19527/yj/zn-cloud into aiKai
This commit is contained in:
commit
7672487d79
@ -14,10 +14,8 @@ import org.flowable.engine.delegate.DelegateExecution;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@ -66,10 +64,12 @@ public class BpmTaskCurrentAssignLeaderScript extends BpmTaskAssignLeaderAbstrac
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
Long parentId = dept.getParentId();
|
||||
for (int i = 0; i < dept.getLevel(); i++) {
|
||||
|
||||
if (i == 0) { //第一次查找 判断审批人是否为发起人部门负责人
|
||||
if (!dept.getLeaderUserId().toString().equals(assigneeUserId.toString())){ //如果发起人上级部门负责人不为当前审批人时
|
||||
if (assigneeUserId.toString().equals(processInstance.getStartUserId())
|
||||
&& !dept.getLeaderUserId().toString().equals(processInstance.getStartUserId())){ //如果发起人不是所在部门负责人时
|
||||
|
||||
count = 1;
|
||||
break;
|
||||
@ -77,7 +77,7 @@ public class BpmTaskCurrentAssignLeaderScript extends BpmTaskAssignLeaderAbstrac
|
||||
}
|
||||
|
||||
//获得发起人的上级部门
|
||||
DeptRespDTO parentDept = deptApi.getDept(dept.getParentId()).getCheckedData();
|
||||
DeptRespDTO parentDept = deptApi.getDept(parentId).getCheckedData();
|
||||
if (parentDept == null) { // 找不到父级部门,所以只好结束寻找。原因是:例如说,级别比较高的人,所在部门层级比较少
|
||||
return emptySet();
|
||||
}
|
||||
@ -87,6 +87,8 @@ public class BpmTaskCurrentAssignLeaderScript extends BpmTaskAssignLeaderAbstrac
|
||||
count = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
parentId = parentDept.getParentId();
|
||||
}
|
||||
|
||||
if (count == 0){// 找不到父级部门。原因是:人的所属部门配在了最高节点了
|
||||
|
@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO;
|
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmActivityService;
|
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
|
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -38,10 +37,6 @@ public class BpmTaskEventListener extends AbstractFlowableEngineEventListener {
|
||||
@Lazy // 解决循环依赖
|
||||
private BpmActivityService activityService;
|
||||
|
||||
@Resource
|
||||
@Lazy // 解决循环依赖
|
||||
private BpmProcessInstanceService processInstanceService;
|
||||
|
||||
public static final Set<FlowableEngineEventType> TASK_EVENTS = ImmutableSet.<FlowableEngineEventType>builder()
|
||||
.add(FlowableEngineEventType.TASK_CREATED)
|
||||
.add(FlowableEngineEventType.TASK_ASSIGNED)
|
||||
@ -57,9 +52,6 @@ public class BpmTaskEventListener extends AbstractFlowableEngineEventListener {
|
||||
protected void taskCreated(FlowableEngineEntityEvent event) {
|
||||
Task task = (Task) event.getEntity();
|
||||
taskService.createTaskExt(task);
|
||||
|
||||
//在TASK创建时, 监听审批人是否时发起人
|
||||
taskService.approveAuto(task);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -2,22 +2,28 @@ package cn.iocoder.yudao.module.bpm.service.message;
|
||||
|
||||
import cn.iocoder.yudao.framework.web.config.WebProperties;
|
||||
import cn.iocoder.yudao.module.bpm.convert.message.BpmMessageConvert;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
|
||||
import cn.iocoder.yudao.module.bpm.enums.message.BpmMessageEnum;
|
||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
|
||||
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO;
|
||||
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO;
|
||||
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO;
|
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
|
||||
import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
|
||||
import cn.iocoder.yudao.module.system.api.sms.SmsSendApi;
|
||||
import cn.iocoder.yudao.module.system.api.subscribe.SubscribeMessageSendApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* BPM 消息 Service 实现类
|
||||
@ -41,6 +47,10 @@ public class BpmMessageServiceImpl implements BpmMessageService {
|
||||
@Resource
|
||||
private WebProperties webProperties;
|
||||
|
||||
@Resource
|
||||
@Lazy // 解决循环依赖
|
||||
private BpmProcessInstanceService bpmProcessInstanceService;
|
||||
|
||||
@Override
|
||||
public void sendMessageWhenProcessInstanceApprove(BpmMessageSendWhenProcessInstanceApproveReqDTO reqDTO) {
|
||||
//审批通过
|
||||
@ -49,20 +59,48 @@ public class BpmMessageServiceImpl implements BpmMessageService {
|
||||
templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId()));
|
||||
// smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getStartUserId(),
|
||||
// BpmMessageEnum.PROCESS_INSTANCE_APPROVE.getSmsTemplateCode(), templateParams));
|
||||
notifyMessageSendApi.sendSingleMessageToAdmin(BpmMessageConvert.INSTANCE.convert1(reqDTO.getStartUserId(),
|
||||
BpmMessageEnum.PROCESS_INSTANCE_APPROVE.getSmsTemplateCode(), templateParams));
|
||||
|
||||
//发送审批结果通知
|
||||
String openId = getUserOpenId(reqDTO.getStartUserId());
|
||||
if (openId != null) {
|
||||
subscribeMessageSendApi.sendApprovalResultNotification(
|
||||
BpmMessageConvert.INSTANCE.convertApprovalResultNotification(
|
||||
openId, reqDTO.getProcessInstanceName(), reqDTO.getCreateTime(), "通过", reqDTO.getReason(),
|
||||
reqDTO.getProcessInstanceId(),
|
||||
/**
|
||||
* 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
|
||||
*/
|
||||
"formal"));
|
||||
//当流程全部审批通过
|
||||
BpmProcessInstanceExtDO processInstance = bpmProcessInstanceService.getProcessInstanceDO(reqDTO.getProcessInstanceId());
|
||||
if (processInstance.getResult().equals(BpmProcessInstanceResultEnum.APPROVE.getResult())) {
|
||||
|
||||
//发送站内信息
|
||||
notifyMessageSendApi.sendSingleMessageToAdmin(BpmMessageConvert.INSTANCE.convert1(reqDTO.getStartUserId(),
|
||||
BpmMessageEnum.PROCESS_INSTANCE_APPROVE.getSmsTemplateCode(), templateParams));
|
||||
|
||||
//发送审批结果通知至微信
|
||||
String openId = getUserOpenId(reqDTO.getStartUserId());
|
||||
if (openId != null) {
|
||||
subscribeMessageSendApi.sendApprovalResultNotification(
|
||||
BpmMessageConvert.INSTANCE.convertApprovalResultNotification(
|
||||
openId, reqDTO.getProcessInstanceName(), reqDTO.getCreateTime(), "通过", reqDTO.getReason(),
|
||||
reqDTO.getProcessInstanceId(),
|
||||
/**
|
||||
* 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
|
||||
*/
|
||||
"formal"));
|
||||
}
|
||||
|
||||
//获取抄送用户ID
|
||||
String ccIDs = processInstance.getCcids();
|
||||
Pattern pattern = Pattern.compile("\\[(\\d+)]");
|
||||
Matcher matcher = pattern.matcher(ccIDs);
|
||||
while (matcher.find()) {
|
||||
String ccID = matcher.group(1);
|
||||
String ccOpenId = getUserOpenId(Long.valueOf(ccID));
|
||||
|
||||
//发送抄送信息至微信
|
||||
if (ccOpenId != null) {
|
||||
subscribeMessageSendApi.sendApprovalResultNotification(
|
||||
BpmMessageConvert.INSTANCE.convertApprovalResultNotification(
|
||||
ccOpenId, reqDTO.getProcessInstanceName(), reqDTO.getCreateTime(), "抄送", reqDTO.getReason(),
|
||||
reqDTO.getProcessInstanceId(),
|
||||
/**
|
||||
* 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
|
||||
*/
|
||||
"formal"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -112,9 +150,10 @@ public class BpmMessageServiceImpl implements BpmMessageService {
|
||||
//站内信
|
||||
notifyMessageSendApi.sendSingleMessageToAdmin(BpmMessageConvert.INSTANCE.convert1(
|
||||
reqDTO.getAssigneeUserId(), BpmMessageEnum.TASK_ASSIGNED.getSmsTemplateCode(), templateParams));
|
||||
|
||||
//微信小程序订阅消息
|
||||
//发送OA流程待办提醒
|
||||
String openId = getUserOpenId(reqDTO.getStartUserId()); //只有在微信小程序登陆过用户才会有openid
|
||||
String openId = getUserOpenId(assigneeUserId); //只有在微信小程序登陆过用户才会有openid
|
||||
if (openId != null) {
|
||||
subscribeMessageSendApi.sendProcessToDoReminder(BpmMessageConvert.INSTANCE.convertProcessToDoReminder(
|
||||
openId, reqDTO.getProcessInstanceName(), reqDTO.getStartUserNickname(), reqDTO.getCreateTime(), reqDTO.getSchedule(),
|
||||
@ -134,7 +173,7 @@ public class BpmMessageServiceImpl implements BpmMessageService {
|
||||
|
||||
private String getUserOpenId(Long userId) {
|
||||
AdminUserRespDTO adminUserRespDTO = adminUserApi.getUser(userId).getData();
|
||||
String openId = adminUserRespDTO.getOpenId();
|
||||
return openId;
|
||||
|
||||
return adminUserRespDTO.getOpenId();
|
||||
}
|
||||
}
|
||||
|
@ -179,4 +179,11 @@ public interface BpmProcessInstanceService {
|
||||
*/
|
||||
List<BpmProcessFinishStatisticsRespVO> getUserProcessTpo10(BpmProcessInstanceStatisticsReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 获得流程实例
|
||||
*
|
||||
* @param id 流程实例的编号
|
||||
* @return 流程实例
|
||||
*/
|
||||
BpmProcessInstanceExtDO getProcessInstanceDO(String id);
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -196,11 +196,4 @@ public interface BpmTaskService {
|
||||
* @return 当前任务的taskId
|
||||
*/
|
||||
String getCurrentTaskIdByProcessInstanceId(String processInstanceId) ;
|
||||
|
||||
|
||||
/**
|
||||
* 监听 判断流程审批人是否是发起人
|
||||
* @param task
|
||||
*/
|
||||
void approveAuto(Task task);
|
||||
}
|
||||
|
@ -66,7 +66,6 @@ import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*;
|
||||
/**
|
||||
* 流程任务实例 Service 实现类
|
||||
*
|
||||
|
||||
* @author jason
|
||||
*/
|
||||
@Slf4j
|
||||
@ -107,9 +106,9 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
@Override
|
||||
public PageResult<BpmTaskDonePageItemRespVO> getCCTaskPage(Long userId, BpmTaskDonePageReqVO pageVO) {
|
||||
// 查询被抄送的Task
|
||||
BpmProcessInstanceMyPageReqVO reqVO = new BpmProcessInstanceMyPageReqVO() ;
|
||||
reqVO.setName(pageVO.getName()) ;
|
||||
reqVO.setCreateTime(pageVO.getCreateTime()) ;
|
||||
BpmProcessInstanceMyPageReqVO reqVO = new BpmProcessInstanceMyPageReqVO();
|
||||
reqVO.setName(pageVO.getName());
|
||||
reqVO.setCreateTime(pageVO.getCreateTime());
|
||||
// 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页
|
||||
PageResult<BpmProcessInstanceExtDO> pageResult = processInstanceExtMapper.selectCCPage(userId, reqVO);
|
||||
if (CollUtil.isEmpty(pageResult.getList())) {
|
||||
@ -132,7 +131,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
|
||||
convertSet(historicProcessInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId())));
|
||||
// 拼接结果
|
||||
return new PageResult<>(BpmTaskConvert.INSTANCE.convertListCC(pageResult.getList(),bpmTaskExtDOMap,historicProcessInstanceMap,userMap),new Long(pageResult.getTotal()));
|
||||
return new PageResult<>(BpmTaskConvert.INSTANCE.convertListCC(pageResult.getList(), bpmTaskExtDOMap, historicProcessInstanceMap, userMap), new Long(pageResult.getTotal()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -142,7 +141,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
.orderByTaskCreateTime().desc(); // 创建时间倒序
|
||||
if (StrUtil.isNotBlank(pageVO.getName())) {
|
||||
//流程定义的名称
|
||||
taskQuery.processDefinitionName(pageVO.getName()) ;
|
||||
taskQuery.processDefinitionName(pageVO.getName());
|
||||
// taskQuery.taskNameLike("%" + pageVO.getName() + "%");
|
||||
}
|
||||
if (ArrayUtil.get(pageVO.getCreateTime(), 0) != null) {
|
||||
@ -153,7 +152,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 执行查询
|
||||
List<Task> tasks = taskQuery.listPage(PageUtils.getStart(pageVO), pageVO.getPageSize());
|
||||
if (CollUtil.isEmpty(tasks)) {
|
||||
@ -174,13 +172,13 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
@Override
|
||||
public PageResult<BpmTaskDonePageItemRespVO> getDoneTaskPage(Long userId, BpmTaskDonePageReqVO pageVO) {
|
||||
//查询bpm_task_ext扩展表, 接受人是自己,不是自动审批的任务, 按任务名称分组
|
||||
LambdaQueryWrapperX<BpmTaskExtDO> queryWrapperX = new LambdaQueryWrapperX<>() ;
|
||||
LambdaQueryWrapperX<BpmTaskExtDO> queryWrapperX = new LambdaQueryWrapperX<>();
|
||||
queryWrapperX.eq(BpmTaskExtDO::getAssigneeUserId, userId);
|
||||
queryWrapperX.ne(BpmTaskExtDO::getReason,BpmConstants.AUTO_APPRAVAL) ;
|
||||
queryWrapperX.eq(BpmTaskExtDO::getDeleted, false) ;
|
||||
queryWrapperX.groupBy(BpmTaskExtDO::getName) ;
|
||||
queryWrapperX.select(BpmTaskExtDO::getName) ;
|
||||
List<BpmTaskExtDO> list = taskExtMapper.selectList(queryWrapperX) ;
|
||||
queryWrapperX.ne(BpmTaskExtDO::getReason, BpmConstants.AUTO_APPRAVAL);
|
||||
queryWrapperX.eq(BpmTaskExtDO::getDeleted, false);
|
||||
queryWrapperX.groupBy(BpmTaskExtDO::getName);
|
||||
queryWrapperX.select(BpmTaskExtDO::getName);
|
||||
List<BpmTaskExtDO> list = taskExtMapper.selectList(queryWrapperX);
|
||||
List<String> taskNames = list.stream().map(BpmTaskExtDO::getName)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
@ -188,26 +186,26 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery().finished() // 已完成
|
||||
.taskAssignee(String.valueOf(userId)) // 分配给自己
|
||||
.orderByHistoricTaskInstanceEndTime().desc(); // 审批时间倒序
|
||||
if( taskNames != null && !taskNames.isEmpty()) {
|
||||
if (taskNames != null && !taskNames.isEmpty()) {
|
||||
/**
|
||||
* 条件是: 已被分配的任务的名称分组数据,作为条件查询
|
||||
*/
|
||||
taskQuery.taskNameIn(taskNames) ;
|
||||
}else {
|
||||
taskQuery.taskNameIn(taskNames);
|
||||
} else {
|
||||
/**
|
||||
* taskNames是空或者没有数据,表示没有任何分配给自己的任务,且分自动审批的任务。
|
||||
* 那么就输出一个不存在的任务名称,可以让数据查询不出来
|
||||
*/
|
||||
taskQuery.taskName("//////") ;
|
||||
taskQuery.taskName("//////");
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageVO.getName())) {
|
||||
// taskQuery.taskNameLike("%" + pageVO.getName() + "%");
|
||||
//流程定义的名称
|
||||
taskQuery.processDefinitionName(pageVO.getName()) ;
|
||||
taskQuery.processDefinitionName(pageVO.getName());
|
||||
}
|
||||
LocalDateTime[] localDateTimes = pageVO.getCreateTime() ;
|
||||
if( localDateTimes != null) {
|
||||
LocalDateTime[] localDateTimes = pageVO.getCreateTime();
|
||||
if (localDateTimes != null) {
|
||||
if (localDateTimes[0] != null) {
|
||||
taskQuery.taskCreatedAfter(DateUtils.of(localDateTimes[0]));
|
||||
}
|
||||
@ -369,7 +367,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
* 判定流程的走向,这里是流程审核节点(就是流程设计中的任意审核节点)
|
||||
* 根据当前审核人的岗位判定流程走向
|
||||
*/
|
||||
Map<String, Object> paramMap = instance.getProcessVariables() ;
|
||||
Map<String, Object> paramMap = instance.getProcessVariables();
|
||||
|
||||
// // 获得 User
|
||||
// AdminUserRespDTO examineUser = adminUserApi.getUser(userId).getCheckedData();
|
||||
@ -403,7 +401,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
paramMap.put("level", startDeptInfo.getLevel().toString());
|
||||
}
|
||||
|
||||
if( postIds == null || postIds.isEmpty() ) {
|
||||
if (postIds == null || postIds.isEmpty()) {
|
||||
// 当前审批用户未配置岗位
|
||||
// 操作失败,原因:您未配置岗位,请联系管理员操作
|
||||
throw exception(TASK_OPERATE_FAIL_USER_NO_POST);
|
||||
@ -421,7 +419,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
paramMap.put("user_id", userId.toString());
|
||||
paramMap.put("dept_id", startUser.getDeptId().toString()); //配置发起人部门id
|
||||
|
||||
paramMap.put("approve_reason",reqVO.getReason()) ; //通过原因---因为Task任务的通过,是通过监听事件处理的,reason数据无法传递给监听函数。所以通过此中方法传递
|
||||
paramMap.put("approve_reason", reqVO.getReason()); //通过原因---因为Task任务的通过,是通过监听事件处理的,reason数据无法传递给监听函数。所以通过此中方法传递
|
||||
taskService.complete(task.getId(), paramMap);
|
||||
// 更新任务拓展表为通过
|
||||
taskExtMapper.updateByTaskId(
|
||||
@ -476,7 +474,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
|
||||
// 3. 处理加签情况
|
||||
String scopeType = parentTask.getScopeType();
|
||||
if(!validateSignType(scopeType)){
|
||||
if (!validateSignType(scopeType)) {
|
||||
return;
|
||||
}
|
||||
// 3.1 情况一:处理向前加签
|
||||
@ -659,7 +657,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
*/
|
||||
private Task validateTask(Long userId, String taskId) {
|
||||
Task task = validateTaskExist(taskId);
|
||||
if( userId != null ) {
|
||||
if (userId != null) {
|
||||
if (!Objects.equals(userId, NumberUtils.parseLong(task.getAssignee()))) {
|
||||
throw exception(TASK_OPERATE_FAIL_ASSIGN_NOT_SELF);
|
||||
}
|
||||
@ -721,26 +719,60 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
|
||||
@Override
|
||||
public void updateTaskExtAssign(Task task) {
|
||||
BpmTaskExtDO taskExtDO =
|
||||
new BpmTaskExtDO().setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())).setTaskId(task.getId());
|
||||
taskExtMapper.updateByTaskId(taskExtDO);
|
||||
// BpmTaskExtDO taskExtDO =
|
||||
// new BpmTaskExtDO().setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())).setTaskId(task.getId());
|
||||
// taskExtMapper.updateByTaskId(taskExtDO);
|
||||
|
||||
// 发送通知。在事务提交时,批量执行操作,所以直接查询会无法查询到 ProcessInstance,所以这里是通过监听事务的提交来实现。
|
||||
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
|
||||
|
||||
@Override
|
||||
public void afterCommit() {
|
||||
|
||||
if (StrUtil.isNotEmpty(task.getAssignee())) {
|
||||
ProcessInstance processInstance =
|
||||
processInstanceService.getProcessInstance(task.getProcessInstanceId());
|
||||
if( processInstance != null ) {
|
||||
|
||||
ProcessInstance processInstance = processInstanceService.getProcessInstance(task.getProcessInstanceId());
|
||||
if (processInstance != null) {
|
||||
// 获得任务列表
|
||||
List<BpmTaskRespVO> BpmTaskRespVOs = getTaskListByProcessInstanceId(processInstance.getProcessInstanceId()) ;
|
||||
List<BpmTaskRespVO> BpmTaskRespVOs = getTaskListByProcessInstanceId(processInstance.getProcessInstanceId());
|
||||
AdminUserRespDTO startUser = adminUserApi.getUser(Long.valueOf(processInstance.getStartUserId())).getCheckedData();
|
||||
//发送信息通知
|
||||
messageService.sendMessageWhenTaskAssigned(
|
||||
BpmTaskConvert.INSTANCE.convert(processInstance, startUser, task, BpmTaskRespVOs));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterCompletion(int status) {
|
||||
|
||||
if(TransactionSynchronization.STATUS_COMMITTED == status){
|
||||
|
||||
ProcessInstance processInstance = processInstanceService.getProcessInstance(task.getProcessInstanceId());
|
||||
|
||||
//如果当前审批人是流程发起人,则自动通过当前审批节点
|
||||
if (processInstance.getStartUserId().equals(task.getAssignee())) {
|
||||
|
||||
BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO();
|
||||
reqVO.setId(task.getId());
|
||||
reqVO.setReason(BpmConstants.AUTO_APPRAVAL);
|
||||
|
||||
approveTask(Long.valueOf(task.getAssignee()), reqVO);
|
||||
} else {
|
||||
//判断 当前审批人是否在该流程中 已通过审批
|
||||
//如果有,则自动审批通过该审批人节点
|
||||
Long count = taskExtMapper.selectListCount(Long.valueOf(task.getAssignee()), task.getProcessInstanceId());
|
||||
|
||||
if (count > 0L) {
|
||||
|
||||
BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO();
|
||||
reqVO.setId(task.getId());
|
||||
reqVO.setReason(BpmConstants.AUTO_APPRAVAL);
|
||||
approveTask(Long.valueOf(task.getAssignee()), reqVO);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -1083,11 +1115,12 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
|
||||
/**
|
||||
* 判断当前类型是否为加签
|
||||
*
|
||||
* @param scopeType 任务的 scopeType
|
||||
* @return 当前 scopeType 为加签则返回 true
|
||||
*/
|
||||
private boolean validateSignType(String scopeType){
|
||||
return StrUtil.equalsAny(scopeType,BpmTaskAddSignTypeEnum.BEFORE.getType(),scopeType, BpmTaskAddSignTypeEnum.AFTER.getType());
|
||||
private boolean validateSignType(String scopeType) {
|
||||
return StrUtil.equalsAny(scopeType, BpmTaskAddSignTypeEnum.BEFORE.getType(), scopeType, BpmTaskAddSignTypeEnum.AFTER.getType());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1105,7 +1138,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
//控制遍历的次数不超过 Byte.MAX_VALUE,避免脏数据造成死循环
|
||||
int count = 0;
|
||||
// TODO @海:< 的前后空格,要注意哈;
|
||||
while (!stack.isEmpty() && count<Byte.MAX_VALUE) {
|
||||
while (!stack.isEmpty() && count < Byte.MAX_VALUE) {
|
||||
// 1.2 弹出栈顶任务ID
|
||||
String taskId = stack.pop();
|
||||
// 1.3 将任务ID添加到结果集合中
|
||||
@ -1179,49 +1212,10 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
System.out.println("当前任务节点名称: " + currentTask.getName());
|
||||
System.out.println("当前任务节点创建时间: " + currentTask.getCreateTime());
|
||||
System.out.println("当前任务节点分配给: " + currentTask.getAssignee());
|
||||
return currentTask.getId() ;
|
||||
return currentTask.getId();
|
||||
} else {
|
||||
System.out.println("没有找到当前进行中的任务节点");
|
||||
throw exception(TASK_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 监听 判断流程审批人是否是发起人
|
||||
* @param task
|
||||
*/
|
||||
@Override
|
||||
public void approveAuto(Task task) {
|
||||
|
||||
//在事务提交后, 进行判断
|
||||
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
|
||||
|
||||
@Override
|
||||
public void afterCommit() {
|
||||
|
||||
ProcessInstance processInstance = processInstanceService.getProcessInstance(task.getProcessInstanceId());
|
||||
|
||||
//如果当前审批人是流程发起人,则自动通过当前审批节点
|
||||
if (processInstance.getStartUserId().equals(task.getAssignee())) {
|
||||
|
||||
BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO();
|
||||
reqVO.setId(task.getId());
|
||||
reqVO.setReason(BpmConstants.AUTO_APPRAVAL);
|
||||
approveTask(Long.valueOf(task.getAssignee()), reqVO);
|
||||
}else {
|
||||
//判断 当前审批人是否在该流程中 已通过审批
|
||||
//如果有,则自动审批通过该审批人节点
|
||||
Long count = taskExtMapper.selectListCount(Long.valueOf(task.getAssignee()), task.getProcessInstanceId());
|
||||
|
||||
if (count > 0L) {
|
||||
|
||||
BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO();
|
||||
reqVO.setId(task.getId());
|
||||
reqVO.setReason(BpmConstants.AUTO_APPRAVAL);
|
||||
approveTask(Long.valueOf(task.getAssignee()), reqVO);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user