package cn.iocoder.yudao.module.bi.service.decision; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.bi.controller.admin.decision.vo.DecisionKpiDefinitionImportExcelVO; import cn.iocoder.yudao.module.bi.controller.admin.decision.vo.DecisionKpiDefinitionImportReqVO; import cn.iocoder.yudao.module.bi.controller.admin.decision.vo.DecisionKpiDefinitionImportRespVO; import cn.iocoder.yudao.module.bi.controller.admin.decision.vo.DecisionKpiDefinitionPageReqVO; import cn.iocoder.yudao.module.bi.dal.dataobject.decision.BiKpiDefinitionDO; import cn.iocoder.yudao.module.bi.dal.mysql.decision.BiKpiDefinitionMapper; import cn.iocoder.yudao.module.bi.enums.ErrorCodeConstants; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; /** * KPI指标定义 Service 实现 * * @author 超级管理员 */ @Service public class BiKpiDefinitionServiceImpl implements BiKpiDefinitionService { @Resource private BiKpiDefinitionMapper kpiMapper; @Override @Transactional(rollbackFor = Exception.class) public Long createKpi(BiKpiDefinitionDO kpi) { // 校验编码唯一 if (kpiMapper.selectOne(BiKpiDefinitionDO::getCode, kpi.getCode()) != null) { throw exception(ErrorCodeConstants.KPI_CODE_DUPLICATE); } kpiMapper.insert(kpi); return kpi.getId(); } @Override @Transactional(rollbackFor = Exception.class) public void updateKpi(BiKpiDefinitionDO kpi) { // 校验存在 BiKpiDefinitionDO exist = kpiMapper.selectById(kpi.getId()); if (exist == null) { throw exception(ErrorCodeConstants.KPI_NOT_EXISTS); } // 校验编码唯一(排除自身) BiKpiDefinitionDO byCode = kpiMapper.selectOne(BiKpiDefinitionDO::getCode, kpi.getCode()); if (byCode != null && !byCode.getId().equals(kpi.getId())) { throw exception(ErrorCodeConstants.KPI_CODE_DUPLICATE); } kpiMapper.updateById(kpi); } @Override @Transactional(rollbackFor = Exception.class) public void deleteKpi(Long id) { if (kpiMapper.selectById(id) == null) { throw exception(ErrorCodeConstants.KPI_NOT_EXISTS); } kpiMapper.deleteById(id); } @Override public BiKpiDefinitionDO getKpi(Long id) { return kpiMapper.selectById(id); } @Override public BiKpiDefinitionDO getKpiByCode(String code) { return kpiMapper.selectOne(BiKpiDefinitionDO::getCode, code); } @Override public PageResult getKpiPage(DecisionKpiDefinitionPageReqVO pageReq) { return kpiMapper.selectPage(pageReq, new LambdaQueryWrapperX() .likeIfPresent(BiKpiDefinitionDO::getName, pageReq.getName()) .eqIfPresent(BiKpiDefinitionDO::getCategory, pageReq.getCategory()) .eqIfPresent(BiKpiDefinitionDO::getStatus, pageReq.getStatus()) .orderByAsc(BiKpiDefinitionDO::getSort)); } @Override @Transactional(rollbackFor = Exception.class) public DecisionKpiDefinitionImportRespVO importKpiDefinitionList(List importList, DecisionKpiDefinitionImportReqVO importReqVO) { // 1. 校验非空 importList = filterList(importList, item -> StrUtil.isNotBlank(item.getCode())); if (CollUtil.isEmpty(importList)) { throw exception(ErrorCodeConstants.KPI_IMPORT_LIST_IS_EMPTY); } // 2. 逐条处理 DecisionKpiDefinitionImportRespVO respVO = DecisionKpiDefinitionImportRespVO.builder() .createKpiCodes(new ArrayList<>()) .updateKpiCodes(new ArrayList<>()) .failureKpiCodes(new LinkedHashMap<>()) .build(); importList.forEach(item -> { try { BiKpiDefinitionDO exist = kpiMapper.selectOne(BiKpiDefinitionDO::getCode, item.getCode()); if (exist == null) { // 2.1 新增 BiKpiDefinitionDO kpi = BeanUtils.toBean(item, BiKpiDefinitionDO.class); kpiMapper.insert(kpi); respVO.getCreateKpiCodes().add(item.getCode()); return; } // 2.2 已存在,判断是否允许更新 if (!importReqVO.getUpdateSupport()) { respVO.getFailureKpiCodes().put(item.getCode(), StrUtil.format(ErrorCodeConstants.KPI_CODE_EXISTS.getMsg(), item.getCode())); return; } BiKpiDefinitionDO updateObj = BeanUtils.toBean(item, BiKpiDefinitionDO.class) .setId(exist.getId()); kpiMapper.updateById(updateObj); respVO.getUpdateKpiCodes().add(item.getCode()); } catch (ServiceException ex) { respVO.getFailureKpiCodes().put(item.getCode(), ex.getMessage()); } }); return respVO; } }