forked from github/dataease
110 lines
4.5 KiB
Java
110 lines
4.5 KiB
Java
package io.dataease.service.panel;
|
|
|
|
import io.dataease.base.domain.PanelGroupWithBLOBs;
|
|
import io.dataease.base.domain.PanelViewLinkage;
|
|
import io.dataease.base.domain.PanelViewLinkageField;
|
|
import io.dataease.base.mapper.PanelGroupMapper;
|
|
import io.dataease.base.mapper.PanelViewLinkageFieldMapper;
|
|
import io.dataease.base.mapper.PanelViewLinkageMapper;
|
|
import io.dataease.base.mapper.ext.ExtPanelViewLinkageMapper;
|
|
import io.dataease.commons.utils.AuthUtils;
|
|
import io.dataease.controller.request.panel.PanelLinkageRequest;
|
|
import io.dataease.dto.LinkageInfoDTO;
|
|
import io.dataease.dto.PanelViewLinkageDTO;
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.util.Assert;
|
|
|
|
import javax.annotation.Resource;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* Author: wangjiahao
|
|
* Date: 8/4/21
|
|
* Description:
|
|
*/
|
|
@Service
|
|
public class PanelViewLinkageService {
|
|
|
|
@Resource
|
|
private PanelViewLinkageMapper panelViewLinkageMapper;
|
|
|
|
@Resource
|
|
private PanelViewLinkageFieldMapper panelViewLinkageFieldMapper;
|
|
|
|
@Resource
|
|
private ExtPanelViewLinkageMapper extPanelViewLinkageMapper;
|
|
|
|
@Resource
|
|
private PanelGroupMapper panelGroupMapper;
|
|
|
|
|
|
public Map<String, PanelViewLinkageDTO> getViewLinkageGather(PanelLinkageRequest request) {
|
|
if(CollectionUtils.isNotEmpty(request.getTargetViewIds())){
|
|
List<PanelViewLinkageDTO> linkageDTOList = extPanelViewLinkageMapper.getViewLinkageGather(request.getPanelId(),request.getSourceViewId(),request.getTargetViewIds());
|
|
Map<String, PanelViewLinkageDTO> result = linkageDTOList.stream()
|
|
.collect(Collectors.toMap(PanelViewLinkageDTO::getTargetViewId,PanelViewLinkageDTO->PanelViewLinkageDTO));
|
|
return result;
|
|
}
|
|
return new HashMap<>();
|
|
}
|
|
|
|
@Transactional
|
|
public void saveLinkage(PanelLinkageRequest request){
|
|
Long updateTime = System.currentTimeMillis();
|
|
Map<String, PanelViewLinkageDTO> linkageInfo = request.getLinkageInfo();
|
|
String sourceViewId = request.getSourceViewId();
|
|
String panelId = request.getPanelId();
|
|
|
|
Assert.notNull(sourceViewId,"source View ID can not be null");
|
|
Assert.notNull(panelId,"panelId can not be null");
|
|
|
|
//去掉source view 的信息
|
|
linkageInfo.remove(sourceViewId);
|
|
|
|
// 清理原有关系
|
|
extPanelViewLinkageMapper.deleteViewLinkageField(panelId,sourceViewId);
|
|
extPanelViewLinkageMapper.deleteViewLinkage(panelId,sourceViewId);
|
|
|
|
//重新建立关系
|
|
for(Map.Entry<String, PanelViewLinkageDTO> entry : linkageInfo.entrySet()){
|
|
String targetViewId = entry.getKey();
|
|
PanelViewLinkageDTO linkageDTO = entry.getValue();
|
|
List<PanelViewLinkageField> linkageFields = linkageDTO.getLinkageFields();
|
|
|
|
if(CollectionUtils.isNotEmpty(linkageFields)&&linkageDTO.isLinkageActive()){
|
|
String linkageId = UUID.randomUUID().toString();
|
|
PanelViewLinkage linkage = new PanelViewLinkage();
|
|
linkage.setId(linkageId);
|
|
linkage.setPanelId(panelId);
|
|
linkage.setSourceViewId(sourceViewId);
|
|
linkage.setTargetViewId(targetViewId);
|
|
linkage.setUpdatePeople(AuthUtils.getUser().getUsername());
|
|
linkage.setUpdateTime(updateTime);
|
|
panelViewLinkageMapper.insert(linkage);
|
|
|
|
linkageFields.stream().forEach(linkageField->{
|
|
linkageField.setId(UUID.randomUUID().toString());
|
|
linkageField.setLinkageId(linkageId);
|
|
linkageField.setUpdateTime(updateTime);
|
|
panelViewLinkageFieldMapper.insert(linkageField);
|
|
});
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
public Map<String, List<String>> getPanelAllLinkageInfo(String panelId) {
|
|
PanelGroupWithBLOBs panelInfo = panelGroupMapper.selectByPrimaryKey(panelId);
|
|
if(panelInfo!=null && StringUtils.isNotEmpty(panelInfo.getSource())){
|
|
panelId=panelInfo.getSource();
|
|
}
|
|
List<LinkageInfoDTO> info = extPanelViewLinkageMapper.getPanelAllLinkageInfo(panelId);
|
|
return Optional.ofNullable(info).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(LinkageInfoDTO::getSourceInfo,LinkageInfoDTO::getTargetInfoList));
|
|
}
|
|
|
|
}
|