package cn.iocoder.yudao.module.bi.service.decision; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 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 static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** * 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)); } }