完善代理人任务节点完成处理逻辑

This commit is contained in:
wanggeng 2022-04-08 18:17:42 +08:00
parent 927210cedb
commit b15e71c77b
3 changed files with 235 additions and 116 deletions

View File

@ -1,7 +1,6 @@
package ink.wgink.module.activiti.listener.task;
import ink.wgink.exceptions.OaNodeException;
import ink.wgink.exceptions.SearchException;
import ink.wgink.interfaces.department.IDepartmentBaseService;
import ink.wgink.interfaces.department.IDepartmentUserBaseService;
import ink.wgink.interfaces.position.IPositionBaseService;
@ -33,7 +32,6 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@ -76,7 +74,7 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
@Override
public void notify(DelegateTask delegateTask) {
LOG.debug(">>>> userTask complete");
LOG.debug(">>>>>> 代理人任务完成 <<<<<<");
String taskDefinitionKey = delegateTask.getTaskDefinitionKey();
String processDefinitionId = delegateTask.getProcessDefinitionId();
LOG.debug("查找流程定义");
@ -106,28 +104,6 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
multiple(delegateTask, nextUserTask, oaNodeAssigneePO);
return;
}
if (nextUserTask != null) {
if (StringUtils.equals(nextUserTask.getName(), "任务3")) {
// nextUserTask.setAssignee("${signUser}");
// MultiInstanceLoopCharacteristics characteristics = new MultiInstanceLoopCharacteristics();
// characteristics.setInputDataItem("signUsers");
// characteristics.setElementVariable("signUser");
// characteristics.setSequential(false);
// characteristics.setCompletionCondition("${nrOfCompletedInstances==nrOfInstances}");
// nextUserTask.setLoopCharacteristics(characteristics);
List<String> signUsers = new ArrayList<>();
signUsers.add("1");
signUsers.add("e48e9c4a-995e-4061-abcd-a3c260c11333");
// runtimeService.setVariable(delegateTask.getExecutionId(), "signUsers", signUsers);
delegateTask.setVariable("signUsers", signUsers);
} else {
nextUserTask.setAssignee("1");
}
}
}
@Override
@ -147,7 +123,7 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
}
if (StringUtils.equals(oaNodeAssigneePO.getAssigneeType(), AssigneeTypeEnum.AUTO.getValue())) {
LOG.debug("assigneeType -> auto");
auto(delegateTask, userTask, oaNodeAssigneePO);
auto(delegateTask, userTask, oaNodeAssigneePO, NodeTypeEnum.NORMAL);
return;
}
}
@ -160,7 +136,25 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
* @param oaNodeAssigneePO
*/
private void multiple(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO) {
if (StringUtils.equals(oaNodeAssigneePO.getAssigneeType(), AssigneeTypeEnum.APPOINT.getValue())) {
LOG.debug("assigneeType -> appoint");
String multipleAssignees = oaNodeAssigneePO.getMultipleAssignees();
if (StringUtils.isBlank(multipleAssignees)) {
throw new OaNodeException("多实例代理人未设置");
}
List<UserDTO> userDTOs = userBaseService.listByUserIds(Arrays.asList(multipleAssignees.split(",")));
if (userDTOs.isEmpty()) {
throw new OaNodeException("多实例代理人不存在");
}
List<String> existUserIds = ArrayListUtil.listBeanStringIdValue(userDTOs, "userId", UserDTO.class);
delegateTask.setVariable(IActivitiModelService.MULTI_INSTANCE_COLLECTION_NAME, existUserIds);
return;
}
if (StringUtils.equals(oaNodeAssigneePO.getAssigneeType(), AssigneeTypeEnum.AUTO.getValue())) {
LOG.debug("assigneeType -> auto");
auto(delegateTask, userTask, oaNodeAssigneePO, NodeTypeEnum.MULTIPLE);
return;
}
}
/**
@ -175,13 +169,13 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
LOG.debug("assigneeCount -> single");
String assignee = oaNodeAssigneePO.getAssignee();
if (StringUtils.isBlank(assignee)) {
throw new SearchException("下节点代理人未设置");
throw new OaNodeException("下节点代理人未设置");
}
UserDTO userDTO = userBaseService.get(assignee);
if (userDTO == null) {
throw new SearchException("下节点代理人不存在");
throw new OaNodeException("下节点代理人不存在");
}
LOG.debug("设置代理人");
LOG.debug("设置普通节点代理人");
userTask.setAssignee(userDTO.getUserId());
return;
}
@ -189,11 +183,11 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
LOG.debug("assigneeCount -> candidate");
String candidates = oaNodeAssigneePO.getCandidates();
if (StringUtils.isBlank(candidates)) {
throw new SearchException("下节点候选人未设置");
throw new OaNodeException("下节点候选人未设置");
}
List<UserDTO> userDTOs = userBaseService.listByUserIds(Arrays.asList(candidates.split(",")));
if (userDTOs.isEmpty()) {
throw new SearchException("下节点候选人不存在");
throw new OaNodeException("下节点候选人不存在");
}
LOG.debug("设置候选人");
userTask.setCandidateUsers(ArrayListUtil.listBeanStringIdValue(userDTOs, "userId", UserDTO.class));
@ -208,15 +202,15 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
* @param userTask
* @param oaNodeAssigneePO
*/
private void auto(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO) {
private void auto(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO, NodeTypeEnum nodeType) {
if (StringUtils.equals(oaNodeAssigneePO.getAutoAssignType(), AutoAssignTypeEnum.SCOPE.getValue())) {
LOG.debug("autoAssigneeType -> scope");
departmentType(delegateTask, userTask, oaNodeAssigneePO);
departmentType(delegateTask, userTask, oaNodeAssigneePO, nodeType);
return;
}
if (StringUtils.equals(oaNodeAssigneePO.getAutoAssignType(), AutoAssignTypeEnum.QUICK.getValue())) {
LOG.debug("autoAssigneeType -> quick");
quickAssignee(delegateTask, userTask, oaNodeAssigneePO);
quickAssignee(delegateTask, userTask, oaNodeAssigneePO, nodeType);
return;
}
}
@ -227,8 +221,9 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
* @param delegateTask
* @param userTask
* @param oaNodeAssigneePO
* @param nodeType
*/
private void quickAssignee(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO) {
private void quickAssignee(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO, NodeTypeEnum nodeType) {
String quickAssignee = oaNodeAssigneePO.getQuickAssignee();
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.STARTER.getValue())) {
LOG.debug("quickAssignee -> starter:发起人");
@ -237,44 +232,190 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
return;
}
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.STARTER_SUPERIOR_POSITION.getValue())) {
starterSuperiorPosition(delegateTask, userTask, oaNodeAssigneePO, nodeType);
return;
}
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUBORDINATE_POSITION.getValue())) {
previousStepAssigneeSubordinatePosition(delegateTask, userTask, oaNodeAssigneePO, nodeType);
return;
}
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUPERIOR_POSITION.getValue())) {
previousStepAssigneeSuperiorPosition(delegateTask, userTask, oaNodeAssigneePO, nodeType);
return;
}
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUPERIOR_POSITION.getValue())) {
previousStepAssigneeSameDepartment(delegateTask, userTask, oaNodeAssigneePO, nodeType);
return;
}
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_N_STEP_ASSIGNEE_SUBORDINATE_POSITION.getValue())) {
previousNStepAssigneeSubordinatePosition(delegateTask, userTask, oaNodeAssigneePO, nodeType);
return;
}
}
/**
* 发起人上级岗位
*
* @param delegateTask
* @param userTask
* @param oaNodeAssigneePO
* @param nodeType
*/
private void starterSuperiorPosition(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO, NodeTypeEnum nodeType) {
// 同部门
LOG.debug("quickAssignee -> starterSuperiorPosition:发起人上级岗位");
// 开始节点代理人
HistoricTaskInstance startTask = activitiModelService.getStartTask(delegateTask.getProcessInstanceId());
String starterUserId = startTask.getAssignee();
LOG.debug("查询同部门下所有用户");
List<String> departmentUserIds = departmentUserBaseService.listSameDepartmentUserIdByUserId(starterUserId);
List<String> positionIds = positionUserBaseService.listPositionIdByUserId(starterUserId);
List<PositionDTO> parentPositionDTOs = positionBaseService.listParentByPositionIds(positionIds);
if (parentPositionDTOs.isEmpty()) {
throw new OaNodeException("发起人不存在上级岗位");
}
List<String> parentPositionIds = ArrayListUtil.listBeanStringIdValue(parentPositionDTOs, "positionId", PositionDTO.class);
LOG.debug("查询发起人上级岗位用户ID列表");
List<String> parentPositionUserIds = positionUserBaseService.listUserId(parentPositionIds);
LOG.debug("查询发起人上级岗位用户列表");
LOG.debug("查询发起人同部门上级岗位用户ID列表");
List<String> parentPositionUserIds = positionUserBaseService.listUserIdByPositionIdsAndUserIds(parentPositionIds, departmentUserIds);
LOG.debug("查询发起人同部门上级岗位用户列表");
List<UserDTO> parentPositionUserDTOs = userBaseService.listByUserIds(parentPositionUserIds);
if (parentPositionUserDTOs.isEmpty()) {
throw new OaNodeException("发起人上级岗位没有用户");
}
// 上级岗位可以有自己
List<String> existParentPositionUserIds = ArrayListUtil.listBeanStringIdValue(parentPositionUserDTOs, "userId", UserDTO.class);
if (NodeTypeEnum.NORMAL.equals(nodeType)) {
LOG.debug("候选人用户列表");
userTask.setCandidateUsers(existParentPositionUserIds);
return;
} else {
delegateTask.setVariable(IActivitiModelService.MULTI_INSTANCE_COLLECTION_NAME, existParentPositionUserIds);
}
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUBORDINATE_POSITION.getValue())) {
}
/**
* 上一步代理人下级岗位
*
* @param delegateTask
* @param userTask
* @param oaNodeAssigneePO
* @param nodeType
*/
private void previousStepAssigneeSubordinatePosition(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO, NodeTypeEnum nodeType) {
// 同部门
LOG.debug("quickAssignee -> previousStepAssigneeSubordinatePosition:上一步代理人下级岗位");
return;
// 当前任务人
String assignee = delegateTask.getAssignee();
LOG.debug("查询当前代理人同部门下所有用户");
List<String> departmentUserIds = departmentUserBaseService.listSameDepartmentUserIdByUserId(assignee);
LOG.debug("查询当前代理人的岗位");
List<String> positionIds = positionUserBaseService.listPositionIdByUserId(assignee);
LOG.debug("查询下级岗位列表");
List<PositionDTO> childPositionDTOs = positionBaseService.listByPositionParentIds(positionIds);
if (childPositionDTOs.isEmpty()) {
throw new OaNodeException("当前代理人没有下级岗位");
}
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUPERIOR_POSITION.getValue())) {
List<String> childPositionIds = ArrayListUtil.listBeanStringIdValue(childPositionDTOs, "positionId", PositionDTO.class);
LOG.debug("查询下级岗位的用户ID列表");
List<String> childPositionUserIds = positionUserBaseService.listUserIdByPositionIdsAndUserIds(childPositionIds, departmentUserIds);
LOG.debug("查询下级岗位用户列表");
List<UserDTO> childPositionUserDTOs = userBaseService.listByUserIds(childPositionUserIds);
if (childPositionUserDTOs.isEmpty()) {
throw new OaNodeException("下级岗位没有用户");
}
List<String> existChildPositionUserIds = ArrayListUtil.listBeanStringIdValue(childPositionUserDTOs, "userId", UserDTO.class);
if (NodeTypeEnum.NORMAL.equals(nodeType)) {
LOG.debug("设置候选人列表");
userTask.setCandidateUsers(existChildPositionUserIds);
} else {
delegateTask.setVariable(IActivitiModelService.MULTI_INSTANCE_COLLECTION_NAME, existChildPositionUserIds);
}
}
/**
* 上一步代理人上级岗位
*
* @param delegateTask
* @param userTask
* @param oaNodeAssigneePO
* @param nodeType
*/
private void previousStepAssigneeSuperiorPosition(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO, NodeTypeEnum nodeType) {
// 同部门
LOG.debug("quickAssignee -> previousStepAssigneeSuperiorPosition:上一步代理人上级岗位");
return;
// 当前代理人
String assignee = delegateTask.getAssignee();
LOG.debug("查询当前代理人同部门下所有用户");
List<String> departmentUserIds = departmentUserBaseService.listSameDepartmentUserIdByUserId(assignee);
LOG.debug("查询当前代理人的岗位");
List<String> positionIds = positionUserBaseService.listPositionIdByUserId(assignee);
LOG.debug("查询上级岗位列表");
List<PositionDTO> parentPositionDTOs = positionBaseService.listParentByPositionIds(positionIds);
if (parentPositionDTOs.isEmpty()) {
throw new OaNodeException("当前代理人没有上级岗位");
}
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUPERIOR_POSITION.getValue())) {
List<String> parentPositionIds = ArrayListUtil.listBeanStringIdValue(parentPositionDTOs, "positionId", PositionDTO.class);
LOG.debug("查询上级岗位的用户ID列表");
List<String> parentPositionUserIds = positionUserBaseService.listUserIdByPositionIdsAndUserIds(parentPositionIds, departmentUserIds);
LOG.debug("查询上级岗位用户列表");
List<UserDTO> parentPositionUserDTOs = userBaseService.listByUserIds(parentPositionUserIds);
if (parentPositionUserDTOs.isEmpty()) {
throw new OaNodeException("上级岗位没有用户");
}
List<String> existParentPositionUserIds = ArrayListUtil.listBeanStringIdValue(parentPositionUserDTOs, "userId", UserDTO.class);
if (NodeTypeEnum.NORMAL.equals(nodeType)) {
LOG.debug("设置候选人列表");
userTask.setCandidateUsers(existParentPositionUserIds);
} else {
delegateTask.setVariable(IActivitiModelService.MULTI_INSTANCE_COLLECTION_NAME, existParentPositionUserIds);
}
}
/**
* 上一步代理人同部门
*
* @param delegateTask
* @param userTask
* @param oaNodeAssigneePO
* @param nodeType
*/
private void previousStepAssigneeSameDepartment(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO, NodeTypeEnum nodeType) {
// 同部门
LOG.debug("quickAssignee -> previousStepAssigneeSameDepartment:上一步代理人同部门");
return;
String assignee = delegateTask.getAssignee();
LOG.debug("查询当前代理人同部门下所有用户");
List<String> departmentUserIds = departmentUserBaseService.listSameDepartmentUserIdByUserId(assignee);
LOG.debug("排除自己");
clearUserIdsCurrentTaskAssignee(departmentUserIds, assignee);
List<UserDTO> departmentUserDTOs = userBaseService.listByUserIds(departmentUserIds);
if (departmentUserDTOs.isEmpty()) {
throw new OaNodeException("同部门下没有其他用户");
}
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_N_STEP_ASSIGNEE_SUBORDINATE_POSITION.getValue())) {
List<String> existChildPositionUserIds = ArrayListUtil.listBeanStringIdValue(departmentUserDTOs, "userId", UserDTO.class);
if (NodeTypeEnum.NORMAL.equals(nodeType)) {
LOG.debug("设置候选人列表");
userTask.setCandidateUsers(existChildPositionUserIds);
} else {
delegateTask.setVariable(IActivitiModelService.MULTI_INSTANCE_COLLECTION_NAME, existChildPositionUserIds);
}
}
/**
* N 步代理人
*
* @param delegateTask
* @param userTask
* @param oaNodeAssigneePO
* @param nodeType
*/
private void previousNStepAssigneeSubordinatePosition(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO, NodeTypeEnum nodeType) {
LOG.debug("quickAssignee -> previousNStepAssigneeSubordinatePosition:前N步代理人");
Integer previousNStep = oaNodeAssigneePO.getPreviousNStep();
return;
HistoricTaskInstance prevTask = activitiModelService.getPrevTask(delegateTask.getProcessInstanceId(), previousNStep - 1);
String assignee = prevTask.getAssignee();
if (NodeTypeEnum.NORMAL.equals(nodeType)) {
userTask.setAssignee(assignee);
} else {
delegateTask.setVariable(IActivitiModelService.MULTI_INSTANCE_COLLECTION_NAME, Arrays.asList(assignee));
}
}
@ -284,31 +425,32 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
* @param delegateTask
* @param userTask
* @param oaNodeAssigneePO
* @param nodeType
*/
private void departmentType(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO) {
private void departmentType(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO, NodeTypeEnum nodeType) {
if (StringUtils.equals(oaNodeAssigneePO.getDepartmentType(), DepartmentTypeEnum.APPOINT.getValue())) {
LOG.debug("departmentType -> appoint");
String departmentIds = oaNodeAssigneePO.getDepartments();
String roleIds = oaNodeAssigneePO.getRoles();
String positionIds = oaNodeAssigneePO.getPositions();
if (StringUtils.isBlank(departmentIds) && StringUtils.isBlank(roleIds) && StringUtils.isBlank(positionIds)) {
throw new SearchException("下节点没有设置部门、角色、职位");
throw new OaNodeException("下节点没有设置部门、角色、职位");
}
if (!StringUtils.isBlank(departmentIds)) {
LOG.debug("查询部门用户");
List<String> departmentUserIds = departmentUserBaseService.listUserId(Arrays.asList(departmentIds.split(",")));
setDepartmentCandidateUser(delegateTask, userTask, departmentUserIds, roleIds, positionIds);
setDepartmentCandidateUser(delegateTask, userTask, departmentUserIds, roleIds, positionIds, nodeType);
return;
}
if (!StringUtils.isBlank(roleIds)) {
LOG.debug("查询角色用户");
List<String> roleUserIds = roleUserBaseService.listUserId(Arrays.asList(roleIds.split(",")));
setRoleCandidateUser(delegateTask, userTask, roleUserIds, positionIds);
setRoleCandidateUser(delegateTask, userTask, roleUserIds, positionIds, nodeType);
return;
}
LOG.debug("查询职位用户");
List<String> positionUserIds = positionUserBaseService.listUserId(Arrays.asList(positionIds.split(",")));
setPositionCandidateUser(delegateTask, userTask, positionUserIds);
setPositionCandidateUser(delegateTask, userTask, positionUserIds, nodeType);
return;
}
if (StringUtils.equals(oaNodeAssigneePO.getDepartmentType(), DepartmentTypeEnum.BELONG.getValue())) {
@ -321,7 +463,7 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
throw new OaNodeException("代理人不存在部门");
}
List<String> departmentUserIds = departmentUserBaseService.listUserId(departmentIds);
setDepartmentCandidateUser(delegateTask, userTask, departmentUserIds, roleIds, positionIds);
setDepartmentCandidateUser(delegateTask, userTask, departmentUserIds, roleIds, positionIds, nodeType);
}
}
@ -333,15 +475,16 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
* @param departmentUserIds
* @param roleIds
* @param positionIds
* @param nodeType
*/
private void setDepartmentCandidateUser(DelegateTask delegateTask, UserTask userTask, List<String> departmentUserIds, String roleIds, String positionIds) {
private void setDepartmentCandidateUser(DelegateTask delegateTask, UserTask userTask, List<String> departmentUserIds, String roleIds, String positionIds, NodeTypeEnum nodeType) {
if (!StringUtils.isBlank(roleIds)) {
LOG.debug("查询角色用户");
List<String> roleUserIds = roleUserBaseService.listUserIdByRoleIdsAndUserIds(Arrays.asList(roleIds.split(",")), departmentUserIds);
setRoleCandidateUser(delegateTask, userTask, roleUserIds, positionIds);
setRoleCandidateUser(delegateTask, userTask, roleUserIds, positionIds, nodeType);
return;
}
setCandidateUsers(delegateTask, userTask, departmentUserIds);
setCandidateUsers(delegateTask, userTask, departmentUserIds, nodeType);
}
/**
@ -351,15 +494,16 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
* @param userTask
* @param roleUserIds
* @param positionIds
* @param nodeType
*/
private void setRoleCandidateUser(DelegateTask delegateTask, UserTask userTask, List<String> roleUserIds, String positionIds) {
private void setRoleCandidateUser(DelegateTask delegateTask, UserTask userTask, List<String> roleUserIds, String positionIds, NodeTypeEnum nodeType) {
if (!StringUtils.isBlank(positionIds)) {
LOG.debug("查询职位用户");
List<String> positionUserIds = positionUserBaseService.listUserIdByPositionIdsAndUserIds(Arrays.asList(positionIds.split(",")), roleUserIds);
setPositionCandidateUser(delegateTask, userTask, positionUserIds);
setPositionCandidateUser(delegateTask, userTask, positionUserIds, nodeType);
return;
}
setCandidateUsers(delegateTask, userTask, roleUserIds);
setCandidateUsers(delegateTask, userTask, roleUserIds, nodeType);
}
/**
@ -368,9 +512,10 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
* @param delegateTask
* @param userTask
* @param positionUserIds
* @param nodeType
*/
private void setPositionCandidateUser(DelegateTask delegateTask, UserTask userTask, List<String> positionUserIds) {
setCandidateUsers(delegateTask, userTask, positionUserIds);
private void setPositionCandidateUser(DelegateTask delegateTask, UserTask userTask, List<String> positionUserIds, NodeTypeEnum nodeType) {
setCandidateUsers(delegateTask, userTask, positionUserIds, nodeType);
}
/**
@ -379,16 +524,21 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
* @param delegateTask
* @param userTask
* @param userIds
* @param nodeType
*/
private void setCandidateUsers(DelegateTask delegateTask, UserTask userTask, List<String> userIds) {
private void setCandidateUsers(DelegateTask delegateTask, UserTask userTask, List<String> userIds, NodeTypeEnum nodeType) {
List<UserDTO> userDTOs = userBaseService.listByUserIds(userIds);
if (userDTOs.isEmpty()) {
throw new SearchException("下节点候选人不存在");
throw new OaNodeException("下节点候选人不存在");
}
LOG.debug("设置候选人");
List<String> existUserIds = ArrayListUtil.listBeanStringIdValue(userDTOs, "userId", UserDTO.class);
clearUserIdsCurrentTaskAssignee(existUserIds, delegateTask.getAssignee());
if (NodeTypeEnum.NORMAL.equals(nodeType)) {
userTask.setCandidateUsers(existUserIds);
} else {
delegateTask.setVariable(IActivitiModelService.MULTI_INSTANCE_COLLECTION_NAME, existUserIds);
}
}
/**
@ -406,39 +556,4 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
}
}
private void assigneeCount(UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO) {
}
// 1nrOfInstances 该会签环节中总共有多少个实例 2nrOfActiveInstances 当前活动的实例的数量即还没有 完成的实例数量 3nrOfCompletedInstances 已经完成的实例的数量
// 设置会签
// // 获取多实例配置
// MultiInstanceLoopCharacteristics characteristics = new MultiInstanceLoopCharacteristics();
// // 设置集合变量统一设置成users
// characteristics.setInputDataItem(Constant.ACT_MUIT_LIST_NAME);
// // 设置变量
// characteristics.setElementVariable(Constant.ACT_MUIT_VAR_NAME);
// // 设置为同时接收false 表示不按顺序执行
// characteristics.setSequential(false);
// // 设置条件暂时处理成全部会签完转下步
// characteristics.setCompletionCondition("${nrOfCompletedInstances==nrOfInstances}");
//
// userTask.setLoopCharacteristics(characteristics);
// 清空会签
// 获取多实例配置
// MultiInstanceLoopCharacteristics characteristics = userTask.getLoopCharacteristics();
// if (characteristics != null) {
// // 清空集合
// characteristics.setInputDataItem("");
// // 清空变量
// characteristics.setElementVariable("");
// // 设置为顺序接收true 表示不按顺序执行
// characteristics.setSequential(true);
// // 清空条件
// characteristics.setCompletionCondition("");
// }
}

View File

@ -38,10 +38,14 @@ public interface IActivitiModelService {
* 候选人集合
*/
String CANDIDATES_COLLECTION = "${candidates}";
/**
* 多实例集合名称
*/
String MULTI_INSTANCE_COLLECTION_NAME = "assigneeList";
/**
* 多实例集合
*/
String MULTI_INSTANCE_COLLECTION = "${assigneeList}";
String MULTI_INSTANCE_COLLECTION = "${" + MULTI_INSTANCE_COLLECTION_NAME + "}";
/**
* 多实例变量
*/

View File

@ -167,7 +167,7 @@
</update>
<!-- 详情 -->
<select id="getPO" parameterType="map" resultMap="">
<select id="getPO" parameterType="map" resultMap="oaNodeAssigneePO">
SELECT
id,
node_assignee_id,
@ -224,7 +224,7 @@
</select>
<!-- 列表 -->
<select id="listPO" parameterType="map" resultMap="">
<select id="listPO" parameterType="map" resultMap="oaNodeAssigneePO">
SELECT
id,
node_assignee_id,