报表基础模块:1、报表三大对象列表筛选、操作权限完善;2、报表接口恢复@PreAuthorize权限控制;

This commit is contained in:
gaoqr
2024-09-09 17:26:45 +08:00
parent 0101e58216
commit 927e062737
14 changed files with 185 additions and 148 deletions
@@ -25,7 +25,7 @@ public final class ErrorCodeConstants {
// ========== UREPORT dataset模块 1-003-003-000 ==========
public static final ErrorCode DATASET_NOT_EXISTS = new ErrorCode(1_003_003_001, "报表数据集不存在");
public static final ErrorCode DATASET_NOT_EXISTS = new ErrorCode(1_003_003_001, "报表数据集不存在或权限不足");
public static final ErrorCode DATASET_SQL_INJECTION_RISK = new ErrorCode(1_003_003_002, "存在SQL注入风险");
public static final ErrorCode DATASET_SQL_REQUIRED = new ErrorCode(1_003_003_003, "SQL语句不能为空");
public static final ErrorCode DATASET_SQL_ILLEGAL = new ErrorCode(1_003_003_004, "SQL语句非法");
@@ -37,14 +37,14 @@ public class ReportDatasetController {
@PutMapping("/dataset")
@Operation(summary = "创建报表数据集")
// @PreAuthorize("@ss.hasPermission('report:dataset:create')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<Long> createDataset(@Valid @RequestBody ReportDatasetSaveReqVO createReqVO) {
return success(datasetService.createDataset(createReqVO));
}
@PostMapping("/dataset")
@Operation(summary = "更新报表数据集")
// @PreAuthorize("@ss.hasPermission('report:dataset:update')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<Boolean> updateDataset(@Valid @RequestBody ReportDatasetSaveReqVO updateReqVO) {
datasetService.updateDataset(updateReqVO);
return success(true);
@@ -53,7 +53,7 @@ public class ReportDatasetController {
@DeleteMapping("/dataset/{id}")
@Operation(summary = "删除报表数据集")
@Parameter(name = "id", description = "数据集id", required = true)
// @PreAuthorize("@ss.hasPermission('report:dataset:delete')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<Boolean> deleteDataset(@PathVariable("id") Long id) {
datasetService.deleteDataset(id);
return success(true);
@@ -62,7 +62,7 @@ public class ReportDatasetController {
@GetMapping("/dataset/{id}")
@Operation(summary = "获得报表数据集")
@Parameter(name = "id", description = "数据集id", required = true, example = "1")
// @PreAuthorize("@ss.hasPermission('report:dataset:query')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<ReportDatasetRespVO> getDataset(@PathVariable("id") Long id) {
ReportDatasetDO dataset = datasetService.getDataset(id);
return success(BeanUtils.toBean(dataset, ReportDatasetRespVO.class));
@@ -70,7 +70,7 @@ public class ReportDatasetController {
@GetMapping("/datasets")
@Operation(summary = "获取数据源下的报表数据集列表")
// @PreAuthorize("@ss.hasPermission('report:dataset:query')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<List<ReportDatasetRespVO>> getDatasetPage(@RequestParam(value = "datasourceId") Long datasourceId,
@RequestParam(value = "name", required = false) String name) {
ReportDatasetReqVO reqVO = new ReportDatasetReqVO(name, datasourceId);
@@ -50,14 +50,14 @@ public class ReportDatasourceController {
@PutMapping("/datasource")
@Operation(summary = "创建报表数据源")
// @PreAuthorize("@ss.hasPermission('report:datasource:create')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<Long> createDatasource(@Valid @RequestBody ReportDatasourceSaveReqVO createReqVO) {
return success(datasourceService.createDatasource(createReqVO));
}
@PostMapping("/datasource")
@Operation(summary = "更新报表数据源")
// @PreAuthorize("@ss.hasPermission('report:datasource:update')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<Boolean> updateDatasource(@Valid @RequestBody ReportDatasourceSaveReqVO updateReqVO) {
datasourceService.updateDatasource(updateReqVO);
return success(true);
@@ -66,7 +66,7 @@ public class ReportDatasourceController {
@DeleteMapping("/datasource/{id}")
@Operation(summary = "删除报表数据源")
@Parameter(name = "id", description = "数据源id", required = true, example = "1")
// @PreAuthorize("@ss.hasPermission('report:datasource:delete')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<Boolean> deleteDatasource(@PathVariable("id") Long id) {
datasourceService.deleteDatasource(id);
return success(true);
@@ -75,7 +75,7 @@ public class ReportDatasourceController {
@GetMapping("/datasource/{id}")
@Operation(summary = "获取报表数据源")
@Parameter(name = "id", description = "数据源id", required = true, example = "1")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<ReportDatasourceRespVO> getDatasource(@PathVariable("id") Long id) {
ReportDatasourceDO datasource = datasourceService.getDatasource(id);
return success(BeanUtils.toBean(datasource, ReportDatasourceRespVO.class));
@@ -83,14 +83,14 @@ public class ReportDatasourceController {
@GetMapping("/datasources")
@Operation(summary = "获取报表数据源列表")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<List<ReportDatasourceRespVO>> getDatasourcePage() {
return success(BeanUtils.toBean(datasourceService.getDatasourceList(), ReportDatasourceRespVO.class));
}
@GetMapping("/datasource/beans")
@Operation(summary = "获取springbean数据源列表")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<List<ReportBeanDatasourceRespVO>> getBeanDatasourceList() {
return success(datasourceService.getBeanDatasourceList());
}
@@ -98,36 +98,23 @@ public class ReportDatasourceController {
@GetMapping("/springbean/result/clazz")
@Operation(summary = "获取springbean数据源返回对象")
@Parameter(name = "clazz", description = "返回对象类路径全名不能为空", required = true)
@PreAuthorize("@ss.hasPermission('report:design')")
public List<Field> springbeanFieldList(@RequestParam(value = "clazz") @NotEmpty(message = "类路径全名不能为空") String clazz) {
return datasourceService.getSpringBeanResultFieldList(clazz);
}
@GetMapping("/datasource/bean/methods")
@Operation(summary = "获取springbean数据源方法类表")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
@Parameter(name = "beanId", description = "springbeanId", required = true)
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<List<String>> getBeanDatasourceList(@RequestParam(value = "beanId") @NotEmpty(message = "beanId不能为空") String beanId) {
return success(datasourceService.loadBeanMethods(beanId));
}
@GetMapping("/buildin/datasources")
@Operation(summary = "获取内置数据源列表")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
public CommonResult<List<ReportDatasourceDO>> getBuildinDatasources() {
return CommonResult.success(datasourceService.getBuildinDatasourceList());
}
@PostMapping("/buildin/datasources")
@Operation(summary = "保存内置数据源")
public CommonResult<Boolean> saveBuildinDatasources(@Valid @RequestBody @NotEmpty(message = "内置数据源列表不能为空") List<ReportDatasourceSaveReqVO> reportDatasourceDOS) {
datasourceService.saveBuildinDatasources(reportDatasourceDOS);
return CommonResult.success(true);
}
@PostMapping("/datasource/connect")
@Operation(summary = "测试数据源连接")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<Boolean> testDatasourceConnect(@RequestBody DataSourceInfo info) {
String success = MultipleJdbcTemplate.testConnection(info);
return Objects.equals("success", success) ? success(true) : error(DATASOURCE_CONNECT_FAIL);
@@ -135,20 +122,21 @@ public class ReportDatasourceController {
@PostMapping("/datasource/tables")
@Operation(summary = "获取数据库表列表")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<List<Map<String, String>>> getDatasourceTables(@RequestBody DataSourceInfo info) {
return success(ureportDataSourceService.selectTableList(info));
}
@PostMapping("/datasource/table/fields")
@Operation(summary = "获取数据源表字段")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<List<Field>> getDatasourceTableFields(@RequestBody PreviewParams previewParams) {
return success(datasourceService.getTableFields(previewParams));
}
@PostMapping("/datasource/preview")
@Operation(summary = "数据源预览")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<Map<String, Object>> previewData(@RequestBody PreviewParams previewParams) {
return success(ureportDataSourceService.previewData(previewParams));
}
@@ -33,6 +33,7 @@ import org.antlr.v4.runtime.tree.TerminalNode;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpStatus;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -66,21 +67,21 @@ public class ReportTemplateController {
@PutMapping("/template")
@Operation(summary = "创建报表模板")
// @PreAuthorize("@ss.hasPermission('report:template:create')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<ReportTemplateRespVO> createTemplate(@Valid @RequestBody ReportTemplateSaveReqVO createReqVO) {
return success(templateService.createReportTemplate(createReqVO));
}
@PutMapping("/template/copy")
@Operation(summary = "复制报表模板")
// @PreAuthorize("@ss.hasPermission('report:template:create')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<Long> copyTemplate(@Valid @RequestBody ReportTemplateSaveReqVO createReqVO) {
return success(templateService.copyReportTemplate(createReqVO));
}
@PostMapping("/template")
@Operation(summary = "更新报表模板")
// @PreAuthorize("@ss.hasPermission('report:template:update')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<ReportTemplateRespVO> updateTemplate(@Valid @RequestBody ReportTemplateSaveReqVO updateReqVO) {
return success(templateService.updateReportTemplate(updateReqVO));
}
@@ -88,7 +89,7 @@ public class ReportTemplateController {
@DeleteMapping("/template/{id}")
@Operation(summary = "删除报表模板")
@Parameter(name = "id", description = "模板id", required = true)
// @PreAuthorize("@ss.hasPermission('report:template:delete')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<Boolean> deleteReportTemplate(@PathVariable("id") Long id) {
templateService.deleteReportTemplate(id);
return success(true);
@@ -97,14 +98,14 @@ public class ReportTemplateController {
@GetMapping("/template/{id}")
@Operation(summary = "获取报表模板信息")
@Parameter(name = "id", description = "模板id", required = true, example = "1")
// @PreAuthorize("@ss.hasPermission('report:template:query')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<ReportDefinitionWrapper> getReportTemplate(@PathVariable("id") Long id) {
return success(templateService.getReportTemplateDefinition(id));
}
@GetMapping("/templates")
@Operation(summary = "获取报表模板信息列表")
// @PreAuthorize("@ss.hasPermission('report:template:query')")
@PreAuthorize("@ss.hasPermission('report:design')")
public CommonResult<List<ReportTemplateRespVO>> getTemplatePage(@RequestParam(value = "name", required = false) String name) {
ReportTemplateReqVO reqVO = new ReportTemplateReqVO(name, null);
return success(BeanUtils.toBean(templateService.getReportTemplateList(reqVO), ReportTemplateRespVO.class));
@@ -112,26 +113,28 @@ public class ReportTemplateController {
@PostMapping("/template/preview")
@Operation(summary = "模板预览")
// @PreAuthorize("@ss.hasPermission('report:template:query')")
@PreAuthorize("@ss.hasPermission('report:preview')")
public CommonResult<HtmlReport> preview(@RequestBody PreviewParameters params) {
return success(templateService.preview(params));
}
@PostMapping("/template/print")
@Operation(summary = "模板预览打印")
@PreAuthorize("@ss.hasPermission('report:preview')")
public void print(@RequestBody PreviewParameters reportParameters, HttpServletResponse response) {
templateService.print(reportParameters, response);
}
@PostMapping("/template/download/{type}")
@Operation(summary = "模板预览下载")
@PreAuthorize("@ss.hasPermission('report:preview')")
public void print(@PathVariable @Valid @ReportTemplateProducerTypeInEnum String type, @RequestBody PreviewParameters reportParameters, HttpServletResponse response) {
templateService.download(type, reportParameters, response);
}
@PostMapping("/template/export")
@Operation(summary = "模板导出")
// @PreAuthorize("@ss.hasPermission('report:template:query')")
@PreAuthorize("@ss.hasPermission('report:design')")
public void generateTemplate(@Valid @RequestBody ReportTemplateGenerateReqDTO reqDTO, HttpServletResponse response) {
OutputStream out = null;
try {
@@ -150,7 +153,7 @@ public class ReportTemplateController {
@GetMapping("/template/excel/import")
@Operation(summary = "导入excel模板")
// @PreAuthorize("@ss.hasPermission('report:template:import')")
@PreAuthorize("@ss.hasPermission('report:design')")
public ReportDefinitionWrapper importExcel(@RequestParam("file") MultipartFile file) {
ReportDefinition report = ExcelParserUtils.parser(file);
if (report != null) {
@@ -163,6 +166,7 @@ public class ReportTemplateController {
@GetMapping("/scriptValidation")
@Operation(summary = "校验表达式")
@Parameter(name = "content", description = "表达式", required = true)
@PreAuthorize("@ss.hasPermission('report:design')")
public List<ErrorInfo> scriptValidation(@Param("content") @NotEmpty(message = "表达式不能为空") String content) {
content = StringUtils.decode(content);
ANTLRInputStream antlrInputStream = new ANTLRInputStream(content);
@@ -185,6 +189,7 @@ public class ReportTemplateController {
@GetMapping("/parseDataSet")
@Operation(summary = "解析表达式中的数据集")
@Parameter(name = "expr", description = "表达式", required = true)
@PreAuthorize("@ss.hasPermission('report:design')")
public Map<String, String> parseDatasetName(@Param("expr") @NotEmpty(message = "表达式不能为空") String expr) {
ANTLRInputStream antlrInputStream = new ANTLRInputStream(expr);
ReportParserLexer lexer = new ReportParserLexer(antlrInputStream);
@@ -1,9 +1,14 @@
package com.cf.imes.module.report.dal.mysql.dataset;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Set;
/**
* 报表数据集 Mapper
*
@@ -12,4 +17,14 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface ReportDatasetMapper extends BaseMapperX<ReportDatasetDO> {
/**
* 查询数据集列表
* @param
* @return
*/
@OrganIgnore
default List<ReportDatasetDO> selectNormalDatasetList(Set<Long> datasetIds) {
return selectList(new LambdaQueryWrapperX<ReportDatasetDO>().in(ReportDatasetDO::getId, datasetIds));
}
}
@@ -1,10 +1,15 @@
package com.cf.imes.module.report.dal.mysql.datasource;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
import org.apache.ibatis.annotations.Delete;
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Set;
/**
* 报表数据源 Mapper
*
@@ -14,6 +19,38 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ReportDatasourceMapper extends BaseMapperX<ReportDatasourceDO> {
@Delete("DELETE FROM report_datasource WHERE buildin_type = 0")
int physicsDeleteBuildinDatasource();
/**
* 根据数据源id查询数据源
* 普通用户用:organId+buildType1 or buildType0
*
* @param id 数据源id
* @return
*/
@OrganIgnore
default ReportDatasourceDO selectNormalDatasourceById(Long id, Long organId) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<ReportDatasourceDO>()
.eq(ReportDatasourceDO::getId, id)
.and(wr -> wr.or(wrapper -> wrapper
.eq(ReportDatasourceDO::getOrganId, organId)
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM))
.or(wrapper -> wrapper.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)));
return selectOne(queryWrapper);
}
/**
* 查询数据源列表
* 普通用户用:organId+buildinType1 or buildinType0
* @param
* @return
*/
@OrganIgnore
default List<ReportDatasourceDO> selectNormalDatasourceList(Set<Long> datasourceIds, Long organId) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<ReportDatasourceDO>()
.in(ReportDatasourceDO::getId, datasourceIds)
.and(wr -> wr.or(wrapper -> wrapper
.eq(ReportDatasourceDO::getOrganId, organId)
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM))
.or(wrapper -> wrapper.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)));
return selectList(queryWrapper);
}
}
@@ -1,9 +1,15 @@
package com.cf.imes.module.report.dal.mysql.template;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 报表模板信息 Mapper
*
@@ -12,4 +18,44 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface ReportTemplateMapper extends BaseMapperX<ReportTemplateDO> {
/**
* 根据模板id查询模板
* 普通用户用:organId+type1 or type0
*
* @param id 模板id
* @return
*/
@OrganIgnore
default ReportTemplateDO selectNormalTemplateById(Long id, Long organId) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<ReportTemplateDO>()
.eq(ReportTemplateDO::getId, id)
.and(wr -> wr.or(wrapper -> wrapper
.eq(ReportTemplateDO::getOrganId, organId)
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM))
.or(wrapper -> wrapper.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM)));
return selectOne(queryWrapper);
}
/**
* 查询模板列表
* 普通用户用:organId+type1 or type0
* @param name
* @param organId
* @return
*/
@OrganIgnore
default List<ReportTemplateDO> selectNormalTemplateList(String name, Long organId) {
LambdaQueryWrapper<ReportTemplateDO> queryWrapper = new LambdaQueryWrapperX<ReportTemplateDO>()
.likeIfPresent(ReportTemplateDO::getName, name)
.orderByDesc(ReportTemplateDO::getCreateTime)
.and(wr -> wr.or(wrapper -> wrapper
.eq(ReportTemplateDO::getOrganId, organId)
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM))
.or(wrapper -> wrapper.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM)))
// 不返回content xml,点击具体的模板中返回xml
.select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark);
return selectList(queryWrapper);
}
}
@@ -40,10 +40,10 @@ public class ReportDatasetServiceImpl implements ReportDatasetService {
@Override
public Long createDataset(ReportDatasetSaveReqVO createReqVO) {
// 插入
ReportDatasetDO dataset = BeanUtils.toBean(createReqVO, ReportDatasetDO.class);
// 校验内置模板操作权限
validateSystemDataset(createReqVO.getDatasourceId());
// 插入
ReportDatasetDO dataset = BeanUtils.toBean(createReqVO, ReportDatasetDO.class);
datasetMapper.insert(dataset);
// 返回
return dataset.getId();
@@ -59,10 +59,10 @@ public class ReportDatasetServiceImpl implements ReportDatasetService {
@Override
public void updateDataset(ReportDatasetSaveReqVO updateReqVO) {
// 校验存在
validateDatasetExists(updateReqVO.getId());
// 校验内置模板操作权限
validateSystemDataset(updateReqVO.getDatasourceId());
// 校验存在
validateDatasetExists(updateReqVO.getId());
// 更新
ReportDatasetDO updateObj = BeanUtils.toBean(updateReqVO, ReportDatasetDO.class);
datasetMapper.updateById(updateObj);
@@ -101,7 +101,7 @@ public class ReportDatasetServiceImpl implements ReportDatasetService {
* @param datasourceId 数据源id
*/
private void validateSystemDataset(Long datasourceId) {
ReportDatasourceDO reportDatasourceDO = reportDatasourceMapper.selectById(datasourceId);
ReportDatasourceDO reportDatasourceDO = reportDatasourceMapper.selectNormalDatasourceById(datasourceId, SecurityFrameworkUtils.getUserOrganId());
if (ObjectUtil.isNull(reportDatasourceDO)) {
throw exception(DATASOURCE_NOT_EXISTS);
}
@@ -3,7 +3,6 @@ package com.cf.imes.module.report.service.datasource;
import com.bstek.datasource.bean.PreviewParams;
import com.bstek.ureport.definition.dataset.Field;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
@@ -85,18 +84,4 @@ public interface ReportDatasourceService {
* @return
*/
List<Field> getSpringBeanResultFieldList(String clazz);
/**
* 获取内置数据源列表
*
* @return
*/
List<ReportDatasourceDO> getBuildinDatasourceList();
/**
* 保存内置数据源列表
*
* @param buildinDatasources
*/
void saveBuildinDatasources(List<ReportDatasourceSaveReqVO> buildinDatasources);
}
@@ -22,7 +22,6 @@ import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetReqVO;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetSaveReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO;
@@ -92,10 +91,10 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
@Override
public Long createDatasource(ReportDatasourceSaveReqVO createReqVO) {
ReportDatasourceDO datasource = BeanUtils.toBean(createReqVO, ReportDatasourceDO.class);
// 校验内置数据源操作权限
validateSystemDatasource(createReqVO.getBuildinType());
// 插入
ReportDatasourceDO datasource = BeanUtils.toBean(createReqVO, ReportDatasourceDO.class);
datasourceMapper.insert(datasource);
// 返回
return datasource.getId();
@@ -103,10 +102,10 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
@Override
public void updateDatasource(ReportDatasourceSaveReqVO updateReqVO) {
// 校验存在
validateDatasourceExists(updateReqVO.getId());
// 校验内置数据源操作权限
validateSystemDatasource(updateReqVO.getBuildinType());
// 校验存在
validateDatasourceExists(updateReqVO.getId());
ReportDatasourceDO updateObj = BeanUtils.toBean(updateReqVO, ReportDatasourceDO.class);
// 更新
datasourceMapper.updateById(updateObj);
@@ -127,7 +126,7 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
@Override
public ReportDatasourceDO getDatasource(Long id) {
ReportDatasourceDO reportDatasourceDO = datasourceMapper.selectById(id);
ReportDatasourceDO reportDatasourceDO = datasourceMapper.selectNormalDatasourceById(id, SecurityFrameworkUtils.getUserOrganId());
// 查询数据集
queryDatasetInSource(reportDatasourceDO);
return reportDatasourceDO;
@@ -142,8 +141,8 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
// 普通用户查看机构下的和system数据源
queryWrapper.or(wrapper -> wrapper
.eq(ReportDatasourceDO::getOrganId, loginUser.getOrganId())
.eq(ReportDatasourceDO::getType, ReportTemplateTypeEnum.CUSTOM))
.or(wrapper -> wrapper.eq(ReportDatasourceDO::getType, ReportTemplateTypeEnum.SYSTEM));
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM))
.or(wrapper -> wrapper.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM));
}
List<ReportDatasourceDO> reportDatasourceDOS = datasourceMapper.selectList(queryWrapper);
// 查询数据集
@@ -287,52 +286,6 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
}
}
@Override
public List<ReportDatasourceDO> getBuildinDatasourceList() {
List<ReportDatasourceDO> reportDatasourceDOS = datasourceMapper.selectList(new LambdaQueryWrapperX<ReportDatasourceDO>()
.eqIfPresent(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)
.orderByDesc(ReportDatasourceDO::getCreateTime));
// 查询数据集
if (CollUtil.isNotEmpty(reportDatasourceDOS)) {
reportDatasourceDOS.forEach(reportDatasourceDO -> {
queryDatasetInSource(reportDatasourceDO);
});
}
return reportDatasourceDOS;
}
@Override
public void saveBuildinDatasources(List<ReportDatasourceSaveReqVO> buildinDatasources) {
// LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
// boolean isSuperAdmin = loginUser != null && loginUser.getIsSupAdmin();
// // 非超管不能操作内置模板
// if (!isSuperAdmin) {
// throw exception(DATASOURCE_BUILDIN_OPERATION_PERMISSION_ERROR);
// }
// // 全删内置数据源
// int deleteNum = datasourceMapper.physicsDeleteBuildinDatasource();
// log.info("[ReportDatasourceService][saveBuildinDatasources]删除内置数据源{}条", deleteNum);
// buildinDatasources.forEach(ds -> {
// // 新增数据源
// ds.setBuildinType(ReportTemplateTypeEnum.SYSTEM.getType());
// ds.setId(null);
// Long datasourceId = createDatasource(ds);
// List<ReportDatasetSaveReqVO> datasets = ds.getDatasets();
// List<ReportDatasetSaveReqVO> batchInsertDataset = new ArrayList<>();
// datasets.forEach(dataset -> {
// // 新增数据集
// dataset.setDatasourceId(datasourceId);
// dataset.setId(null);
// batchInsertDataset.add(dataset);
// });
//
// // 批量插入数据集
// if (CollUtil.isNotEmpty(batchInsertDataset)) {
// datasetService.batchCreateDataset(batchInsertDataset);
// }
// });
}
/**
* 查询数据源下的数据集
*
@@ -352,7 +305,7 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
* @param id 数据源id
*/
private ReportDatasourceDO validateDatasourceExists(Long id) {
ReportDatasourceDO reportDatasourceDO = datasourceMapper.selectById(id);
ReportDatasourceDO reportDatasourceDO = datasourceMapper.selectNormalDatasourceById(id, SecurityFrameworkUtils.getUserOrganId());
if (reportDatasourceDO == null) {
throw exception(DATASOURCE_NOT_EXISTS);
} else {
@@ -28,9 +28,10 @@ import com.bstek.ureport.export.html.HtmlReport;
import com.bstek.ureport.model.Report;
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.util.object.BeanUtils;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.report.api.template.dto.ReportTemplateGenerateReqDTO;
@@ -199,9 +200,19 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
*
* @param id
*/
private ReportTemplateDO validateTemplateExists(Long id) {
ReportTemplateDO reportTemplateDO = templateMapper.selectById(id);
if (reportTemplateDO == null) {
public ReportTemplateDO validateTemplateExists(Long id) {
ReportTemplateDO reportTemplateDO;
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) {
throw new ServiceException(GlobalErrorCodeConstants.UNAUTHORIZED);
}
// 非超管查询内置模板+机构下的
if (loginUser.getIsSupAdmin()) {
reportTemplateDO = templateMapper.selectById(id);
} else {
reportTemplateDO = templateMapper.selectNormalTemplateById(id, loginUser.getOrganId());
}
if (ObjectUtil.isNull(reportTemplateDO)) {
throw exception(TEMPLATE_NOT_EXISTS);
} else {
return reportTemplateDO;
@@ -231,18 +242,13 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
@Override
public ReportTemplateDO getReportTemplate(Long id) {
// 校验模板
validateTemplateExists(id);
// 查询模板
ReportTemplateDO template = templateMapper.selectById(id);
return template;
return validateTemplateExists(id);
}
@Override
public ReportDefinitionWrapper getReportTemplateDefinition(Long id) {
// 校验模板
validateTemplateExists(id);
// 查询模板
ReportTemplateDO template = templateMapper.selectById(id);
ReportTemplateDO template = validateTemplateExists(id);
String xmlContent = template.getContent();
InputStream is;
if (StringUtils.isNotEmpty(xmlContent)) {
@@ -274,13 +280,13 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
if (CollUtil.isNotEmpty(datasourceIds)) {
// 查询模板下的数据源
reportDatasourceDOS = datasourceMapper.selectList(new LambdaQueryWrapperX<ReportDatasourceDO>().in(ReportDatasourceDO::getId, datasourceIds));
reportDatasourceDOS = datasourceMapper.selectNormalDatasourceList(datasourceIds, SecurityFrameworkUtils.getUserOrganId());
}
List<ReportDatasetDO> reportDatasetDOS = new ArrayList<>();
if (CollUtil.isNotEmpty(datasetIds)) {
// 查询模板下的数据集
reportDatasetDOS = datasetMapper.selectList(new LambdaQueryWrapperX<ReportDatasetDO>().in(ReportDatasetDO::getId, datasetIds));
reportDatasetDOS = datasetMapper.selectNormalDatasetList(datasetIds);
}
// 转换ureport对象后的数据源列表
List<DatasourceDefinition> datasourceDefinitions = new ArrayList<>();
@@ -322,7 +328,6 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
}
@Override
@OrganIgnore
public List<ReportTemplateDO> getReportTemplateList(ReportTemplateReqVO reqVO) {
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
LambdaQueryWrapper<ReportTemplateDO> queryWrapper = new LambdaQueryWrapperX<ReportTemplateDO>().likeIfPresent(ReportTemplateDO::getName, reqVO.getName())
@@ -330,14 +335,11 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
// 不返回content xml,点击具体的模板中返回xml
.select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark);
if (ObjectUtil.isNotNull(loginUser) && Boolean.FALSE.equals(loginUser.getIsSupAdmin())) {
// 普通用户查看机构下的和system模板
queryWrapper.or(wrapper -> wrapper
.eq(ReportTemplateDO::getOrganId, loginUser.getOrganId())
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM))
.or(wrapper -> wrapper.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM));
return templateMapper.selectNormalTemplateList(reqVO.getName(), loginUser.getOrganId());
} else {
// 超管查看全部
return templateMapper.selectList(queryWrapper);
}
// 超管查看全部
return templateMapper.selectList(queryWrapper);
}
@Override
@@ -436,9 +438,7 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
validateProducerType(reqDTO.getProducerType());
Long templateId = reqDTO.getTemplateId();
// 校验模板
validateTemplateExists(templateId);
// 查询模板
ReportTemplateDO template = templateMapper.selectById(templateId);
ReportTemplateDO template = validateTemplateExists(templateId);
String xmlContent = template.getContent();
ReportRender reportRender = new ReportRender();
// 解析xml
@@ -4,6 +4,7 @@ import com.cf.imes.framework.test.core.util.RandomUtils;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetReqVO;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetSaveReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateRespVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO;
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
@@ -49,8 +50,9 @@ public class ReportDatasetServiceImplTest extends ReportCommonServiceImplTest{
// 2、插入template、断言自增id
// 3、用id查template、断言对象
ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null);
Long templateId = reportTemplateService.createReportTemplate(createReqVO);
assertNotNull(templateId);
ReportTemplateRespVO reportTemplate = reportTemplateService.createReportTemplate(createReqVO);
assertNotNull(reportTemplate);
Long templateId = reportTemplate.getId();
ReportTemplateDO template = reportTemplateService.getReportTemplate(templateId);
assertNotNull(template);
@@ -3,6 +3,7 @@ package com.cf.imes.module.report.service.template;
import com.cf.imes.framework.test.core.util.RandomUtils;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateRespVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
@@ -41,7 +42,8 @@ public class ReportDatasourceServiceImplTest extends ReportCommonServiceImplTest
// 2、插入template、断言自增id
// 3、用id查template、断言对象
ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null);
Long templateId = reportTemplateService.createReportTemplate(createReqVO);
ReportTemplateRespVO reportTemplate = reportTemplateService.createReportTemplate(createReqVO);
Long templateId = reportTemplate.getId();
assertNotNull(templateId);
ReportTemplateDO template = reportTemplateService.getReportTemplate(templateId);
assertNotNull(template);
@@ -2,6 +2,7 @@ package com.cf.imes.module.report.service.template;
import com.cf.imes.framework.test.core.util.RandomUtils;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateRespVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
@@ -35,7 +36,8 @@ public class ReportTemplateServiceImplTest extends ReportCommonServiceImplTest {
ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null);
System.out.println("template压缩后大小:" + createReqVO.getContent().length());
// 插入
Long templateId = reportTemplateService.createReportTemplate(createReqVO);
ReportTemplateRespVO reportTemplate = reportTemplateService.createReportTemplate(createReqVO);
Long templateId = reportTemplate.getId();
// 断言
assertNotNull(templateId);
// 校验是否插入
@@ -56,7 +58,8 @@ public class ReportTemplateServiceImplTest extends ReportCommonServiceImplTest {
ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null);
System.out.println("template压缩后大小:" + createReqVO.getContent().length());
// 插入
Long templateId = reportTemplateService.createReportTemplate(createReqVO);
ReportTemplateRespVO reportTemplate = reportTemplateService.createReportTemplate(createReqVO);
Long templateId = reportTemplate.getId();
//准备更新参数
ReportTemplateSaveReqVO updateReqVO = prepareTemplateReqVO(templateId);
@@ -86,7 +89,8 @@ public class ReportTemplateServiceImplTest extends ReportCommonServiceImplTest {
// 准备参数
ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null);
// 插入
Long templateId = reportTemplateService.createReportTemplate(createReqVO);
ReportTemplateRespVO reportTemplate = reportTemplateService.createReportTemplate(createReqVO);
Long templateId = reportTemplate.getId();
// 删除
reportTemplateService.deleteReportTemplate(templateId);
@@ -111,8 +115,8 @@ public class ReportTemplateServiceImplTest extends ReportCommonServiceImplTest {
// 准备参数
ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null);
// 插入
Long templateId = reportTemplateService.createReportTemplate(createReqVO);
ReportTemplateRespVO reportTemplate = reportTemplateService.createReportTemplate(createReqVO);
Long templateId = reportTemplate.getId();
ReportTemplateReqVO reqVO = new ReportTemplateReqVO();
reqVO.setType(ReportTemplateTypeEnum.SYSTEM.getType());