完善代理人任务节点完成处理逻辑
This commit is contained in:
parent
927210cedb
commit
b15e71c77b
@ -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,78 +232,225 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
||||
return;
|
||||
}
|
||||
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.STARTER_SUPERIOR_POSITION.getValue())) {
|
||||
LOG.debug("quickAssignee -> starterSuperiorPosition:发起人上级岗位");
|
||||
HistoricTaskInstance startTask = activitiModelService.getStartTask(delegateTask.getProcessInstanceId());
|
||||
String starterUserId = startTask.getAssignee();
|
||||
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("查询发起人上级岗位用户列表");
|
||||
List<UserDTO> parentPositionUserDTOs = userBaseService.listByUserIds(parentPositionUserIds);
|
||||
if (parentPositionUserDTOs.isEmpty()) {
|
||||
throw new OaNodeException("发起人上级岗位没有用户");
|
||||
}
|
||||
// 上级岗位可以有自己
|
||||
List<String> existParentPositionUserIds = ArrayListUtil.listBeanStringIdValue(parentPositionUserDTOs, "userId", UserDTO.class);
|
||||
LOG.debug("候选人用户列表");
|
||||
userTask.setCandidateUsers(existParentPositionUserIds);
|
||||
starterSuperiorPosition(delegateTask, userTask, oaNodeAssigneePO, nodeType);
|
||||
return;
|
||||
}
|
||||
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUBORDINATE_POSITION.getValue())) {
|
||||
LOG.debug("quickAssignee -> previousStepAssigneeSubordinatePosition:上一步代理人下级岗位");
|
||||
previousStepAssigneeSubordinatePosition(delegateTask, userTask, oaNodeAssigneePO, nodeType);
|
||||
return;
|
||||
}
|
||||
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUPERIOR_POSITION.getValue())) {
|
||||
LOG.debug("quickAssignee -> previousStepAssigneeSuperiorPosition:上一步代理人上级岗位");
|
||||
previousStepAssigneeSuperiorPosition(delegateTask, userTask, oaNodeAssigneePO, nodeType);
|
||||
return;
|
||||
}
|
||||
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUPERIOR_POSITION.getValue())) {
|
||||
LOG.debug("quickAssignee -> previousStepAssigneeSameDepartment:上一步代理人同部门");
|
||||
previousStepAssigneeSameDepartment(delegateTask, userTask, oaNodeAssigneePO, nodeType);
|
||||
return;
|
||||
}
|
||||
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_N_STEP_ASSIGNEE_SUBORDINATE_POSITION.getValue())) {
|
||||
LOG.debug("quickAssignee -> previousNStepAssigneeSubordinatePosition:前N步代理人");
|
||||
Integer previousNStep = oaNodeAssigneePO.getPreviousNStep();
|
||||
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.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 previousStepAssigneeSubordinatePosition(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO oaNodeAssigneePO, NodeTypeEnum nodeType) {
|
||||
// 同部门
|
||||
LOG.debug("quickAssignee -> previousStepAssigneeSubordinatePosition:上一步代理人下级岗位");
|
||||
// 当前任务人
|
||||
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("当前代理人没有下级岗位");
|
||||
}
|
||||
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:上一步代理人上级岗位");
|
||||
// 当前代理人
|
||||
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("当前代理人没有上级岗位");
|
||||
}
|
||||
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:上一步代理人同部门");
|
||||
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("同部门下没有其他用户");
|
||||
}
|
||||
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();
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 部门类型
|
||||
*
|
||||
* @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());
|
||||
userTask.setCandidateUsers(existUserIds);
|
||||
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) {
|
||||
|
||||
}
|
||||
|
||||
// 1、nrOfInstances 该会签环节中总共有多少个实例 2、nrOfActiveInstances 当前活动的实例的数量,即还没有 完成的实例数量。 3、nrOfCompletedInstances 已经完成的实例的数量
|
||||
|
||||
// 设置会签
|
||||
// // 获取多实例配置
|
||||
// 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("");
|
||||
// }
|
||||
|
||||
}
|
||||
|
@ -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 + "}";
|
||||
/**
|
||||
* 多实例变量
|
||||
*/
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user