diff --git a/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java b/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java index a594ec997..a2425150b 100644 --- a/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java +++ b/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java @@ -14,6 +14,7 @@ public final class ErrorCodeConstants { public static final ErrorCode TEMPLATE_NOT_EXISTS = new ErrorCode(1_003_001_001, "报表模板信息不存在"); public static final ErrorCode TEMPLATE_BUILDIN_OPERATION_PERMISSION_ERROR = new ErrorCode(1_003_001_002, "内置模板操作权限不足"); public static final ErrorCode TEMPLATE_NAME_UNIQE_ERROR = new ErrorCode(1_003_001_003, "模板名【{}】已存在,请编辑模板名后重试"); + public static final ErrorCode TEMPLATE_PREIVEW_QUERYPARAM_EMPTY = new ErrorCode(1_003_001_004, "查询参数不能为空:{}"); // ========== UREPORT datasource模块 1-003-002-000 ========== diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/datasource/ReportDatasourceController.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/datasource/ReportDatasourceController.java index 30a62b9b4..e5272def7 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/datasource/ReportDatasourceController.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/datasource/ReportDatasourceController.java @@ -87,8 +87,8 @@ public class ReportDatasourceController { @GetMapping("/datasources") @Operation(summary = "获取报表数据源列表") @PreAuthorize("@ss.hasPermission('report:design')") - public CommonResult> getDatasourcePage() { - return success(BeanUtils.toBean(datasourceService.getDatasourceList(), ReportDatasourceRespVO.class)); + public CommonResult> getDatasourcePage(@RequestParam(value = "organId", required = false) Long organId) { + return success(BeanUtils.toBean(datasourceService.getDatasourceList(organId), ReportDatasourceRespVO.class)); } @GetMapping("/datasource/beans") diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java index 4903eaf50..4a7b1d32a 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java @@ -101,8 +101,10 @@ public class ReportTemplateController { @GetMapping("/templates") @Operation(summary = "获取报表模板信息列表") @PreAuthorize("@ss.hasPermission('report:design')") - public CommonResult> getTemplatePage(@RequestParam(value = "name", required = false) @Size(max = 64, message = "模板名称长度不能超过64个字符") String name) { - ReportTemplateReqVO reqVO = new ReportTemplateReqVO(name, null); + public CommonResult> getTemplatePage( + @RequestParam(value = "name", required = false) @Size(max = 64, message = "模板名称长度不能超过64个字符") String name, + @RequestParam(value = "organId", required = false) Long organId) { + ReportTemplateReqVO reqVO = new ReportTemplateReqVO(name, null, organId); return success(BeanUtils.toBean(templateService.getReportTemplateList(reqVO), ReportTemplateRespVO.class)); } diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateReqVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateReqVO.java index 397a40189..727350d73 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateReqVO.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateReqVO.java @@ -21,4 +21,7 @@ public class ReportTemplateReqVO { @Schema(description = "模板类型,0内置、1自定义", example = "1") private Integer type; + + @Schema(description = "组织id") + private Long organId; } diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/datasource/ReportDatasourceService.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/datasource/ReportDatasourceService.java index b602e7e75..ac7c93b0d 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/datasource/ReportDatasourceService.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/datasource/ReportDatasourceService.java @@ -49,10 +49,10 @@ public interface ReportDatasourceService { /** * 获取模板下的数据源列表 * - * @param reqVO 查询参数 + * @param organId 组织id * @return 报表数据源分页 */ - List getDatasourceList(); + List getDatasourceList(Long organId); /** * 获取springbean数据源列表 diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/datasource/ReportDatasourceServiceImpl.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/datasource/ReportDatasourceServiceImpl.java index fabd876f3..9dfd34eb1 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/datasource/ReportDatasourceServiceImpl.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/datasource/ReportDatasourceServiceImpl.java @@ -133,16 +133,21 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService { @Override @OrganIgnore - public List getDatasourceList() { + public List getDatasourceList(Long organId) { LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapperX().orderByDesc(ReportDatasourceDO::getCreateTime); - if (ObjectUtil.isNotNull(loginUser) && Boolean.FALSE.equals(loginUser.getIsSupAdmin())) { - // 普通用户查看机构下的和system数据源 - queryWrapper.or(wrapper -> wrapper - .eq(ReportDatasourceDO::getOrganId, loginUser.getOrganId()) - .eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM)) - .or(wrapper -> wrapper.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)); + // 当前登录人机构id + Long currentOrganId = loginUser.getOrganId(); + // 超管查看不同组织数据源 + if (ObjectUtil.isNotNull(loginUser) && Boolean.TRUE.equals(loginUser.getIsSupAdmin()) && ObjectUtil.isNotNull(organId)) { + currentOrganId = organId; } + Long finalCurrentOrganId = currentOrganId; + queryWrapper.or(wrapper -> wrapper + .eq(ReportDatasourceDO::getOrganId, finalCurrentOrganId) + .eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM)) + .or(wrapper -> wrapper.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)); + List reportDatasourceDOS = datasourceMapper.selectList(queryWrapper); // 查询数据集 if (CollUtil.isNotEmpty(reportDatasourceDOS)) { @@ -150,7 +155,6 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService { queryDatasetInSource(reportDatasourceDO); }); } - // 超管查看全部 return reportDatasourceDOS; } diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java index f5fb34878..e9e3baee0 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java @@ -30,6 +30,7 @@ import com.bstek.ureport.parser.ReportParser; import com.bstek.ureport.utils.ToolUtils; import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil; 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; @@ -49,6 +50,7 @@ import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; @@ -70,6 +72,7 @@ import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.e import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_BUILDIN_OPERATION_PERMISSION_ERROR; import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_NAME_UNIQE_ERROR; import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_NOT_EXISTS; +import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_PREIVEW_QUERYPARAM_EMPTY; /** * 报表模板信息 Service 实现类 @@ -340,28 +343,56 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { @Override public List getReportTemplateList(ReportTemplateReqVO reqVO) { LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapperX().likeIfPresent(ReportTemplateDO::getName, reqVO.getName()) - .orderByDesc(ReportTemplateDO::getCreateTime) - // 不返回content xml,点击具体的模板中返回xml - .select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark, ReportTemplateDO::getType); - if (ObjectUtil.isNotNull(loginUser) && Boolean.FALSE.equals(loginUser.getIsSupAdmin())) { - return templateMapper.selectNormalTemplateList(reqVO.getName(), loginUser.getOrganId()); - } else { - // 超管查看全部 - return templateMapper.selectList(queryWrapper); + // 当前登录人机构id + Long organId = loginUser.getOrganId(); + // 超管查看不同组织模板 + if (ObjectUtil.isNotNull(loginUser) && Boolean.TRUE.equals(loginUser.getIsSupAdmin()) && ObjectUtil.isNotNull(reqVO.getOrganId())) { + organId = reqVO.getOrganId(); + } + return templateMapper.selectNormalTemplateList(reqVO.getName(), organId); + } + + /** + * 检查查询参数不为空 + * + * @param queryMap + */ + private void checkQueryNotEmpty(Map queryMap) { + if (ObjectUtil.isNotNull(queryMap)) { + for (Map.Entry entry : queryMap.entrySet()) { + String key = entry.getKey(); + if (ObjectUtils.isEmpty(entry.getValue()) && (ObjectUtil.notEqual(key, "datasetIds") || ObjectUtil.notEqual(key, "datasourceIds "))) { + throw ServiceExceptionUtil.exception(TEMPLATE_PREIVEW_QUERYPARAM_EMPTY, key); + } + } } } @Override public HtmlReport preview(ReportTemplatePreviewReqVO reqVO) { + // 检查查询参数中的空值 + checkQueryNotEmpty(reqVO.getQuery()); // 自定义请求vo转ureport对象 PreviewParameters params = BeanUtils.toBean(reqVO, PreviewParameters.class); - Long userOrganId = SecurityFrameworkUtils.getUserOrganId(); HtmlProducer htmlProducer = new HtmlProducer(); ReportRender reportRender = new ReportRender(); ReportDefinition reportDefinition = getReportDefinition(reportRender, params); Map parameters = params.getQuery(); + // 增加多租户参数 + prepareTenantParam(parameters); + Report report = reportRender.render(reportDefinition, parameters); + return htmlProducer.produce(reportDefinition, report); + } + + + /** + * 往parameters中增加租户相关参数 + * + * @param parameters + */ + private void prepareTenantParam(Map parameters) { + Long userOrganId = SecurityFrameworkUtils.getUserOrganId(); if (Boolean.FALSE.equals(SecurityFrameworkUtils.isSuperAdmin())) { // 根据前端传递的数据集id,判断是不是内置数据源下的,是就把name传给ureport List datasetIds = (List) parameters.get("datasetIds"); @@ -375,7 +406,7 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { // 查询数据源,如果是内置数据源则把数据集的name传给ureport // 机构下 + 内置数据源查询 ReportDatasourceDO datasourceDO = datasourceMapper.selectNormalDatasourceById(datasourceId, userOrganId); - if (ObjectUtil.equal(datasourceDO.getBuildinType(), ReportTemplateTypeEnum.SYSTEM)) { + if (ObjectUtil.isNotNull(datasourceDO) && ObjectUtil.equal(datasourceDO.getBuildinType(), ReportTemplateTypeEnum.SYSTEM)) { buildinDsNames.add(datasetDO.getName()); } } @@ -388,8 +419,6 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { // 用户组织id parameters.put("organId", userOrganId); } - Report report = reportRender.render(reportDefinition, parameters); - return htmlProducer.produce(reportDefinition, report); } @Override @@ -400,7 +429,10 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { long start = System.currentTimeMillis(); ReportRender reportRender = new ReportRender(); ReportDefinition reportDefinition = getReportDefinition(reportRender, params); - Report report = reportRender.render(reportDefinition, params.getQuery()); + Map query = params.getQuery(); + // 增加多租户参数 + prepareTenantParam(query); + Report report = reportRender.render(reportDefinition, query); Map chartImages = params.getChartImages(); report.setChartImages(chartImages); try { @@ -427,7 +459,10 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { ReportRender reportRender = new ReportRender(); ReportDefinition reportDefinition = getReportDefinition(reportRender, params); - Report report = reportRender.render(reportDefinition, params.getQuery()); + Map query = params.getQuery(); + // 增加多租户参数 + prepareTenantParam(query); + Report report = reportRender.render(reportDefinition, query); Map chartImages = params.getChartImages(); report.setChartImages(chartImages); try { diff --git a/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportDatasourceServiceImplTest.java b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportDatasourceServiceImplTest.java index 63670c962..4cc9aaed1 100644 --- a/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportDatasourceServiceImplTest.java +++ b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportDatasourceServiceImplTest.java @@ -72,7 +72,7 @@ public class ReportDatasourceServiceImplTest extends ReportCommonServiceImplTest reqVO.setTemplateId(templateId); reqVO.setType(ReportDatasourceTypeEnum.JDBC.getCode()); reqVO.setName(updateReqVO.getName()); - List templateDatasourceList = reportDatasourceService.getDatasourceList(); + List templateDatasourceList = reportDatasourceService.getDatasourceList(null); assertNotNull(templateDatasourceList); assertNotEquals(0, templateDatasourceList.size());