报表基础模块:内置数据源下的sql数据集支持多租户字段organ_id

This commit is contained in:
gaoqr
2024-09-27 15:29:59 +08:00
parent 8bcbb3eb9f
commit 360efa0421
6 changed files with 34 additions and 9 deletions
@@ -106,5 +106,5 @@ knife4j:
chenfeng:
gateway:
access-log-ignore-urls:
- /report/template/
- /report/template
- /system/captcha/get
@@ -13,7 +13,7 @@ import java.util.Set;
* @since 2024/9/26 16:41
*/
@Configuration
@ConfigurationProperties("chenfeng.report")
@ConfigurationProperties(prefix = "chenfeng.report")
@Data
public class CfReportProperties {
/**
@@ -13,6 +13,7 @@ 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;
@@ -230,9 +231,9 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
sqlDatasetDefinition.setSql(sql);
sqlDatasetDefinition.setParameters(BeanUtils.toBean(parameters, Parameter.class));
Map<String, Object> params = new HashMap<String, Object>();
Map<String, Object> params = new HashMap<>();
Map<String, Object> pmap = sqlDatasetDefinition.buildParameters(params);
String sqlForUse = sqlDatasetDefinition.parseSql(pmap);
String sqlForUse = sqlDatasetDefinition.parseSql(pmap, new TenantParams());
if (ProcedureUtils.isProcedure(sqlForUse)) {
return ProcedureUtils.procedureColumnsQuery(sqlForUse, pmap, conn);
}
@@ -64,6 +64,7 @@ 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;
@@ -353,15 +354,37 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
@Override
public HtmlReport preview(PreviewParameters params) {
Long userOrganId = SecurityFrameworkUtils.getUserOrganId();
HtmlProducer htmlProducer = new HtmlProducer();
ReportRender reportRender = new ReportRender();
ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
Map<String, Object> parameters = params.getQuery();
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.equal(datasourceDO.getBuildinType(), ReportTemplateTypeEnum.SYSTEM)) {
buildinDsNames.add(datasetDO.getName());
}
}
if (CollUtil.isNotEmpty(buildinDsNames)) {
parameters.put("buildinDsNames", buildinDsNames);
}
}
// imes多租户业务表表名列表
Set<String> tenantTableNames = cfReportProperties.getTenantTableNames();
if (CollUtil.isNotEmpty(tenantTableNames)) {
parameters.put("tenantTableNames", cfReportProperties.getTenantTableNames());
parameters.put("organId", SecurityFrameworkUtils.getUserOrganId());
// 用户组织id
parameters.put("organId", userOrganId);
}
Report report = reportRender.render(reportDefinition, parameters);
return htmlProducer.produce(reportDefinition, report);
@@ -106,6 +106,7 @@ chenfeng:
encrypt:
enable: false
publicKey: cfimes
report:
tenant-table-names:
- system_dept
- system_user