mitao
2025-01-20 93fec20f3cf9d7801eeaa10acef4687ed110d435
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.zzg.system.service.state.impl;
 
import cn.hutool.core.util.ObjectUtil;
import com.aizuda.bpm.engine.ProcessService;
import com.aizuda.bpm.engine.TaskActorProvider;
import com.aizuda.bpm.engine.assist.ObjectUtils;
import com.aizuda.bpm.engine.core.Execution;
import com.aizuda.bpm.engine.core.enums.NodeSetType;
import com.aizuda.bpm.engine.entity.FlwTaskActor;
import com.aizuda.bpm.engine.model.NodeAssignee;
import com.aizuda.bpm.engine.model.NodeModel;
import com.alibaba.fastjson2.JSON;
import com.zzg.common.core.domain.entity.system.SysRole;
import com.zzg.system.service.system.ISysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * 任务参与者控制
 */
@Component
public class ProcessActorProvider implements TaskActorProvider {
 
    @Autowired
    private ISysRoleService iSysRoleService;
 
    @Override
    public List<FlwTaskActor> getTaskActors(NodeModel nodeModel, Execution execution) {
        List<FlwTaskActor> flwTaskActors = new ArrayList();
        if (ObjectUtils.isNotEmpty(nodeModel.getNodeAssigneeList())) {
            Integer actorType = getActorType(nodeModel);
            if (null != actorType && actorType == 1) {
                List<String> roleIds = nodeModel.getNodeAssigneeList().stream().map(NodeAssignee::getId).collect(Collectors.toList());
                List<SysRole> actorList = iSysRoleService.selectRoleByUserIds(roleIds);
                if(ObjectUtils.isNotEmpty(actorList)) {
                    for (SysRole sysRole : actorList) {
                        if(ObjectUtil.isEmpty(sysRole.getRoleName())) {
                            continue;
                        }
                        NodeAssignee nodeAssignee = new NodeAssignee();
                        nodeAssignee.setId(sysRole.getRoleId());
                        nodeAssignee.setName(sysRole.getRoleName());
                        flwTaskActors.add(FlwTaskActor.of(nodeAssignee, 0));
                    }
                }
            }else{
                Iterator var5 = nodeModel.getNodeAssigneeList().iterator();
                while (var5.hasNext()) {
                    NodeAssignee nodeAssignee = (NodeAssignee) var5.next();
                    flwTaskActors.add(FlwTaskActor.of(nodeAssignee, actorType));
                }
            }
        }
        System.out.println(JSON.toJSONString(flwTaskActors));
        return ObjectUtils.isEmpty(flwTaskActors) ? null : flwTaskActors;
    }
 
    private static Integer getActorType(NodeModel nodeModel) {
        if (!NodeSetType.specifyMembers.eq(nodeModel.getSetType()) && !NodeSetType.initiatorThemselves.eq(nodeModel.getSetType()) && !NodeSetType.initiatorSelected.eq(nodeModel.getSetType())) {
            if (NodeSetType.role.eq(nodeModel.getSetType())) {
                return 1;
            } else {
                return NodeSetType.department.eq(nodeModel.getSetType()) ? 2 : null;
            }
        } else {
            return 0;
        }
    }
}