mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10:18:42 +08:00 
			
		
		
		
	【优化】ureport2菜单,初始化数据,按照规范重新进行命名处理
This commit is contained in:
		
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -13,7 +13,7 @@ public interface ErrorCodeConstants { | |||||||
|     ErrorCode GO_VIEW_PROJECT_NOT_EXISTS = new ErrorCode(1_003_000_000, "GoView 项目不存在"); |     ErrorCode GO_VIEW_PROJECT_NOT_EXISTS = new ErrorCode(1_003_000_000, "GoView 项目不存在"); | ||||||
|  |  | ||||||
|     // ========== UREPORT 模块 1-003-001-000 ========== |     // ========== UREPORT 模块 1-003-001-000 ========== | ||||||
|     ErrorCode UREPORT_FILE_NOT_EXISTS = new ErrorCode(1_003_001_000, "打印文件不存在,请检查 UReport 报表文件"); |     ErrorCode REPORT_DATA_NOT_EXISTS = new ErrorCode(1_003_001_001, "Ureport2报表不存在"); | ||||||
|     ErrorCode UREPORT_FILE_EXISTS = new ErrorCode(1_003_001_001, "报表名字已存在,请修改后再保存"); |  | ||||||
|  |  | ||||||
|  |     ErrorCode REPORT_DATABASE_NOT_EXISTS = new ErrorCode(1_003_001_001, "Ureport2报表数据源不存在"); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -0,0 +1,95 @@ | |||||||
|  | package cn.iocoder.yudao.module.report.controller.admin.ureport; | ||||||
|  |  | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import javax.annotation.Resource; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  | import org.springframework.security.access.prepost.PreAuthorize; | ||||||
|  | import io.swagger.v3.oas.annotations.tags.Tag; | ||||||
|  | import io.swagger.v3.oas.annotations.Parameter; | ||||||
|  | import io.swagger.v3.oas.annotations.Operation; | ||||||
|  |  | ||||||
|  | import javax.validation.constraints.*; | ||||||
|  | import javax.validation.*; | ||||||
|  | import javax.servlet.http.*; | ||||||
|  | import java.util.*; | ||||||
|  | import java.io.IOException; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||||
|  | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
|  | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||||||
|  | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||||||
|  | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | ||||||
|  | import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.*; | ||||||
|  | import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UReportDataDO; | ||||||
|  | import cn.iocoder.yudao.module.report.service.ureport.UReportDataService; | ||||||
|  |  | ||||||
|  | @Tag(name = "管理后台 - Ureport2报表") | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/report/ureport-data") | ||||||
|  | @Validated | ||||||
|  | public class UReportDataController { | ||||||
|  |  | ||||||
|  |     @Resource | ||||||
|  |     private UReportDataService uReportDataService; | ||||||
|  |  | ||||||
|  |     @PostMapping("/create") | ||||||
|  |     @Operation(summary = "创建Ureport2报表") | ||||||
|  |     @PreAuthorize("@ss.hasPermission('report:ureport-data:create')") | ||||||
|  |     public CommonResult<Long> createUReportData(@Valid @RequestBody UReportDataSaveReqVO createReqVO) { | ||||||
|  |         return success(uReportDataService.createUReportData(createReqVO)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @PutMapping("/update") | ||||||
|  |     @Operation(summary = "更新Ureport2报表") | ||||||
|  |     @PreAuthorize("@ss.hasPermission('report:ureport-data:update')") | ||||||
|  |     public CommonResult<Boolean> updateUReportData(@Valid @RequestBody UReportDataSaveReqVO updateReqVO) { | ||||||
|  |         uReportDataService.updateUReportData(updateReqVO); | ||||||
|  |         return success(true); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @DeleteMapping("/delete") | ||||||
|  |     @Operation(summary = "删除Ureport2报表") | ||||||
|  |     @Parameter(name = "id", description = "编号", required = true) | ||||||
|  |     @PreAuthorize("@ss.hasPermission('report:ureport-data:delete')") | ||||||
|  |     public CommonResult<Boolean> deleteUReportData(@RequestParam("id") Long id) { | ||||||
|  |         uReportDataService.deleteUReportData(id); | ||||||
|  |         return success(true); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @GetMapping("/get") | ||||||
|  |     @Operation(summary = "获得Ureport2报表") | ||||||
|  |     @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||||||
|  |     @PreAuthorize("@ss.hasPermission('report:ureport-data:query')") | ||||||
|  |     public CommonResult<UReportDataRespVO> getUReportData(@RequestParam("id") Long id) { | ||||||
|  |         UReportDataDO uReportData = uReportDataService.getUReportData(id); | ||||||
|  |         return success(BeanUtils.toBean(uReportData, UReportDataRespVO.class)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @GetMapping("/page") | ||||||
|  |     @Operation(summary = "获得Ureport2报表分页") | ||||||
|  |     @PreAuthorize("@ss.hasPermission('report:ureport-data:query')") | ||||||
|  |     public CommonResult<PageResult<UReportDataRespVO>> getUReportDataPage(@Valid UReportDataPageReqVO pageReqVO) { | ||||||
|  |         PageResult<UReportDataDO> pageResult = uReportDataService.getUReportDataPage(pageReqVO); | ||||||
|  |         return success(BeanUtils.toBean(pageResult, UReportDataRespVO.class)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @GetMapping("/export-excel") | ||||||
|  |     @Operation(summary = "导出Ureport2报表 Excel") | ||||||
|  |     @PreAuthorize("@ss.hasPermission('report:ureport-data:export')") | ||||||
|  |     @OperateLog(type = EXPORT) | ||||||
|  |     public void exportUReportDataExcel(@Valid UReportDataPageReqVO pageReqVO, | ||||||
|  |               HttpServletResponse response) throws IOException { | ||||||
|  |         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||||||
|  |         List<UReportDataDO> list = uReportDataService.getUReportDataPage(pageReqVO).getList(); | ||||||
|  |         // 导出 Excel | ||||||
|  |         ExcelUtils.write(response, "Ureport2报表.xls", "数据", UReportDataRespVO.class, | ||||||
|  |                         BeanUtils.toBean(list, UReportDataRespVO.class)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -1,95 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.report.controller.admin.ureport; |  | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageParam; |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; |  | ||||||
| import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |  | ||||||
| import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |  | ||||||
| import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; |  | ||||||
| import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UreportFilePageReqVO; |  | ||||||
| import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UreportFileRespVO; |  | ||||||
| import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UreportFileSaveReqVO; |  | ||||||
| import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UreportFileDO; |  | ||||||
| import cn.iocoder.yudao.module.report.service.ureport.UreportFileService; |  | ||||||
| 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.servlet.http.HttpServletResponse; |  | ||||||
| import javax.validation.Valid; |  | ||||||
| import java.io.IOException; |  | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |  | ||||||
| import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; |  | ||||||
|  |  | ||||||
| // TODO @赤焰: Ureport 改成 UReport |  | ||||||
| @Tag(name = "管理后台 - UReport2 报表") |  | ||||||
| @RestController |  | ||||||
| @RequestMapping("/report/ureport-file") |  | ||||||
| @Validated |  | ||||||
| public class UreportFileController { |  | ||||||
|  |  | ||||||
|     @Resource |  | ||||||
|     private UreportFileService ureportFileService; |  | ||||||
|  |  | ||||||
|     @PostMapping("/create") |  | ||||||
|     @Operation(summary = "创建 UReport2 报表") |  | ||||||
|     @PreAuthorize("@ss.hasPermission('report:ureport-file:create')") |  | ||||||
|     public CommonResult<Long> createUreportFile(@Valid @RequestBody UreportFileSaveReqVO createReqVO) { |  | ||||||
|         return success(ureportFileService.createUreportFile(createReqVO)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @PutMapping("/update") |  | ||||||
|     @Operation(summary = "更新 UReport2 报表") |  | ||||||
|     @PreAuthorize("@ss.hasPermission('report:ureport-file:update')") |  | ||||||
|     public CommonResult<Boolean> updateUreportFile(@Valid @RequestBody UreportFileSaveReqVO updateReqVO) { |  | ||||||
|         ureportFileService.updateUreportFile(updateReqVO); |  | ||||||
|         return success(true); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @DeleteMapping("/delete") |  | ||||||
|     @Operation(summary = "删除 UReport2 报表") |  | ||||||
|     @Parameter(name = "id", description = "编号", required = true) |  | ||||||
|     @PreAuthorize("@ss.hasPermission('report:ureport-file:delete')") |  | ||||||
|     public CommonResult<Boolean> deleteUreportFile(@RequestParam("id") Long id) { |  | ||||||
|         ureportFileService.deleteUreportFile(id); |  | ||||||
|         return success(true); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @GetMapping("/get") |  | ||||||
|     @Operation(summary = "获得 UReport2 报表") |  | ||||||
|     @Parameter(name = "id", description = "编号", required = true, example = "1024") |  | ||||||
|     @PreAuthorize("@ss.hasPermission('report:ureport-file:query')") |  | ||||||
|     public CommonResult<UreportFileRespVO> getUreportFile(@RequestParam("id") Long id) { |  | ||||||
|         UreportFileDO ureportFile = ureportFileService.getUreportFile(id); |  | ||||||
|         return success(BeanUtils.toBean(ureportFile, UreportFileRespVO.class)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @GetMapping("/page") |  | ||||||
|     @Operation(summary = "获得 UReport2 报表分页") |  | ||||||
|     @PreAuthorize("@ss.hasPermission('report:ureport-file:query')") |  | ||||||
|     public CommonResult<PageResult<UreportFileRespVO>> getUreportFilePage(@Valid UreportFilePageReqVO pageReqVO) { |  | ||||||
|         PageResult<UreportFileDO> pageResult = ureportFileService.getUreportFilePage(pageReqVO); |  | ||||||
|         return success(BeanUtils.toBean(pageResult, UreportFileRespVO.class)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // TODO @赤焰:导出是必须的么?没用可以删除哈 |  | ||||||
|     @GetMapping("/export-excel") |  | ||||||
|     @Operation(summary = "导出 UReport2 报表 Excel") |  | ||||||
|     @PreAuthorize("@ss.hasPermission('report:ureport-file:export')") |  | ||||||
|     @OperateLog(type = EXPORT) |  | ||||||
|     public void exportUreportFileExcel(@Valid UreportFilePageReqVO pageReqVO, |  | ||||||
|               HttpServletResponse response) throws IOException { |  | ||||||
|         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); |  | ||||||
|         List<UreportFileDO> list = ureportFileService.getUreportFilePage(pageReqVO).getList(); |  | ||||||
|         // 导出 Excel |  | ||||||
|         ExcelUtils.write(response, "Ureport2报表.xls", "数据", UreportFileRespVO.class, |  | ||||||
|                         BeanUtils.toBean(list, UreportFileRespVO.class)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -13,15 +13,15 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | |||||||
| @Data | @Data | ||||||
| @EqualsAndHashCode(callSuper = true) | @EqualsAndHashCode(callSuper = true) | ||||||
| @ToString(callSuper = true) | @ToString(callSuper = true) | ||||||
| public class UreportFilePageReqVO extends PageParam { | public class UReportDataPageReqVO extends PageParam { | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "文件名称", example = "赵六") |     @Schema(description = "文件名称", example = "李四") | ||||||
|     private String fileName; |     private String name; | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "状态", example = "1") |     @Schema(description = "状态", example = "1") | ||||||
|     private Integer status; |     private Integer status; | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "备注", example = "随便") |     @Schema(description = "备注", example = "你猜") | ||||||
|     private String remark; |     private String remark; | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "创建时间") |     @Schema(description = "创建时间") | ||||||
| @@ -1,6 +1,7 @@ | |||||||
| package cn.iocoder.yudao.module.report.controller.admin.ureport.vo; | package cn.iocoder.yudao.module.report.controller.admin.ureport.vo; | ||||||
| 
 | 
 | ||||||
| import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; | import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; | ||||||
|  | import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; | ||||||
| import cn.iocoder.yudao.module.system.enums.DictTypeConstants; | import cn.iocoder.yudao.module.system.enums.DictTypeConstants; | ||||||
| import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
| import com.alibaba.excel.annotation.ExcelProperty; | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
| @@ -12,22 +13,26 @@ import java.time.LocalDateTime; | |||||||
| @Schema(description = "管理后台 - Ureport2报表 Response VO") | @Schema(description = "管理后台 - Ureport2报表 Response VO") | ||||||
| @Data | @Data | ||||||
| @ExcelIgnoreUnannotated | @ExcelIgnoreUnannotated | ||||||
| public class UreportFileRespVO { | public class UReportDataRespVO { | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "9948") |     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26175") | ||||||
|     @ExcelProperty("ID") |     @ExcelProperty("ID") | ||||||
|     private Long id; |     private Long id; | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "文件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") |     @Schema(description = "文件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") | ||||||
|     @ExcelProperty("文件名称") |     @ExcelProperty("文件名称") | ||||||
|     private String fileName; |     private String name; | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |     @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||||
|     @ExcelProperty("状态") |     @ExcelProperty(value = "状态", converter = DictConvert.class) | ||||||
|     @DictFormat(DictTypeConstants.COMMON_STATUS) |     @DictFormat(DictTypeConstants.COMMON_STATUS) | ||||||
|     private Integer status; |     private Integer status; | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "备注", example = "随便") |     @Schema(description = "文件内容") | ||||||
|  |     @ExcelProperty("文件内容") | ||||||
|  |     private String content; | ||||||
|  | 
 | ||||||
|  |     @Schema(description = "备注", example = "你猜") | ||||||
|     @ExcelProperty("备注") |     @ExcelProperty("备注") | ||||||
|     private String remark; |     private String remark; | ||||||
| 
 | 
 | ||||||
| @@ -1,33 +1,30 @@ | |||||||
| package cn.iocoder.yudao.module.report.controller.admin.ureport.vo; | package cn.iocoder.yudao.module.report.controller.admin.ureport.vo; | ||||||
| 
 | 
 | ||||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |  | ||||||
| import cn.iocoder.yudao.framework.common.validation.InEnum; |  | ||||||
| import io.swagger.v3.oas.annotations.media.Schema; | import io.swagger.v3.oas.annotations.media.Schema; | ||||||
| import lombok.Data; | import lombok.*; | ||||||
| 
 | import java.util.*; | ||||||
| import javax.validation.constraints.NotEmpty; | import javax.validation.constraints.*; | ||||||
| import javax.validation.constraints.NotNull; | import java.util.*; | ||||||
| 
 | 
 | ||||||
| @Schema(description = "管理后台 - Ureport2报表新增/修改 Request VO") | @Schema(description = "管理后台 - Ureport2报表新增/修改 Request VO") | ||||||
| @Data | @Data | ||||||
| public class UreportFileSaveReqVO { | public class UReportDataSaveReqVO { | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "9948") |     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26175") | ||||||
|     private Long id; |     private Long id; | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "文件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") |     @Schema(description = "文件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") | ||||||
|     @NotEmpty(message = "文件名称不能为空") |     @NotEmpty(message = "文件名称不能为空") | ||||||
|     private String fileName; |     private String name; | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |     @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||||
|     @NotNull(message = "状态不能为空") |     @NotNull(message = "状态不能为空") | ||||||
|     @InEnum(CommonStatusEnum.class) |  | ||||||
|     private Integer status; |     private Integer status; | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "文件内容") |     @Schema(description = "文件内容") | ||||||
|     private String fileContent; |     private String content; | ||||||
| 
 | 
 | ||||||
|     @Schema(description = "备注", example = "随便") |     @Schema(description = "备注", example = "你猜") | ||||||
|     private String remark; |     private String remark; | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| @@ -1,5 +1,6 @@ | |||||||
| package cn.iocoder.yudao.module.report.dal.dataobject.ureport; | package cn.iocoder.yudao.module.report.dal.dataobject.ureport; | ||||||
| 
 | 
 | ||||||
|  | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
| import com.baomidou.mybatisplus.annotation.KeySequence; | import com.baomidou.mybatisplus.annotation.KeySequence; | ||||||
| import com.baomidou.mybatisplus.annotation.TableId; | import com.baomidou.mybatisplus.annotation.TableId; | ||||||
| @@ -11,35 +12,35 @@ import lombok.*; | |||||||
|  * |  * | ||||||
|  * @author 芋道源码 |  * @author 芋道源码 | ||||||
|  */ |  */ | ||||||
| @TableName("ureport_file") | @TableName("report_ureport_data") | ||||||
| @KeySequence("ureport_file_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | @KeySequence("report_ureport_data_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | ||||||
| @Data | @Data | ||||||
| @EqualsAndHashCode(callSuper = true) | @EqualsAndHashCode(callSuper = true) | ||||||
| @ToString(callSuper = true) | @ToString(callSuper = true) | ||||||
| @Builder | @Builder | ||||||
| @NoArgsConstructor | @NoArgsConstructor | ||||||
| @AllArgsConstructor | @AllArgsConstructor | ||||||
| public class UreportFileDO extends BaseDO { | public class UReportDataDO extends BaseDO { | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * ID |      * ID | ||||||
|      */ |      */ | ||||||
|     @TableId |     @TableId | ||||||
|     private Long id; |     private Long id; | ||||||
|     // TODO @赤焰:是不是用 name 就可以了。 |  | ||||||
|     /** |     /** | ||||||
|      * 文件名称 |      * 文件名称 | ||||||
|      */ |      */ | ||||||
|     private String fileName; |     private String name; | ||||||
|     /** |     /** | ||||||
|      * 状态 |      * 状态 | ||||||
|  |      * | ||||||
|  |      * 枚举  {@link  CommonStatusEnum#getStatus()} | ||||||
|      */ |      */ | ||||||
|     private Integer status; |     private Integer status; | ||||||
|     // TODO @赤焰:是不是用 string 就可以了。然后字段名用 content? |  | ||||||
|     /** |     /** | ||||||
|      * 文件内容 |      * 文件内容 | ||||||
|      */ |      */ | ||||||
|     private byte[] fileContent; |     private String content; | ||||||
|     /** |     /** | ||||||
|      * 备注 |      * 备注 | ||||||
|      */ |      */ | ||||||
| @@ -0,0 +1,60 @@ | |||||||
|  | package cn.iocoder.yudao.module.report.dal.mysql.ureport; | ||||||
|  |  | ||||||
|  | import java.util.*; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||||
|  | import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UReportDataDO; | ||||||
|  | import org.apache.ibatis.annotations.Mapper; | ||||||
|  | import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.*; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Ureport2报表 Mapper | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | @Mapper | ||||||
|  | public interface UReportDataMapper extends BaseMapperX<UReportDataDO> { | ||||||
|  |  | ||||||
|  |     default PageResult<UReportDataDO> selectPage(UReportDataPageReqVO reqVO) { | ||||||
|  |         return selectPage(reqVO, new LambdaQueryWrapperX<UReportDataDO>() | ||||||
|  |                 .likeIfPresent(UReportDataDO::getName, reqVO.getName()) | ||||||
|  |                 .eqIfPresent(UReportDataDO::getStatus, reqVO.getStatus()) | ||||||
|  |                 .eqIfPresent(UReportDataDO::getRemark, reqVO.getRemark()) | ||||||
|  |                 .betweenIfPresent(UReportDataDO::getCreateTime, reqVO.getCreateTime()) | ||||||
|  |                 .orderByDesc(UReportDataDO::getId)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 根据名字查询报表 | ||||||
|  |      * @param name 报表名字 | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     default List<UReportDataDO> selectByName(String name){ | ||||||
|  |         return selectList(new LambdaQueryWrapperX<UReportDataDO>() | ||||||
|  |                 .eqIfPresent(UReportDataDO::getName,name)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 根据名字查询报表 | ||||||
|  |      * @param name 报表名字 | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     default UReportDataDO selectOneByName(String name){ | ||||||
|  |         return selectOne(new LambdaQueryWrapperX<UReportDataDO>() | ||||||
|  |                 .eqIfPresent(UReportDataDO::getName,name)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 根据名字删除报表 | ||||||
|  |      * @param name 报表名字 | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     default int deleteByName(String name){ | ||||||
|  |         return delete(new LambdaQueryWrapperX<UReportDataDO>() | ||||||
|  |                 .eqIfPresent(UReportDataDO::getName,name)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -1,29 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.report.dal.mysql.ureport; |  | ||||||
|  |  | ||||||
| import java.util.*; |  | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; |  | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |  | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |  | ||||||
| import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UreportFileDO; |  | ||||||
| import org.apache.ibatis.annotations.Mapper; |  | ||||||
| import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.*; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Ureport2报表 Mapper |  | ||||||
|  * |  | ||||||
|  * @author 芋道源码 |  | ||||||
|  */ |  | ||||||
| @Mapper |  | ||||||
| public interface UreportFileMapper extends BaseMapperX<UreportFileDO> { |  | ||||||
|  |  | ||||||
|     default PageResult<UreportFileDO> selectPage(UreportFilePageReqVO reqVO) { |  | ||||||
|         return selectPage(reqVO, new LambdaQueryWrapperX<UreportFileDO>() |  | ||||||
|                 .likeIfPresent(UreportFileDO::getFileName, reqVO.getFileName()) |  | ||||||
|                 .eqIfPresent(UreportFileDO::getStatus, reqVO.getStatus()) |  | ||||||
|                 .eqIfPresent(UreportFileDO::getRemark, reqVO.getRemark()) |  | ||||||
|                 .betweenIfPresent(UreportFileDO::getCreateTime, reqVO.getCreateTime()) |  | ||||||
|                 .orderByDesc(UreportFileDO::getId)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -1,10 +1,17 @@ | |||||||
| package cn.iocoder.yudao.module.report.framework.security.config; | package cn.iocoder.yudao.module.report.framework.security.config; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum; | ||||||
| import cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer; | import cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer; | ||||||
|  | import cn.iocoder.yudao.framework.security.config.SecurityProperties; | ||||||
|  | import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi; | ||||||
|  | import org.springframework.boot.web.servlet.FilterRegistrationBean; | ||||||
| import org.springframework.context.annotation.Bean; | import org.springframework.context.annotation.Bean; | ||||||
| import org.springframework.context.annotation.Configuration; | import org.springframework.context.annotation.Configuration; | ||||||
| import org.springframework.security.config.annotation.web.builders.HttpSecurity; | import org.springframework.security.config.annotation.web.builders.HttpSecurity; | ||||||
| import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; | import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; | ||||||
|  | import org.springframework.util.StringUtils; | ||||||
|  |  | ||||||
|  | import javax.annotation.Resource; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Report 模块的 Security 配置 |  * Report 模块的 Security 配置 | ||||||
| @@ -12,6 +19,9 @@ import org.springframework.security.config.annotation.web.configurers.Expression | |||||||
| @Configuration("reportSecurityConfiguration") | @Configuration("reportSecurityConfiguration") | ||||||
| public class SecurityConfiguration { | public class SecurityConfiguration { | ||||||
|  |  | ||||||
|  |     @Resource | ||||||
|  |     private OAuth2TokenApi oauth2TokenApi; | ||||||
|  |  | ||||||
|     @Bean("reportAuthorizeRequestsCustomizer") |     @Bean("reportAuthorizeRequestsCustomizer") | ||||||
|     public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { |     public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { | ||||||
|         return new AuthorizeRequestsCustomizer() { |         return new AuthorizeRequestsCustomizer() { | ||||||
| @@ -25,4 +35,16 @@ public class SecurityConfiguration { | |||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 创建 UReportFilter 过滤器,响应 header 设置 token | ||||||
|  |      */ | ||||||
|  |     /*@Bean | ||||||
|  |     public FilterRegistrationBean<UReportFilter> uReportFilterFilterRegistrationBean() { | ||||||
|  |         FilterRegistrationBean<UReportFilter> registrationBean = new FilterRegistrationBean<>(); | ||||||
|  |         registrationBean.setFilter(new UReportFilter(oauth2TokenApi)); | ||||||
|  |         registrationBean.setOrder(WebFilterOrderEnum.TRACE_FILTER); | ||||||
|  |         return registrationBean; | ||||||
|  |     }*/ | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -0,0 +1,80 @@ | |||||||
|  | package cn.iocoder.yudao.module.report.framework.security.config; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.common.exception.ServiceException; | ||||||
|  | import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; | ||||||
|  | import cn.iocoder.yudao.framework.security.core.LoginUser; | ||||||
|  | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | ||||||
|  | import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; | ||||||
|  | import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; | ||||||
|  | import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi; | ||||||
|  | import cn.iocoder.yudao.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import lombok.extern.slf4j.Slf4j; | ||||||
|  | import org.springframework.web.filter.OncePerRequestFilter; | ||||||
|  |  | ||||||
|  | import javax.servlet.FilterChain; | ||||||
|  | import javax.servlet.ServletException; | ||||||
|  | import javax.servlet.http.HttpServletRequest; | ||||||
|  | import javax.servlet.http.HttpServletResponse; | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.util.Map; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * UReport 认证过滤器 | ||||||
|  |  * @author 赤焰 | ||||||
|  |  */ | ||||||
|  | @Slf4j | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | public class UReportFilter extends OncePerRequestFilter { | ||||||
|  |  | ||||||
|  |     private final static String TOKEN = "token"; | ||||||
|  |  | ||||||
|  |     private final OAuth2TokenApi oauth2TokenApi; | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) | ||||||
|  |             throws ServletException, IOException { | ||||||
|  |  | ||||||
|  |         if(log.isDebugEnabled()){ | ||||||
|  |             log.debug("UReportFilter自定义过滤器"); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Map<String, String> paramMap = ServletUtils.getParamMap(request); | ||||||
|  |         String requestURI = request.getRequestURI(); | ||||||
|  |         boolean contains = requestURI.contains("/ureport"); | ||||||
|  |         if (paramMap.containsKey(TOKEN)&&contains) { | ||||||
|  |            String token = request.getParameter(TOKEN); | ||||||
|  |             if(log.isDebugEnabled()){ | ||||||
|  |                 log.debug("UReportFilter自定义过滤器 token="+token); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             response.addHeader(TOKEN,token); | ||||||
|  |  | ||||||
|  |             TenantContextHolder.setIgnore(true); // 忽略租户,保证可查询到 token 信息 | ||||||
|  |             LoginUser user = null; | ||||||
|  |             try { | ||||||
|  |                 OAuth2AccessTokenCheckRespDTO accessToken = oauth2TokenApi.checkAccessToken(token); | ||||||
|  |                 if (accessToken != null) { | ||||||
|  |                     user = new LoginUser().setId(accessToken.getUserId()).setUserType(accessToken.getUserType()) | ||||||
|  |                             .setTenantId(accessToken.getTenantId()).setScopes(accessToken.getScopes()); | ||||||
|  |                     if (user != null) { | ||||||
|  |                         SecurityFrameworkUtils.setLoginUser(user, WebFrameworkUtils.getRequest()); | ||||||
|  |  | ||||||
|  |                         // ② 参考 TenantContextWebFilter 实现(Tenant 的上下文清理,交给 TenantContextWebFilter 完成) | ||||||
|  |                         // 目的:基于 LoginUser 获得到的租户编号,设置到 Tenant 上下文,避免查询数据库时的报错 | ||||||
|  |                         TenantContextHolder.setIgnore(false); | ||||||
|  |                         TenantContextHolder.setTenantId(user.getTenantId()); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } catch (ServiceException ignored) { | ||||||
|  |                 chain.doFilter(request, response); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // 继续过滤 | ||||||
|  |         chain.doFilter(request, response); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,17 @@ | |||||||
|  | package cn.iocoder.yudao.module.report.framework.security.config; | ||||||
|  |  | ||||||
|  | import lombok.Data; | ||||||
|  | import org.springframework.boot.context.properties.ConfigurationProperties; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * UReport配置类 | ||||||
|  |  * | ||||||
|  |  * @author 赤焰 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ConfigurationProperties(prefix = "ureport.provider.database") | ||||||
|  | public class UReportProperties { | ||||||
|  | 	private String name = "数据库文件系统"; | ||||||
|  | 	private String prefix = "db-"; | ||||||
|  | 	private boolean disabled = false; | ||||||
|  | } | ||||||
| @@ -1,6 +1,8 @@ | |||||||
| package cn.iocoder.yudao.module.report.framework.ureport.config; | package cn.iocoder.yudao.module.report.framework.ureport.config; | ||||||
| 
 | 
 | ||||||
|  | import cn.iocoder.yudao.module.report.framework.security.config.UReportProperties; | ||||||
| import com.bstek.ureport.console.UReportServlet; | import com.bstek.ureport.console.UReportServlet; | ||||||
|  | import org.springframework.boot.context.properties.EnableConfigurationProperties; | ||||||
| import org.springframework.boot.web.servlet.ServletRegistrationBean; | import org.springframework.boot.web.servlet.ServletRegistrationBean; | ||||||
| import org.springframework.context.annotation.Bean; | import org.springframework.context.annotation.Bean; | ||||||
| import org.springframework.context.annotation.Configuration; | import org.springframework.context.annotation.Configuration; | ||||||
| @@ -15,13 +17,13 @@ import javax.servlet.Servlet; | |||||||
|  * @author 赤焰 |  * @author 赤焰 | ||||||
|  */ |  */ | ||||||
| @Configuration | @Configuration | ||||||
| @ImportResource({"classpath:ureport-console-context.xml"}) // Bean 配置 | @ImportResource({"classpath:ureport-console-context.xml"}) | ||||||
| @PropertySource(value = {"classpath:ureport.properties"}) // 配置文件 | @PropertySource(value = {"classpath:ureport.properties"}) | ||||||
| public class UreportConfiguration { | @EnableConfigurationProperties({UReportProperties.class}) | ||||||
|  | public class UReportConfiguration { | ||||||
| 
 | 
 | ||||||
|     // TODO @赤焰:bean 是不是取个和 ureport 相关的名字好点哈? |  | ||||||
|     @Bean |     @Bean | ||||||
|     public ServletRegistrationBean<Servlet> registrationBean() { |     public ServletRegistrationBean<Servlet> uReportRegistrationBean() { | ||||||
|         return new ServletRegistrationBean<>(new UReportServlet(), "/ureport/*"); |         return new ServletRegistrationBean<>(new UReportServlet(), "/ureport/*"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @@ -9,14 +9,18 @@ import javax.sql.DataSource; | |||||||
| import java.sql.Connection; | import java.sql.Connection; | ||||||
| import java.sql.SQLException; | import java.sql.SQLException; | ||||||
| 
 | 
 | ||||||
|  | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||||
|  | import static cn.iocoder.yudao.module.report.enums.ErrorCodeConstants.REPORT_DATABASE_NOT_EXISTS; | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * UReport 内置数据源 |  * UReport 内置数据源 | ||||||
|  |  * @author 赤焰 | ||||||
|  */ |  */ | ||||||
| @Slf4j | @Slf4j | ||||||
| @Component | @Component | ||||||
| public class UreportDataSource implements BuildinDatasource { | public class UReportDataSource implements BuildinDatasource { | ||||||
| 
 | 
 | ||||||
| 	private static final String NAME = "UreportDataSource"; | 	private static final String NAME = "UReportDataSource"; | ||||||
| 
 | 
 | ||||||
| 	@Resource | 	@Resource | ||||||
| 	private DataSource dataSource; | 	private DataSource dataSource; | ||||||
| @@ -29,7 +33,6 @@ public class UreportDataSource implements BuildinDatasource { | |||||||
| 		return NAME; | 		return NAME; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|     // TODO @赤焰:这个方法,如果拿不到连接,是不是抛出异常比较好? |  | ||||||
| 	/** | 	/** | ||||||
| 	 * @return 获取连接 | 	 * @return 获取连接 | ||||||
| 	 */ | 	 */ | ||||||
| @@ -38,10 +41,9 @@ public class UreportDataSource implements BuildinDatasource { | |||||||
| 		try { | 		try { | ||||||
| 			return dataSource.getConnection(); | 			return dataSource.getConnection(); | ||||||
| 		} catch (SQLException e) { | 		} catch (SQLException e) { | ||||||
| 			log.error("Ureport 数据源 获取连接失败!"); | 			log.error("UReportDataSource获取连接失败!"); | ||||||
| 			e.printStackTrace(); | 			throw exception(REPORT_DATABASE_NOT_EXISTS); | ||||||
| 		} | 		} | ||||||
| 		return null; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| @@ -0,0 +1,106 @@ | |||||||
|  | package cn.iocoder.yudao.module.report.framework.ureport.core; | ||||||
|  |  | ||||||
|  | import cn.hutool.core.collection.CollUtil; | ||||||
|  | import cn.hutool.core.util.StrUtil; | ||||||
|  | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||||
|  | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||||||
|  | import cn.iocoder.yudao.framework.common.util.date.DateUtils; | ||||||
|  | import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UReportDataSaveReqVO; | ||||||
|  | import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UReportDataDO; | ||||||
|  | import cn.iocoder.yudao.module.report.framework.security.config.UReportProperties; | ||||||
|  | import cn.iocoder.yudao.module.report.service.ureport.UReportDataService; | ||||||
|  | import com.bstek.ureport.provider.report.ReportFile; | ||||||
|  | import com.bstek.ureport.provider.report.ReportProvider; | ||||||
|  | import lombok.Setter; | ||||||
|  | import lombok.extern.slf4j.Slf4j; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.stereotype.Component; | ||||||
|  |  | ||||||
|  | import javax.annotation.Resource; | ||||||
|  | import java.io.ByteArrayInputStream; | ||||||
|  | import java.io.InputStream; | ||||||
|  | import java.util.Collections; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 基于数据库的 {@link ReportProvider} 实现类 | ||||||
|  |  * | ||||||
|  |  * @author 赤焰 | ||||||
|  |  */ | ||||||
|  | @Component | ||||||
|  | @Slf4j | ||||||
|  | @Setter | ||||||
|  | public class UReportDatabaseProvider implements ReportProvider { | ||||||
|  |  | ||||||
|  |     @Autowired | ||||||
|  |     private UReportProperties uReportProperties; | ||||||
|  |     @Resource | ||||||
|  |     private UReportDataService uReportDataService; | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public InputStream loadReport(String name) { | ||||||
|  |         uReportDataService.validateUReportDataExists(getCorrectName(name)); | ||||||
|  |         UReportDataDO uReportDataDO = uReportDataService.selectOneByName(getCorrectName(name)); | ||||||
|  |         String content = uReportDataDO.getContent(); | ||||||
|  |         return new ByteArrayInputStream(content.getBytes()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void deleteReport(String name) { | ||||||
|  |         uReportDataService.deleteByName(getCorrectName(name)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public List<ReportFile> getReportFiles() { | ||||||
|  |         List<UReportDataDO> list = uReportDataService.getReportDataList(); | ||||||
|  |         if(CollUtil.isEmpty(list)) { | ||||||
|  |             return Collections.emptyList(); | ||||||
|  |         } | ||||||
|  |         return CollectionUtils.convertList(list, report -> new ReportFile(report.getName(), DateUtils.of(report.getUpdateTime()))); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void saveReport(String name, String content) { | ||||||
|  |         name = getCorrectName(name); | ||||||
|  |         UReportDataDO uReportDataDO = uReportDataService.selectOneByName(name); | ||||||
|  |         UReportDataSaveReqVO saveReqVO = new UReportDataSaveReqVO(); | ||||||
|  |         if (uReportDataDO == null) { | ||||||
|  |             saveReqVO.setName(name); | ||||||
|  |             saveReqVO.setContent(content); | ||||||
|  |             saveReqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||||
|  |             uReportDataService.createUReportData(saveReqVO); | ||||||
|  |         } else { | ||||||
|  |             saveReqVO.setId(uReportDataDO.getId()); | ||||||
|  |             saveReqVO.setName(name); | ||||||
|  |             saveReqVO.setContent(content); | ||||||
|  |             saveReqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||||
|  |             uReportDataService.updateUReportData(saveReqVO); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String getName() { | ||||||
|  |         return uReportProperties.getName(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public boolean disabled() { | ||||||
|  |         return uReportProperties.isDisabled(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String getPrefix() { | ||||||
|  |         return uReportProperties.getPrefix(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 去除存储媒介,获取报表名字 | ||||||
|  |      * @param name 前端传入的报表带存储媒介的名字 | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     private String getCorrectName(String name) { | ||||||
|  |         return StrUtil.removePrefix(name,getPrefix()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -1,142 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.report.framework.ureport.core; |  | ||||||
|  |  | ||||||
| import cn.hutool.core.collection.CollUtil; |  | ||||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |  | ||||||
| import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UreportFileSaveReqVO; |  | ||||||
| import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UreportFileDO; |  | ||||||
| import cn.iocoder.yudao.module.report.service.ureport.UreportFileService; |  | ||||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |  | ||||||
| import com.bstek.ureport.provider.report.ReportFile; |  | ||||||
| import com.bstek.ureport.provider.report.ReportProvider; |  | ||||||
| import lombok.Setter; |  | ||||||
| import lombok.extern.slf4j.Slf4j; |  | ||||||
| import org.springframework.boot.context.properties.ConfigurationProperties; |  | ||||||
| import org.springframework.stereotype.Component; |  | ||||||
|  |  | ||||||
| import javax.annotation.Resource; |  | ||||||
| import java.io.ByteArrayInputStream; |  | ||||||
| import java.io.InputStream; |  | ||||||
| import java.time.LocalDateTime; |  | ||||||
| import java.time.ZoneId; |  | ||||||
| import java.time.ZonedDateTime; |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.Date; |  | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |  | ||||||
| import static cn.iocoder.yudao.module.report.enums.ErrorCodeConstants.UREPORT_FILE_EXISTS; |  | ||||||
| import static cn.iocoder.yudao.module.report.enums.ErrorCodeConstants.UREPORT_FILE_NOT_EXISTS; |  | ||||||
|  |  | ||||||
| // TODO @赤焰:有了这个功能,是不是就不需要 UreportFileController? |  | ||||||
| /** |  | ||||||
|  * 基于数据库的 {@link ReportProvider} 实现类 |  | ||||||
|  * |  | ||||||
|  * @author 赤焰 |  | ||||||
|  */ |  | ||||||
| @Component |  | ||||||
| @Slf4j |  | ||||||
| @Setter |  | ||||||
| @ConfigurationProperties(prefix = "ureport.provider.database") // TODO @赤焰:是不是单独搞个 UReportProperties 用来注入 prefix、disabled 等属性 |  | ||||||
| public class UreportDatabaseProvider implements ReportProvider { |  | ||||||
|  |  | ||||||
|     private static final String NAME = "mysql-provider"; |  | ||||||
|  |  | ||||||
|     // TODO @赤焰:IdTypeEnvironmentPostProcessor 参考下,通过 primary 数据源获取 |  | ||||||
|     private String prefix = "mysql:"; |  | ||||||
|  |  | ||||||
|     private boolean disabled = false; |  | ||||||
|  |  | ||||||
|     @Resource |  | ||||||
|     private UreportFileService ureportFileService; |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public InputStream loadReport(String file) { |  | ||||||
|         // TODO @赤焰:是不是不需要这个 check 接口?直接使用 name 查询就 ok 了? |  | ||||||
|         // TODO @赤焰:变量的命名要注意,这里 reportDo 是不是叫 count 就好了?还有,这个方法的命名也不太对。 |  | ||||||
|         Long reportDo = ureportFileService.checkExistByName(getCorrectName(file)); |  | ||||||
|         if (reportDo <=0) { // TODO 赤焰:<= 0 注释空格 |  | ||||||
|             throw exception(UREPORT_FILE_NOT_EXISTS); |  | ||||||
|         } |  | ||||||
|         // TODO @赤焰:queryUreportFileDoByName 改成 getUreportFileDoByName 更合适,保持整个项目的命名风格一致性。 |  | ||||||
|         UreportFileDO ureportFileDO = ureportFileService.queryUreportFileDoByName(getCorrectName(file)); |  | ||||||
|         byte[] content = ureportFileDO.getFileContent(); |  | ||||||
|         return new ByteArrayInputStream(content); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public void deleteReport(String file) { |  | ||||||
|         ureportFileService.deleteReportFileByName(getCorrectName(file)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public List<ReportFile> getReportFiles() { |  | ||||||
|         // TODO @赤焰:queryReportFileList 改成 getReportFileList 更合适,保持整个项目的命名风格一致性。 |  | ||||||
|         List<UreportFileDO> list = ureportFileService.queryReportFileList(); |  | ||||||
|         List<ReportFile> reportList = new ArrayList<>(); |  | ||||||
|         if(CollUtil.isEmpty(list)){ // TODO 赤焰:CollUtil.isEmpty(list) 注意空格 |  | ||||||
|             // TODO @赤焰:这里可以直接返回 Collections.emptyList(); |  | ||||||
|             return reportList; |  | ||||||
|         } |  | ||||||
|         // TODO 赤焰:可以使用 CollectionUtils.converList |  | ||||||
|         for (UreportFileDO reportFile : list) { |  | ||||||
|             // TODO 赤焰:可以使用          DateUtils.of() 么? |  | ||||||
|             LocalDateTime updateTime = reportFile.getUpdateTime(); |  | ||||||
|             ZonedDateTime zdt = updateTime.atZone(ZoneId.systemDefault()); |  | ||||||
|             Date date = Date.from(zdt.toInstant()); |  | ||||||
|             reportList.add(new ReportFile(reportFile.getFileName(),date)); |  | ||||||
|         } |  | ||||||
|         return reportList; |  | ||||||
|  |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public void saveReport(String file, String content) { |  | ||||||
|         file = getCorrectName(file); |  | ||||||
|         // TODO @赤焰:这里的逻辑,应该封装到 ureportFileService 中,这里只负责调用即可 |  | ||||||
|         LambdaQueryWrapper<UreportFileDO> queryWrapper = new LambdaQueryWrapper<>(); |  | ||||||
|         queryWrapper.eq(UreportFileDO::getFileName, file); |  | ||||||
|         Long count = ureportFileService.checkExistByName(file); |  | ||||||
|         if(count>1){ |  | ||||||
|             throw exception(UREPORT_FILE_EXISTS); |  | ||||||
|         } |  | ||||||
|         UreportFileDO ureportFileDO = ureportFileService.queryUreportFileDoByName(file); |  | ||||||
|         UreportFileSaveReqVO saveReqVO = new UreportFileSaveReqVO(); |  | ||||||
|         if (ureportFileDO == null) { |  | ||||||
|             saveReqVO.setFileName(file); |  | ||||||
|             saveReqVO.setFileContent(content); |  | ||||||
|             saveReqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); |  | ||||||
|             ureportFileService.createUreportFile(saveReqVO); |  | ||||||
|         } else { |  | ||||||
|             saveReqVO.setId(ureportFileDO.getId()); |  | ||||||
|             saveReqVO.setFileName(file); |  | ||||||
|             saveReqVO.setFileContent(content); |  | ||||||
|             saveReqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); |  | ||||||
|             ureportFileService.updateUreportFile(saveReqVO); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public String getName() { |  | ||||||
|         return NAME; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public boolean disabled() { |  | ||||||
|         return disabled; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public String getPrefix() { |  | ||||||
|         return prefix; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // TODO @赤焰:这个方法的注释,最好写下哈; |  | ||||||
|     private String getCorrectName(String name) { |  | ||||||
|         // TODO  赤焰:一些常用方法,可以用 hutool StrUtil.removePrefix() |  | ||||||
|         if (name.startsWith(getPrefix())) { |  | ||||||
|             name = name.substring(getPrefix().length()); |  | ||||||
|         } |  | ||||||
|         return name; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -1,120 +0,0 @@ | |||||||
| /* |  | ||||||
| package cn.iocoder.yudao.module.report.framework.ureport.provider; |  | ||||||
|  |  | ||||||
| import com.bstek.ureport.exception.ReportException; |  | ||||||
| import com.bstek.ureport.provider.report.ReportFile; |  | ||||||
| import com.bstek.ureport.provider.report.ReportProvider; |  | ||||||
| import lombok.extern.slf4j.Slf4j; |  | ||||||
| import org.apache.commons.io.IOUtils; |  | ||||||
| import org.springframework.boot.context.properties.ConfigurationProperties; |  | ||||||
| import org.springframework.stereotype.Component; |  | ||||||
|  |  | ||||||
| import java.io.*; |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.Calendar; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Objects; |  | ||||||
|  |  | ||||||
| // TODO @赤焰:这个类的作用是?如果全部注释,是不是可以删除哈? |  | ||||||
| */ |  | ||||||
| /** |  | ||||||
|  * 自定义文件存储,可接入oss等 |  | ||||||
|  * @author 赤焰 |  | ||||||
|  *//* |  | ||||||
|  |  | ||||||
| @Slf4j |  | ||||||
| @Component |  | ||||||
| @ConfigurationProperties(prefix = "ureport.provider.file") |  | ||||||
| public class UreportFileReportProvider implements ReportProvider{ |  | ||||||
|  |  | ||||||
|     private String prefix="reportFile:"; |  | ||||||
|     private String fileStoreDir; |  | ||||||
|     private boolean disabled; |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public InputStream loadReport(String file) { |  | ||||||
|         if(file.startsWith(prefix)){ |  | ||||||
|             file=file.substring(prefix.length(),file.length()); |  | ||||||
|         } |  | ||||||
|         String fullPath=fileStoreDir+"/"+file; |  | ||||||
|         try { |  | ||||||
|             return new FileInputStream(fullPath); |  | ||||||
|         } catch (FileNotFoundException e) { |  | ||||||
|             throw new ReportException(e); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public void deleteReport(String file) { |  | ||||||
|         if(file.startsWith(prefix)){ |  | ||||||
|             file=file.substring(prefix.length(),file.length()); |  | ||||||
|         } |  | ||||||
|         String fullPath=fileStoreDir+"/"+file; |  | ||||||
|         File f=new File(fullPath); |  | ||||||
|         if(f.exists()){ |  | ||||||
|             f.delete(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public List<ReportFile> getReportFiles() { |  | ||||||
|         File file=new File(fileStoreDir); |  | ||||||
|         List<ReportFile> list= new ArrayList<>(); |  | ||||||
|         for(File f: Objects.requireNonNull(file.listFiles())){ |  | ||||||
|             Calendar calendar=Calendar.getInstance(); |  | ||||||
|             calendar.setTimeInMillis(f.lastModified()); |  | ||||||
|             list.add(new ReportFile(f.getName(),calendar.getTime())); |  | ||||||
|         } |  | ||||||
|         list.sort((f1, f2) -> f2.getUpdateDate().compareTo(f1.getUpdateDate())); |  | ||||||
|         return list; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public String getName() { |  | ||||||
|         return "文件存储系统"; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public void saveReport(String file,String content) { |  | ||||||
|         if(file.startsWith(prefix)){ |  | ||||||
|             file=file.substring(prefix.length(),file.length()); |  | ||||||
|         } |  | ||||||
|         String fullPath=fileStoreDir+"/"+file; |  | ||||||
|         FileOutputStream outStream=null; |  | ||||||
|         try{ |  | ||||||
|             outStream=new FileOutputStream(new File(fullPath)); |  | ||||||
|             IOUtils.write(content, outStream,"utf-8"); |  | ||||||
|         }catch(Exception ex){ |  | ||||||
|             throw new ReportException(ex); |  | ||||||
|         }finally{ |  | ||||||
|             if(outStream!=null){ |  | ||||||
|                 try { |  | ||||||
|                     outStream.close(); |  | ||||||
|                 } catch (IOException e) { |  | ||||||
|                     e.printStackTrace(); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public boolean disabled() { |  | ||||||
|         return disabled; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public void setDisabled(boolean disabled) { |  | ||||||
|         this.disabled = disabled; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public void setFileStoreDir(String fileStoreDir) { |  | ||||||
|         this.fileStoreDir = fileStoreDir; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public String getPrefix() { |  | ||||||
|         return prefix; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| */ |  | ||||||
| @@ -1,9 +1,9 @@ | |||||||
| package cn.iocoder.yudao.module.report.service.ureport; | package cn.iocoder.yudao.module.report.service.ureport; | ||||||
| 
 | 
 | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UreportFilePageReqVO; | import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UReportDataPageReqVO; | ||||||
| import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UreportFileSaveReqVO; | import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UReportDataSaveReqVO; | ||||||
| import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UreportFileDO; | import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UReportDataDO; | ||||||
| 
 | 
 | ||||||
| import javax.validation.Valid; | import javax.validation.Valid; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| @@ -13,7 +13,7 @@ import java.util.List; | |||||||
|  * |  * | ||||||
|  * @author 芋道源码 |  * @author 芋道源码 | ||||||
|  */ |  */ | ||||||
| public interface UreportFileService  { | public interface UReportDataService { | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * 创建Ureport2报表 |      * 创建Ureport2报表 | ||||||
| @@ -21,21 +21,21 @@ public interface UreportFileService  { | |||||||
|      * @param createReqVO 创建信息 |      * @param createReqVO 创建信息 | ||||||
|      * @return 编号 |      * @return 编号 | ||||||
|      */ |      */ | ||||||
|     Long createUreportFile(@Valid UreportFileSaveReqVO createReqVO); |     Long createUReportData(@Valid UReportDataSaveReqVO createReqVO); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * 更新Ureport2报表 |      * 更新Ureport2报表 | ||||||
|      * |      * | ||||||
|      * @param updateReqVO 更新信息 |      * @param updateReqVO 更新信息 | ||||||
|      */ |      */ | ||||||
|     void updateUreportFile(@Valid UreportFileSaveReqVO updateReqVO); |     void updateUReportData(@Valid UReportDataSaveReqVO updateReqVO); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * 删除Ureport2报表 |      * 删除Ureport2报表 | ||||||
|      * |      * | ||||||
|      * @param id 编号 |      * @param id 编号 | ||||||
|      */ |      */ | ||||||
|     void deleteUreportFile(Long id); |     void deleteUReportData(Long id); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * 获得Ureport2报表 |      * 获得Ureport2报表 | ||||||
| @@ -43,7 +43,7 @@ public interface UreportFileService  { | |||||||
|      * @param id 编号 |      * @param id 编号 | ||||||
|      * @return Ureport2报表 |      * @return Ureport2报表 | ||||||
|      */ |      */ | ||||||
|     UreportFileDO getUreportFile(Long id); |     UReportDataDO getUReportData(Long id); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * 获得Ureport2报表分页 |      * 获得Ureport2报表分页 | ||||||
| @@ -51,36 +51,32 @@ public interface UreportFileService  { | |||||||
|      * @param pageReqVO 分页查询 |      * @param pageReqVO 分页查询 | ||||||
|      * @return Ureport2报表分页 |      * @return Ureport2报表分页 | ||||||
|      */ |      */ | ||||||
|     PageResult<UreportFileDO> getUreportFilePage(UreportFilePageReqVO pageReqVO); |     PageResult<UReportDataDO> getUReportDataPage(UReportDataPageReqVO pageReqVO); | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      *  根据报表名称检查报表是否存在 |      * 根据名称删除报表 | ||||||
|      * @param name 报表名称 |  | ||||||
|      * @return |  | ||||||
|      */ |  | ||||||
|     Long checkExistByName(String name); |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      *  根据报表名称查询报表 |  | ||||||
|      * @param name 报表名称 |  | ||||||
|      * @return |  | ||||||
|      */ |  | ||||||
|      UreportFileDO queryUreportFileDoByName(String name); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * 查询全部报表 |  | ||||||
|      * @return |  | ||||||
|      */ |  | ||||||
|     List<UreportFileDO> queryReportFileList(); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * 根据报表名称删除报表 |  | ||||||
|      * @param name |      * @param name | ||||||
|      * @return |      * @return | ||||||
|      */ |      */ | ||||||
|      int deleteReportFileByName(String name); |     int deleteByName(String name); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 根据名称校验报表是否存在 | ||||||
|  |      * @param name | ||||||
|  |      */ | ||||||
|  |     void validateUReportDataExists(String name); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 根据名称查询报表 | ||||||
|  |      * @param name | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     UReportDataDO selectOneByName(String name); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 获取全部报表 | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     List<UReportDataDO> getReportDataList(); | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| @@ -0,0 +1,94 @@ | |||||||
|  | package cn.iocoder.yudao.module.report.service.ureport; | ||||||
|  |  | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import javax.annotation.Resource; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.*; | ||||||
|  | import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UReportDataDO; | ||||||
|  | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
|  | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.module.report.dal.mysql.ureport.UReportDataMapper; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||||
|  | import static cn.iocoder.yudao.module.report.enums.ErrorCodeConstants.*; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Ureport2报表 Service 实现类 | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | @Service | ||||||
|  | @Validated | ||||||
|  | public class UReportDataServiceImpl implements UReportDataService { | ||||||
|  |  | ||||||
|  |     @Resource | ||||||
|  |     private UReportDataMapper uReportDataMapper; | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Long createUReportData(UReportDataSaveReqVO createReqVO) { | ||||||
|  |         // 插入 | ||||||
|  |         UReportDataDO uReportData = BeanUtils.toBean(createReqVO, UReportDataDO.class); | ||||||
|  |         uReportDataMapper.insert(uReportData); | ||||||
|  |         // 返回 | ||||||
|  |         return uReportData.getId(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void updateUReportData(UReportDataSaveReqVO updateReqVO) { | ||||||
|  |         // 校验存在 | ||||||
|  |         validateUReportDataExists(updateReqVO.getId()); | ||||||
|  |         // 更新 | ||||||
|  |         UReportDataDO updateObj = BeanUtils.toBean(updateReqVO, UReportDataDO.class); | ||||||
|  |         uReportDataMapper.updateById(updateObj); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void deleteUReportData(Long id) { | ||||||
|  |         // 校验存在 | ||||||
|  |         validateUReportDataExists(id); | ||||||
|  |         // 删除 | ||||||
|  |         uReportDataMapper.deleteById(id); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void validateUReportDataExists(Long id) { | ||||||
|  |         if (uReportDataMapper.selectById(id) == null) { | ||||||
|  |             throw exception(REPORT_DATA_NOT_EXISTS); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void validateUReportDataExists(String name) { | ||||||
|  |         if (uReportDataMapper.selectByName(name) == null) { | ||||||
|  |             throw exception(REPORT_DATA_NOT_EXISTS); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public UReportDataDO getUReportData(Long id) { | ||||||
|  |         return uReportDataMapper.selectById(id); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public PageResult<UReportDataDO> getUReportDataPage(UReportDataPageReqVO pageReqVO) { | ||||||
|  |         return uReportDataMapper.selectPage(pageReqVO); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public int deleteByName(String name) { | ||||||
|  |         return uReportDataMapper.deleteByName(name); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public UReportDataDO selectOneByName(String name) { | ||||||
|  |         return uReportDataMapper.selectOneByName(name); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public List<UReportDataDO> getReportDataList() { | ||||||
|  |         return uReportDataMapper.selectList(); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,110 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.report.service.ureport; |  | ||||||
|  |  | ||||||
| import cn.hutool.core.collection.CollectionUtil; |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; |  | ||||||
| import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |  | ||||||
| import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UreportFilePageReqVO; |  | ||||||
| import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UreportFileSaveReqVO; |  | ||||||
| import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UreportFileDO; |  | ||||||
| import cn.iocoder.yudao.module.report.dal.mysql.ureport.UreportFileMapper; |  | ||||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |  | ||||||
| import org.springframework.stereotype.Service; |  | ||||||
| import org.springframework.validation.annotation.Validated; |  | ||||||
|  |  | ||||||
| import javax.annotation.Resource; |  | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |  | ||||||
| import static cn.iocoder.yudao.module.report.enums.ErrorCodeConstants.UREPORT_FILE_NOT_EXISTS; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Ureport2报表 Service 实现类 |  | ||||||
|  * |  | ||||||
|  * @author 芋道源码 |  | ||||||
|  */ |  | ||||||
| @Service |  | ||||||
| @Validated |  | ||||||
| public class UreportFileServiceImpl implements UreportFileService { |  | ||||||
|  |  | ||||||
|     @Resource |  | ||||||
|     private UreportFileMapper ureportFileMapper; |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public Long createUreportFile(UreportFileSaveReqVO createReqVO) { |  | ||||||
|         // 插入 |  | ||||||
|         UreportFileDO ureportFile = BeanUtils.toBean(createReqVO, UreportFileDO.class); |  | ||||||
|         ureportFileMapper.insert(ureportFile); |  | ||||||
|         // 返回 |  | ||||||
|         return ureportFile.getId(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public void updateUreportFile(UreportFileSaveReqVO updateReqVO) { |  | ||||||
|         // 校验存在 |  | ||||||
|         validateUreportFileExists(updateReqVO.getId()); |  | ||||||
|         // 更新 |  | ||||||
|         UreportFileDO updateObj = BeanUtils.toBean(updateReqVO, UreportFileDO.class); |  | ||||||
|         ureportFileMapper.updateById(updateObj); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public void deleteUreportFile(Long id) { |  | ||||||
|         // 校验存在 |  | ||||||
|         validateUreportFileExists(id); |  | ||||||
|         // 删除 |  | ||||||
|         ureportFileMapper.deleteById(id); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private void validateUreportFileExists(Long id) { |  | ||||||
|         if (ureportFileMapper.selectById(id) == null) { |  | ||||||
|             throw exception(UREPORT_FILE_NOT_EXISTS); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public UreportFileDO getUreportFile(Long id) { |  | ||||||
|         return ureportFileMapper.selectById(id); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public PageResult<UreportFileDO> getUreportFilePage(UreportFilePageReqVO pageReqVO) { |  | ||||||
|         return ureportFileMapper.selectPage(pageReqVO); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public Long checkExistByName(String name) { |  | ||||||
|         // TODO @赤焰:Service 处理业务逻辑,不能出现 Mapper 层的东西,收敛成 mapper 的一个操作方法 |  | ||||||
|         LambdaQueryWrapper<UreportFileDO> queryWrapper = new LambdaQueryWrapper<>(); |  | ||||||
|         queryWrapper.eq(UreportFileDO::getFileName,name); |  | ||||||
|         return ureportFileMapper.selectCount(queryWrapper); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public UreportFileDO queryUreportFileDoByName(String name) { |  | ||||||
|         // TODO @赤焰:Service 处理业务逻辑,不能出现 Mapper 层的东西,收敛成 mapper 的一个操作方法 |  | ||||||
|         LambdaQueryWrapper<UreportFileDO> queryWrapper = new LambdaQueryWrapper<>(); |  | ||||||
|         queryWrapper.eq(UreportFileDO::getFileName,name); |  | ||||||
|         // TODO @赤焰:这里,可以用 selectByName 即可 |  | ||||||
|         List<UreportFileDO> list = ureportFileMapper.selectList(queryWrapper); |  | ||||||
|         if(CollectionUtil.isNotEmpty(list)){ |  | ||||||
|             return list.get(0); |  | ||||||
|         } |  | ||||||
|         return null; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public List<UreportFileDO> queryReportFileList() { |  | ||||||
|         // TODO @赤焰:Service 处理业务逻辑,不能出现 Mapper 层的东西,收敛成 mapper 的一个操作方法 |  | ||||||
|         LambdaQueryWrapper<UreportFileDO> queryWrapper = new LambdaQueryWrapper<>(); |  | ||||||
|         return ureportFileMapper.selectList(queryWrapper); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public int deleteReportFileByName(String name) { |  | ||||||
|         // TODO @赤焰:Service 处理业务逻辑,不能出现 Mapper 层的东西,收敛成 mapper 的一个操作方法 |  | ||||||
|         LambdaQueryWrapper<UreportFileDO> queryWrapper = new LambdaQueryWrapper<>(); |  | ||||||
|         queryWrapper.eq(UreportFileDO::getFileName,name); |  | ||||||
|         return ureportFileMapper.delete(queryWrapper); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -0,0 +1,12 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||||
|  | <mapper namespace="cn.iocoder.yudao.module.report.dal.mysql.ureport.UReportDataMapper"> | ||||||
|  |  | ||||||
|  |     <!-- | ||||||
|  |         一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。 | ||||||
|  |         无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。 | ||||||
|  |         代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 | ||||||
|  |         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ | ||||||
|  |      --> | ||||||
|  |  | ||||||
|  | </mapper> | ||||||
| @@ -0,0 +1,135 @@ | |||||||
|  | package cn.iocoder.yudao.module.report.service.ureport; | ||||||
|  |  | ||||||
|  | import org.junit.jupiter.api.Disabled; | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  |  | ||||||
|  | import javax.annotation.Resource; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.*; | ||||||
|  | import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UReportDataDO; | ||||||
|  | import cn.iocoder.yudao.module.report.dal.mysql.ureport.UReportDataMapper; | ||||||
|  | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
|  |  | ||||||
|  | import org.springframework.context.annotation.Import; | ||||||
|  |  | ||||||
|  | import static cn.iocoder.yudao.module.report.enums.ErrorCodeConstants.*; | ||||||
|  | import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; | ||||||
|  | import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; | ||||||
|  | import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; | ||||||
|  | import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; | ||||||
|  | import static org.junit.jupiter.api.Assertions.*; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * {@link UReportDataServiceImpl} 的单元测试类 | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | @Import(UReportDataServiceImpl.class) | ||||||
|  | public class UReportDataServiceImplTest extends BaseDbUnitTest { | ||||||
|  |  | ||||||
|  |     @Resource | ||||||
|  |     private UReportDataServiceImpl uReportDataService; | ||||||
|  |  | ||||||
|  |     @Resource | ||||||
|  |     private UReportDataMapper uReportDataMapper; | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void testCreateUReportData_success() { | ||||||
|  |         // 准备参数 | ||||||
|  |         UReportDataSaveReqVO createReqVO = randomPojo(UReportDataSaveReqVO.class).setId(null); | ||||||
|  |  | ||||||
|  |         // 调用 | ||||||
|  |         Long uReportDataId = uReportDataService.createUReportData(createReqVO); | ||||||
|  |         // 断言 | ||||||
|  |         assertNotNull(uReportDataId); | ||||||
|  |         // 校验记录的属性是否正确 | ||||||
|  |         UReportDataDO uReportData = uReportDataMapper.selectById(uReportDataId); | ||||||
|  |         assertPojoEquals(createReqVO, uReportData, "id"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void testUpdateUReportData_success() { | ||||||
|  |         // mock 数据 | ||||||
|  |         UReportDataDO dbUReportData = randomPojo(UReportDataDO.class); | ||||||
|  |         uReportDataMapper.insert(dbUReportData);// @Sql: 先插入出一条存在的数据 | ||||||
|  |         // 准备参数 | ||||||
|  |         UReportDataSaveReqVO updateReqVO = randomPojo(UReportDataSaveReqVO.class, o -> { | ||||||
|  |             o.setId(dbUReportData.getId()); // 设置更新的 ID | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         // 调用 | ||||||
|  |         uReportDataService.updateUReportData(updateReqVO); | ||||||
|  |         // 校验是否更新正确 | ||||||
|  |         UReportDataDO uReportData = uReportDataMapper.selectById(updateReqVO.getId()); // 获取最新的 | ||||||
|  |         assertPojoEquals(updateReqVO, uReportData); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void testUpdateUReportData_notExists() { | ||||||
|  |         // 准备参数 | ||||||
|  |         UReportDataSaveReqVO updateReqVO = randomPojo(UReportDataSaveReqVO.class); | ||||||
|  |  | ||||||
|  |         // 调用, 并断言异常 | ||||||
|  |         assertServiceException(() -> uReportDataService.updateUReportData(updateReqVO), REPORT_DATA_NOT_EXISTS); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void testDeleteUReportData_success() { | ||||||
|  |         // mock 数据 | ||||||
|  |         UReportDataDO dbUReportData = randomPojo(UReportDataDO.class); | ||||||
|  |         uReportDataMapper.insert(dbUReportData);// @Sql: 先插入出一条存在的数据 | ||||||
|  |         // 准备参数 | ||||||
|  |         Long id = dbUReportData.getId(); | ||||||
|  |  | ||||||
|  |         // 调用 | ||||||
|  |         uReportDataService.deleteUReportData(id); | ||||||
|  |        // 校验数据不存在了 | ||||||
|  |        assertNull(uReportDataMapper.selectById(id)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void testDeleteUReportData_notExists() { | ||||||
|  |         // 准备参数 | ||||||
|  |         Long id = randomLongId(); | ||||||
|  |  | ||||||
|  |         // 调用, 并断言异常 | ||||||
|  |         assertServiceException(() -> uReportDataService.deleteUReportData(id), REPORT_DATA_NOT_EXISTS); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 | ||||||
|  |     public void testGetUReportDataPage() { | ||||||
|  |        // mock 数据 | ||||||
|  |        UReportDataDO dbUReportData = randomPojo(UReportDataDO.class, o -> { // 等会查询到 | ||||||
|  |            o.setName(null); | ||||||
|  |            o.setStatus(null); | ||||||
|  |            o.setRemark(null); | ||||||
|  |            o.setCreateTime(null); | ||||||
|  |        }); | ||||||
|  |        uReportDataMapper.insert(dbUReportData); | ||||||
|  |        // 测试 name 不匹配 | ||||||
|  |        uReportDataMapper.insert(cloneIgnoreId(dbUReportData, o -> o.setName(null))); | ||||||
|  |        // 测试 status 不匹配 | ||||||
|  |        uReportDataMapper.insert(cloneIgnoreId(dbUReportData, o -> o.setStatus(null))); | ||||||
|  |        // 测试 remark 不匹配 | ||||||
|  |        uReportDataMapper.insert(cloneIgnoreId(dbUReportData, o -> o.setRemark(null))); | ||||||
|  |        // 测试 createTime 不匹配 | ||||||
|  |        uReportDataMapper.insert(cloneIgnoreId(dbUReportData, o -> o.setCreateTime(null))); | ||||||
|  |        // 准备参数 | ||||||
|  |        UReportDataPageReqVO reqVO = new UReportDataPageReqVO(); | ||||||
|  |        reqVO.setName(null); | ||||||
|  |        reqVO.setStatus(null); | ||||||
|  |        reqVO.setRemark(null); | ||||||
|  |        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||||||
|  |  | ||||||
|  |        // 调用 | ||||||
|  |        PageResult<UReportDataDO> pageResult = uReportDataService.getUReportDataPage(reqVO); | ||||||
|  |        // 断言 | ||||||
|  |        assertEquals(1, pageResult.getTotal()); | ||||||
|  |        assertEquals(1, pageResult.getList().size()); | ||||||
|  |        assertPojoEquals(dbUReportData, pageResult.getList().get(0)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -1,136 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.report.service.ureport; |  | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; |  | ||||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; |  | ||||||
| import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UreportFilePageReqVO; |  | ||||||
| import cn.iocoder.yudao.module.report.controller.admin.ureport.vo.UreportFileSaveReqVO; |  | ||||||
| import cn.iocoder.yudao.module.report.dal.dataobject.ureport.UreportFileDO; |  | ||||||
| import cn.iocoder.yudao.module.report.dal.mysql.ureport.UreportFileMapper; |  | ||||||
| import org.junit.jupiter.api.Disabled; |  | ||||||
| import org.junit.jupiter.api.Test; |  | ||||||
| import org.springframework.context.annotation.Import; |  | ||||||
|  |  | ||||||
| import javax.annotation.Resource; |  | ||||||
|  |  | ||||||
| import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; |  | ||||||
| import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; |  | ||||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; |  | ||||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; |  | ||||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; |  | ||||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; |  | ||||||
| import static cn.iocoder.yudao.module.report.enums.ErrorCodeConstants.UREPORT_FILE_NOT_EXISTS; |  | ||||||
| import static org.junit.jupiter.api.Assertions.*; |  | ||||||
|  |  | ||||||
| // TODO 芋艿:但愿测试后面补 |  | ||||||
| /** |  | ||||||
|  * {@link UreportFileServiceImpl} 的单元测试类 |  | ||||||
|  * |  | ||||||
|  * @author 芋道源码 |  | ||||||
|  */ |  | ||||||
| @Import(UreportFileServiceImpl.class) |  | ||||||
| public class UreportFileServiceImplTest extends BaseDbUnitTest { |  | ||||||
|  |  | ||||||
|     @Resource |  | ||||||
|     private UreportFileServiceImpl ureportFileService; |  | ||||||
|  |  | ||||||
|     @Resource |  | ||||||
|     private UreportFileMapper ureportFileMapper; |  | ||||||
|  |  | ||||||
|     @Test |  | ||||||
|     public void testCreateUreportFile_success() { |  | ||||||
|         // 准备参数 |  | ||||||
|         UreportFileSaveReqVO createReqVO = randomPojo(UreportFileSaveReqVO.class).setId(null); |  | ||||||
|  |  | ||||||
|         // 调用 |  | ||||||
|         Long ureportFileId = ureportFileService.createUreportFile(createReqVO); |  | ||||||
|         // 断言 |  | ||||||
|         assertNotNull(ureportFileId); |  | ||||||
|         // 校验记录的属性是否正确 |  | ||||||
|         UreportFileDO ureportFile = ureportFileMapper.selectById(ureportFileId); |  | ||||||
|         assertPojoEquals(createReqVO, ureportFile, "id"); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Test |  | ||||||
|     public void testUpdateUreportFile_success() { |  | ||||||
|         // mock 数据 |  | ||||||
|         UreportFileDO dbUreportFile = randomPojo(UreportFileDO.class); |  | ||||||
|         ureportFileMapper.insert(dbUreportFile);// @Sql: 先插入出一条存在的数据 |  | ||||||
|         // 准备参数 |  | ||||||
|         UreportFileSaveReqVO updateReqVO = randomPojo(UreportFileSaveReqVO.class, o -> { |  | ||||||
|             o.setId(dbUreportFile.getId()); // 设置更新的 ID |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         // 调用 |  | ||||||
|         ureportFileService.updateUreportFile(updateReqVO); |  | ||||||
|         // 校验是否更新正确 |  | ||||||
|         UreportFileDO ureportFile = ureportFileMapper.selectById(updateReqVO.getId()); // 获取最新的 |  | ||||||
|         assertPojoEquals(updateReqVO, ureportFile); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Test |  | ||||||
|     public void testUpdateUreportFile_notExists() { |  | ||||||
|         // 准备参数 |  | ||||||
|         UreportFileSaveReqVO updateReqVO = randomPojo(UreportFileSaveReqVO.class); |  | ||||||
|  |  | ||||||
|         // 调用, 并断言异常 |  | ||||||
|         assertServiceException(() -> ureportFileService.updateUreportFile(updateReqVO), UREPORT_FILE_NOT_EXISTS); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Test |  | ||||||
|     public void testDeleteUreportFile_success() { |  | ||||||
|         // mock 数据 |  | ||||||
|         UreportFileDO dbUreportFile = randomPojo(UreportFileDO.class); |  | ||||||
|         ureportFileMapper.insert(dbUreportFile);// @Sql: 先插入出一条存在的数据 |  | ||||||
|         // 准备参数 |  | ||||||
|         Long id = dbUreportFile.getId(); |  | ||||||
|  |  | ||||||
|         // 调用 |  | ||||||
|         ureportFileService.deleteUreportFile(id); |  | ||||||
|        // 校验数据不存在了 |  | ||||||
|        assertNull(ureportFileMapper.selectById(id)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Test |  | ||||||
|     public void testDeleteUreportFile_notExists() { |  | ||||||
|         // 准备参数 |  | ||||||
|         Long id = randomLongId(); |  | ||||||
|  |  | ||||||
|         // 调用, 并断言异常 |  | ||||||
|         assertServiceException(() -> ureportFileService.deleteUreportFile(id), UREPORT_FILE_NOT_EXISTS); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Test |  | ||||||
|     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 |  | ||||||
|     public void testGetUreportFilePage() { |  | ||||||
|        // mock 数据 |  | ||||||
|        UreportFileDO dbUreportFile = randomPojo(UreportFileDO.class, o -> { // 等会查询到 |  | ||||||
|            o.setFileName(null); |  | ||||||
|            o.setStatus(null); |  | ||||||
|            o.setRemark(null); |  | ||||||
|            o.setCreateTime(null); |  | ||||||
|        }); |  | ||||||
|        ureportFileMapper.insert(dbUreportFile); |  | ||||||
|        // 测试 fileName 不匹配 |  | ||||||
|        ureportFileMapper.insert(cloneIgnoreId(dbUreportFile, o -> o.setFileName(null))); |  | ||||||
|        // 测试 status 不匹配 |  | ||||||
|        ureportFileMapper.insert(cloneIgnoreId(dbUreportFile, o -> o.setStatus(null))); |  | ||||||
|        // 测试 remark 不匹配 |  | ||||||
|        ureportFileMapper.insert(cloneIgnoreId(dbUreportFile, o -> o.setRemark(null))); |  | ||||||
|        // 测试 createTime 不匹配 |  | ||||||
|        ureportFileMapper.insert(cloneIgnoreId(dbUreportFile, o -> o.setCreateTime(null))); |  | ||||||
|        // 准备参数 |  | ||||||
|        UreportFilePageReqVO reqVO = new UreportFilePageReqVO(); |  | ||||||
|        reqVO.setFileName(null); |  | ||||||
|        reqVO.setStatus(null); |  | ||||||
|        reqVO.setRemark(null); |  | ||||||
|        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); |  | ||||||
|  |  | ||||||
|        // 调用 |  | ||||||
|        PageResult<UreportFileDO> pageResult = ureportFileService.getUreportFilePage(reqVO); |  | ||||||
|        // 断言 |  | ||||||
|        assertEquals(1, pageResult.getTotal()); |  | ||||||
|        assertEquals(1, pageResult.getList().size()); |  | ||||||
|        assertPojoEquals(dbUreportFile, pageResult.getList().get(0)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -1,2 +1,2 @@ | |||||||
| DELETE FROM "report_go_view_project"; | DELETE FROM "report_go_view_project"; | ||||||
| DELETE FROM "ureport_file"; | DELETE FROM "report_ureport_data"; | ||||||
|   | |||||||
| @@ -12,16 +12,16 @@ CREATE TABLE IF NOT EXISTS "report_go_view_project" ( | |||||||
|     "deleted" bit NOT NULL DEFAULT FALSE, |     "deleted" bit NOT NULL DEFAULT FALSE, | ||||||
|     PRIMARY KEY ("id") |     PRIMARY KEY ("id") | ||||||
| ) COMMENT 'GoView 项目表'; | ) COMMENT 'GoView 项目表'; | ||||||
| CREATE TABLE IF NOT EXISTS "ureport_file" ( | CREATE TABLE IF NOT EXISTS "report_ureport_data" ( | ||||||
|       "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, |      "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||||||
|       "file_name" varchar NOT NULL, |      "name" varchar NOT NULL, | ||||||
|       "status" int NOT NULL, |      "status" int NOT NULL, | ||||||
|       "file_content" varchar, |      "content" varchar, | ||||||
|       "remark" varchar, |      "remark" varchar, | ||||||
|       "creator" varchar DEFAULT '', |      "creator" varchar DEFAULT '', | ||||||
|       "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, |      "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||||||
|       "updater" varchar DEFAULT '', |      "updater" varchar DEFAULT '', | ||||||
|       "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, |      "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||||||
|       "deleted" bit NOT NULL DEFAULT FALSE, |      "deleted" bit NOT NULL DEFAULT FALSE, | ||||||
|       PRIMARY KEY ("id") |      PRIMARY KEY ("id") | ||||||
| ) COMMENT 'Ureport2报表'; | ) COMMENT 'Ureport2报表'; | ||||||
|   | |||||||
| @@ -221,7 +221,7 @@ yudao: | |||||||
|       - jimu_report_link |       - jimu_report_link | ||||||
|       - jimu_report_map |       - jimu_report_map | ||||||
|       - jimu_report_share |       - jimu_report_share | ||||||
|       - ureport_file |       - report_ureport_data | ||||||
|       - rep_demo_dxtj |       - rep_demo_dxtj | ||||||
|       - rep_demo_employee |       - rep_demo_employee | ||||||
|       - rep_demo_gongsi |       - rep_demo_gongsi | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 liuhongfeng
					liuhongfeng