package com.gccloud.dataroom.core.module.map.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gccloud.common.exception.GlobalException;
import com.gccloud.common.utils.BeanConvertUtils;
import com.gccloud.common.utils.JSON;
import com.gccloud.common.utils.QueryWrapperUtils;
import com.gccloud.dataroom.core.module.map.dto.DataRoomMapRepeatDTO;
import com.gccloud.dataroom.core.module.map.vo.DataRoomMapVO;
import com.gccloud.dataroom.core.module.map.vo.MapChildVO;
import com.gccloud.dataroom.core.module.map.dao.DataRoomMapDao;
import com.gccloud.dataroom.core.module.map.dto.DataRoomMapDTO;
import com.gccloud.dataroom.core.module.map.dto.MapSearchDTO;
import com.gccloud.dataroom.core.module.map.entity.DataRoomMapEntity;
import com.gccloud.dataroom.core.module.map.service.IDataRoomMapService;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author hongyang
* @version 1.0
* @date 2023/8/31 14:08
*/
@Service
public class DataRoomMapServiceImpl extends ServiceImpl<DataRoomMapDao, DataRoomMapEntity> implements IDataRoomMapService {
public static final int YES = 1;
public static final int NO = 0;
@Override
public List<DataRoomMapVO> getList(MapSearchDTO searchDTO) {
if (StringUtils.isNotBlank(searchDTO.getSearchKey())) {
searchDTO.setParentId(null);
}
LambdaQueryWrapper<DataRoomMapEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(DataRoomMapEntity::getParentId);
List<DataRoomMapEntity> list = this.list(queryWrapper);
Set<String> parentIds = list.stream().map(DataRoomMapEntity::getParentId).collect(Collectors.toSet());
LambdaQueryWrapper<DataRoomMapEntity> wrapper = QueryWrapperUtils.wrapperLike(new LambdaQueryWrapper<>(), searchDTO.getSearchKey(), DataRoomMapEntity::getName, DataRoomMapEntity::getMapCode);
wrapper.eq(searchDTO.getLevel() != null, DataRoomMapEntity::getLevel, searchDTO.getLevel());
wrapper.eq(StringUtils.isNotBlank(searchDTO.getParentId()), DataRoomMapEntity::getParentId, searchDTO.getParentId());
wrapper.eq(searchDTO.getUploadedGeoJson() != null, DataRoomMapEntity::getUploadedGeoJson, searchDTO.getUploadedGeoJson());
List<DataRoomMapEntity> entityList = this.list(wrapper);
List<String> idList = entityList.stream().map(DataRoomMapEntity::getId).collect(Collectors.toList());
List<DataRoomMapVO> voList = Lists.newArrayList();
for (DataRoomMapEntity entity : entityList) {
// 如果地图的直接父级也在列表中,那么不返回该地图
if (idList.contains(entity.getParentId())) {
continue;
}
DataRoomMapVO mapVO = BeanConvertUtils.convert(entity, DataRoomMapVO.class);
mapVO.setHasChildren(parentIds.contains(entity.getId()));
voList.add(mapVO);
}
return voList;
// return this.baseMapper.getList(searchDTO);
}
@Override
public List<DataRoomMapVO> getAvailableTree(Integer level) {
// 根据层级,如果某个地图的某个子级(或子级的子级...)也符合该层级,那么把该地图也返回
LambdaQueryWrapper<DataRoomMapEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(DataRoomMapEntity::getId, DataRoomMapEntity::getLevel, DataRoomMapEntity::getParentId,
DataRoomMapEntity::getMapCode, DataRoomMapEntity::getName, DataRoomMapEntity::getUploadedGeoJson);
queryWrapper.le(DataRoomMapEntity::getLevel, level);
List<DataRoomMapEntity> list = list(queryWrapper);
// 转成树形结构
return this.convertToTree(list, level);
}
/**
* 转树形结构
* @param list
* @return
*/
private List<DataRoomMapVO> convertToTree(List<DataRoomMapEntity> list, Integer targetLevel) {
List<DataRoomMapVO> voList = BeanConvertUtils.convert(list, DataRoomMapVO.class);
// 根节点
List<DataRoomMapVO> rootList = Lists.newArrayList();
// 组装id为key,地图为value的map
Map<String, DataRoomMapVO> map = new HashMap<>();
voList.forEach(vo -> map.put(vo.getId(), vo));
// 目标层级的地图
List<DataRoomMapVO> targetLevelList = voList.stream().filter(vo -> vo.getLevel().equals(targetLevel)).collect(Collectors.toList());
// 目标层级的地图,以及其父级地图...
List<DataRoomMapVO> match = Lists.newArrayList(targetLevelList);
for (DataRoomMapVO mapVO : targetLevelList) {
mapVO.setDisabled(!mapVO.getUploadedGeoJson().equals(YES));
if (mapVO.getLevel().equals(0)) {
// 已经是最顶级了,没有父级了
continue;
}
DataRoomMapVO parent = map.get(mapVO.getParentId());
if(parent == null) {
continue;
}
// 将目标层级的地图,以及其父级地图...加入到match中
this.getParentMap(parent, map, match);
}
for (DataRoomMapVO vo : match) {
if (vo.getParentId().equals(SUPER_PARENT_ID)) {
rootList.add(vo);
continue;
}
DataRoomMapVO parent = map.get(vo.getParentId());
if (parent == null) {
continue;
}
if (parent.getChildren() == null) {
parent.setChildren(Lists.newArrayList());
}
parent.getChildren().add(vo);
}
return rootList;
}
/**
* 获取地图的父级地图,以及父级地图的父级地图...
* @param parentMap
* @param mapIdMap
* @param match
*/
private void getParentMap(DataRoomMapVO parentMap, Map<String, DataRoomMapVO> mapIdMap, List<DataRoomMapVO> match) {
if (parentMap == null) {
return;
}
if (match.contains(parentMap)) {
// 已经包含了,不需要再加入了
return;
}
match.add(parentMap);
if (parentMap.getLevel().equals(0)) {
// 已经是最顶级了,没有父级了
return;
}
DataRoomMapVO parent = mapIdMap.get(parentMap.getParentId());
this.getParentMap(parent, mapIdMap, match);
}
@Override
public String add(DataRoomMapDTO mapDTO) {
if (StringUtils.isBlank(mapDTO.getParentId())) {
mapDTO.setParentId(SUPER_PARENT_ID);
}
if (StringUtils.isBlank(mapDTO.getMapCode())) {
throw new GlobalException("地图编码不能为空");
}
DataRoomMapEntity mapEntity = BeanConvertUtils.convert(mapDTO, DataRoomMapEntity.class);
if (StringUtils.isNotBlank(mapEntity.getGeoJson())) {
mapEntity.setUploadedGeoJson(YES);
} else {
mapEntity.setUploadedGeoJson(NO);
}
this.save(mapEntity);
if (mapDTO.getAutoParseNextLevel().equals(YES) && mapEntity.getUploadedGeoJson().equals(YES)) {
// 自动从geoJson中解析下一级的基础数据,保存到数据库,将geoJson上传状态置为false
this.parseNextLevelAndSave(mapEntity, mapEntity.getGeoJson());
}
return mapEntity.getId();
}
@Override
public void update(DataRoomMapDTO mapDTO) {
if (StringUtils.isBlank(mapDTO.getId())) {
throw new GlobalException("地图id不能为空");
}
DataRoomMapEntity old = this.getB
没有合适的资源?快使用搜索试试~ 我知道了~
基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的大屏设计器
共938个文件
vue:248个
js:216个
png:123个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 70 浏览量
2024-04-08
17:07:24
上传
评论
收藏 41.28MB ZIP 举报
温馨提示
DataRoom是一款基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的大屏设计器,具备大屏设计、预览能力,支持MySQL、Oracle、PostgreSQL、MSSQL、JSON、JS、HTTP、Groovy等数据集接入,使用简单,完全免费,代码开源。
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的大屏设计器 (938个子文件)
.babelrc 283B
bsTheme.css 13KB
metroStyle.css 9KB
zTree.css 4KB
treePackUp.css 2KB
iconfont.css 2KB
zTreeSelect.css 799B
index.css 525B
.env.development 582B
Dockerfile 902B
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.editorconfig 243B
.eslintignore 70B
metro.gif 3KB
loading.gif 381B
.gitignore 7KB
.gitignore 6KB
.gitkeep 15B
.gitkeep 12B
.gitkeep 0B
.gitkeep 0B
.env.history 226B
index.html 3KB
favicon.ico 2KB
DataRoomMapServiceImpl.java 19KB
DataMigrationTest.java 16KB
DataRoomPageServiceImpl.java 15KB
BizComponentServiceImpl.java 10KB
BaseChartDataService.java 9KB
DataRoomPageController.java 9KB
DataRoomMapController.java 7KB
GetResourceSqlTest.java 6KB
PageTemplateController.java 6KB
ChartDataController.java 6KB
DataRoomLocalFileServiceImpl.java 6KB
BizComponentController.java 4KB
DataRoomFileController.java 4KB
IBasePageService.java 4KB
SwaggerBootstrapConfig.java 4KB
DataRoomPageDTO.java 4KB
TypeServiceImpl.java 4KB
PageDesignConstant.java 3KB
ScreenFlyMapChart.java 3KB
DataRoomPagePreviewServiceImpl.java 3KB
ScreenMapChart.java 3KB
ScreenInputChart.java 3KB
PageTemplateServiceImpl.java 3KB
TypeController.java 3KB
ScreenTablesChart.java 3KB
DataRoomFileServiceImpl.java 3KB
IDataRoomMapService.java 2KB
DataRoomGlobalExceptionHandler.java 2KB
ScreenBorderChart.java 2KB
RemoteComponentChart.java 2KB
ScreenMarqueeChart.java 2KB
Permission.java 2KB
ChartMockData.java 2KB
Chart.java 2KB
EchartsComponentChart.java 2KB
BasePageDTOTypeHandler.java 2KB
ChartTabChart.java 2KB
ScreenButtonChart.java 2KB
DataRoomObjectMapperConfiguration.java 2KB
PageEntity.java 2KB
ScreenScrollBoardChart.java 2KB
Btn.java 2KB
ScreenTimePickerChart.java 2KB
DatasetExtendServiceImpl.java 2KB
ScreenDigitalFlopChart.java 2KB
CorsBeanConfig.java 2KB
DataSetDataSource.java 2KB
ScreenSelectChart.java 2KB
ChartDataVO.java 2KB
IDataRoomPageService.java 1KB
ScreenDecorationChart.java 1KB
BizComponentEntity.java 1KB
CustomComponentChart.java 1KB
DataRoomFileEntity.java 1KB
ScreenDateTimePickerChart.java 1KB
IBizComponentService.java 1KB
ChartDataSearchDTO.java 1KB
PagePermissionController.java 1KB
Webjars.java 1KB
Linkage.java 1KB
ScreenLinkChart.java 1KB
Field.java 1KB
ScreenTimeCountDownChart.java 1KB
DataRoomPermissionClient.java 1KB
DataRoomApplication.java 1KB
DataRoomConst.java 1KB
ThemeSwitcherChart.java 1KB
PageTemplateEntity.java 1KB
共 938 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6723
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功