报表基础模块:通用预览接口支持表单参数检查

This commit is contained in:
gaoqr
2025-02-13 17:41:05 +08:00
parent 5fc6529a8f
commit ee9cadecf3
@@ -25,6 +25,9 @@ import com.bstek.ureport.definition.datasource.ApiDatasourceDefinition;
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.definition.searchform.Component;
import com.bstek.ureport.definition.searchform.InputComponent;
import com.bstek.ureport.definition.searchform.SearchForm;
import com.bstek.ureport.exception.ReportComputeException;
import com.bstek.ureport.exception.ReportException;
import com.bstek.ureport.export.ExportUtils;
@@ -78,6 +81,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@@ -437,8 +441,6 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
@Override
public HtmlReport commonPreview(ReportTemplateCommonPreviewReqVO reqVO) {
// 检查查询参数中的空值
checkQueryNotEmpty(reqVO.getQuery());
// 查询模板
ReportTemplateDO reportTemplateDO = templateMapper.selectById(reqVO.getTemplateId());
if (ObjectUtil.isNull(reportTemplateDO)) {
@@ -458,13 +460,38 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
ReportRender reportRender = new ReportRender();
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, false);
// 增加多租户参数
Map<String, Object> parameters = params.getQuery();
// 检查表单配置
checkSearchForm(reportDefinition.getSearchForm(), parameters);
// 增加多租户参数
tenantParamsUtils.prepareTenantParam(parameters);
Report report = reportRender.render(reportDefinition, parameters);
return htmlProducer.produce(reportDefinition, report);
}
/**
* 检查报表模板定义的表单参数是否为空
*
* @param searchForm 模板定义的表单参数
* @param parameters 表单查询参数
*/
private void checkSearchForm(SearchForm searchForm, Map<String, Object> parameters) {
if (ObjectUtil.isNotNull(searchForm)) {
List<Component> components = Optional.ofNullable(searchForm.getComponents()).orElse(new ArrayList<>());
for (Component component : components) {
InputComponent inputComponent = (InputComponent) component;
if (ObjectUtil.isNotNull(inputComponent)) {
String bindParameter = inputComponent.getBindParameter();
if (StringUtils.isNotEmpty(bindParameter) && !parameters.containsKey(bindParameter)) {
throw ServiceExceptionUtil.exception(TEMPLATE_PREIVEW_QUERYPARAM_EMPTY, bindParameter);
}
}
}
}
}
@Override
public void print(ReportTemplatePreviewReqVO reqVO, HttpServletResponse response) {
// 自定义请求vo转ureport对象