mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
报表优化:1、数据集保存字段列表数量限制30改为100;2、ureport查询租户不再限制非超管,超管也支持租户字段;3、数据集获取表优化、字段保存和预览支持租户字段;
This commit is contained in:
+1
-1
@@ -56,7 +56,7 @@ public class ReportDatasetSaveReqVO implements Serializable {
|
||||
private List<ReportDatasetParameterVO> parameters = new ArrayList<>();
|
||||
|
||||
@Schema(description = "字段列表")
|
||||
@Size(max = 30, message = "字段列表数量不能超过30个")
|
||||
@Size(max = 100, message = "字段列表数量不能超过100个")
|
||||
@Valid
|
||||
private List<ReportDatasetFieldVO> fields = new ArrayList<>();
|
||||
}
|
||||
|
||||
+6
-3
@@ -2,7 +2,6 @@ package com.cf.imes.module.report.controller.admin.datasource;
|
||||
|
||||
import com.bstek.common.utils.MultipleJdbcTemplate;
|
||||
import com.bstek.datasource.bean.DataSourceInfo;
|
||||
import com.bstek.datasource.bean.PreviewParams;
|
||||
import com.bstek.datasource.service.DataSourceService;
|
||||
import com.bstek.ureport.definition.dataset.Field;
|
||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||
@@ -14,6 +13,7 @@ import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasource
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceTestConnReqVO;
|
||||
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
|
||||
import com.cf.imes.module.report.service.datasource.ReportDatasourceService;
|
||||
import com.cf.imes.module.report.utils.TenantParamsUtils;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@@ -51,6 +51,9 @@ public class ReportDatasourceController {
|
||||
@Resource
|
||||
private DataSourceService ureportDataSourceService;
|
||||
|
||||
@Resource
|
||||
private TenantParamsUtils tenantParamsUtils;
|
||||
|
||||
@PutMapping("/datasource")
|
||||
@Operation(summary = "创建报表数据源")
|
||||
@PreAuthorize("@ss.hasPermission('report:design')")
|
||||
@@ -134,13 +137,13 @@ public class ReportDatasourceController {
|
||||
@Operation(summary = "获取数据源表字段")
|
||||
@PreAuthorize("@ss.hasPermission('report:design')")
|
||||
public CommonResult<List<Field>> getDatasourceTableFields(@RequestBody @Valid ReportDatasourcePreviewReqVO reqVO) {
|
||||
return success(datasourceService.getTableFields(BeanUtils.toBean(reqVO, PreviewParams.class)));
|
||||
return success(datasourceService.getTableFields(tenantParamsUtils.prepareTenantParam(reqVO)));
|
||||
}
|
||||
|
||||
@PostMapping("/datasource/preview")
|
||||
@Operation(summary = "数据源预览")
|
||||
@PreAuthorize("@ss.hasPermission('report:design')")
|
||||
public CommonResult<Map<String, Object>> previewData(@RequestBody @Valid ReportDatasourcePreviewReqVO reqVO) {
|
||||
return success(ureportDataSourceService.previewData(BeanUtils.toBean(reqVO, PreviewParams.class)));
|
||||
return success(ureportDataSourceService.previewData(tenantParamsUtils.prepareTenantParam(reqVO)));
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -24,7 +24,7 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
public class ReportDatasourcePreviewReqVO {
|
||||
@Schema(description = "数据源连接信息")
|
||||
@NotNull
|
||||
@NotNull(message = "数据源连接信息不能为空")
|
||||
@Valid
|
||||
private ReportDatasourceTestConnReqVO info;
|
||||
|
||||
@@ -37,4 +37,8 @@ public class ReportDatasourcePreviewReqVO {
|
||||
@Size(max = 30, message = "查询参数列表数量不能超过30个")
|
||||
@Valid
|
||||
private List<ReportDatasourceParameterVO> parameters;
|
||||
|
||||
@Schema(description = "数据源编号")
|
||||
@NotNull(message = "数据源编号不能为空")
|
||||
private Long datasourceId;
|
||||
}
|
||||
|
||||
+1
-2
@@ -13,7 +13,6 @@ import com.bstek.datasource.bean.PreviewParams;
|
||||
import com.bstek.ureport.definition.dataset.Field;
|
||||
import com.bstek.ureport.definition.dataset.Parameter;
|
||||
import com.bstek.ureport.definition.dataset.SqlDatasetDefinition;
|
||||
import com.bstek.ureport.definition.dataset.TenantParams;
|
||||
import com.bstek.ureport.utils.ProcedureUtils;
|
||||
import com.cf.imes.framework.common.exception.ServiceException;
|
||||
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
||||
@@ -237,7 +236,7 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
Map<String, Object> pmap = sqlDatasetDefinition.buildParameters(params);
|
||||
String sqlForUse = sqlDatasetDefinition.parseSql(pmap, new TenantParams());
|
||||
String sqlForUse = sqlDatasetDefinition.parseSql(pmap, previewParams.getTenantParams());
|
||||
if (ProcedureUtils.isProcedure(sqlForUse)) {
|
||||
return ProcedureUtils.procedureColumnsQuery(sqlForUse, pmap, conn);
|
||||
}
|
||||
|
||||
+5
-42
@@ -35,7 +35,6 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.security.core.LoginUser;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.report.config.CfReportProperties;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateRespVO;
|
||||
@@ -47,6 +46,7 @@ import com.cf.imes.module.report.dal.mysql.dataset.ReportDatasetMapper;
|
||||
import com.cf.imes.module.report.dal.mysql.datasource.ReportDatasourceMapper;
|
||||
import com.cf.imes.module.report.dal.mysql.template.ReportTemplateMapper;
|
||||
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
|
||||
import com.cf.imes.module.report.utils.TenantParamsUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -66,7 +66,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_BUILDIN_OPERATION_PERMISSION_ERROR;
|
||||
@@ -95,7 +94,7 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
private static final String UTF8_CHARSET = CharsetUtil.UTF_8;
|
||||
|
||||
@Resource
|
||||
private CfReportProperties cfReportProperties;
|
||||
private TenantParamsUtils tenantParamsUtils;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@@ -380,47 +379,11 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
|
||||
Map<String, Object> parameters = params.getQuery();
|
||||
// 增加多租户参数
|
||||
prepareTenantParam(parameters);
|
||||
tenantParamsUtils.prepareTenantParam(parameters);
|
||||
Report report = reportRender.render(reportDefinition, parameters);
|
||||
return htmlProducer.produce(reportDefinition, report);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 往parameters中增加租户相关参数
|
||||
*
|
||||
* @param parameters
|
||||
*/
|
||||
private void prepareTenantParam(Map<String, Object> parameters) {
|
||||
Long userOrganId = SecurityFrameworkUtils.getUserOrganId();
|
||||
if (Boolean.FALSE.equals(SecurityFrameworkUtils.isSuperAdmin())) {
|
||||
// 根据前端传递的数据集id,判断是不是内置数据源下的,是就把name传给ureport
|
||||
List<Long> datasetIds = (List) parameters.get("datasetIds");
|
||||
if (CollUtil.isNotEmpty(datasetIds)) {
|
||||
// 内置数据集名称列表
|
||||
List<String> buildinDsNames = new ArrayList<>();
|
||||
// 遍历获取所有上级数据源
|
||||
List<ReportDatasetDO> reportDatasetDOS = datasetMapper.selectNormalDatasetList(datasetIds.stream().collect(Collectors.toSet()));
|
||||
for (ReportDatasetDO datasetDO : reportDatasetDOS) {
|
||||
Long datasourceId = datasetDO.getDatasourceId();
|
||||
// 查询数据源,如果是内置数据源则把数据集的name传给ureport
|
||||
// 机构下 + 内置数据源查询
|
||||
ReportDatasourceDO datasourceDO = datasourceMapper.selectNormalDatasourceById(datasourceId, userOrganId);
|
||||
if (ObjectUtil.isNotNull(datasourceDO) && ObjectUtil.equal(datasourceDO.getBuildinType(), ReportTemplateTypeEnum.SYSTEM)) {
|
||||
buildinDsNames.add(datasetDO.getName());
|
||||
}
|
||||
}
|
||||
if (CollUtil.isNotEmpty(buildinDsNames)) {
|
||||
parameters.put("buildinDsNames", buildinDsNames);
|
||||
}
|
||||
}
|
||||
// imes多租户业务表表名列表
|
||||
parameters.put("tenantTableNames", cfReportProperties.getTenantTableNames());
|
||||
// 用户组织id
|
||||
parameters.put("organId", userOrganId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(ReportTemplatePreviewReqVO reqVO, HttpServletResponse response) {
|
||||
// 自定义请求vo转ureport对象
|
||||
@@ -431,7 +394,7 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
|
||||
Map<String, Object> query = params.getQuery();
|
||||
// 增加多租户参数
|
||||
prepareTenantParam(query);
|
||||
tenantParamsUtils.prepareTenantParam(query);
|
||||
Report report = reportRender.render(reportDefinition, query);
|
||||
Map<String, String> chartImages = params.getChartImages();
|
||||
report.setChartImages(chartImages);
|
||||
@@ -461,7 +424,7 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
|
||||
Map<String, Object> query = params.getQuery();
|
||||
// 增加多租户参数
|
||||
prepareTenantParam(query);
|
||||
tenantParamsUtils.prepareTenantParam(query);
|
||||
Report report = reportRender.render(reportDefinition, query);
|
||||
Map<String, String> chartImages = params.getChartImages();
|
||||
report.setChartImages(chartImages);
|
||||
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
package com.cf.imes.module.report.utils;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.bstek.datasource.bean.PreviewParams;
|
||||
import com.bstek.ureport.definition.dataset.TenantParams;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.report.config.CfReportProperties;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourcePreviewReqVO;
|
||||
import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO;
|
||||
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
|
||||
import com.cf.imes.module.report.dal.mysql.dataset.ReportDatasetMapper;
|
||||
import com.cf.imes.module.report.dal.mysql.datasource.ReportDatasourceMapper;
|
||||
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 租户参数工具类
|
||||
*
|
||||
* @author Gqr
|
||||
* @since 2024/11/27 10:32
|
||||
*/
|
||||
@Component
|
||||
public class TenantParamsUtils {
|
||||
|
||||
@Resource
|
||||
private ReportDatasourceMapper datasourceMapper;
|
||||
|
||||
@Resource
|
||||
private ReportDatasetMapper datasetMapper;
|
||||
|
||||
@Resource
|
||||
private CfReportProperties cfReportProperties;
|
||||
|
||||
/**
|
||||
* 根据数据源id构造租户对象
|
||||
*
|
||||
* @param reqVO
|
||||
*/
|
||||
public PreviewParams prepareTenantParam(ReportDatasourcePreviewReqVO reqVO) {
|
||||
PreviewParams previewParams = BeanUtils.toBean(reqVO, PreviewParams.class);
|
||||
Long datasourceId = reqVO.getDatasourceId();
|
||||
TenantParams tenantParams = new TenantParams();
|
||||
Long userOrganId = SecurityFrameworkUtils.getUserOrganId();
|
||||
// 根据前端传递的数据源id,判断是不是内置数据源,是就把所有其下的datasetname传给ureport
|
||||
ReportDatasourceDO datasourceDO = datasourceMapper.selectNormalDatasourceById(datasourceId, userOrganId);
|
||||
if (ObjectUtil.isNotNull(datasourceDO) && ObjectUtil.equal(datasourceDO.getBuildinType(), ReportTemplateTypeEnum.SYSTEM)) {
|
||||
List<ReportDatasetDO> datasetDOList = datasetMapper.selectList(new LambdaQueryWrapperX<ReportDatasetDO>().in(ReportDatasetDO::getDatasourceId, datasourceId));
|
||||
if (CollUtil.isNotEmpty(datasetDOList)) {
|
||||
tenantParams.setBuildinDsNames(datasetDOList.stream().map(ReportDatasetDO::getName).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
// 用户组织id
|
||||
tenantParams.setOrganId(userOrganId);
|
||||
// imes多租户业务表表名列表
|
||||
tenantParams.setTenantTableNames(cfReportProperties.getTenantTableNames());
|
||||
previewParams.setTenantParams(tenantParams);
|
||||
return previewParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* 往parameters中增加租户相关参数
|
||||
*
|
||||
* @param parameters
|
||||
*/
|
||||
public void prepareTenantParam(Map<String, Object> parameters) {
|
||||
Long userOrganId = SecurityFrameworkUtils.getUserOrganId();
|
||||
// 根据前端传递的数据集id,判断是不是内置数据源下的,是就把name传给ureport
|
||||
List<Long> datasetIds = (List) parameters.get("datasetIds");
|
||||
if (CollUtil.isNotEmpty(datasetIds)) {
|
||||
// 内置数据集名称列表
|
||||
List<String> buildinDsNames = new ArrayList<>();
|
||||
// 遍历获取所有上级数据源
|
||||
List<ReportDatasetDO> reportDatasetDOS = datasetMapper.selectNormalDatasetList(datasetIds.stream().collect(Collectors.toSet()));
|
||||
for (ReportDatasetDO datasetDO : reportDatasetDOS) {
|
||||
Long datasourceId = datasetDO.getDatasourceId();
|
||||
// 查询数据源,如果是内置数据源则把数据集的name传给ureport
|
||||
// 机构下 + 内置数据源查询
|
||||
ReportDatasourceDO datasourceDO = datasourceMapper.selectNormalDatasourceById(datasourceId, userOrganId);
|
||||
if (ObjectUtil.isNotNull(datasourceDO) && ObjectUtil.equal(datasourceDO.getBuildinType(), ReportTemplateTypeEnum.SYSTEM)) {
|
||||
buildinDsNames.add(datasetDO.getName());
|
||||
}
|
||||
}
|
||||
if (CollUtil.isNotEmpty(buildinDsNames)) {
|
||||
parameters.put("buildinDsNames", buildinDsNames);
|
||||
}
|
||||
}
|
||||
// imes多租户业务表表名列表
|
||||
parameters.put("tenantTableNames", cfReportProperties.getTenantTableNames());
|
||||
// 用户组织id
|
||||
parameters.put("organId", userOrganId);
|
||||
}
|
||||
|
||||
}
|
||||
BIN
Binary file not shown.
Reference in New Issue
Block a user