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 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 getConfigList() { return bpmProcessAutoApproveConfigMapper.selectList(); } @Override public PageResult 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); } } }