报表基础模块: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,6 +1,5 @@
package com.cf.imes.framework.security.core.util; package com.cf.imes.framework.security.core.util;
import cn.hutool.core.util.StrUtil;
import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants; import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants;
import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.LoginUser;
@@ -44,7 +43,7 @@ public class SecurityFrameworkUtils {
String headerName, String parameterName) { String headerName, String parameterName) {
// 1. 获得 Token。优先级:Header > Parameter // 1. 获得 Token。优先级:Header > Parameter
String token = request.getHeader(headerName); String token = request.getHeader(headerName);
if (StrUtil.isEmpty(token)) { if (StringUtils.isEmpty(token)) {
token = request.getParameter(parameterName); token = request.getParameter(parameterName);
} }
if (!StringUtils.hasText(token)) { if (!StringUtils.hasText(token)) {
@@ -1,7 +1,6 @@
package com.cf.imes.module.report.controller.admin.template.vo; 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.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.validation.template.ReportTemplateTypeInEnum;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
@@ -34,10 +33,6 @@ public class ReportTemplateSaveReqVO {
@Schema(description = "数据源") @Schema(description = "数据源")
private List<ReportDatasourceSaveReqVO> datasource = new ArrayList<>(); private List<ReportDatasourceSaveReqVO> datasource = new ArrayList<>();
@Schema(description = "模板类型,0内置、1自定义", example = "1")
@ReportTemplateTypeInEnum
private Integer type;
@Schema(description = "备注", example = "该模板仅供生产使用") @Schema(description = "备注", example = "该模板仅供生产使用")
private String remark; private String remark;
} }
@@ -58,6 +58,7 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -105,6 +106,8 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
boolean isSuperAdmin = loginUser != null && loginUser.getIsSupAdmin(); boolean isSuperAdmin = loginUser != null && loginUser.getIsSupAdmin();
if (isSuperAdmin) { if (isSuperAdmin) {
template.setType(ReportTemplateTypeEnum.SYSTEM); template.setType(ReportTemplateTypeEnum.SYSTEM);
} else {
template.setType(ReportTemplateTypeEnum.CUSTOM);
} }
templateMapper.insert(template); templateMapper.insert(template);
Long templateId = template.getId(); Long templateId = template.getId();
@@ -249,8 +252,14 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
// 查询模板 // 查询模板
ReportTemplateDO template = templateMapper.selectById(id); ReportTemplateDO template = templateMapper.selectById(id);
String xmlContent = template.getContent(); 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 // 解析xml
ReportDefinition reportDefinition = new ReportParser().parse(new ByteArrayInputStream(xmlContent.getBytes()), template.getName()); ReportDefinition reportDefinition = new ReportParser().parse(is, template.getName());
if (ObjectUtil.isNotNull(template)) { if (ObjectUtil.isNotNull(template)) {
queryDatasource(template.getId(), reportDefinition); 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<ReportDatasetDO> datasetList = datasetService.getDatasetList(ReportDatasetReqVO.builder().datasourceId(ds.getId()).build());
List<DatasetDefinition> datasetDefinitions = new ArrayList<>(); List<DatasetDefinition> datasetDefinitions = new ArrayList<>();
// 忽略转换的字段名,手动转列表
String ignorePropertieName = "datasets";
switch (ds.getType()) { switch (ds.getType()) {
case JDBC, BUILDIN -> { case JDBC, BUILDIN -> {
// 转换对应的ureport对象 // 转换对应的ureport对象
JdbcDatasourceDefinition jdbcDatasourceDefinition = BeanUtil.copyProperties(ds, JdbcDatasourceDefinition.class, "datasets"); JdbcDatasourceDefinition jdbcDatasourceDefinition = BeanUtil.copyProperties(ds, JdbcDatasourceDefinition.class, ignorePropertieName);
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, SqlDatasetDefinition.class)); datasetDefinitions.addAll(BeanUtils.toBean(datasetList, SqlDatasetDefinition.class));
jdbcDatasourceDefinition.setDatasets(datasetDefinitions); jdbcDatasourceDefinition.setDatasets(datasetDefinitions);
datasourceDefinitions.add(jdbcDatasourceDefinition); datasourceDefinitions.add(jdbcDatasourceDefinition);
} }
case SPRING -> { case SPRING -> {
// 转换对应的ureport对象 // 转换对应的ureport对象
SpringBeanDatasourceDefinition springBeanDatasourceDefinition = BeanUtil.copyProperties(ds, SpringBeanDatasourceDefinition.class, "datasets"); SpringBeanDatasourceDefinition springBeanDatasourceDefinition = BeanUtil.copyProperties(ds, SpringBeanDatasourceDefinition.class, ignorePropertieName);
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, BeanDatasetDefinition.class)); datasetDefinitions.addAll(BeanUtils.toBean(datasetList, BeanDatasetDefinition.class));
springBeanDatasourceDefinition.setDatasets(datasetDefinitions); springBeanDatasourceDefinition.setDatasets(datasetDefinitions);
datasourceDefinitions.add(springBeanDatasourceDefinition); datasourceDefinitions.add(springBeanDatasourceDefinition);
} }
case API -> { case API -> {
// 转换对应的ureport对象 // 转换对应的ureport对象
ApiDatasourceDefinition apiDatasourceDefinition = BeanUtil.copyProperties(ds, ApiDatasourceDefinition.class, "datasets"); ApiDatasourceDefinition apiDatasourceDefinition = BeanUtil.copyProperties(ds, ApiDatasourceDefinition.class, ignorePropertieName);
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, ApiDatasetDefinition.class)); datasetDefinitions.addAll(BeanUtils.toBean(datasetList, ApiDatasetDefinition.class));
apiDatasourceDefinition.setDatasets(datasetDefinitions); apiDatasourceDefinition.setDatasets(datasetDefinitions);
datasourceDefinitions.add(apiDatasourceDefinition); datasourceDefinitions.add(apiDatasourceDefinition);
@@ -306,13 +317,12 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
.orderByDesc(ReportTemplateDO::getCreateTime) .orderByDesc(ReportTemplateDO::getCreateTime)
// 不返回content xml,点击具体的模板中返回xml // 不返回content xml,点击具体的模板中返回xml
.select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark); .select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark);
if(!loginUser.getIsSupAdmin()) { if (loginUser != null && Boolean.FALSE.equals(loginUser.getIsSupAdmin())) {
// 普通用户查看机构下的和system模板 // 普通用户查看机构下的和system模板
queryWrapper.or(wrapper -> { queryWrapper.or(wrapper -> wrapper
wrapper.eq(ReportTemplateDO::getOrganId, loginUser.getOrganId()).eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM); .eq(ReportTemplateDO::getOrganId, loginUser.getOrganId())
}).or(wrapper -> { .eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM))
wrapper.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM); .or(wrapper -> wrapper.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM));
});
} }
// 超管查看全部 // 超管查看全部
return templateMapper.selectList(queryWrapper); 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.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO; 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.datasource.ReportDatasourceTypeEnum;
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -30,7 +29,6 @@ public abstract class ReportCommonServiceImplTest {
.id(id) .id(id)
.name("单元测试模板") .name("单元测试模板")
.content(JsonUtil.zipString(TEMPLATE)) .content(JsonUtil.zipString(TEMPLATE))
.type(ReportTemplateTypeEnum.SYSTEM.getType())
.remark(RandomUtils.randomString()) .remark(RandomUtils.randomString())
.datasource(new ArrayList<>()) .datasource(new ArrayList<>())
.build(); .build();