feat: 模版市场

This commit is contained in:
wangjiahao
2023-11-08 10:45:34 +08:00
parent 2b80021f0f
commit 2a881be1fd
12 changed files with 1127 additions and 2 deletions

View File

@@ -0,0 +1,206 @@
package io.dataease.template.dao.auto.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
/**
* <p>
* 仪表板模板表
* </p>
*
* @author fit2cloud
* @since 2023-11-06
*/
@TableName("visualization_template")
public class VisualizationTemplate implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 名称
*/
private String name;
/**
* 父级id
*/
private String pid;
/**
* 层级
*/
private Integer level;
/**
* 模版种类 dataV or dashboard 目录或者文件夹
*/
private String dvType;
/**
* 节点类型 folder or panel 目录或者文件夹
*/
private String nodeType;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
private Long createTime;
/**
* 缩略图
*/
private String snapshot;
/**
* 模版类型 system 系统内置 self 用户自建
*/
private String templateType;
/**
* template 样式
*/
private String templateStyle;
/**
* template 数据
*/
private String templateData;
/**
* 预存数据
*/
private String dynamicData;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
public String getDvType() {
return dvType;
}
public void setDvType(String dvType) {
this.dvType = dvType;
}
public String getNodeType() {
return nodeType;
}
public void setNodeType(String nodeType) {
this.nodeType = nodeType;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public String getSnapshot() {
return snapshot;
}
public void setSnapshot(String snapshot) {
this.snapshot = snapshot;
}
public String getTemplateType() {
return templateType;
}
public void setTemplateType(String templateType) {
this.templateType = templateType;
}
public String getTemplateStyle() {
return templateStyle;
}
public void setTemplateStyle(String templateStyle) {
this.templateStyle = templateStyle;
}
public String getTemplateData() {
return templateData;
}
public void setTemplateData(String templateData) {
this.templateData = templateData;
}
public String getDynamicData() {
return dynamicData;
}
public void setDynamicData(String dynamicData) {
this.dynamicData = dynamicData;
}
@Override
public String toString() {
return "VisualizationTemplate{" +
"id = " + id +
", name = " + name +
", pid = " + pid +
", level = " + level +
", dvType = " + dvType +
", nodeType = " + nodeType +
", createBy = " + createBy +
", createTime = " + createTime +
", snapshot = " + snapshot +
", templateType = " + templateType +
", templateStyle = " + templateStyle +
", templateData = " + templateData +
", dynamicData = " + dynamicData +
"}";
}
}

View File

@@ -0,0 +1,18 @@
package io.dataease.template.dao.auto.mapper;
import io.dataease.template.dao.auto.entity.VisualizationTemplate;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 仪表板模板表 Mapper 接口
* </p>
*
* @author fit2cloud
* @since 2023-11-06
*/
@Mapper
public interface VisualizationTemplateMapper extends BaseMapper<VisualizationTemplate> {
}

View File

@@ -0,0 +1,15 @@
package io.dataease.template.dao.ext;
import io.dataease.api.template.dto.TemplateManageDTO;
import io.dataease.api.template.request.TemplateManageRequest;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface ExtVisualizationTemplateMapper{
List<TemplateManageDTO> findTemplateList(TemplateManageRequest request);
}

View File

