|
@@ -0,0 +1,176 @@
|
|
|
+package com.gis.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.lang.tree.Tree;
|
|
|
+import cn.hutool.core.lang.tree.TreeNode;
|
|
|
+import cn.hutool.core.lang.tree.TreeNodeConfig;
|
|
|
+import cn.hutool.core.lang.tree.TreeUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.gis.common.constant.NavigationTypeEnum;
|
|
|
+import com.gis.common.exception.BaseRuntimeException;
|
|
|
+import com.gis.domain.dto.AddWorkNavigationSceneDTO;
|
|
|
+import com.gis.domain.dto.MoveWorkNavigationDTO;
|
|
|
+import com.gis.domain.dto.WorkNavigationDTO;
|
|
|
+import com.gis.domain.dto.WorkNavigationSettingDto;
|
|
|
+import com.gis.domain.entity.WorkNavigationEntity;
|
|
|
+import com.gis.domain.vo.WorkNavigationVo;
|
|
|
+import com.gis.domain.vo.WorkSceneVo;
|
|
|
+import com.gis.service.WorkNavigationService;
|
|
|
+import com.gis.service.WorkNavigationSettingService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class WorkNavigationSettingServiceImpl implements WorkNavigationSettingService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private WorkNavigationService workNavigationService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public WorkNavigationVo addGroup(WorkNavigationDTO dto) {
|
|
|
+
|
|
|
+ WorkNavigationEntity entity = BeanUtil.toBean(dto, WorkNavigationEntity.class);
|
|
|
+ entity.setType(NavigationTypeEnum.GROUP.code());
|
|
|
+ workNavigationService.save(entity);
|
|
|
+
|
|
|
+ return BeanUtil.toBean(entity, WorkNavigationVo.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateNavigation(WorkNavigationDTO dto) {
|
|
|
+ WorkNavigationEntity entity = BeanUtil.toBean(dto, WorkNavigationEntity.class);
|
|
|
+ workNavigationService.updateById(entity);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteNavigation(long id, String workId) {
|
|
|
+
|
|
|
+ List<Long> ids = new ArrayList<>();
|
|
|
+ ids.add(id);
|
|
|
+ WorkNavigationEntity entity = workNavigationService.getById(id);
|
|
|
+ if(Objects.isNull(entity)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String type = entity.getType();
|
|
|
+ if(type.equals(NavigationTypeEnum.GROUP.code())){
|
|
|
+ List<WorkNavigationEntity> workNavigationEntities = workNavigationService.selectByParentId(id);
|
|
|
+ if(CollUtil.isNotEmpty(workNavigationEntities)){
|
|
|
+ workNavigationEntities.forEach(v->ids.add(v.getId()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ workNavigationService.removeByIds(ids);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, List<WorkSceneVo>> listScene(String workId) {
|
|
|
+ List<WorkNavigationEntity> workNavigationEntities = workNavigationService.selectScenes(workId);
|
|
|
+ List<WorkSceneVo> panoList = new ArrayList<>();
|
|
|
+ List<WorkSceneVo> fdkkList = new ArrayList<>();
|
|
|
+ workNavigationEntities.stream().forEach(v->{
|
|
|
+ if(v.getType().equals(NavigationTypeEnum.FDKK.code())) fdkkList.add(BeanUtil.toBean(v, WorkSceneVo.class));
|
|
|
+ if(v.getType().equals(NavigationTypeEnum.PANO.code())) panoList.add(BeanUtil.toBean(v, WorkSceneVo.class));
|
|
|
+ });
|
|
|
+
|
|
|
+ Map<String, List<WorkSceneVo>> result = new HashMap<>();
|
|
|
+ result.put("panoList", panoList);
|
|
|
+ result.put("fdkkList", fdkkList);
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public WorkSceneVo addScene(AddWorkNavigationSceneDTO dto) {
|
|
|
+ this.checkAddScene(dto);
|
|
|
+ WorkNavigationEntity workNavigationEntity = BeanUtil.toBean(dto, WorkNavigationEntity.class);
|
|
|
+ workNavigationService.save(workNavigationEntity);
|
|
|
+ return BeanUtil.toBean(workNavigationEntity, WorkSceneVo.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void checkAddScene(AddWorkNavigationSceneDTO dto){
|
|
|
+ if(dto.getType().equals(NavigationTypeEnum.PANO.code()) && Objects.isNull(dto.getFodderId())){
|
|
|
+ throw new BaseRuntimeException("素材id不能为空");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public WorkSceneVo setInitialScene(long id, String workId) {
|
|
|
+
|
|
|
+ WorkNavigationEntity workNavigationEntity = workNavigationService.getById(id);
|
|
|
+ if(Objects.isNull(workNavigationEntity) || !workId.equals(workNavigationEntity.getWorkId())){
|
|
|
+ throw new BaseRuntimeException("查询不到场景");
|
|
|
+ }
|
|
|
+
|
|
|
+ //重置初始场景
|
|
|
+ workNavigationService.reSetFistSceneByWorkId(workId);
|
|
|
+
|
|
|
+ workNavigationEntity.setIsFirstScene(1);
|
|
|
+ workNavigationService.updateById(workNavigationEntity);
|
|
|
+
|
|
|
+ return BeanUtil.toBean(workNavigationEntity, WorkSceneVo.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Tree<Long>> queryNavigation(String workId) {
|
|
|
+ List<WorkNavigationEntity> workNavigationEntities = workNavigationService.selectByWorkId(workId);
|
|
|
+
|
|
|
+ // 0表示最顶层的id是0
|
|
|
+ // 构建node列表
|
|
|
+ List<TreeNode> nodeList = workNavigationEntities.stream().map(v -> {
|
|
|
+ TreeNode<Long> node = new TreeNode<>(v.getId(), v.getParentId(), v.getName(), v.getSort());
|
|
|
+ Map<String, Object> extra = new HashMap<>();
|
|
|
+ extra.put("type", v.getType());
|
|
|
+ node.setExtra(extra);
|
|
|
+ if (!v.getType().equals(NavigationTypeEnum.GROUP.code())) {
|
|
|
+ extra.put("fodderId", v.getFodderId());
|
|
|
+ extra.put("sceneCode", v.getSceneCode());
|
|
|
+ extra.put("version", v.getVersion());
|
|
|
+ extra.put("icon", v.getIcon());
|
|
|
+ }
|
|
|
+ return node;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ //配置
|
|
|
+ TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
|
|
|
+ // 自定义属性名 都有默认值的
|
|
|
+ treeNodeConfig.setWeightKey("sort");
|
|
|
+ treeNodeConfig.setIdKey("id");
|
|
|
+ // 最大递归深度
|
|
|
+// treeNodeConfig.setDeep(2);
|
|
|
+
|
|
|
+ // 构建node列表
|
|
|
+ List<Tree<Long>> treeNodes = TreeUtil.build(nodeList, 0L, treeNodeConfig,
|
|
|
+ (treeNode, tree) -> {
|
|
|
+ tree.setId((Long) treeNode.getId());
|
|
|
+ tree.setParentId((Long)treeNode.getParentId());
|
|
|
+ tree.setWeight(treeNode.getWeight());
|
|
|
+ tree.setName(treeNode.getName());
|
|
|
+ Map<String, Object> extra = treeNode.getExtra();
|
|
|
+ extra.keySet().stream().forEach(v->{
|
|
|
+ tree.putExtra(v, extra.get(v));
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ return treeNodes;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void noveNavigation(WorkNavigationSettingDto dto) {
|
|
|
+ List<MoveWorkNavigationDTO> list = dto.getList();
|
|
|
+ List<WorkNavigationEntity> workNavigationEntities = BeanUtil.copyToList(list, WorkNavigationEntity.class);
|
|
|
+ workNavigationService.updateBatchById(workNavigationEntities);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public WorkSceneVo getInitialScene(String workId) {
|
|
|
+ WorkNavigationEntity workNavigationEntity = workNavigationService.getOne(new LambdaQueryWrapper<WorkNavigationEntity>().eq(WorkNavigationEntity::getWorkId, workId).eq(WorkNavigationEntity::getIsFirstScene, 1));
|
|
|
+ WorkSceneVo vo = BeanUtil.toBean(workNavigationEntity, WorkSceneVo.class);
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+}
|