报表基础模块:1、新增模板加载空白xml;2、移除模板type改为后端定义;

This commit is contained in:
gaoqr
2024-08-23 18:51:01 +08:00
parent 4c56f4dbac
commit 5f252426cc
5 changed files with 32 additions and 19 deletions
@@ -1,7 +1,6 @@
package com.cf.imes.module.report.controller.admin.template.vo;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.validation.template.ReportTemplateTypeInEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -34,10 +33,6 @@ public class ReportTemplateSaveReqVO {
@Schema(description = "数据源")
private List<ReportDatasourceSaveReqVO> datasource = new ArrayList<>();
@Schema(description = "模板类型,0内置、1自定义", example = "1")
@ReportTemplateTypeInEnum
private Integer type;
@Schema(description = "备注", example = "该模板仅供生产使用")
private String remark;
}
@@ -58,6 +58,7 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -105,6 +106,8 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
boolean isSuperAdmin = loginUser != null && loginUser.getIsSupAdmin();
if (isSuperAdmin) {
template.setType(ReportTemplateTypeEnum.SYSTEM);
} else {
template.setType(ReportTemplateTypeEnum.CUSTOM);
}
templateMapper.insert(template);
Long templateId = template.getId();
@@ -249,8 +252,14 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
// 查询模板
ReportTemplateDO template = templateMapper.selectById(id);
String xmlContent = template.getContent();
InputStream is;
if (StringUtils.isNotEmpty(xmlContent)) {
is = new ByteArrayInputStream(xmlContent.getBytes());
} else {
is = this.getClass().getClassLoader().getResourceAsStream("templates/template.ureport.xml");
}
// 解析xml
ReportDefinition reportDefinition = new ReportParser().parse(new ByteArrayInputStream(xmlContent.getBytes()), template.getName());
ReportDefinition reportDefinition = new ReportParser().parse(is, template.getName());
if (ObjectUtil.isNotNull(template)) {
queryDatasource(template.getId(), reportDefinition);
}
@@ -271,24 +280,26 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
// 查询数据集
List<ReportDatasetDO> datasetList = datasetService.getDatasetList(ReportDatasetReqVO.builder().datasourceId(ds.getId()).build());
List<DatasetDefinition> datasetDefinitions = new ArrayList<>();
// 忽略转换的字段名,手动转列表
String ignorePropertieName = "datasets";
switch (ds.getType()) {
case JDBC, BUILDIN -> {
// 转换对应的ureport对象
JdbcDatasourceDefinition jdbcDatasourceDefinition = BeanUtil.copyProperties(ds, JdbcDatasourceDefinition.class, "datasets");
JdbcDatasourceDefinition jdbcDatasourceDefinition = BeanUtil.copyProperties(ds, JdbcDatasourceDefinition.class, ignorePropertieName);
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, SqlDatasetDefinition.class));
jdbcDatasourceDefinition.setDatasets(datasetDefinitions);
datasourceDefinitions.add(jdbcDatasourceDefinition);
}
case SPRING -> {
// 转换对应的ureport对象
SpringBeanDatasourceDefinition springBeanDatasourceDefinition = BeanUtil.copyProperties(ds, SpringBeanDatasourceDefinition.class, "datasets");
SpringBeanDatasourceDefinition springBeanDatasourceDefinition = BeanUtil.copyProperties(ds, SpringBeanDatasourceDefinition.class, ignorePropertieName);
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, BeanDatasetDefinition.class));
springBeanDatasourceDefinition.setDatasets(datasetDefinitions);
datasourceDefinitions.add(springBeanDatasourceDefinition);
}
case API -> {
// 转换对应的ureport对象
ApiDatasourceDefinition apiDatasourceDefinition = BeanUtil.copyProperties(ds, ApiDatasourceDefinition.class, "datasets");
ApiDatasourceDefinition apiDatasourceDefinition = BeanUtil.copyProperties(ds, ApiDatasourceDefinition.class, ignorePropertieName);
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, ApiDatasetDefinition.class));
apiDatasourceDefinition.setDatasets(datasetDefinitions);
datasourceDefinitions.add(apiDatasourceDefinition);
@@ -306,13 +317,12 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
.orderByDesc(ReportTemplateDO::getCreateTime)
// 不返回content xml,点击具体的模板中返回xml
.select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark);
if(!loginUser.getIsSupAdmin()) {
if (loginUser != null && Boolean.FALSE.equals(loginUser.getIsSupAdmin())) {
// 普通用户查看机构下的和system模板
queryWrapper.or(wrapper -> {
wrapper.eq(ReportTemplateDO::getOrganId, loginUser.getOrganId()).eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM);
}).or(wrapper -> {
wrapper.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM);
});
queryWrapper.or(wrapper -> wrapper
.eq(ReportTemplateDO::getOrganId, loginUser.getOrganId())
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM))
.or(wrapper -> wrapper.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM));
}
// 超管查看全部
return templateMapper.selectList(queryWrapper);
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<ureport xmlns="http://www.example.org/ureport2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/ureport2 http://www.example.org/ureport2 ">
<cell expand="None" name="A1" col="1" row="1">
<simple-value><![CDATA[]]></simple-value>
<cell-style font-size="10" font-family="宋体" align="left" valign="middle"></cell-style>
</cell>
<row row-number="1" height="18"/>
<column col-number="1" width="80"/>
<paper type="A4" orientation="portrait" paging-mode="fitpage"></paper>
</ureport>
@@ -8,7 +8,6 @@ import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetSaveRe
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
import com.cf.imes.module.report.enums.datasource.ReportDatasourceTypeEnum;
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
import java.util.ArrayList;
import java.util.List;
@@ -30,7 +29,6 @@ public abstract class ReportCommonServiceImplTest {
.id(id)
.name("单元测试模板")
.content(JsonUtil.zipString(TEMPLATE))
.type(ReportTemplateTypeEnum.SYSTEM.getType())
.remark(RandomUtils.randomString())
.datasource(new ArrayList<>())
.build();