@@ -0,0 +1,150 @@
package io.dataease.template.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.dataease.api.template.dto.TemplateManageDTO;
import io.dataease.api.template.request.TemplateManageRequest;
import io.dataease.api.template.vo.VisualizationTemplateVO;
import io.dataease.constant.CommonConstants;
import io.dataease.exception.DEException;
import io.dataease.template.dao.auto.entity.VisualizationTemplate;
import io.dataease.template.dao.auto.mapper.VisualizationTemplateMapper;
import io.dataease.template.dao.ext.ExtVisualizationTemplateMapper;
import io.dataease.utils.AuthUtils;
import io.dataease.utils.BeanUtils;
import io.dataease.visualization.server.StaticResourceServer;
import jakarta.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import static io.dataease.constant.StaticResourceConstants.UPLOAD_URL_PREFIX;
/**
* @author : WangJiaHao
* @date : 2023/11/7 13:29
*/
public class TemplateManageService {
@Resource
private VisualizationTemplateMapper templateMapper;
@Resource
private ExtVisualizationTemplateMapper extTemplateMapper;
@Resource
private StaticResourceServer staticResourceServer;
public List<TemplateManageDTO> templateList(TemplateManageRequest request) {
request.setWithBlobs("N");
List<TemplateManageDTO> templateList = extTemplateMapper.findTemplateList(request);
if (request.getWithChildren()) {
getTreeChildren(templateList);
}
return templateList;
}
public void getTreeChildren(List<TemplateManageDTO> parentTemplateList) {
Optional.ofNullable(parentTemplateList).ifPresent(parent -> parent.forEach(parentTemplate -> {
List<TemplateManageDTO> panelTemplateDTOChildren = extTemplateMapper.findTemplateList(new TemplateManageRequest(parentTemplate.getId()));
parentTemplate.setChildren(panelTemplateDTOChildren);
getTreeChildren(panelTemplateDTOChildren);
}));
}
public List<TemplateManageDTO> getSystemTemplateType(TemplateManageRequest request) {
return extTemplateMapper.findTemplateList(request);
}
@Transactional
public TemplateManageDTO save(TemplateManageRequest request) {
if (StringUtils.isEmpty(request.getId())) {
request.setId(UUID.randomUUID().toString());
request.setCreateTime(System.currentTimeMillis());
request.setCreateBy(AuthUtils.getUser().getUserId().toString());
//如果level 是0第一级指的是分类目录 设置父级为对应的templateType
if (request.getLevel() == 0) {
request.setPid(request.getTemplateType());
String nameCheckResult = this.nameCheck(CommonConstants.OPT_TYPE.INSERT, request.getName(), request.getPid(), null);
if (CommonConstants.CHECK_RESULT.EXIST_ALL.equals(nameCheckResult)) {
DEException.throwException("名称已存在");
}
} else {//模板插入 相同文件夹同名的模板进行覆盖(先删除)
QueryWrapper<VisualizationTemplate> wrapper = new QueryWrapper<>();
wrapper.eq("pid",request.getPid());
wrapper.eq("name",request.getName());
templateMapper.delete(wrapper);
}
if ("template".equals(request.getNodeType())) {
//Store static resource into the server
staticResourceServer.saveFilesToServe(request.getStaticResource());
String snapshotName = "template-" + request.getId() + ".jpeg";
staticResourceServer.saveSingleFileToServe(snapshotName, request.getSnapshot().replace("data:image/jpeg;base64,", ""));
request.setSnapshot("/" + UPLOAD_URL_PREFIX + '/' + snapshotName);
}
VisualizationTemplate template = new VisualizationTemplate();
BeanUtils.copyBean(template,request);
templateMapper.insert(template);
} else {
String nameCheckResult = this.nameCheck(CommonConstants.OPT_TYPE.UPDATE, request.getName(), request.getPid(), request.getId());
if (CommonConstants.CHECK_RESULT.EXIST_ALL.equals(nameCheckResult)) {
DEException.throwException("名称已存在");
}
VisualizationTemplate template = new VisualizationTemplate();
BeanUtils.copyBean(template,request);
templateMapper.updateById(template);
}
TemplateManageDTO templateManageDTO = new TemplateManageDTO();
BeanUtils.copyBean(templateManageDTO, request);
templateManageDTO.setLabel(request.getName());
return templateManageDTO;
}
//名称检查
public String nameCheck(String optType, String name, String pid, String id) {
QueryWrapper<VisualizationTemplate> wrapper = new QueryWrapper<>();
if (CommonConstants.OPT_TYPE.INSERT.equals(optType)) {
wrapper.eq("pid",pid);
wrapper.eq("name",name);
} else if (CommonConstants.OPT_TYPE.UPDATE.equals(optType)) {
wrapper.eq("pid",pid);
wrapper.eq("name",name);
wrapper.ne("id",id);
}
List<VisualizationTemplate> templateList = templateMapper.selectList(wrapper);
if (CollectionUtils.isEmpty(templateList)) {
return CommonConstants.CHECK_RESULT.NONE;
} else {
return CommonConstants.CHECK_RESULT.EXIST_ALL;
}
}
public String nameCheck(TemplateManageRequest request) {
return nameCheck(request.getOptType(), request.getName(), request.getPid(), request.getId());
}
public void delete(String id) {
Assert.notNull(id, "id cannot be null");
templateMapper.deleteById(id);
}
public VisualizationTemplateVO findOne(String panelId) {
VisualizationTemplate template = templateMapper.selectById(panelId);
if(template != null){
VisualizationTemplateVO templateVO = new VisualizationTemplateVO();
BeanUtils.copyBean(templateVO,template);
return templateVO;
}else{
return null;
}
}
public List<TemplateManageDTO> find(TemplateManageRequest request) {
return extTemplateMapper.findTemplateList(request);
}
}

View File

@@ -0,0 +1,17 @@
DROP TABLE IF EXISTS `visualization_template`;
CREATE TABLE `visualization_template` (
`id` varchar(50) NOT NULL COMMENT '主键',
`name` varchar(255) DEFAULT NULL COMMENT '名称',
`pid` varchar(255) DEFAULT NULL COMMENT '父级id',
`level` int(10) DEFAULT NULL COMMENT '层级',
`dv_type` varchar(255) DEFAULT NULL COMMENT '模版种类 dataV or dashboard 目录或者文件夹',
`node_type` varchar(255) DEFAULT NULL COMMENT '节点类型 folder or panel 目录或者文件夹',
`create_by` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_time` bigint(13) DEFAULT NULL COMMENT '创建时间',
`snapshot` longtext COMMENT '缩略图',
`template_type` varchar(255) DEFAULT NULL COMMENT '模版类型 system 系统内置 self 用户自建 ',
`template_style` longtext COMMENT 'template 样式',
`template_data` longtext COMMENT 'template 数据',
`dynamic_data` longtext COMMENT '预存数据',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模板表';

View File

@@ -0,0 +1,17 @@
DROP TABLE IF EXISTS `visualization_template`;
CREATE TABLE `visualization_template` (
`id` varchar(50) NOT NULL COMMENT '主键',
`name` varchar(255) DEFAULT NULL COMMENT '名称',
`pid` varchar(255) DEFAULT NULL COMMENT '父级id',
`level` int(10) DEFAULT NULL COMMENT '层级',
`dv_type` varchar(255) DEFAULT NULL COMMENT '模版种类 dataV or dashboard 目录或者文件夹',
`node_type` varchar(255) DEFAULT NULL COMMENT '节点类型 folder or panel 目录或者文件夹',
`create_by` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_time` bigint(13) DEFAULT NULL COMMENT '创建时间',
`snapshot` longtext COMMENT '缩略图',
`template_type` varchar(255) DEFAULT NULL COMMENT '模版类型 system 系统内置 self 用户自建 ',
`template_style` longtext COMMENT 'template 样式',
`template_data` longtext COMMENT 'template 数据',
`dynamic_data` longtext COMMENT '预存数据',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模板表';