package io.dataease.service.dataset; import io.dataease.base.domain.DatasetGroup; import io.dataease.base.domain.DatasetGroupExample; import io.dataease.base.domain.DatasetTable; import io.dataease.base.mapper.DatasetGroupMapper; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; import io.dataease.controller.request.dataset.DataSetGroupRequest; import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.dto.dataset.DataSetGroupDTO; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; /** * @Author gin * @Date 2021/2/20 8:10 下午 */ @Service public class DataSetGroupService { @Resource private DatasetGroupMapper datasetGroupMapper; @Resource private DataSetTableService dataSetTableService; public DataSetGroupDTO save(DatasetGroup datasetGroup) { checkName(datasetGroup); if (StringUtils.isEmpty(datasetGroup.getId())) { datasetGroup.setId(UUID.randomUUID().toString()); datasetGroup.setCreateBy(AuthUtils.getUser().getUsername()); datasetGroup.setCreateTime(System.currentTimeMillis()); datasetGroupMapper.insert(datasetGroup); } else { datasetGroupMapper.updateByPrimaryKeySelective(datasetGroup); } DataSetGroupDTO dataSetGroupDTO = new DataSetGroupDTO(); BeanUtils.copyBean(dataSetGroupDTO, datasetGroup); dataSetGroupDTO.setLabel(dataSetGroupDTO.getName()); return dataSetGroupDTO; } public void delete(String id) throws Exception{ DataSetGroupRequest datasetGroup = new DataSetGroupRequest(); datasetGroup.setId(id); List tree = tree(datasetGroup); List ids = new ArrayList<>(); getAllId(tree, ids); DatasetGroupExample datasetGroupExample = new DatasetGroupExample(); datasetGroupExample.createCriteria().andIdIn(ids); datasetGroupMapper.deleteByExample(datasetGroupExample); // 删除场景下的表和字段 deleteTableAndField(ids); } public DatasetGroup getScene(String id) { return datasetGroupMapper.selectByPrimaryKey(id); } public void deleteTableAndField(List sceneIds) throws Exception{ for (String sceneId : sceneIds) { DataSetTableRequest dataSetTableRequest = new DataSetTableRequest(); dataSetTableRequest.setSceneId(sceneId); List list = dataSetTableService.list(dataSetTableRequest); for (DatasetTable table : list) { dataSetTableService.delete(table.getId()); } } } public List tree(DataSetGroupRequest datasetGroup) { DatasetGroupExample datasetGroupExample = new DatasetGroupExample(); DatasetGroupExample.Criteria criteria = datasetGroupExample.createCriteria(); criteria.andCreateByEqualTo(AuthUtils.getUser().getUsername()); if (StringUtils.isNotEmpty(datasetGroup.getName())) { criteria.andNameLike("%" + datasetGroup.getName() + "%"); } if (StringUtils.isNotEmpty(datasetGroup.getType())) { criteria.andTypeEqualTo(datasetGroup.getType()); } if (StringUtils.isNotEmpty(datasetGroup.getId())) { criteria.andIdEqualTo(datasetGroup.getId()); } else { criteria.andLevelEqualTo(0); } datasetGroupExample.setOrderByClause(datasetGroup.getSort()); List datasetGroups = datasetGroupMapper.selectByExample(datasetGroupExample); List DTOs = datasetGroups.stream().map(ele -> { DataSetGroupDTO dto = new DataSetGroupDTO(); BeanUtils.copyBean(dto, ele); dto.setLabel(ele.getName()); return dto; }).collect(Collectors.toList()); getAll(DTOs, datasetGroup); return DTOs; } public void getAll(List list, DataSetGroupRequest datasetGroup) { for (DataSetGroupDTO obj : list) { DatasetGroupExample datasetGroupExample = new DatasetGroupExample(); DatasetGroupExample.Criteria criteria = datasetGroupExample.createCriteria(); criteria.andCreateByEqualTo(AuthUtils.getUser().getUsername()); if (StringUtils.isNotEmpty(datasetGroup.getName())) { criteria.andNameLike("%" + datasetGroup.getName() + "%"); } if (StringUtils.isNotEmpty(datasetGroup.getType())) { criteria.andTypeEqualTo(datasetGroup.getType()); } criteria.andPidEqualTo(obj.getId()); datasetGroupExample.setOrderByClause(datasetGroup.getSort()); List datasetGroups = datasetGroupMapper.selectByExample(datasetGroupExample); List DTOs = datasetGroups.stream().map(ele -> { DataSetGroupDTO dto = new DataSetGroupDTO(); BeanUtils.copyBean(dto, ele); dto.setLabel(ele.getName()); return dto; }).collect(Collectors.toList()); obj.setChildren(DTOs); if (CollectionUtils.isNotEmpty(DTOs)) { getAll(DTOs, datasetGroup); } } } public List getAllId(List list, List ids) { for (DataSetGroupDTO dto : list) { ids.add(dto.getId()); if (CollectionUtils.isNotEmpty(dto.getChildren())) { getAllId(dto.getChildren(), ids); } } return ids; } private void checkName(DatasetGroup datasetGroup) { DatasetGroupExample datasetGroupExample = new DatasetGroupExample(); DatasetGroupExample.Criteria criteria = datasetGroupExample.createCriteria(); if (StringUtils.isNotEmpty(datasetGroup.getPid())) { criteria.andPidEqualTo(datasetGroup.getPid()); } if (StringUtils.isNotEmpty(datasetGroup.getType())) { criteria.andTypeEqualTo(datasetGroup.getType()); } if (StringUtils.isNotEmpty(datasetGroup.getName())) { criteria.andNameEqualTo(datasetGroup.getName()); } if (StringUtils.isNotEmpty(datasetGroup.getId())) { criteria.andIdNotEqualTo(datasetGroup.getId()); } List list = datasetGroupMapper.selectByExample(datasetGroupExample); if (list.size() > 0) { throw new RuntimeException("Name can't repeat in same group."); } } public List getParents(String id) { List list = new ArrayList<>(); DatasetGroup datasetGroup = datasetGroupMapper.selectByPrimaryKey(id); list.add(datasetGroup); getParent(list, datasetGroup); Collections.reverse(list); return list; } public void getParent(List list, DatasetGroup datasetGroup) { if (StringUtils.isNotEmpty(datasetGroup.getPid())) { DatasetGroup d = datasetGroupMapper.selectByPrimaryKey(datasetGroup.getPid()); list.add(d); getParent(list, d); } } }