报表基础模块:内置数据源下的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: chenfeng:
gateway: gateway:
access-log-ignore-urls: access-log-ignore-urls:
- /report/template/ - /report/template
- /system/captcha/get - /system/captcha/get
@@ -13,7 +13,7 @@ import java.util.Set;
* @since 2024/9/26 16:41 * @since 2024/9/26 16:41
*/ */
@Configuration @Configuration
@ConfigurationProperties("chenfeng.report") @ConfigurationProperties(prefix = "chenfeng.report")
@Data @Data
public class CfReportProperties { 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.Field;
import com.bstek.ureport.definition.dataset.Parameter; import com.bstek.ureport.definition.dataset.Parameter;
import com.bstek.ureport.definition.dataset.SqlDatasetDefinition; import com.bstek.ureport.definition.dataset.SqlDatasetDefinition;
import com.bstek.ureport.definition.dataset.TenantParams;
import com.bstek.ureport.utils.ProcedureUtils; import com.bstek.ureport.utils.ProcedureUtils;
import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil; import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
@@ -230,9 +231,9 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
sqlDatasetDefinition.setSql(sql); sqlDatasetDefinition.setSql(sql);
sqlDatasetDefinition.setParameters(BeanUtils.toBean(parameters, Parameter.class)); 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); Map<String, Object> pmap = sqlDatasetDefinition.buildParameters(params);
String sqlForUse = sqlDatasetDefinition.parseSql(pmap); String sqlForUse = sqlDatasetDefinition.parseSql(pmap, new TenantParams());
if (ProcedureUtils.isProcedure(sqlForUse)) { if (ProcedureUtils.isProcedure(sqlForUse)) {
return ProcedureUtils.procedureColumnsQuery(sqlForUse, pmap, conn); return ProcedureUtils.procedureColumnsQuery(sqlForUse, pmap, conn);
} }
@@ -64,6 +64,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; 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.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_BUILDIN_OPERATION_PERMISSION_ERROR; import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_BUILDIN_OPERATION_PERMISSION_ERROR;
@@ -353,15 +354,37 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
@Override @Override
public HtmlReport preview(PreviewParameters params) { public HtmlReport preview(PreviewParameters params) {
Long userOrganId = SecurityFrameworkUtils.getUserOrganId();
HtmlProducer htmlProducer = new HtmlProducer(); HtmlProducer htmlProducer = new HtmlProducer();
ReportRender reportRender = new ReportRender(); ReportRender reportRender = new ReportRender();
ReportDefinition reportDefinition = getReportDefinition(reportRender, params); ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
Map<String, Object> parameters = params.getQuery(); Map<String, Object> parameters = params.getQuery();
// imes多租户业务表表名列表 if (Boolean.FALSE.equals(SecurityFrameworkUtils.isSuperAdmin())) {
Set<String> tenantTableNames = cfReportProperties.getTenantTableNames(); // 根据前端传递的数据集id,判断是不是内置数据源下的,是就把name传给ureport
if (CollUtil.isNotEmpty(tenantTableNames)) { 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多租户业务表表名列表
parameters.put("tenantTableNames", cfReportProperties.getTenantTableNames()); parameters.put("tenantTableNames", cfReportProperties.getTenantTableNames());
parameters.put("organId", SecurityFrameworkUtils.getUserOrganId()); // 用户组织id
parameters.put("organId", userOrganId);
} }
Report report = reportRender.render(reportDefinition, parameters); Report report = reportRender.render(reportDefinition, parameters);
return htmlProducer.produce(reportDefinition, report); return htmlProducer.produce(reportDefinition, report);
@@ -106,7 +106,8 @@ chenfeng:
encrypt: encrypt:
enable: false enable: false
publicKey: cfimes publicKey: cfimes
tenant-table-names: report:
tenant-table-names:
- system_dept - system_dept
- system_user - system_user
- system_organization - system_organization