From 03cce646886125b9d8259577384aba1e9d06c30f Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Mon, 8 Jul 2024 15:48:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1=E3=80=81=E6=8A=A5=E8=A1=A8=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E5=86=85=E5=AE=B9=E5=AE=9E=E7=8E=B0=EF=BC=8Cservice?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=E5=AE=9E=E7=8E=B0=EF=BC=8C?= =?UTF-8?q?=E7=A7=BB=E9=99=A4report=E5=BE=AE=E6=9C=8D=E5=8A=A1=E4=B8=AD?= =?UTF-8?q?=E6=B2=A1=E7=94=A8=E7=9A=84=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=86=85=E5=AE=B9=EF=BC=9B=202=E3=80=81DefaultDBFieldHandler?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=A1=AB=E5=85=85=E5=A4=84=E7=90=86=E7=B1=BB?= =?UTF-8?q?=E4=B8=ADrequest=E6=B3=A8=E5=85=A5=E6=94=B9=E4=B8=BA=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E6=96=87=E8=8E=B7=E5=8F=96=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/db/OrganDatabaseInterceptor.java | 1 - .../core/handler/DefaultDBFieldHandler.java | 15 +- .../core/type/ObjectListTypeHandler.java | 65 ++++++++ .../report/enums/ErrorCodeConstants.java | 4 +- .../template/ReportTemplateTypeEnum.java | 26 ++++ .../template/ReportDatasetController.java | 77 +++++++++ .../template/ReportDatasourceController.java | 77 +++++++++ .../template/ReportTemplateController.java | 82 ++++++++++ .../template/vo/ReportDatasetParameterVO.java | 29 ++++ .../admin/template/vo/ReportDatasetReqVO.java | 20 +++ .../template/vo/ReportDatasetRespVO.java | 33 ++++ .../template/vo/ReportDatasetSaveReqVO.java | 33 ++++ .../template/vo/ReportDatasourceReqVO.java | 23 +++ .../template/vo/ReportDatasourceRespVO.java | 45 ++++++ .../vo/ReportDatasourceSaveReqVO.java | 44 ++++++ .../template/vo/ReportTemplateReqVO.java | 20 +++ .../template/vo/ReportTemplateRespVO.java | 32 ++++ .../template/vo/ReportTemplateSaveReqVO.java | 30 ++++ .../dataobject/template/ReportDatasetDO.java | 51 ++++++ .../template/ReportDatasourceDO.java | 69 +++++++++ .../dataobject/template/ReportTemplateDO.java | 48 ++++++ .../mysql/template/ReportDatasetMapper.java | 15 ++ .../template/ReportDatasourceMapper.java | 15 ++ .../mysql/template/ReportTemplateMapper.java | 15 ++ .../template/ReportDatasetService.java | 55 +++++++ .../template/ReportDatasetServiceImpl.java | 74 +++++++++ .../template/ReportDatasourceService.java | 54 +++++++ .../template/ReportDatasourceServiceImpl.java | 80 ++++++++++ .../template/ReportTemplateService.java | 54 +++++++ .../template/ReportTemplateServiceImpl.java | 88 +++++++++++ .../goview/GoViewDataServiceImplTest.java | 58 ------- .../goview/GoViewProjectServiceImplTest.java | 135 ---------------- .../report/service/template/JsonUtil.java | 146 ++++++++++++++++++ .../template/ReportCommonServiceImplTest.java | 66 ++++++++ .../ReportDatasetServiceImplTest.java | 113 ++++++++++++++ .../ReportDatasourceServiceImplTest.java | 100 ++++++++++++ .../ReportTemplateServiceImplTest.java | 128 +++++++++++++++ 37 files changed, 1817 insertions(+), 203 deletions(-) create mode 100644 cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/type/ObjectListTypeHandler.java create mode 100644 cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/template/ReportTemplateTypeEnum.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportDatasetController.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportDatasourceController.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetParameterVO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetReqVO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetRespVO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetSaveReqVO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceReqVO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceRespVO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceSaveReqVO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateReqVO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateRespVO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateSaveReqVO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportDatasetDO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportDatasourceDO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportTemplateDO.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportDatasetMapper.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportDatasourceMapper.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportTemplateMapper.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasetService.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasetServiceImpl.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasourceService.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasourceServiceImpl.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java create mode 100644 cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java delete mode 100644 cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/goview/GoViewDataServiceImplTest.java delete mode 100644 cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/goview/GoViewProjectServiceImplTest.java create mode 100644 cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/JsonUtil.java create mode 100644 cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportCommonServiceImplTest.java create mode 100644 cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportDatasetServiceImplTest.java create mode 100644 cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportDatasourceServiceImplTest.java create mode 100644 cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImplTest.java diff --git a/cf-framework/cf-spring-boot-starter-biz-organ/src/main/java/com/cf/imes/framework/organ/core/db/OrganDatabaseInterceptor.java b/cf-framework/cf-spring-boot-starter-biz-organ/src/main/java/com/cf/imes/framework/organ/core/db/OrganDatabaseInterceptor.java index f0bb2f893..504c38113 100644 --- a/cf-framework/cf-spring-boot-starter-biz-organ/src/main/java/com/cf/imes/framework/organ/core/db/OrganDatabaseInterceptor.java +++ b/cf-framework/cf-spring-boot-starter-biz-organ/src/main/java/com/cf/imes/framework/organ/core/db/OrganDatabaseInterceptor.java @@ -52,7 +52,6 @@ public class OrganDatabaseInterceptor implements TenantLineHandler { @Override public boolean ignoreTable(String tableName) { - System.out.println(superAdminProdOrgIgnoreEnable); return OrganContextHolder.isIgnore() // 情况一,全局忽略多组织 || CollUtil.contains(ignoreTables, tableName) // 情况二,忽略多组织的表 || (isAdmin() && superAdminProdOrgIgnoreEnable); //情况三,忽略超级管理员 diff --git a/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/handler/DefaultDBFieldHandler.java b/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/handler/DefaultDBFieldHandler.java index ce39cd2b0..7f536c954 100644 --- a/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/handler/DefaultDBFieldHandler.java +++ b/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/handler/DefaultDBFieldHandler.java @@ -8,7 +8,6 @@ import com.cf.imes.framework.web.core.util.WebFrameworkUtils; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.util.StringUtils; @@ -30,13 +29,13 @@ public class DefaultDBFieldHandler implements MetaObjectHandler { @Resource private StringRedisTemplate stringRedisTemplate; - @Autowired - private HttpServletRequest request; - private static final String AUTHORIZATION_BEARER = "Bearer"; private static final String OAUTH2_ACCESS_TOKEN = "oauth2_access_token:%s"; + private static final String AUTHORIZATION_HEADER_NAME = "Authorization"; + + private static final String TOKEN_PARAM_NAME = "token"; @Override public void insertFill(MetaObject metaObject) { @@ -68,7 +67,7 @@ public class DefaultDBFieldHandler implements MetaObjectHandler { } // 从请求中获取到 Token - String authorization = obtainAuthorization(request, "Authorization", "token"); + String authorization = obtainAuthorization(AUTHORIZATION_HEADER_NAME, TOKEN_PARAM_NAME); Long organId = null; @@ -107,7 +106,7 @@ public class DefaultDBFieldHandler implements MetaObjectHandler { } // 从请求中获取到 Token - String authorization = obtainAuthorization(request, "Authorization", "token"); + String authorization = obtainAuthorization(AUTHORIZATION_HEADER_NAME, TOKEN_PARAM_NAME); Long organId = null; @@ -132,8 +131,8 @@ public class DefaultDBFieldHandler implements MetaObjectHandler { // 从请求中获取到 token - private static String obtainAuthorization(HttpServletRequest request, - String headerName, String parameterName) { + private static String obtainAuthorization(String headerName, String parameterName) { + HttpServletRequest request = WebFrameworkUtils.getRequest(); // 1. 获得 Token。优先级:Header > Parameter String token = request.getHeader(headerName); if (StrUtil.isEmpty(token)) { diff --git a/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/type/ObjectListTypeHandler.java b/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/type/ObjectListTypeHandler.java new file mode 100644 index 000000000..8af72d573 --- /dev/null +++ b/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/type/ObjectListTypeHandler.java @@ -0,0 +1,65 @@ +package com.cf.imes.framework.mybatis.core.type; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.ibatis.type.*; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +/** + * mb自定义列表类型转换器 + * + * @author Gqr + * @since 2024/7/8 11:15 + */ +@MappedJdbcTypes(JdbcType.VARCHAR) +@MappedTypes(List.class) +public class ObjectListTypeHandler extends BaseTypeHandler> { + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + try { + String jsonString = objectMapper.writeValueAsString(parameter); + ps.setString(i, jsonString); + } catch (JsonProcessingException e) { + throw new RuntimeException("Error serializing List to JSON", e); + } + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + String jsonStr = rs.getString(columnName); + return parseJson(jsonStr); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String jsonStr = rs.getString(columnIndex); + return parseJson(jsonStr); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + String jsonStr = cs.getString(columnIndex); + return parseJson(jsonStr); + } + + private List parseJson(String jsonStr) { + if (jsonStr == null || jsonStr.isEmpty()) { + return null; + } + try { + // Using JavaType to handle List deserialization + JavaType javaType = objectMapper.getTypeFactory().constructCollectionType(List.class, Object.class); + return objectMapper.readValue(jsonStr, javaType); + } catch (Exception e) { + throw new RuntimeException("Error deserializing JSON to List", e); + } + } +} 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 be8eb2da9..701e526ce 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 @@ -16,5 +16,7 @@ public interface ErrorCodeConstants { // ========== UREPORT 模块 1-003-001-000 ========== ErrorCode UREPORT_DATA_NOT_EXISTS = new ErrorCode(1_003_001_001, "Ureport2 报表不存在"); ErrorCode UREPORT_DATABASE_NOT_EXISTS = new ErrorCode(1_003_001_002, "Ureport2 报表数据源不存在"); - + ErrorCode TEMPLATE_NOT_EXISTS = new ErrorCode(1_003_001_003, "报表模板信息不存在"); + ErrorCode DATASOURCE_NOT_EXISTS = new ErrorCode(1_003_001_004, "报表数据源不存在"); + ErrorCode DATASET_NOT_EXISTS = new ErrorCode(1_003_001_005, "报表数据集不存在"); } diff --git a/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/template/ReportTemplateTypeEnum.java b/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/template/ReportTemplateTypeEnum.java new file mode 100644 index 000000000..0aca8ef67 --- /dev/null +++ b/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/template/ReportTemplateTypeEnum.java @@ -0,0 +1,26 @@ +package com.cf.imes.module.report.enums.template; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 报表模板类型 + * + * @author Gqr + * @since 2024/7/5 9:25 + */ +@Getter +@AllArgsConstructor +public enum ReportTemplateTypeEnum { + /** + * 内置 + */ + SYSTEM(1), + /** + * 自定义 + */ + CUSTOM(2); + + private final Integer type; + +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportDatasetController.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportDatasetController.java new file mode 100644 index 000000000..72c5edd9e --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportDatasetController.java @@ -0,0 +1,77 @@ +package com.cf.imes.module.report.controller.admin.template; + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasetReqVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasetRespVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasetSaveReqVO; +import com.cf.imes.module.report.dal.dataobject.template.ReportDatasetDO; +import com.cf.imes.module.report.service.template.ReportDatasetService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import java.util.List; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; + +/** + * 报表数据集控制器 + * + * @author Gqr + * @since 2024/7/8 15:22 + */ +@Tag(name = "管理后台 - 报表数据集") +@RestController +@RequestMapping("/report") +@Validated +public class ReportDatasetController { + @Resource + private ReportDatasetService datasetService; + + @PutMapping("/dataset") + @Operation(summary = "创建报表数据集") + @PreAuthorize("@ss.hasPermission('report:dataset:create')") + public CommonResult createDataset(@Valid @RequestBody ReportDatasetSaveReqVO createReqVO) { + return success(datasetService.createDataset(createReqVO)); + } + + @PostMapping("/dataset") + @Operation(summary = "更新报表数据集") + @PreAuthorize("@ss.hasPermission('report:dataset:update')") + public CommonResult updateDataset(@Valid @RequestBody ReportDatasetSaveReqVO updateReqVO) { + datasetService.updateDataset(updateReqVO); + return success(true); + } + + @DeleteMapping("/dataset/{id}") + @Operation(summary = "删除报表数据集") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('report:dataset:delete')") + public CommonResult deleteDataset(@PathVariable("id") Long id) { + datasetService.deleteDataset(id); + return success(true); + } + + @GetMapping("/dataset/{id}") + @Operation(summary = "获得报表数据集") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('report:dataset:query')") + public CommonResult getDataset(@PathVariable("id") Long id) { + ReportDatasetDO dataset = datasetService.getDataset(id); + return success(BeanUtils.toBean(dataset, ReportDatasetRespVO.class)); + } + + @GetMapping("/datasets") + @Operation(summary = "获取数据源下的报表数据集列表") + @PreAuthorize("@ss.hasPermission('report:dataset:query')") + public CommonResult> getDatasetPage(@Valid ReportDatasetReqVO pageReqVO) { + return success(BeanUtils.toBean(datasetService.getDatasetList(pageReqVO), ReportDatasetRespVO.class)); + } +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportDatasourceController.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportDatasourceController.java new file mode 100644 index 000000000..e9c0bf550 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportDatasourceController.java @@ -0,0 +1,77 @@ +package com.cf.imes.module.report.controller.admin.template; + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasourceReqVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasourceRespVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasourceSaveReqVO; +import com.cf.imes.module.report.dal.dataobject.template.ReportDatasourceDO; +import com.cf.imes.module.report.service.template.ReportDatasourceService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import java.util.List; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; + +/** + * 报表数据源控制器 + * + * @author Gqr + * @since 2024/7/5 16:53 + */ +@Tag(name = "管理后台 - 报表数据源") +@RestController +@RequestMapping("/report/datasource") +@Validated +public class ReportDatasourceController { + @Resource + private ReportDatasourceService datasourceService; + + @PutMapping("/datasource") + @Operation(summary = "创建报表数据源") + @PreAuthorize("@ss.hasPermission('report:datasource:create')") + public CommonResult createDatasource(@Valid @RequestBody ReportDatasourceSaveReqVO createReqVO) { + return success(datasourceService.createDatasource(createReqVO)); + } + + @PostMapping("/datasource") + @Operation(summary = "更新报表数据源") + @PreAuthorize("@ss.hasPermission('report:datasource:update')") + public CommonResult updateDatasource(@Valid @RequestBody ReportDatasourceSaveReqVO updateReqVO) { + datasourceService.updateDatasource(updateReqVO); + return success(true); + } + + @DeleteMapping("/datasource/{id}") + @Operation(summary = "删除报表数据源") + @Parameter(name = "id", description = "编号", required = true, example = "1") + @PreAuthorize("@ss.hasPermission('report:datasource:delete')") + public CommonResult deleteDatasource(@PathVariable("id") Long id) { + datasourceService.deleteDatasource(id); + return success(true); + } + + @GetMapping("/datasource/{id}") + @Operation(summary = "获得报表数据源") + @Parameter(name = "id", description = "编号", required = true, example = "1") + @PreAuthorize("@ss.hasPermission('report:datasource:query')") + public CommonResult getDatasource(@PathVariable("id") Long id) { + ReportDatasourceDO datasource = datasourceService.getDatasource(id); + return success(BeanUtils.toBean(datasource, ReportDatasourceRespVO.class)); + } + + @GetMapping("/datasources") + @Operation(summary = "获取报表模板下的报表数据源") + @PreAuthorize("@ss.hasPermission('report:datasource:query')") + public CommonResult> getDatasourcePage(@Valid ReportDatasourceReqVO pageReqVO) { + return success(BeanUtils.toBean(datasourceService.getTemplateDatasourceList(pageReqVO), ReportDatasourceRespVO.class)); + } +} 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 new file mode 100644 index 000000000..f39f18184 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java @@ -0,0 +1,82 @@ +package com.cf.imes.module.report.controller.admin.template; + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.organ.core.context.OrganContextHolder; +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.service.template.ReportTemplateService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.security.PermitAll; +import javax.validation.Valid; + +import java.util.List; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; + +/** + * 报表模板信息控制器 + * + * @author Gqr + * @since 2024/7/3 14:22 + */ +@Tag(name = "管理后台 - 报表模板信息") +@RestController +@RequestMapping("/report") +@Validated +public class ReportTemplateController { + @Autowired + private ReportTemplateService templateService; + + @PutMapping("/template") + @Operation(summary = "创建报表模板信息") + @PreAuthorize("@ss.hasPermission('report:template:create')") + @PermitAll + public CommonResult createTemplate(@Valid @RequestBody ReportTemplateSaveReqVO createReqVO) { + OrganContextHolder.setOrganId(1L); + return success(templateService.createReportTemplate(createReqVO)); + } + + @PostMapping("/template") + @Operation(summary = "更新报表模板信息") + @PreAuthorize("@ss.hasPermission('report:template:update')") + public CommonResult updateTemplate(@Valid @RequestBody ReportTemplateSaveReqVO updateReqVO) { + templateService.updateReportTemplate(updateReqVO); + return success(true); + } + + @DeleteMapping("/template/{id}") + @Operation(summary = "删除报表模板信息") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('report:template:delete')") + public CommonResult deleteReportTemplate(@PathVariable("id") Long id) { + templateService.deleteReportTemplate(id); + return success(true); + } + + @GetMapping("/template/{id}") + @Operation(summary = "获得报表模板信息") + @Parameter(name = "id", description = "编号", required = true, example = "1") + @PreAuthorize("@ss.hasPermission('report:template:query')") + public CommonResult getReportTemplate(@PathVariable("id") Long id) { + ReportTemplateDO template = templateService.getReportTemplate(id); + return success(BeanUtils.toBean(template, ReportTemplateRespVO.class)); + } + + @GetMapping("/templates") + @Operation(summary = "获得报表模板信息列表") + @PreAuthorize("@ss.hasPermission('report:template:query')") + @PermitAll + public CommonResult> getTemplatePage(@Valid ReportTemplateReqVO pageReqVO) { + return success(BeanUtils.toBean(templateService.getReportTemplateList(pageReqVO), ReportTemplateRespVO.class)); + } +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetParameterVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetParameterVO.java new file mode 100644 index 000000000..e989fe9ad --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetParameterVO.java @@ -0,0 +1,29 @@ +package com.cf.imes.module.report.controller.admin.template.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Gqr + * @since 2024/7/8 11:36 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ReportDatasetParameterVO { + /** + * 参数名称 + */ + private String name; + + /** + * 类型 + */ + private Integer type; + + /** + * 默认值 + */ + private String defaultValue; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetReqVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetReqVO.java new file mode 100644 index 000000000..e009ab890 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetReqVO.java @@ -0,0 +1,20 @@ +package com.cf.imes.module.report.controller.admin.template.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +/** + * @author Gqr + * @since 2024/7/8 10:58 + */ +@Schema(description = "管理后台 - 报表数据集 Request VO") +@Data +@ToString(callSuper = true) +public class ReportDatasetReqVO { + @Schema(description = "数据集名称", example = "测试数据集") + private String name; + + @Schema(description = "数据源id", example = "1", requiredMode = Schema.RequiredMode.REQUIRED) + private Long datasourceId; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetRespVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetRespVO.java new file mode 100644 index 000000000..0f9774bfe --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetRespVO.java @@ -0,0 +1,33 @@ +package com.cf.imes.module.report.controller.admin.template.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author Gqr + * @since 2024/7/8 11:01 + */ +@Schema(description = "管理后台 - 报表数据集 Response VO") +@Data +public class ReportDatasetRespVO { + @Schema(description = "数据集id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "数据集名称", example = "测试数据集") + private String name; + + @Schema(description = "数据源id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long datasourceId; + + @Schema(description = "动态查询SQL") + private String dbSql; + + @Schema(description = "参数列表") + private List params; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetSaveReqVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetSaveReqVO.java new file mode 100644 index 000000000..af1c3c470 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasetSaveReqVO.java @@ -0,0 +1,33 @@ +package com.cf.imes.module.report.controller.admin.template.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author Gqr + * @since 2024/7/8 11:01 + */ +@Schema(description = "管理后台 - 报表数据集新增/修改 Request VO") +@Data +@Builder +public class ReportDatasetSaveReqVO { + @Schema(description = "数据集id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "数据集名称", example = "测试数据集") + private String name; + + @Schema(description = "数据源id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "数据源id不能为空") + private Long datasourceId; + + @Schema(description = "动态查询SQL") + private String dbSql; + + @Schema(description = "参数列表") + private List params; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceReqVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceReqVO.java new file mode 100644 index 000000000..a7627bedb --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceReqVO.java @@ -0,0 +1,23 @@ +package com.cf.imes.module.report.controller.admin.template.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +/** + * @author Gqr + * @since 2024/7/8 11:01 + */ +@Schema(description = "管理后台 - 报表数据源 Request VO") +@Data +@ToString(callSuper = true) +public class ReportDatasourceReqVO { + @Schema(description = "模板id", example = "1", requiredMode = Schema.RequiredMode.REQUIRED) + private Long reportId; + + @Schema(description = "数据源名称", example = "测试库") + private String name; + + @Schema(description = "模板类型,0内置、1自定义", example = "0") + private Integer type; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceRespVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceRespVO.java new file mode 100644 index 000000000..1dfe2bd73 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceRespVO.java @@ -0,0 +1,45 @@ +package com.cf.imes.module.report.controller.admin.template.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author Gqr + * @since 2024/7/5 16:34 + */ +@Schema(description = "管理后台 - 报表数据源 Response VO") +@Data +public class ReportDatasourceRespVO { + + @Schema(description = "数据源id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "模板id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long reportId; + + @Schema(description = "数据源名称", example = "测试库") + private String name; + + @Schema(description = "模板类型,0内置、1自定义", example = "0") + private Integer type; + + @Schema(description = "数据源驱动类",example = "com.mysql.cj.jdbc.Driver") + private String dbDriver; + + @Schema(description = "数据源地址", example = "https://www.cf.com") + private String dbUrl; + + @Schema(description = "数据源用户名", example = "晨丰") + private String dbUsername; + + @Schema(description = "数据源密码", example = "晨丰") + private String dbPassword; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "备注", example = "该模板仅供生产使用") + private String remark; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceSaveReqVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceSaveReqVO.java new file mode 100644 index 000000000..99043d95f --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportDatasourceSaveReqVO.java @@ -0,0 +1,44 @@ +package com.cf.imes.module.report.controller.admin.template.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author Gqr + * @since 2024/7/8 11:01 + */ +@Schema(description = "管理后台 - 报表数据源新增/修改 Request VO") +@Data +@Builder +public class ReportDatasourceSaveReqVO { + @Schema(description = "数据源id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "模板id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "模板id不能为空") + private Long reportId; + + @Schema(description = "数据源名称", example = "测试库") + private String name; + + @Schema(description = "模板类型,0内置、1自定义", example = "0") + private Integer type; + + @Schema(description = "数据源驱动类",example = "com.mysql.cj.jdbc.Driver") + private String dbDriver; + + @Schema(description = "数据源地址", example = "https://www.cf.com") + private String dbUrl; + + @Schema(description = "数据源用户名", example = "晨丰") + private String dbUsername; + + @Schema(description = "数据源密码", example = "晨丰") + private String dbPassword; + + @Schema(description = "备注", example = "该模板仅供生产使用") + private String remark; +} 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 new file mode 100644 index 000000000..584d38d6a --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateReqVO.java @@ -0,0 +1,20 @@ +package com.cf.imes.module.report.controller.admin.template.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +/** + * @author Gqr + * @since 2024/7/3 11:49 + */ +@Schema(description = "管理后台 - 报表模板信息列表 Request VO") +@Data +@ToString(callSuper = true) +public class ReportTemplateReqVO { + @Schema(description = "模板名称", example = "生产单模板") + private String name; + + @Schema(description = "模板类型,0内置、1自定义", example = "1") + private Integer type; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateRespVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateRespVO.java new file mode 100644 index 000000000..0b53092e6 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateRespVO.java @@ -0,0 +1,32 @@ +package com.cf.imes.module.report.controller.admin.template.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author Gqr + * @since 2024/7/3 11:53 + */ +@Schema(description = "管理后台 - 报表模板信息 Response VO") +@Data +public class ReportTemplateRespVO { + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15176") + private Long id; + + @Schema(description = "模板名称", example = "生产单模板") + private String name; + + @Schema(description = "报表模板") + private String template; + + @Schema(description = "模板类型,0内置、1自定义", example = "2") + private Long type; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "备注", example = "该模板仅供生产使用") + private String remark; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateSaveReqVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateSaveReqVO.java new file mode 100644 index 000000000..3225c1e2e --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateSaveReqVO.java @@ -0,0 +1,30 @@ +package com.cf.imes.module.report.controller.admin.template.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; + +/** + * @author Gqr + * @since 2024/7/3 11:58 + */ +@Schema(description = "管理后台 - 报表模板信息新增/修改 Request VO") +@Data +@Builder +public class ReportTemplateSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "模板名称", example = "生产单模板") + private String name; + + @Schema(description = "报表模板") + private String template; + + @Schema(description = "模板类型,0内置、1自定义", example = "1") + private Integer type; + + @Schema(description = "备注", example = "该模板仅供生产使用") + private String remark; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportDatasetDO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportDatasetDO.java new file mode 100644 index 000000000..23f3cc513 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportDatasetDO.java @@ -0,0 +1,51 @@ +package com.cf.imes.module.report.dal.dataobject.template; + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import com.cf.imes.framework.mybatis.core.type.ObjectListTypeHandler; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasetParameterVO; +import lombok.*; + +import java.util.List; + +/** + * 报表数据集DO + * + * @author Gqr + * @since 2024/7/8 11:01 + */ +@TableName(value = "report_dataset", autoResultMap = true) +@KeySequence("report_dataset_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ReportDatasetDO extends BaseDO { + /** + * 数据集id + */ + @TableId + private Long id; + /** + * 数据集名称 + */ + private String name; + /** + * 数据源id + */ + private Long datasourceId; + /** + * 动态查询SQL + */ + private String dbSql; + /** + * 参数列表 + */ + @TableField(typeHandler = ObjectListTypeHandler.class) + private List params; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportDatasourceDO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportDatasourceDO.java new file mode 100644 index 000000000..f9fcb245d --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportDatasourceDO.java @@ -0,0 +1,69 @@ +package com.cf.imes.module.report.dal.dataobject.template; + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +/** + * 报表数据源DO + * + * @author Gqr + * @since 2024/7/8 11:01 + */ +@TableName("report_datasource") +@KeySequence("report_datasource_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ReportDatasourceDO extends BaseDO { + /** + * 数据源id + */ + @TableId + private Long id; + /** + * 模板id + */ + private Long reportId; + /** + * 数据源名称 + */ + private String name; + /** + * 模板类型,0内置、1自定义 + */ + private Long type; + /** + * 数据库类型 + */ + private String dbType; + /** + * 数据源驱动类 + */ + private String dbDriver; + /** + * 数据源地址 + */ + private String dbUrl; + /** + * 数据源用户名 + */ + private String dbUsername; + /** + * 数据源密码 + */ + private String dbPassword; + /** + * 备注 + */ + private String remark; + /** + * 组织id + */ + private Long organId; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportTemplateDO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportTemplateDO.java new file mode 100644 index 000000000..8c38e958d --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportTemplateDO.java @@ -0,0 +1,48 @@ +package com.cf.imes.module.report.dal.dataobject.template; + +import com.baomidou.mybatisplus.annotation.*; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +/** + * 报表模板信息DO + * + * @author Gqr + * @since 2024/7/8 11:01 + */ +@TableName("report_template") +@KeySequence("report_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ReportTemplateDO extends BaseDO { + /** + * 主键 + */ + @TableId + private Long id; + /** + * 模板名称 + */ + private String name; + /** + * 报表模板 + */ + private String template; + /** + * 模板类型,0内置、1自定义 + */ + private Long type; + /** + * 备注 + */ + private String remark; + + /** + * 组织id + */ + private Long organId; +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportDatasetMapper.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportDatasetMapper.java new file mode 100644 index 000000000..9e8e20c77 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportDatasetMapper.java @@ -0,0 +1,15 @@ +package com.cf.imes.module.report.dal.mysql.template; + +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.module.report.dal.dataobject.template.ReportDatasetDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 报表数据集 Mapper + * + * @author Gqr + * @since 2024/7/8 11:55 + */ +@Mapper +public interface ReportDatasetMapper extends BaseMapperX { +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportDatasourceMapper.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportDatasourceMapper.java new file mode 100644 index 000000000..0cca2271a --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportDatasourceMapper.java @@ -0,0 +1,15 @@ +package com.cf.imes.module.report.dal.mysql.template; + +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.module.report.dal.dataobject.template.ReportDatasourceDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 报表数据源 Mapper + * + * @author Gqr + * @since 2024/7/8 11:01 + */ +@Mapper +public interface ReportDatasourceMapper extends BaseMapperX { +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportTemplateMapper.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportTemplateMapper.java new file mode 100644 index 000000000..601b9f9e3 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/mysql/template/ReportTemplateMapper.java @@ -0,0 +1,15 @@ +package com.cf.imes.module.report.dal.mysql.template; + +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 报表模板信息 Mapper + * + * @author Gqr + * @since 2024/7/3 11:43 + */ +@Mapper +public interface ReportTemplateMapper extends BaseMapperX { +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasetService.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasetService.java new file mode 100644 index 000000000..7ef23e8b4 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasetService.java @@ -0,0 +1,55 @@ +package com.cf.imes.module.report.service.template; + +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasetReqVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasetSaveReqVO; +import com.cf.imes.module.report.dal.dataobject.template.ReportDatasetDO; + +import javax.validation.Valid; +import java.util.List; + +/** + * 报表数据集 Service 接口 + * + * @author Gqr + * @since 2024/7/8 11:51 + */ +public interface ReportDatasetService { + /** + * 创建报表数据集 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createDataset(@Valid ReportDatasetSaveReqVO createReqVO); + + /** + * 更新报表数据集 + * + * @param updateReqVO 更新信息 + */ + void updateDataset(@Valid ReportDatasetSaveReqVO updateReqVO); + + /** + * 删除报表数据集 + * + * @param id 编号 + */ + void deleteDataset(Long id); + + /** + * 获得报表数据集 + * + * @param id 编号 + * @return 报表数据集 + */ + ReportDatasetDO getDataset(Long id); + + /** + * 获得报表数据集分页 + * + * @param pageReqVO 分页查询 + * @return 报表数据集分页 + */ + List getDatasetList(ReportDatasetReqVO reqVO); + +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasetServiceImpl.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasetServiceImpl.java new file mode 100644 index 000000000..f929007c3 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasetServiceImpl.java @@ -0,0 +1,74 @@ +package com.cf.imes.module.report.service.template; + +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasetReqVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasetSaveReqVO; +import com.cf.imes.module.report.dal.dataobject.template.ReportDatasetDO; +import com.cf.imes.module.report.dal.mysql.template.ReportDatasetMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.module.report.enums.ErrorCodeConstants.DATASET_NOT_EXISTS; + +/** + * 报表数据集 Service 实现类 + * + * @author Gqr + * @since 2024/7/8 11:01 + */ +@Service +@Validated +public class ReportDatasetServiceImpl implements ReportDatasetService { + @Resource + private ReportDatasetMapper datasetMapper; + + @Override + public Long createDataset(ReportDatasetSaveReqVO createReqVO) { + // 插入 + ReportDatasetDO dataset = BeanUtils.toBean(createReqVO, ReportDatasetDO.class); + datasetMapper.insert(dataset); + // 返回 + return dataset.getId(); + } + + @Override + public void updateDataset(ReportDatasetSaveReqVO updateReqVO) { + // 校验存在 + validateDatasetExists(updateReqVO.getId()); + // 更新 + ReportDatasetDO updateObj = BeanUtils.toBean(updateReqVO, ReportDatasetDO.class); + datasetMapper.updateById(updateObj); + } + + @Override + public void deleteDataset(Long id) { + // 校验存在 + validateDatasetExists(id); + // 删除 + datasetMapper.deleteById(id); + } + + private void validateDatasetExists(Long id) { + if (datasetMapper.selectById(id) == null) { + throw exception(DATASET_NOT_EXISTS); + } + } + + @Override + public ReportDatasetDO getDataset(Long id) { + return datasetMapper.selectById(id); + } + + @Override + public List getDatasetList(ReportDatasetReqVO reqVO) { + return datasetMapper.selectList(new LambdaQueryWrapperX() + .eq(ReportDatasetDO::getDatasourceId, reqVO.getDatasourceId()) + .likeIfPresent(ReportDatasetDO::getName, reqVO.getName()) + .orderByDesc(ReportDatasetDO::getCreateTime)); + } +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasourceService.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasourceService.java new file mode 100644 index 000000000..44f40d984 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasourceService.java @@ -0,0 +1,54 @@ +package com.cf.imes.module.report.service.template; + +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasourceReqVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasourceSaveReqVO; +import com.cf.imes.module.report.dal.dataobject.template.ReportDatasourceDO; + +import javax.validation.Valid; +import java.util.List; + +/** + * 报表数据源 Service 接口 + * + * @author Gqr + * @since 2024/7/8 11:01 + */ +public interface ReportDatasourceService { + /** + * 创建报表数据源 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createDatasource(@Valid ReportDatasourceSaveReqVO createReqVO); + + /** + * 更新报表数据源 + * + * @param updateReqVO 更新信息 + */ + void updateDatasource(@Valid ReportDatasourceSaveReqVO updateReqVO); + + /** + * 删除报表数据源 + * + * @param id 编号 + */ + void deleteDatasource(Long id); + + /** + * 获得报表数据源 + * + * @param id 编号 + * @return 报表数据源 + */ + ReportDatasourceDO getDatasource(Long id); + + /** + * 获取模板下的数据源列表 + * + * @param pageReqVO 分页查询 + * @return 报表数据源分页 + */ + List getTemplateDatasourceList(ReportDatasourceReqVO pageReqVO); +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasourceServiceImpl.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasourceServiceImpl.java new file mode 100644 index 000000000..e878212ec --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportDatasourceServiceImpl.java @@ -0,0 +1,80 @@ +package com.cf.imes.module.report.service.template; + +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasourceReqVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasourceSaveReqVO; +import com.cf.imes.module.report.dal.dataobject.template.ReportDatasourceDO; +import com.cf.imes.module.report.dal.mysql.template.ReportDatasourceMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.module.report.enums.ErrorCodeConstants.DATASOURCE_NOT_EXISTS; + +/** + * 报表数据源 Service 实现类 + * + * @author Gqr + * @since 2024/7/8 11:01 + */ +@Service +@Validated +public class ReportDatasourceServiceImpl implements ReportDatasourceService { + @Resource + private ReportDatasourceMapper datasourceMapper; + + @Override + public Long createDatasource(ReportDatasourceSaveReqVO createReqVO) { + // 插入 + ReportDatasourceDO datasource = BeanUtils.toBean(createReqVO, ReportDatasourceDO.class); + datasourceMapper.insert(datasource); + // 返回 + return datasource.getId(); + } + + @Override + public void updateDatasource(ReportDatasourceSaveReqVO updateReqVO) { + // 校验存在 + validateDatasourceExists(updateReqVO.getId()); + // 更新 + ReportDatasourceDO updateObj = BeanUtils.toBean(updateReqVO, ReportDatasourceDO.class); + datasourceMapper.updateById(updateObj); + } + + @Override + public void deleteDatasource(Long id) { + // 校验存在 + validateDatasourceExists(id); + // 删除 + datasourceMapper.deleteById(id); + } + + /** + * 校验数据源是否存在 + * + * @param id + */ + private void validateDatasourceExists(Long id) { + if (datasourceMapper.selectById(id) == null) { + throw exception(DATASOURCE_NOT_EXISTS); + } + } + + @Override + public ReportDatasourceDO getDatasource(Long id) { + return datasourceMapper.selectById(id); + } + + @Override + public List getTemplateDatasourceList(ReportDatasourceReqVO reqVO) { + return datasourceMapper.selectList(new LambdaQueryWrapperX() + .eq(ReportDatasourceDO::getReportId, reqVO.getReportId()) + .likeIfPresent(ReportDatasourceDO::getName, reqVO.getName()) + .eq(ReportDatasourceDO::getType, reqVO.getType()) + .orderByDesc(ReportDatasourceDO::getCreateTime)); + } +} diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java new file mode 100644 index 000000000..232057d53 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java @@ -0,0 +1,54 @@ +package com.cf.imes.module.report.service.template; + +import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO; +import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO; + +import javax.validation.Valid; +import java.util.List; + +/** + * 报表模板信息 Service 接口 + * + * @author Gqr + * @since 2024/7/3 11:56 + */ +public interface ReportTemplateService { + /** + * 创建报表模板信息 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createReportTemplate(@Valid ReportTemplateSaveReqVO createReqVO); + + /** + * 更新报表模板信息 + * + * @param updateReqVO 更新信息 + */ + void updateReportTemplate(@Valid ReportTemplateSaveReqVO updateReqVO); + + /** + * 删除报表模板信息 + * + * @param id 编号 + */ + void deleteReportTemplate(Long id); + + /** + * 获得报表模板信息 + * + * @param id 编号 + * @return 报表模板信息 + */ + ReportTemplateDO getReportTemplate(Long id); + + /** + * 获得报表模板信息列表 + * + * @param pageReqVO 查询参数 + * @return 报表模板信息列表 + */ + List getReportTemplateList(ReportTemplateReqVO pageReqVO); +} 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 new file mode 100644 index 000000000..e8e85618b --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java @@ -0,0 +1,88 @@ +package com.cf.imes.module.report.service.template; + +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO; +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.dal.mysql.template.ReportTemplateMapper; +import com.cf.imes.module.report.enums.ErrorCodeConstants; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 报表模板信息 Service 实现类 + * + * @author Gqr + * @since 2024/7/3 12:00 + */ +@Service +@Validated +public class ReportTemplateServiceImpl implements ReportTemplateService { + @Resource + private ReportTemplateMapper templateMapper; + + @Override + public Long createReportTemplate(ReportTemplateSaveReqVO createReqVO) { + String templateContent = createReqVO.getTemplate(); + if(StringUtils.isNotEmpty(templateContent)) { + // todo template压缩待完善 + } + // 插入 + ReportTemplateDO template = BeanUtils.toBean(createReqVO, ReportTemplateDO.class); + templateMapper.insert(template); + // 返回主键 + return template.getId(); + } + + @Override + public void updateReportTemplate(ReportTemplateSaveReqVO updateReqVO) { + // 校验存在 + validateTemplateExists(updateReqVO.getId()); + String templateContent = updateReqVO.getTemplate(); + if (StringUtils.isNotEmpty(templateContent)) { + // todo template压缩待完善 + } + // 更新 + ReportTemplateDO updateObj = BeanUtils.toBean(updateReqVO, ReportTemplateDO.class); + templateMapper.updateById(updateObj); + } + + @Override + public void deleteReportTemplate(Long id) { + // 校验存在 + validateTemplateExists(id); + // 删除 + templateMapper.deleteById(id); + } + + /** + * 校验模板是否存在 + * + * @param id + */ + private void validateTemplateExists(Long id) { + if (templateMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.TEMPLATE_NOT_EXISTS); + } + } + + @Override + public ReportTemplateDO getReportTemplate(Long id) { + return templateMapper.selectById(id); + } + + @Override + public List getReportTemplateList(ReportTemplateReqVO reqVO) { + return templateMapper.selectList(new LambdaQueryWrapperX() + .likeIfPresent(ReportTemplateDO::getName, reqVO.getName()) + .eq(ReportTemplateDO::getType, reqVO.getType()) + .orderByDesc(ReportTemplateDO::getCreateTime)); + } +} diff --git a/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/goview/GoViewDataServiceImplTest.java b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/goview/GoViewDataServiceImplTest.java deleted file mode 100644 index 3606a8273..000000000 --- a/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/goview/GoViewDataServiceImplTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.cf.imes.module.report.service.goview; - -import com.cf.imes.framework.test.core.ut.BaseDbUnitTest; -import com.cf.imes.module.report.controller.admin.goview.vo.data.GoViewDataRespVO; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.support.rowset.SqlRowSet; -import org.springframework.jdbc.support.rowset.SqlRowSetMetaData; - -import javax.annotation.Resource; -import java.util.Arrays; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -@Import(GoViewDataServiceImpl.class) -public class GoViewDataServiceImplTest extends BaseDbUnitTest { - - @Resource - private GoViewDataServiceImpl goViewDataService; - - @MockBean - private JdbcTemplate jdbcTemplate; - - @Test - public void testGetDataBySQL() { - // 准备参数 - String sql = "SELECT id, name FROM system_users"; - // mock 方法 - SqlRowSet sqlRowSet = mock(SqlRowSet.class); - when(jdbcTemplate.queryForRowSet(eq(sql))).thenReturn(sqlRowSet); - // mock 元数据 - SqlRowSetMetaData metaData = mock(SqlRowSetMetaData.class); - when(sqlRowSet.getMetaData()).thenReturn(metaData); - when(metaData.getColumnNames()).thenReturn(new String[]{"id", "name"}); - // mock 数据明细 - when(sqlRowSet.next()).thenReturn(true).thenReturn(true).thenReturn(false); - when(sqlRowSet.getObject("id")).thenReturn(1L).thenReturn(2L); - when(sqlRowSet.getObject("name")).thenReturn("晨丰科技").thenReturn("晨丰"); - - // 调用 - GoViewDataRespVO dataBySQL = goViewDataService.getDataBySQL(sql); - // 断言 - assertEquals(Arrays.asList("id", "name"), dataBySQL.getDimensions()); - assertEquals(2, dataBySQL.getDimensions().size()); - assertEquals(2, dataBySQL.getSource().get(0).size()); - assertEquals(1L, dataBySQL.getSource().get(0).get("id")); - assertEquals("晨丰科技", dataBySQL.getSource().get(0).get("name")); - assertEquals(2, dataBySQL.getSource().get(1).size()); - assertEquals(2L, dataBySQL.getSource().get(1).get("id")); - assertEquals("晨丰", dataBySQL.getSource().get(1).get("name")); - } - -} diff --git a/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/goview/GoViewProjectServiceImplTest.java b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/goview/GoViewProjectServiceImplTest.java deleted file mode 100644 index ad69e7bfb..000000000 --- a/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/goview/GoViewProjectServiceImplTest.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.cf.imes.module.report.service.goview; - -import com.cf.imes.framework.common.pojo.PageParam; -import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.framework.test.core.ut.BaseDbUnitTest; -import com.cf.imes.module.report.controller.admin.goview.vo.project.GoViewProjectCreateReqVO; -import com.cf.imes.module.report.controller.admin.goview.vo.project.GoViewProjectUpdateReqVO; -import com.cf.imes.module.report.dal.dataobject.goview.GoViewProjectDO; -import com.cf.imes.module.report.dal.mysql.goview.GoViewProjectMapper; -import com.cf.imes.module.report.enums.ErrorCodeConstants; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; - -import static com.cf.imes.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static com.cf.imes.framework.test.core.util.AssertUtils.assertPojoEquals; -import static com.cf.imes.framework.test.core.util.AssertUtils.assertServiceException; -import static com.cf.imes.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.*; - -/** - * {@link GoViewProjectServiceImpl} 的单元测试类 - * - * @author 晨丰科技 - */ -@Import(GoViewProjectServiceImpl.class) -public class GoViewProjectServiceImplTest extends BaseDbUnitTest { - - @Resource - private GoViewProjectServiceImpl goViewProjectService; - - @Resource - private GoViewProjectMapper goViewProjectMapper; - - @Test - public void testCreateProject_success() { - // 准备参数 - GoViewProjectCreateReqVO reqVO = randomPojo(GoViewProjectCreateReqVO.class); - - // 调用 - Long goViewProjectId = goViewProjectService.createProject(reqVO); - // 断言 - assertNotNull(goViewProjectId); - // 校验记录的属性是否正确 - GoViewProjectDO goViewProject = goViewProjectMapper.selectById(goViewProjectId); - assertPojoEquals(reqVO, goViewProject); - } - - @Test - public void testUpdateProject_success() { - // mock 数据 - GoViewProjectDO dbGoViewProject = randomPojo(GoViewProjectDO.class); - goViewProjectMapper.insert(dbGoViewProject);// @Sql: 先插入出一条存在的数据 - // 准备参数 - GoViewProjectUpdateReqVO reqVO = randomPojo(GoViewProjectUpdateReqVO.class, o -> { - o.setId(dbGoViewProject.getId()); // 设置更新的 ID - o.setStatus(randomCommonStatus()); - }); - - // 调用 - goViewProjectService.updateProject(reqVO); - // 校验是否更新正确 - GoViewProjectDO goViewProject = goViewProjectMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, goViewProject); - } - - @Test - public void testUpdateProject_notExists() { - // 准备参数 - GoViewProjectUpdateReqVO reqVO = randomPojo(GoViewProjectUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> goViewProjectService.updateProject(reqVO), ErrorCodeConstants.GO_VIEW_PROJECT_NOT_EXISTS); - } - - @Test - public void testDeleteProject_success() { - // mock 数据 - GoViewProjectDO dbGoViewProject = randomPojo(GoViewProjectDO.class); - goViewProjectMapper.insert(dbGoViewProject);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbGoViewProject.getId(); - - // 调用 - goViewProjectService.deleteProject(id); - // 校验数据不存在了 - assertNull(goViewProjectMapper.selectById(id)); - } - - @Test - public void testDeleteProject_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> goViewProjectService.deleteProject(id), ErrorCodeConstants.GO_VIEW_PROJECT_NOT_EXISTS); - } - - @Test - public void testGetProject() { - // mock 数据 - GoViewProjectDO dbGoViewProject = randomPojo(GoViewProjectDO.class); - goViewProjectMapper.insert(dbGoViewProject);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbGoViewProject.getId(); - - // 调用 - GoViewProjectDO goViewProject = goViewProjectService.getProject(id); - // 断言 - assertPojoEquals(dbGoViewProject, goViewProject); - } - - @Test - public void testGetMyGoViewProjectPage() { - // mock 数据 - GoViewProjectDO dbGoViewProject = randomPojo(GoViewProjectDO.class, o -> { // 等会查询到 - o.setCreator("1"); - }); - goViewProjectMapper.insert(dbGoViewProject); - // 测试 userId 不匹配 - goViewProjectMapper.insert(cloneIgnoreId(dbGoViewProject, o -> o.setCreator("2"))); - // 准备参数 - PageParam reqVO = new PageParam(); - Long userId = 1L; - - // 调用 - PageResult pageResult = goViewProjectService.getMyProjectPage(reqVO, userId); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbGoViewProject, pageResult.getList().get(0)); - } - -} diff --git a/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/JsonUtil.java b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/JsonUtil.java new file mode 100644 index 000000000..6d8522763 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/JsonUtil.java @@ -0,0 +1,146 @@ +package com.cf.imes.module.report.service.template; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Base64; +import java.util.zip.*; + +public class JsonUtil { + + + public static void main(String[] args) throws IOException { + + String data = ""; + System.out.println("原始大小:" + data.length()); + + + String zip = zipString(data); + System.out.println("zip压缩后大小:"+zip.length()); + String unzip = unzipString(zip); + System.out.println(unzip); + + String compress = compress(data); + System.out.println("compress压缩后大小:"+compress.length()); + String unCompress = unCompress(compress); + System.out.println(unCompress); + + + } + + /** + * 压缩 + */ + public static String zipString(String unzipString) { + /** + * https://www.yiibai.com/javazip/javazip_deflater.html#article-start + * 0 ~ 9 压缩等级 低到高 + * public static final int BEST_COMPRESSION = 9; 最佳压缩的压缩级别。 + * public static final int BEST_SPEED = 1; 压缩级别最快的压缩。 + * public static final int DEFAULT_COMPRESSION = -1; 默认压缩级别。 + * public static final int DEFAULT_STRATEGY = 0; 默认压缩策略。 + * public static final int DEFLATED = 8; 压缩算法的压缩方法(目前唯一支持的压缩方法)。 + * public static final int FILTERED = 1; 压缩策略最适用于大部分数值较小且数据分布随机分布的数据。 + * public static final int FULL_FLUSH = 3; 压缩刷新模式,用于清除所有待处理的输出并重置拆卸器。 + * public static final int HUFFMAN_ONLY = 2; 仅用于霍夫曼编码的压缩策略。 + * public static final int NO_COMPRESSION = 0; 不压缩的压缩级别。 + * public static final int NO_FLUSH = 0; 用于实现最佳压缩结果的压缩刷新模式。 + * public static final int SYNC_FLUSH = 2; 用于清除所有未决输出的压缩刷新模式; 可能会降低某些压缩算法的压缩率。 + */ + + //使用指定的压缩级别创建一个新的压缩器。 + Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION); + //设置压缩输入数据。 + deflater.setInput(unzipString.getBytes()); + //当被调用时,表示压缩应该以输入缓冲区的当前内容结束。 + deflater.finish(); + + final byte[] bytes = new byte[256]; + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(256); + + while (!deflater.finished()) { + //压缩输入数据并用压缩数据填充指定的缓冲区。 + int length = deflater.deflate(bytes); + outputStream.write(bytes, 0, length); + } + //关闭压缩器并丢弃任何未处理的输入。 + deflater.end(); + return Base64.getEncoder().encodeToString(outputStream.toByteArray()); + } + + /** + * 解压缩 + */ + public static String unzipString(String zipString) { + byte[] decode = Base64.getDecoder().decode(zipString); + + //创建一个新的解压缩器 https://www.yiibai.com/javazip/javazip_inflater.html + + Inflater inflater = new Inflater(); + //设置解压缩的输入数据。 + inflater.setInput(decode); + final byte[] bytes = new byte[256]; + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(256); + try { + //finished() 如果已到达压缩数据流的末尾,则返回true。 + while (!inflater.finished()) { + //将字节解压缩到指定的缓冲区中。 + int length = inflater.inflate(bytes); + outputStream.write(bytes, 0, length); + } + } catch (DataFormatException e) { + e.printStackTrace(); + return null; + } finally { + //关闭解压缩器并丢弃任何未处理的输入。 + inflater.end(); + } + + return outputStream.toString(); + } + + + // 使用 GZIP 进行压缩 + public static String compress(String str) throws IOException { + if (null == str || str.length() <= 0) { + return str; + } + // 创建一个新的输出流 + ByteArrayOutputStream out = new ByteArrayOutputStream(); + // 使用默认缓冲区大小创建新的输出流 + GZIPOutputStream gzip = new GZIPOutputStream(out); + // 将字节写入此输出流 + gzip.write(str.getBytes("utf-8")); // 因为后台默认字符集有可能是GBK字符集,所以此处需指定一个字符集 + gzip.close(); + // 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串 + return out.toString("ISO-8859-1"); + } + + + // 解压缩 + public static String unCompress(String str) throws IOException { + if (null == str || str.length() <= 0) { + return str; + } + // 创建一个新的输出流 + ByteArrayOutputStream out = new ByteArrayOutputStream(); + // 创建一个 ByteArrayInputStream,使用 buf 作为其缓冲 区数组 + ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes("ISO-8859-1")); + // 使用默认缓冲区大小创建新的输入流 + GZIPInputStream gzip = new GZIPInputStream(in); + byte[] buffer = new byte[256]; + int n = 0; + + // 将未压缩数据读入字节数组 + while ((n = gzip.read(buffer)) >= 0) { + out.write(buffer, 0, n); + } + // 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串 + return out.toString("utf-8"); + } + + + + + +} diff --git a/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportCommonServiceImplTest.java b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportCommonServiceImplTest.java new file mode 100644 index 000000000..09bfdeac0 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportCommonServiceImplTest.java @@ -0,0 +1,66 @@ +package com.cf.imes.module.report.service.template; + +import com.cf.imes.framework.organ.core.context.OrganContextHolder; +import com.cf.imes.framework.test.core.util.RandomUtils; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasetParameterVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasetSaveReqVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasourceSaveReqVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO; +import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Gqr + * @since 2024/7/5 17:05 + */ +public abstract class ReportCommonServiceImplTest { + + protected static final String TEMPLATE = ""; + + protected void setOrganId(Long... organId) { + OrganContextHolder.setOrganId(organId.length > 0 ? organId[0] : 1L); + } + + protected ReportTemplateSaveReqVO prepareTemplateReqVO(Long id) { + return ReportTemplateSaveReqVO.builder() + .id(id) + .name("单元测试模板") + .template(JsonUtil.zipString(TEMPLATE)) + .type(ReportTemplateTypeEnum.SYSTEM.getType()) + .remark(RandomUtils.randomString()) + .build(); + + } + + protected ReportDatasourceSaveReqVO prepareDatasourceReqVO(Long id, Long reportId) { + return ReportDatasourceSaveReqVO.builder() + .id(id) + .name("单元测试数据源") + .reportId(reportId) + .type(ReportTemplateTypeEnum.SYSTEM.getType()) + .dbDriver("com.mysql.cj.jdbc.Driver") + .dbUrl("jdbc:mysql://192.168.1.205:3307/imes_base?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true") + .dbUsername("root") + .dbPassword("root") + .remark(RandomUtils.randomString()) + .build(); + } + + protected ReportDatasetSaveReqVO prepareDatasetReqVO(Long id, Long datasourceId) { + ReportDatasetParameterVO idvo = new ReportDatasetParameterVO("id", 1, "1"); + ReportDatasetParameterVO appidvo = new ReportDatasetParameterVO("app_id", 2, "CF7526AD51"); + List params = new ArrayList<>() {{ + add(idvo); + add(appidvo); + }}; + return ReportDatasetSaveReqVO.builder() + .id(id) + .name("单元测试数据集") + .dbSql("select * from application where id = \"${param(\"id\")}\" and app_id = \"${param(\"app_id\")}\"") + .datasourceId(datasourceId) + .params(params) + .build(); + } +} diff --git a/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportDatasetServiceImplTest.java b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportDatasetServiceImplTest.java new file mode 100644 index 000000000..87f8acef3 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportDatasetServiceImplTest.java @@ -0,0 +1,113 @@ +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.*; +import com.cf.imes.module.report.dal.dataobject.template.ReportDatasetDO; +import com.cf.imes.module.report.dal.dataobject.template.ReportDatasourceDO; +import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.annotation.Resource; + +import java.util.List; + +import static com.cf.imes.framework.test.core.util.AssertUtils.assertServiceException; +import static com.cf.imes.framework.test.core.util.AssertUtils.isPojoEquals; +import static com.cf.imes.module.report.enums.ErrorCodeConstants.DATASET_NOT_EXISTS; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * @author Gqr + * @since 2024/7/8 14:22 + */ +@SpringBootTest +public class ReportDatasetServiceImplTest extends ReportCommonServiceImplTest{ + + @Resource + private ReportDatasetService reportDatasetService; + + @Resource + private ReportTemplateService reportTemplateService; + + @Resource + private ReportDatasourceService reportDatasourceService; + + + @Test + public void testCreateDataset_success() { + // 1、上下文添加组织id + setOrganId(); + + // 1、准备template参数 + // 2、插入template、断言自增id + // 3、用id查template、断言对象 + ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null); + Long templateId = reportTemplateService.createReportTemplate(createReqVO); + assertNotNull(templateId); + ReportTemplateDO template = reportTemplateService.getReportTemplate(templateId); + assertNotNull(template); + + // 1、准备datasource参数 + // 2、插入datasource、断言自增id + // 3、用id查datasource、断言对象 + ReportDatasourceSaveReqVO datasourceSaveReqVO = prepareDatasourceReqVO(null, templateId); + Long datasourceId = reportDatasourceService.createDatasource(datasourceSaveReqVO); + assertNotNull(datasourceId); + ReportDatasourceDO datasource = reportDatasourceService.getDatasource(datasourceId); + assertNotNull(datasource); + + // 1、准备dataset参数 + // 2、插入dataset、断言自增id + // 3、用id查dataset、断言对象 + ReportDatasetSaveReqVO datasetSaveReqVO = prepareDatasetReqVO(null, datasourceId); + Long datasetId = reportDatasetService.createDataset(datasetSaveReqVO); + assertNotNull(datasetId); + ReportDatasetDO dataset = reportDatasetService.getDataset(datasetId); + assertNotNull(dataset); + + //准备更新参数 + ReportDatasetSaveReqVO updateReqVO = prepareDatasetReqVO(datasetId, datasourceId); + // 更新 + reportDatasetService.updateDataset(updateReqVO); + // 校验是否更新正确 + ReportDatasetDO updateDataset = reportDatasetService.getDataset(updateReqVO.getId()); // 获取最新的 + isPojoEquals(updateDataset, updateReqVO); + + + // 列表查询参数准备 + ReportDatasetReqVO reqVO = new ReportDatasetReqVO(); + reqVO.setName(updateReqVO.getName()); + reqVO.setDatasourceId(updateReqVO.getDatasourceId()); + List datasetList = reportDatasetService.getDatasetList(reqVO); + + assertNotNull(datasetList); + assertNotEquals(datasetList.size(), 0); + + // 删除 + reportTemplateService.deleteReportTemplate(templateId); + reportDatasourceService.deleteDatasource(datasourceId); + reportDatasetService.deleteDataset(datasetId); + } + + + @Test + public void testUpdateDataset_notExists() { + setOrganId(); + // 准备参数 + ReportDatasetSaveReqVO updateReqVO = prepareDatasetReqVO(RandomUtils.randomLongId(), RandomUtils.randomLongId()); + // 调用, 并断言异常 + assertServiceException(() -> reportDatasetService.updateDataset(updateReqVO), DATASET_NOT_EXISTS); + } + + @Test + public void testDeleteDataset_notExists() { + setOrganId(); + // 准备参数 + Long id = RandomUtils.randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> reportDatasetService.deleteDataset(id), DATASET_NOT_EXISTS); + } +} 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 new file mode 100644 index 000000000..166bd3b48 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportDatasourceServiceImplTest.java @@ -0,0 +1,100 @@ +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.ReportDatasourceReqVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportDatasourceSaveReqVO; +import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO; +import com.cf.imes.module.report.dal.dataobject.template.ReportDatasourceDO; +import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO; +import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.annotation.Resource; + +import java.util.List; + +import static com.cf.imes.framework.test.core.util.AssertUtils.assertServiceException; +import static com.cf.imes.framework.test.core.util.AssertUtils.isPojoEquals; +import static com.cf.imes.module.report.enums.ErrorCodeConstants.DATASOURCE_NOT_EXISTS; +import static org.junit.jupiter.api.Assertions.*; + +/** + * @author Gqr + * @since 2024/7/5 17:01 + */ +@SpringBootTest +public class ReportDatasourceServiceImplTest extends ReportCommonServiceImplTest { + @Resource + ReportDatasourceService reportDatasourceService; + + @Resource + ReportTemplateService reportTemplateService; + + @Test + public void testCreateTemplate_success() { + // 1、上下文添加组织id + setOrganId(); + + // 1、准备template参数 + // 2、插入template、断言自增id + // 3、用id查template、断言对象 + ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null); + Long templateId = reportTemplateService.createReportTemplate(createReqVO); + assertNotNull(templateId); + ReportTemplateDO template = reportTemplateService.getReportTemplate(templateId); + assertNotNull(template); + + // 1、准备datasource参数 + // 2、插入datasource、断言自增id + // 3、用id查datasource、断言对象 + ReportDatasourceSaveReqVO datasourceSaveReqVO = prepareDatasourceReqVO(null, templateId); + Long datasourceId = reportDatasourceService.createDatasource(datasourceSaveReqVO); + assertNotNull(datasourceId); + ReportDatasourceDO datasource = reportDatasourceService.getDatasource(datasourceId); + assertNotNull(datasource); + + + //准备更新参数 + ReportDatasourceSaveReqVO updateReqVO = prepareDatasourceReqVO(datasourceId, templateId); + // 更新 + reportDatasourceService.updateDatasource(updateReqVO); + // 校验是否更新正确 + ReportDatasourceDO updateDatasouce = reportDatasourceService.getDatasource(updateReqVO.getId()); // 获取最新的 + isPojoEquals(updateDatasouce, updateReqVO); + + + // 列表查询参数准备 + ReportDatasourceReqVO reqVO = new ReportDatasourceReqVO(); + reqVO.setReportId(templateId); + reqVO.setType(ReportTemplateTypeEnum.SYSTEM.getType()); + reqVO.setName(updateReqVO.getName()); + List templateDatasourceList = reportDatasourceService.getTemplateDatasourceList(reqVO); + + assertNotNull(templateDatasourceList); + assertNotEquals(templateDatasourceList.size(),0); + + // 删除 + reportTemplateService.deleteReportTemplate(templateId); + reportDatasourceService.deleteDatasource(datasourceId); + } + + @Test + public void testUpdateTemplate_notExists() { + setOrganId(); + // 准备参数 + ReportDatasourceSaveReqVO updateReqVO = prepareDatasourceReqVO(RandomUtils.randomLongId(), RandomUtils.randomLongId()); + // 调用, 并断言异常 + assertServiceException(() -> reportDatasourceService.updateDatasource(updateReqVO), DATASOURCE_NOT_EXISTS); + } + + @Test + public void testDeleteTemplate_notExists() { + setOrganId(); + // 准备参数 + Long id = RandomUtils.randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> reportDatasourceService.deleteDatasource(id), DATASOURCE_NOT_EXISTS); + } +} diff --git a/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImplTest.java b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImplTest.java new file mode 100644 index 000000000..5b10b94c6 --- /dev/null +++ b/cf-module-report/cf-module-report-biz/src/test/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImplTest.java @@ -0,0 +1,128 @@ +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.ReportTemplateSaveReqVO; +import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO; +import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.annotation.Resource; + +import java.util.List; + +import static com.cf.imes.framework.test.core.util.AssertUtils.*; +import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_NOT_EXISTS; +import static org.junit.jupiter.api.Assertions.*; + +/** + * {@link ReportTemplateServiceImpl} 的单元测试类 + * + * @author Gqr + * @since 2024/7/3 14:35 + */ +@SpringBootTest +public class ReportTemplateServiceImplTest extends ReportCommonServiceImplTest { + + @Resource + private ReportTemplateServiceImpl reportTemplateService; + + @Test + public void testCreateTemplate_success() { + setOrganId(); + // 准备参数 + ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null); + System.out.println("template压缩后大小:" + createReqVO.getTemplate().length()); + // 插入 + Long templateId = reportTemplateService.createReportTemplate(createReqVO); + // 断言 + assertNotNull(templateId); + // 校验是否插入 + ReportTemplateDO template = reportTemplateService.getReportTemplate(templateId); + assertNotNull(template); + String templateUnZip = template.getTemplate(); + System.out.println("从库中读取template大小:" + templateUnZip.length()); + // 校验解压内容是否正确 + assertEquals(JsonUtil.unzipString(templateUnZip),TEMPLATE); + // 删除 + reportTemplateService.deleteReportTemplate(templateId); + } + + @Test + public void testUpdateTemplate_success() { + setOrganId(); + // 准备参数 + ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null); + System.out.println("template压缩后大小:" + createReqVO.getTemplate().length()); + // 插入 + Long templateId = reportTemplateService.createReportTemplate(createReqVO); + + //准备更新参数 + ReportTemplateSaveReqVO updateReqVO = prepareTemplateReqVO(templateId); + + // 更新 + reportTemplateService.updateReportTemplate(updateReqVO); + // 校验是否更新正确 + ReportTemplateDO template = reportTemplateService.getReportTemplate(updateReqVO.getId()); // 获取最新的 + isPojoEquals(template,updateReqVO); + // 删除 + reportTemplateService.deleteReportTemplate(templateId); + } + + @Test + public void testUpdateTemplate_notExists() { + setOrganId(); + // 准备参数 + ReportTemplateSaveReqVO updateReqVO = prepareTemplateReqVO(RandomUtils.randomLongId()); + // 调用, 并断言异常 + assertServiceException(() -> reportTemplateService.updateReportTemplate(updateReqVO), TEMPLATE_NOT_EXISTS); + } + + @Test + public void deleteTemplate_success() { + setOrganId(); + // 准备参数 + ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null); + // 插入 + Long templateId = reportTemplateService.createReportTemplate(createReqVO); + + // 删除 + reportTemplateService.deleteReportTemplate(templateId); + // 校验数据不存在了 + assertNull(reportTemplateService.getReportTemplate(templateId)); + } + + @Test + public void testDeleteTemplate_notExists() { + setOrganId(); + // 准备参数 + Long id = RandomUtils.randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> reportTemplateService.deleteReportTemplate(id), TEMPLATE_NOT_EXISTS); + } + + @Test + public void getTemplateList_success() { + setOrganId(2L); + + // 准备参数 + ReportTemplateSaveReqVO createReqVO = prepareTemplateReqVO(null); + // 插入 + Long templateId = reportTemplateService.createReportTemplate(createReqVO); + + + ReportTemplateReqVO reqVO = new ReportTemplateReqVO(); + reqVO.setType(ReportTemplateTypeEnum.SYSTEM.getType()); + reqVO.setName(createReqVO.getName()); + List reportTemplateList = reportTemplateService.getReportTemplateList(reqVO); + + assertNotNull(reportTemplateList); + assertNotEquals(reportTemplateList.size(),0); + assertEquals(reportTemplateList.get(0).getOrganId(),2L); + + // 删除 + reportTemplateService.deleteReportTemplate(templateId); + } +} From c87ba884b1b121c4382110fbd82c5fb9f589a992 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Mon, 8 Jul 2024 16:29:11 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9D=83=E9=99=90=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=B7=A5=E5=BA=8F=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E9=A1=B6=E9=83=A8=E8=8F=9C=E5=8D=95=E6=A0=8F=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=B7=A5=E5=BA=8F=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=9D=83=E9=99=90'product:process:query'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/admin/process/ProcessController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/process/ProcessController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/process/ProcessController.java index ca68d0afa..6b167bf2e 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/process/ProcessController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/process/ProcessController.java @@ -119,7 +119,7 @@ public class ProcessController { @GetMapping("/select") @Operation(summary = "查看当前登录用户的组织的工序信息") @Parameter(name = "userId", description = "当前登录的用户ID", required = true, example = "1") - @PreAuthorize("@ss.hasPermission('system:process:query')") + @PreAuthorize("@ss.hasAnyPermissions('system:process:query','product:process:query')") public CommonResult> getUserPage(@Valid @RequestParam("userId") Long userId) { return success(processService.getUserProcess(userId));