mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -110,6 +110,26 @@
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>dom4j</groupId>
|
||||
<artifactId>dom4j</artifactId>
|
||||
<version>${dom4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>${commons-io.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.antlr</groupId>
|
||||
<artifactId>antlr4-runtime</artifactId>
|
||||
<version>${antlr4.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-text</artifactId>
|
||||
<version>${commons-text.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<!-- 设置构建的 jar 包名 -->
|
||||
|
||||
+3
@@ -29,6 +29,9 @@ public class ReportDatasetRespVO {
|
||||
@Schema(description = "动态查询SQL")
|
||||
private String sql;
|
||||
|
||||
@Schema(description = "bean数据源方法名")
|
||||
private String method;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private LocalDateTime createTime;
|
||||
|
||||
|
||||
+12
-4
@@ -1,11 +1,13 @@
|
||||
package com.cf.imes.module.report.controller.admin.template;
|
||||
|
||||
import com.bstek.designer.bean.ReportDefinitionWrapper;
|
||||
import com.bstek.ureport.export.html.HtmlReport;
|
||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewPageParametersVO;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateRespVO;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
|
||||
import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
|
||||
import com.cf.imes.module.report.service.template.ReportTemplateService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
@@ -63,9 +65,8 @@ public class ReportTemplateController {
|
||||
@Operation(summary = "获得报表模板信息")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1")
|
||||
@PreAuthorize("@ss.hasPermission('report:template:query')")
|
||||
public CommonResult<ReportTemplateRespVO> getReportTemplate(@PathVariable("id") Long id) {
|
||||
ReportTemplateDO template = templateService.getReportTemplate(id);
|
||||
return success(BeanUtils.toBean(template, ReportTemplateRespVO.class));
|
||||
public CommonResult<ReportDefinitionWrapper> getReportTemplate(@PathVariable("id") Long id) {
|
||||
return success(templateService.getReportTemplateDefinition(id));
|
||||
}
|
||||
|
||||
@GetMapping("/templates")
|
||||
@@ -75,4 +76,11 @@ public class ReportTemplateController {
|
||||
ReportTemplateReqVO reqVO = new ReportTemplateReqVO(name, null);
|
||||
return success(BeanUtils.toBean(templateService.getReportTemplateList(reqVO), ReportTemplateRespVO.class));
|
||||
}
|
||||
|
||||
@PostMapping("/template/preview")
|
||||
@Operation(summary = "模板预览")
|
||||
@PreAuthorize("@ss.hasPermission('report:template:query')")
|
||||
public CommonResult<HtmlReport> preview(@Valid @RequestBody ReportTemplatePreviewPageParametersVO pageParametersVO) {
|
||||
return success(templateService.preview(pageParametersVO));
|
||||
}
|
||||
}
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.cf.imes.module.report.controller.admin.template.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author Gqr
|
||||
* @since 2024/7/19 9:22
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "管理后台 - 报表模板预览分页参数 Request VO")
|
||||
public class ReportTemplatePreviewPageParametersVO {
|
||||
@Schema(description = "页码",example = "1")
|
||||
private int pageIndex;
|
||||
|
||||
@Schema(description = "预览参数")
|
||||
private ReportTemplatePreviewParametersVO params;
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
package com.cf.imes.module.report.controller.admin.template.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Gqr
|
||||
* @since 2024/7/19 9:22
|
||||
*/
|
||||
@Schema(description = "管理后台 - 报表模板预览参数 Request VO")
|
||||
@Data
|
||||
public class ReportTemplatePreviewParametersVO {
|
||||
/**
|
||||
* 报表内容
|
||||
*/
|
||||
@Schema(description = "报表内容")
|
||||
@NotNull(message = "预览报表内容不能为空")
|
||||
private String content;
|
||||
|
||||
/**
|
||||
* 报表名称
|
||||
*/
|
||||
@Schema(description = "报表名称")
|
||||
private String reportName;
|
||||
|
||||
/**
|
||||
* 表单参数
|
||||
*/
|
||||
@Schema(description = "表单参数")
|
||||
private Map<String, Object> query = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 表单对应组件唯一标识
|
||||
*/
|
||||
@Schema(description = "表单对应组件唯一标识")
|
||||
private Map<String, String> component = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 图表图片目前用于PDF导出
|
||||
*/
|
||||
@Schema(description = "图表图片目前用于PDF导出")
|
||||
private Map<String, String> chartImages = new HashMap<>();
|
||||
|
||||
}
|
||||
+5
@@ -46,6 +46,11 @@ public class ReportDatasetDO extends BaseDO {
|
||||
* 数据源id
|
||||
*/
|
||||
private Long datasourceId;
|
||||
|
||||
/**
|
||||
* bean数据源方法名
|
||||
*/
|
||||
private String method;
|
||||
/**
|
||||
* 动态查询SQL
|
||||
*/
|
||||
|
||||
+20
-1
@@ -1,5 +1,8 @@
|
||||
package com.cf.imes.module.report.service.template;
|
||||
|
||||
import com.bstek.designer.bean.ReportDefinitionWrapper;
|
||||
import com.bstek.ureport.export.html.HtmlReport;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewPageParametersVO;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
|
||||
import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
|
||||
@@ -37,13 +40,21 @@ public interface ReportTemplateService {
|
||||
void deleteReportTemplate(Long id);
|
||||
|
||||
/**
|
||||
* 获得报表模板信息
|
||||
* 获取报表模板信息
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 报表模板信息
|
||||
*/
|
||||
ReportTemplateDO getReportTemplate(Long id);
|
||||
|
||||
/**
|
||||
* 获取模板定义信息(xml+数据源)
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
ReportDefinitionWrapper getReportTemplateDefinition(Long id);
|
||||
|
||||
/**
|
||||
* 获得报表模板信息列表
|
||||
*
|
||||
@@ -51,4 +62,12 @@ public interface ReportTemplateService {
|
||||
* @return 报表模板信息列表
|
||||
*/
|
||||
List<ReportTemplateDO> getReportTemplateList(ReportTemplateReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 模板预览
|
||||
*
|
||||
* @param pageParametersVO
|
||||
* @return
|
||||
*/
|
||||
HtmlReport preview(ReportTemplatePreviewPageParametersVO pageParametersVO);
|
||||
}
|
||||
|
||||
+109
@@ -1,14 +1,36 @@
|
||||
package com.cf.imes.module.report.service.template;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.URLUtil;
|
||||
import com.bstek.designer.bean.PreviewPageParameters;
|
||||
import com.bstek.designer.bean.PreviewParameters;
|
||||
import com.bstek.designer.bean.ReportDefinitionWrapper;
|
||||
import com.bstek.ureport.build.paging.Page;
|
||||
import com.bstek.ureport.definition.Paper;
|
||||
import com.bstek.ureport.definition.ReportDefinition;
|
||||
import com.bstek.ureport.definition.dataset.BeanDatasetDefinition;
|
||||
import com.bstek.ureport.definition.dataset.DatasetDefinition;
|
||||
import com.bstek.ureport.definition.dataset.SqlDatasetDefinition;
|
||||
import com.bstek.ureport.definition.datasource.DatasourceDefinition;
|
||||
import com.bstek.ureport.definition.datasource.JdbcDatasourceDefinition;
|
||||
import com.bstek.ureport.definition.datasource.SpringBeanDatasourceDefinition;
|
||||
import com.bstek.ureport.export.PageBuilder;
|
||||
import com.bstek.ureport.export.ReportRender;
|
||||
import com.bstek.ureport.export.SinglePageData;
|
||||
import com.bstek.ureport.export.html.HtmlProducer;
|
||||
import com.bstek.ureport.export.html.HtmlReport;
|
||||
import com.bstek.ureport.export.html.SearchFormData;
|
||||
import com.bstek.ureport.model.Report;
|
||||
import com.bstek.ureport.parser.ReportParser;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetSaveReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewPageParametersVO;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
|
||||
import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO;
|
||||
@@ -24,8 +46,11 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.ByteArrayInputStream;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
|
||||
@@ -160,6 +185,43 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
return template;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReportDefinitionWrapper getReportTemplateDefinition(Long id) {
|
||||
// 查询模板
|
||||
ReportTemplateDO template = templateMapper.selectById(id);
|
||||
String xmlContent = template.getContent();
|
||||
// 解析xml
|
||||
ReportDefinition reportDefinition = new ReportParser().parse(new ByteArrayInputStream(xmlContent.getBytes()), template.getName());
|
||||
List<DatasourceDefinition> datasourceDefinitions = new ArrayList<>();
|
||||
if (ObjectUtil.isNotNull(template)) {
|
||||
// 查询数据源
|
||||
List<ReportDatasourceDO> datasourceList = datasourceService.getTemplateDatasourceList(ReportDatasourceReqVO.builder().templateId(template.getId()).build());
|
||||
for (ReportDatasourceDO ds : datasourceList) {
|
||||
// 查询数据集
|
||||
List<ReportDatasetDO> datasetList = datasetService.getDatasetList(ReportDatasetReqVO.builder().datasourceId(ds.getId()).build());
|
||||
List<DatasetDefinition> datasetDefinitions = new ArrayList<>();
|
||||
switch (ds.getType()) {
|
||||
case JDBC, BUILDIN -> {
|
||||
// 转换对应的ureport对象
|
||||
JdbcDatasourceDefinition jdbcDatasourceDefinition = BeanUtils.toBean(ds, JdbcDatasourceDefinition.class);
|
||||
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, SqlDatasetDefinition.class));
|
||||
jdbcDatasourceDefinition.setDatasets(datasetDefinitions);
|
||||
datasourceDefinitions.add(jdbcDatasourceDefinition);
|
||||
}
|
||||
case SPRING -> {
|
||||
// 转换对应的ureport对象
|
||||
SpringBeanDatasourceDefinition springBeanDatasourceDefinition = BeanUtils.toBean(ds, SpringBeanDatasourceDefinition.class);
|
||||
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, BeanDatasetDefinition.class));
|
||||
springBeanDatasourceDefinition.setDatasets(datasetDefinitions);
|
||||
datasourceDefinitions.add(springBeanDatasourceDefinition);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
reportDefinition.setDatasources(datasourceDefinitions);
|
||||
return new ReportDefinitionWrapper(reportDefinition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReportTemplateDO> getReportTemplateList(ReportTemplateReqVO reqVO) {
|
||||
return templateMapper.selectList(new LambdaQueryWrapperX<ReportTemplateDO>()
|
||||
@@ -169,4 +231,51 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
// 不返回content xml,点击具体的模板中返回xml
|
||||
.select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark));
|
||||
}
|
||||
|
||||
@Override
|
||||
public HtmlReport preview(ReportTemplatePreviewPageParametersVO pageParametersVO) {
|
||||
HtmlProducer htmlProducer = new HtmlProducer();
|
||||
ReportRender reportRender = new ReportRender();
|
||||
HtmlReport htmlReport = new HtmlReport();
|
||||
|
||||
// 转换ureport参数
|
||||
PreviewPageParameters pageParameters = BeanUtils.toBean(pageParametersVO,PreviewPageParameters.class);
|
||||
PreviewParameters params = pageParameters.getParams();
|
||||
|
||||
// 解析xml
|
||||
ReportDefinition reportDefinition = reportRender.getReportDefinition(URLUtil.decode(params.getContent()), CharsetUtil.UTF_8);
|
||||
|
||||
Map<String, Object> parameters = params.getQuery();
|
||||
|
||||
Paper paper = reportDefinition.getPaper();
|
||||
Report report;
|
||||
String html;
|
||||
// 构建html
|
||||
if (paper.isPageEnabled()) {
|
||||
// todo 后续有可能做成缓存
|
||||
report = reportRender.render(reportDefinition, parameters);
|
||||
int pageIndex = pageParameters.getPageIndex();
|
||||
SinglePageData pageData = PageBuilder.buildSinglePageData(pageIndex, report);
|
||||
List<Page> pages = pageData.getPages();
|
||||
html = htmlProducer.produce(report.getContext(), pages, pageData.getColumnMargin(), false);
|
||||
htmlReport.setTotalPage(pageData.getTotalPages());
|
||||
htmlReport.setPageIndex(pageIndex);
|
||||
if (reportDefinition.getPaper().isColumnEnabled()) {
|
||||
htmlReport.setColumn(reportDefinition.getPaper().getColumnCount());
|
||||
}
|
||||
} else {
|
||||
report = reportRender.render(reportDefinition, parameters);
|
||||
html = htmlProducer.produce(report);
|
||||
}
|
||||
htmlReport.setChartDatas(report.getContext().getChartDataMap().values());
|
||||
htmlReport.setContent(html);
|
||||
htmlReport.setStyle(reportDefinition.getStyle());
|
||||
SearchFormData searchFormData = reportDefinition.buildSearchFormData(report.getContext().getDatasetMap(),parameters);
|
||||
htmlReport.setSearchFormData(searchFormData);
|
||||
htmlReport.setReportAlign(report.getPaper().getHtmlReportAlign().name());
|
||||
htmlReport.setBgImage(report.getPaper().getBgImage());
|
||||
htmlReport.setFreeze(reportDefinition.getFreeze());
|
||||
htmlReport.setFloatImages(reportDefinition.getFloatImages());
|
||||
return htmlReport;
|
||||
}
|
||||
}
|
||||
|
||||
BIN
Binary file not shown.
@@ -20,4 +20,11 @@
|
||||
report 模块,主要实现数据可视化报表等功能。
|
||||
</description>
|
||||
|
||||
|
||||
<properties>
|
||||
<dom4j.version>1.6.1</dom4j.version>
|
||||
<commons-io.version>2.11.0</commons-io.version>
|
||||
<antlr4.version>4.5.3</antlr4.version>
|
||||
<commons-text.version>1.10.0</commons-text.version>
|
||||
</properties>
|
||||
</project>
|
||||
|
||||
Reference in New Issue
Block a user