完善代理人任务节点完成处理逻辑
This commit is contained in:
parent
927210cedb
commit
b15e71c77b
@ -1,7 +1,6 @@
|
|||||||
package ink.wgink.module.activiti.listener.task;
|
package ink.wgink.module.activiti.listener.task;
|
||||||
|
|
||||||
import ink.wgink.exceptions.OaNodeException;
|
import ink.wgink.exceptions.OaNodeException;
|
||||||
import ink.wgink.exceptions.SearchException;
|
|
||||||
import ink.wgink.interfaces.department.IDepartmentBaseService;
|
import ink.wgink.interfaces.department.IDepartmentBaseService;
|
||||||
import ink.wgink.interfaces.department.IDepartmentUserBaseService;
|
import ink.wgink.interfaces.department.IDepartmentUserBaseService;
|
||||||
import ink.wgink.interfaces.position.IPositionBaseService;
|
import ink.wgink.interfaces.position.IPositionBaseService;
|
||||||
@ -33,7 +32,6 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -76,7 +74,7 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void notify(DelegateTask delegateTask) {
|
public void notify(DelegateTask delegateTask) {
|
||||||
LOG.debug(">>>> userTask complete");
|
LOG.debug(">>>>>> 代理人任务完成 <<<<<<");
|
||||||
String taskDefinitionKey = delegateTask.getTaskDefinitionKey();
|
String taskDefinitionKey = delegateTask.getTaskDefinitionKey();
|
||||||
String processDefinitionId = delegateTask.getProcessDefinitionId();
|
String processDefinitionId = delegateTask.getProcessDefinitionId();
|
||||||
LOG.debug("查找流程定义");
|
LOG.debug("查找流程定义");
|
||||||
@ -106,28 +104,6 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
multiple(delegateTask, nextUserTask, oaNodeAssigneePO);
|
multiple(delegateTask, nextUserTask, oaNodeAssigneePO);
|
||||||
return;
|
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
|
@Override
|
||||||
@ -147,7 +123,7 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
}
|
}
|
||||||
if (StringUtils.equals(oaNodeAssigneePO.getAssigneeType(), AssigneeTypeEnum.AUTO.getValue())) {
|
if (StringUtils.equals(oaNodeAssigneePO.getAssigneeType(), AssigneeTypeEnum.AUTO.getValue())) {
|
||||||
LOG.debug("assigneeType -> auto");
|
LOG.debug("assigneeType -> auto");
|
||||||
auto(delegateTask, userTask, oaNodeAssigneePO);
|
auto(delegateTask, userTask, oaNodeAssigneePO, NodeTypeEnum.NORMAL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -160,7 +136,25 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
* @param oaNodeAssigneePO
|
* @param oaNodeAssigneePO
|
||||||
*/
|
*/
|
||||||
private void multiple(DelegateTask delegateTask, UserTask userTask, OaNodeAssigneePO 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");
|
LOG.debug("assigneeCount -> single");
|
||||||
String assignee = oaNodeAssigneePO.getAssignee();
|
String assignee = oaNodeAssigneePO.getAssignee();
|
||||||
if (StringUtils.isBlank(assignee)) {
|
if (StringUtils.isBlank(assignee)) {
|
||||||
throw new SearchException("下节点代理人未设置");
|
throw new OaNodeException("下节点代理人未设置");
|
||||||
}
|
}
|
||||||
UserDTO userDTO = userBaseService.get(assignee);
|
UserDTO userDTO = userBaseService.get(assignee);
|
||||||
if (userDTO == null) {
|
if (userDTO == null) {
|
||||||
throw new SearchException("下节点代理人不存在");
|
throw new OaNodeException("下节点代理人不存在");
|
||||||
}
|
}
|
||||||
LOG.debug("设置代理人");
|
LOG.debug("设置普通节点代理人");
|
||||||
userTask.setAssignee(userDTO.getUserId());
|
userTask.setAssignee(userDTO.getUserId());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -189,11 +183,11 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
LOG.debug("assigneeCount -> candidate");
|
LOG.debug("assigneeCount -> candidate");
|
||||||
String candidates = oaNodeAssigneePO.getCandidates();
|
String candidates = oaNodeAssigneePO.getCandidates();
|
||||||
if (StringUtils.isBlank(candidates)) {
|
if (StringUtils.isBlank(candidates)) {
|
||||||
throw new SearchException("下节点候选人未设置");
|
throw new OaNodeException("下节点候选人未设置");
|
||||||
}
|
}
|
||||||
List<UserDTO> userDTOs = userBaseService.listByUserIds(Arrays.asList(candidates.split(",")));
|
List<UserDTO> userDTOs = userBaseService.listByUserIds(Arrays.asList(candidates.split(",")));
|
||||||
if (userDTOs.isEmpty()) {
|
if (userDTOs.isEmpty()) {
|
||||||
throw new SearchException("下节点候选人不存在");
|
throw new OaNodeException("下节点候选人不存在");
|
||||||
}
|
}
|
||||||
LOG.debug("设置候选人");
|
LOG.debug("设置候选人");
|
||||||
userTask.setCandidateUsers(ArrayListUtil.listBeanStringIdValue(userDTOs, "userId", UserDTO.class));
|
userTask.setCandidateUsers(ArrayListUtil.listBeanStringIdValue(userDTOs, "userId", UserDTO.class));
|
||||||
@ -208,15 +202,15 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
* @param userTask
|
* @param userTask
|
||||||
* @param oaNodeAssigneePO
|
* @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())) {
|
if (StringUtils.equals(oaNodeAssigneePO.getAutoAssignType(), AutoAssignTypeEnum.SCOPE.getValue())) {
|
||||||
LOG.debug("autoAssigneeType -> scope");
|
LOG.debug("autoAssigneeType -> scope");
|
||||||
departmentType(delegateTask, userTask, oaNodeAssigneePO);
|
departmentType(delegateTask, userTask, oaNodeAssigneePO, nodeType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(oaNodeAssigneePO.getAutoAssignType(), AutoAssignTypeEnum.QUICK.getValue())) {
|
if (StringUtils.equals(oaNodeAssigneePO.getAutoAssignType(), AutoAssignTypeEnum.QUICK.getValue())) {
|
||||||
LOG.debug("autoAssigneeType -> quick");
|
LOG.debug("autoAssigneeType -> quick");
|
||||||
quickAssignee(delegateTask, userTask, oaNodeAssigneePO);
|
quickAssignee(delegateTask, userTask, oaNodeAssigneePO, nodeType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -227,8 +221,9 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
* @param delegateTask
|
* @param delegateTask
|
||||||
* @param userTask
|
* @param userTask
|
||||||
* @param oaNodeAssigneePO
|
* @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();
|
String quickAssignee = oaNodeAssigneePO.getQuickAssignee();
|
||||||
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.STARTER.getValue())) {
|
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.STARTER.getValue())) {
|
||||||
LOG.debug("quickAssignee -> starter:发起人");
|
LOG.debug("quickAssignee -> starter:发起人");
|
||||||
@ -237,78 +232,225 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.STARTER_SUPERIOR_POSITION.getValue())) {
|
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.STARTER_SUPERIOR_POSITION.getValue())) {
|
||||||
LOG.debug("quickAssignee -> starterSuperiorPosition:发起人上级岗位");
|
starterSuperiorPosition(delegateTask, userTask, oaNodeAssigneePO, nodeType);
|
||||||
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);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUBORDINATE_POSITION.getValue())) {
|
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUBORDINATE_POSITION.getValue())) {
|
||||||
LOG.debug("quickAssignee -> previousStepAssigneeSubordinatePosition:上一步代理人下级岗位");
|
previousStepAssigneeSubordinatePosition(delegateTask, userTask, oaNodeAssigneePO, nodeType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUPERIOR_POSITION.getValue())) {
|
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUPERIOR_POSITION.getValue())) {
|
||||||
LOG.debug("quickAssignee -> previousStepAssigneeSuperiorPosition:上一步代理人上级岗位");
|
previousStepAssigneeSuperiorPosition(delegateTask, userTask, oaNodeAssigneePO, nodeType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUPERIOR_POSITION.getValue())) {
|
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_STEP_ASSIGNEE_SUPERIOR_POSITION.getValue())) {
|
||||||
LOG.debug("quickAssignee -> previousStepAssigneeSameDepartment:上一步代理人同部门");
|
previousStepAssigneeSameDepartment(delegateTask, userTask, oaNodeAssigneePO, nodeType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_N_STEP_ASSIGNEE_SUBORDINATE_POSITION.getValue())) {
|
if (StringUtils.equals(quickAssignee, QuickAssigneeEnum.PREVIOUS_N_STEP_ASSIGNEE_SUBORDINATE_POSITION.getValue())) {
|
||||||
LOG.debug("quickAssignee -> previousNStepAssigneeSubordinatePosition:前N步代理人");
|
previousNStepAssigneeSubordinatePosition(delegateTask, userTask, oaNodeAssigneePO, nodeType);
|
||||||
Integer previousNStep = oaNodeAssigneePO.getPreviousNStep();
|
|
||||||
return;
|
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 delegateTask
|
||||||
* @param userTask
|
* @param userTask
|
||||||
* @param oaNodeAssigneePO
|
* @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())) {
|
if (StringUtils.equals(oaNodeAssigneePO.getDepartmentType(), DepartmentTypeEnum.APPOINT.getValue())) {
|
||||||
LOG.debug("departmentType -> appoint");
|
LOG.debug("departmentType -> appoint");
|
||||||
String departmentIds = oaNodeAssigneePO.getDepartments();
|
String departmentIds = oaNodeAssigneePO.getDepartments();
|
||||||
String roleIds = oaNodeAssigneePO.getRoles();
|
String roleIds = oaNodeAssigneePO.getRoles();
|
||||||
String positionIds = oaNodeAssigneePO.getPositions();
|
String positionIds = oaNodeAssigneePO.getPositions();
|
||||||
if (StringUtils.isBlank(departmentIds) && StringUtils.isBlank(roleIds) && StringUtils.isBlank(positionIds)) {
|
if (StringUtils.isBlank(departmentIds) && StringUtils.isBlank(roleIds) && StringUtils.isBlank(positionIds)) {
|
||||||
throw new SearchException("下节点没有设置部门、角色、职位");
|
throw new OaNodeException("下节点没有设置部门、角色、职位");
|
||||||
}
|
}
|
||||||
if (!StringUtils.isBlank(departmentIds)) {
|
if (!StringUtils.isBlank(departmentIds)) {
|
||||||
LOG.debug("查询部门用户");
|
LOG.debug("查询部门用户");
|
||||||
List<String> departmentUserIds = departmentUserBaseService.listUserId(Arrays.asList(departmentIds.split(",")));
|
List<String> departmentUserIds = departmentUserBaseService.listUserId(Arrays.asList(departmentIds.split(",")));
|
||||||
setDepartmentCandidateUser(delegateTask, userTask, departmentUserIds, roleIds, positionIds);
|
setDepartmentCandidateUser(delegateTask, userTask, departmentUserIds, roleIds, positionIds, nodeType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!StringUtils.isBlank(roleIds)) {
|
if (!StringUtils.isBlank(roleIds)) {
|
||||||
LOG.debug("查询角色用户");
|
LOG.debug("查询角色用户");
|
||||||
List<String> roleUserIds = roleUserBaseService.listUserId(Arrays.asList(roleIds.split(",")));
|
List<String> roleUserIds = roleUserBaseService.listUserId(Arrays.asList(roleIds.split(",")));
|
||||||
setRoleCandidateUser(delegateTask, userTask, roleUserIds, positionIds);
|
setRoleCandidateUser(delegateTask, userTask, roleUserIds, positionIds, nodeType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LOG.debug("查询职位用户");
|
LOG.debug("查询职位用户");
|
||||||
List<String> positionUserIds = positionUserBaseService.listUserId(Arrays.asList(positionIds.split(",")));
|
List<String> positionUserIds = positionUserBaseService.listUserId(Arrays.asList(positionIds.split(",")));
|
||||||
setPositionCandidateUser(delegateTask, userTask, positionUserIds);
|
setPositionCandidateUser(delegateTask, userTask, positionUserIds, nodeType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(oaNodeAssigneePO.getDepartmentType(), DepartmentTypeEnum.BELONG.getValue())) {
|
if (StringUtils.equals(oaNodeAssigneePO.getDepartmentType(), DepartmentTypeEnum.BELONG.getValue())) {
|
||||||
@ -321,7 +463,7 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
throw new OaNodeException("代理人不存在部门");
|
throw new OaNodeException("代理人不存在部门");
|
||||||
}
|
}
|
||||||
List<String> departmentUserIds = departmentUserBaseService.listUserId(departmentIds);
|
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 departmentUserIds
|
||||||
* @param roleIds
|
* @param roleIds
|
||||||
* @param positionIds
|
* @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)) {
|
if (!StringUtils.isBlank(roleIds)) {
|
||||||
LOG.debug("查询角色用户");
|
LOG.debug("查询角色用户");
|
||||||
List<String> roleUserIds = roleUserBaseService.listUserIdByRoleIdsAndUserIds(Arrays.asList(roleIds.split(",")), departmentUserIds);
|
List<String> roleUserIds = roleUserBaseService.listUserIdByRoleIdsAndUserIds(Arrays.asList(roleIds.split(",")), departmentUserIds);
|
||||||
setRoleCandidateUser(delegateTask, userTask, roleUserIds, positionIds);
|
setRoleCandidateUser(delegateTask, userTask, roleUserIds, positionIds, nodeType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setCandidateUsers(delegateTask, userTask, departmentUserIds);
|
setCandidateUsers(delegateTask, userTask, departmentUserIds, nodeType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -351,15 +494,16 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
* @param userTask
|
* @param userTask
|
||||||
* @param roleUserIds
|
* @param roleUserIds
|
||||||
* @param positionIds
|
* @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)) {
|
if (!StringUtils.isBlank(positionIds)) {
|
||||||
LOG.debug("查询职位用户");
|
LOG.debug("查询职位用户");
|
||||||
List<String> positionUserIds = positionUserBaseService.listUserIdByPositionIdsAndUserIds(Arrays.asList(positionIds.split(",")), roleUserIds);
|
List<String> positionUserIds = positionUserBaseService.listUserIdByPositionIdsAndUserIds(Arrays.asList(positionIds.split(",")), roleUserIds);
|
||||||
setPositionCandidateUser(delegateTask, userTask, positionUserIds);
|
setPositionCandidateUser(delegateTask, userTask, positionUserIds, nodeType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setCandidateUsers(delegateTask, userTask, roleUserIds);
|
setCandidateUsers(delegateTask, userTask, roleUserIds, nodeType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -368,9 +512,10 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
* @param delegateTask
|
* @param delegateTask
|
||||||
* @param userTask
|
* @param userTask
|
||||||
* @param positionUserIds
|
* @param positionUserIds
|
||||||
|
* @param nodeType
|
||||||
*/
|
*/
|
||||||
private void setPositionCandidateUser(DelegateTask delegateTask, UserTask userTask, List<String> positionUserIds) {
|
private void setPositionCandidateUser(DelegateTask delegateTask, UserTask userTask, List<String> positionUserIds, NodeTypeEnum nodeType) {
|
||||||
setCandidateUsers(delegateTask, userTask, positionUserIds);
|
setCandidateUsers(delegateTask, userTask, positionUserIds, nodeType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -379,16 +524,21 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
* @param delegateTask
|
* @param delegateTask
|
||||||
* @param userTask
|
* @param userTask
|
||||||
* @param userIds
|
* @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);
|
List<UserDTO> userDTOs = userBaseService.listByUserIds(userIds);
|
||||||
if (userDTOs.isEmpty()) {
|
if (userDTOs.isEmpty()) {
|
||||||
throw new SearchException("下节点候选人不存在");
|
throw new OaNodeException("下节点候选人不存在");
|
||||||
}
|
}
|
||||||
LOG.debug("设置候选人");
|
LOG.debug("设置候选人");
|
||||||
List<String> existUserIds = ArrayListUtil.listBeanStringIdValue(userDTOs, "userId", UserDTO.class);
|
List<String> existUserIds = ArrayListUtil.listBeanStringIdValue(userDTOs, "userId", UserDTO.class);
|
||||||
clearUserIdsCurrentTaskAssignee(existUserIds, delegateTask.getAssignee());
|
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 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>
|
</update>
|
||||||
|
|
||||||
<!-- 详情 -->
|
<!-- 详情 -->
|
||||||
<select id="getPO" parameterType="map" resultMap="">
|
<select id="getPO" parameterType="map" resultMap="oaNodeAssigneePO">
|
||||||
SELECT
|
SELECT
|
||||||
id,
|
id,
|
||||||
node_assignee_id,
|
node_assignee_id,
|
||||||
@ -224,7 +224,7 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<select id="listPO" parameterType="map" resultMap="">
|
<select id="listPO" parameterType="map" resultMap="oaNodeAssigneePO">
|
||||||
SELECT
|
SELECT
|
||||||
id,
|
id,
|
||||||
node_assignee_id,
|
node_assignee_id,
|
||||||
|
Loading…
Reference in New Issue
Block a user