liu
昨天 dd69dd49c98e2d8fdd9b1c77e97923bde0d57b57
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package cn.iocoder.yudao.module.bpm.service.definition;
 
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.autoapprove.BpmProcessAutoApproveConfigPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.autoapprove.BpmProcessAutoApproveConfigSaveReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessAutoApproveConfigDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmProcessAutoApproveConfigMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
 
import java.util.List;
 
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_AUTO_APPROVE_CONFIG_KEY_DUPLICATE;
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_AUTO_APPROVE_CONFIG_NOT_EXISTS;
 
/**
 * BPM 流程免审批配置 Service 实现类
 *
 * @author 超级管理员
 */
@Slf4j
@Service
@Validated
public class BpmProcessAutoApproveServiceImpl implements BpmProcessAutoApproveService {
 
    @Resource
    private BpmProcessAutoApproveConfigMapper bpmProcessAutoApproveConfigMapper;
 
    @Override
    public boolean isAutoApprove(String processDefinitionKey) {
        if (StrUtil.isBlank(processDefinitionKey)) {
            return false;
        }
        // 一次查出「全局总开关」与该流程自己的开关,避免两次查询
        List<BpmProcessAutoApproveConfigDO> configs = bpmProcessAutoApproveConfigMapper
                .selectListByKeys(List.of(GLOBAL_KEY, processDefinitionKey));
        boolean globalOn = false;
        boolean processOn = false;
        for (BpmProcessAutoApproveConfigDO config : configs) {
            boolean on = Boolean.TRUE.equals(config.getAutoApprove());
            if (GLOBAL_KEY.equals(config.getProcessDefinitionKey())) {
                globalOn = on;
            } else if (processDefinitionKey.equals(config.getProcessDefinitionKey())) {
                processOn = on;
            }
        }
        // 全局总开关优先:开启后所有流程一律免审批;否则看该流程自己的开关
        return globalOn || processOn;
    }
 
    @Override
    public boolean isGlobalAutoApprove() {
        BpmProcessAutoApproveConfigDO config = bpmProcessAutoApproveConfigMapper.selectByProcessDefinitionKey(GLOBAL_KEY);
        return config != null && Boolean.TRUE.equals(config.getAutoApprove());
    }
 
    @Override
    public void updateGlobalAutoApprove(Boolean autoApprove, String remark) {
        updateAutoApproveByKey(GLOBAL_KEY, autoApprove, remark);
    }
 
    @Override
    public void updateAutoApproveByKey(String processDefinitionKey, Boolean autoApprove, String remark) {
        BpmProcessAutoApproveConfigDO config = bpmProcessAutoApproveConfigMapper.selectByProcessDefinitionKey(processDefinitionKey);
        if (config == null) {
            // 首次配置:新增
            bpmProcessAutoApproveConfigMapper.insert(BpmProcessAutoApproveConfigDO.builder()
                    .processDefinitionKey(processDefinitionKey)
                    .autoApprove(autoApprove)
                    .remark(remark)
                    .build());
            return;
        }
        // 已有配置:更新开关
        bpmProcessAutoApproveConfigMapper.updateById(BpmProcessAutoApproveConfigDO.builder()
                .id(config.getId())
                .autoApprove(autoApprove)
                .remark(remark)
                .build());
    }
 
    @Override
    public List<BpmProcessAutoApproveConfigDO> getConfigList() {
        return bpmProcessAutoApproveConfigMapper.selectList();
    }
 
    @Override
    public PageResult<BpmProcessAutoApproveConfigDO> getConfigPage(BpmProcessAutoApproveConfigPageReqVO pageReqVO) {
        return bpmProcessAutoApproveConfigMapper.selectPage(pageReqVO);
    }
 
    @Override
    public Long createConfig(BpmProcessAutoApproveConfigSaveReqVO createReqVO) {
        validateProcessDefinitionKeyUnique(createReqVO);
        BpmProcessAutoApproveConfigDO config = BeanUtils.toBean(createReqVO, BpmProcessAutoApproveConfigDO.class);
        bpmProcessAutoApproveConfigMapper.insert(config);
        return config.getId();
    }
 
    @Override
    public void updateConfig(BpmProcessAutoApproveConfigSaveReqVO updateReqVO) {
        validateConfigExists(updateReqVO.getId());
        validateProcessDefinitionKeyUnique(updateReqVO);
        bpmProcessAutoApproveConfigMapper.updateById(BeanUtils.toBean(updateReqVO, BpmProcessAutoApproveConfigDO.class));
    }
 
    @Override
    public void deleteConfig(Long id) {
        validateConfigExists(id);
        bpmProcessAutoApproveConfigMapper.deleteById(id);
    }
 
    private void validateProcessDefinitionKeyUnique(BpmProcessAutoApproveConfigSaveReqVO reqVO) {
        BpmProcessAutoApproveConfigDO config = bpmProcessAutoApproveConfigMapper.selectByProcessDefinitionKey(reqVO.getProcessDefinitionKey());
        if (config == null || ObjUtil.equal(config.getId(), reqVO.getId())) {
            return;
        }
        throw exception(PROCESS_AUTO_APPROVE_CONFIG_KEY_DUPLICATE, reqVO.getProcessDefinitionKey());
    }
 
    private void validateConfigExists(Long id) {
        if (bpmProcessAutoApproveConfigMapper.selectById(id) == null) {
            throw exception(PROCESS_AUTO_APPROVE_CONFIG_NOT_EXISTS);
        }
    }
 
}