package cn.iocoder.yudao.module.bi.service.config; 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.config.vo.BiChartConfigImportExcelVO; import cn.iocoder.yudao.module.bi.controller.admin.config.vo.BiChartConfigImportReqVO; import cn.iocoder.yudao.module.bi.controller.admin.config.vo.BiChartConfigImportRespVO; import cn.iocoder.yudao.module.bi.dal.dataobject.BiChartConfigDO; import cn.iocoder.yudao.module.bi.dal.dataobject.BiDashboardDO; import cn.iocoder.yudao.module.bi.dal.dataobject.BiDataSourceConfigDO; import cn.iocoder.yudao.module.bi.dal.mysql.BiChartConfigMapper; import cn.iocoder.yudao.module.bi.dal.mysql.BiDashboardMapper; import cn.iocoder.yudao.module.bi.dal.mysql.BiDataSourceConfigMapper; import cn.iocoder.yudao.module.bi.enums.ErrorCodeConstants; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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; /** * 图表配置 Service 实现 * * @author 超级管理员 */ @Service public class BiChartConfigServiceImpl implements BiChartConfigService { @Resource private BiChartConfigMapper mapper; @Resource private BiDashboardMapper dashboardMapper; @Resource private BiDataSourceConfigMapper biDataSourceConfigMapper; @Override public Long create(BiChartConfigDO config) { mapper.insert(config); return config.getId(); } @Override public void update(BiChartConfigDO config) { validateExists(config.getId()); mapper.updateById(config); } @Override public void delete(Long id) { validateExists(id); mapper.deleteById(id); } @Override public BiChartConfigDO get(Long id) { return mapper.selectById(id); } @Override public PageResult getPage(Long dashboardId, String name, Integer pageNo, Integer pageSize) { IPage page = mapper.selectPage(new Page<>(pageNo, pageSize), new LambdaQueryWrapperX() .eqIfPresent(BiChartConfigDO::getDashboardId, dashboardId) .likeIfPresent(BiChartConfigDO::getName, name) .orderByAsc(BiChartConfigDO::getSort)); return new PageResult<>(page.getRecords(), page.getTotal()); } @Override @Transactional(rollbackFor = Exception.class) public BiChartConfigImportRespVO importChartConfigList(List importList, BiChartConfigImportReqVO importReqVO) { // 1. 校验非空 importList = filterList(importList, item -> StrUtil.isNotBlank(item.getName())); if (CollUtil.isEmpty(importList)) { throw exception(ErrorCodeConstants.BI_CHART_CONFIG_IMPORT_LIST_IS_EMPTY); } // 2. 逐条处理 BiChartConfigImportRespVO respVO = BiChartConfigImportRespVO.builder() .createChartConfigNames(new ArrayList<>()) .updateChartConfigNames(new ArrayList<>()) .failureChartConfigNames(new LinkedHashMap<>()) .build(); importList.forEach(item -> { try { // 2.1 解析所属仪表盘 BiDashboardDO dashboard = StrUtil.isBlank(item.getDashboardName()) ? null : dashboardMapper.selectByName(item.getDashboardName()); if (dashboard == null) { throw exception(ErrorCodeConstants.BI_CHART_CONFIG_IMPORT_DASHBOARD_NOT_EXISTS, item.getDashboardName()); } // 2.2 解析数据源 BiDataSourceConfigDO dataSource = StrUtil.isBlank(item.getDataSourceName()) ? null : biDataSourceConfigMapper.selectByName(item.getDataSourceName()); if (dataSource == null) { throw exception(ErrorCodeConstants.BI_CHART_CONFIG_IMPORT_DATA_SOURCE_NOT_EXISTS, item.getDataSourceName()); } // 2.3 判断是否存在 BiChartConfigDO exist = mapper.selectByNameAndDashboardId(item.getName(), dashboard.getId()); if (exist == null) { // 2.3.1 新增 BiChartConfigDO config = BeanUtils.toBean(item, BiChartConfigDO.class) .setDashboardId(dashboard.getId()) .setDataSourceId(dataSource != null ? dataSource.getId() : null); mapper.insert(config); respVO.getCreateChartConfigNames().add(item.getName()); return; } // 2.3.2 已存在,判断是否允许更新 if (!importReqVO.getUpdateSupport()) { respVO.getFailureChartConfigNames().put(item.getName(), StrUtil.format(ErrorCodeConstants.BI_CHART_CONFIG_NAME_EXISTS.getMsg(), item.getName())); return; } BiChartConfigDO updateObj = BeanUtils.toBean(item, BiChartConfigDO.class) .setId(exist.getId()) .setDashboardId(dashboard.getId()) .setDataSourceId(dataSource != null ? dataSource.getId() : null); mapper.updateById(updateObj); respVO.getUpdateChartConfigNames().add(item.getName()); } catch (ServiceException ex) { respVO.getFailureChartConfigNames().put(item.getName(), ex.getMessage()); } }); return respVO; } private void validateExists(Long id) { if (mapper.selectById(id) == null) { throw exception(ErrorCodeConstants.BI_CHART_CONFIG_NOT_EXISTS); } } }