forked from github/dataease
Merge pull request #9518 from dataease/pr@dev-v2@feat_inner-template
feat(仪表板): 增加内嵌仪表板相关功能
This commit is contained in:
commit
0fb8a95981
@ -0,0 +1,28 @@
|
||||
package io.dataease.listener;
|
||||
|
||||
import io.dataease.license.utils.LogUtil;
|
||||
import io.dataease.template.manage.TemplateLocalParseManage;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@Order(value = 3)
|
||||
public class TemplateInitListener implements ApplicationListener<ApplicationReadyEvent> {
|
||||
|
||||
@Resource
|
||||
private TemplateLocalParseManage templateLocalParseManage;
|
||||
|
||||
@Override
|
||||
public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
|
||||
LogUtil.info("=====Template init from code [Start]=====");
|
||||
try{
|
||||
templateLocalParseManage.doInit();
|
||||
}catch (Exception e){
|
||||
LogUtil.error("=====Template init from code ERROR=====");
|
||||
}
|
||||
LogUtil.info("=====Template init from code [End]=====");
|
||||
}
|
||||
}
|
@ -0,0 +1,137 @@
|
||||
package io.dataease.template.dao.auto.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @author fit2cloud
|
||||
* @since 2024-05-07
|
||||
*/
|
||||
@TableName("de_template_version")
|
||||
public class DeTemplateVersion implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId("installed_rank")
|
||||
private Integer installedRank;
|
||||
|
||||
private String version;
|
||||
|
||||
private String description;
|
||||
|
||||
private String type;
|
||||
|
||||
private String script;
|
||||
|
||||
private Integer checksum;
|
||||
|
||||
private String installedBy;
|
||||
|
||||
private LocalDateTime installedOn;
|
||||
|
||||
private Integer executionTime;
|
||||
|
||||
private Boolean success;
|
||||
|
||||
public Integer getInstalledRank() {
|
||||
return installedRank;
|
||||
}
|
||||
|
||||
public void setInstalledRank(Integer installedRank) {
|
||||
this.installedRank = installedRank;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(String version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getScript() {
|
||||
return script;
|
||||
}
|
||||
|
||||
public void setScript(String script) {
|
||||
this.script = script;
|
||||
}
|
||||
|
||||
public Integer getChecksum() {
|
||||
return checksum;
|
||||
}
|
||||
|
||||
public void setChecksum(Integer checksum) {
|
||||
this.checksum = checksum;
|
||||
}
|
||||
|
||||
public String getInstalledBy() {
|
||||
return installedBy;
|
||||
}
|
||||
|
||||
public void setInstalledBy(String installedBy) {
|
||||
this.installedBy = installedBy;
|
||||
}
|
||||
|
||||
public LocalDateTime getInstalledOn() {
|
||||
return installedOn;
|
||||
}
|
||||
|
||||
public void setInstalledOn(LocalDateTime installedOn) {
|
||||
this.installedOn = installedOn;
|
||||
}
|
||||
|
||||
public Integer getExecutionTime() {
|
||||
return executionTime;
|
||||
}
|
||||
|
||||
public void setExecutionTime(Integer executionTime) {
|
||||
this.executionTime = executionTime;
|
||||
}
|
||||
|
||||
public Boolean getSuccess() {
|
||||
return success;
|
||||
}
|
||||
|
||||
public void setSuccess(Boolean success) {
|
||||
this.success = success;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "DeTemplateVersion{" +
|
||||
"installedRank = " + installedRank +
|
||||
", version = " + version +
|
||||
", description = " + description +
|
||||
", type = " + type +
|
||||
", script = " + script +
|
||||
", checksum = " + checksum +
|
||||
", installedBy = " + installedBy +
|
||||
", installedOn = " + installedOn +
|
||||
", executionTime = " + executionTime +
|
||||
", success = " + success +
|
||||
"}";
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package io.dataease.template.dao.auto.mapper;
|
||||
|
||||
import io.dataease.template.dao.auto.entity.DeTemplateVersion;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author fit2cloud
|
||||
* @since 2024-05-07
|
||||
*/
|
||||
@Mapper
|
||||
public interface DeTemplateVersionMapper extends BaseMapper<DeTemplateVersion> {
|
||||
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
package io.dataease.template.manage;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import io.dataease.api.visualization.request.DataVisualizationBaseRequest;
|
||||
import io.dataease.license.utils.LogUtil;
|
||||
import io.dataease.template.dao.auto.entity.DeTemplateVersion;
|
||||
import io.dataease.template.dao.auto.mapper.DeTemplateVersionMapper;
|
||||
import io.dataease.utils.JsonUtil;
|
||||
import io.dataease.visualization.server.StaticResourceServer;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.core.io.ResourceLoader;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
import org.springframework.data.repository.init.ResourceReader;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
|
||||
/**
|
||||
* @author : WangJiaHao
|
||||
* @date : 2024/5/7
|
||||
*/
|
||||
@Service
|
||||
public class TemplateLocalParseManage {
|
||||
|
||||
@Resource
|
||||
private StaticResourceServer staticResourceServer;
|
||||
|
||||
@Resource
|
||||
private DeTemplateVersionMapper deTemplateVersionMapper;
|
||||
|
||||
@Resource(type = ResourceLoader.class)
|
||||
private ResourceLoader resourceLoader;
|
||||
|
||||
public void doInit() throws Exception {
|
||||
org.springframework.core.io.Resource[] templateFiles = getAllFilesInResourceDirectory("template");
|
||||
if (templateFiles != null && templateFiles.length > 0) {
|
||||
for (int i = 0; i < templateFiles.length; i++) {
|
||||
org.springframework.core.io.Resource templateFile = templateFiles[i];
|
||||
String templateName = templateFile.getFilename();
|
||||
QueryWrapper<DeTemplateVersion> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("script", templateName);
|
||||
if (!deTemplateVersionMapper.exists(queryWrapper)) {
|
||||
DeTemplateVersion version = new DeTemplateVersion();
|
||||
version.setScript(templateName);
|
||||
version.setInstalledOn(LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES));
|
||||
try {
|
||||
String content = new String(templateFile.getInputStream().readAllBytes());;
|
||||
DataVisualizationBaseRequest template = JsonUtil.parseObject(content, DataVisualizationBaseRequest.class);
|
||||
parseCore(template);
|
||||
version.setSuccess(true);
|
||||
deTemplateVersionMapper.insert(version);
|
||||
} catch (Exception e) {
|
||||
LogUtil.error("De Template Version Error : " + templateName);
|
||||
version.setSuccess(false);
|
||||
deTemplateVersionMapper.insert(version);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void parseCore(DataVisualizationBaseRequest template) {
|
||||
// 解析静态文件并保存
|
||||
staticResourceServer.saveFilesToServe(template.getStaticResource());
|
||||
}
|
||||
|
||||
|
||||
public org.springframework.core.io.Resource[] getAllFilesInResourceDirectory(String directoryName) throws Exception {
|
||||
// 创建一个 PathMatchingResourcePatternResolver 对象
|
||||
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(resourceLoader);
|
||||
|
||||
// 获取 classpath 下 template 目录下所有文件的 Resource 数组
|
||||
org.springframework.core.io.Resource[] resources = resolver.getResources("classpath:template/*");
|
||||
|
||||
return resources;
|
||||
}
|
||||
|
||||
public static String readFileContent(File file) throws IOException {
|
||||
StringBuilder content = new StringBuilder();
|
||||
try (InputStream inputStream = Files.newInputStream(file.toPath());
|
||||
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
|
||||
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
|
||||
String line;
|
||||
while ((line = bufferedReader.readLine()) != null) {
|
||||
content.append(line);
|
||||
}
|
||||
}
|
||||
return content.toString();
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user