Commit 8e3d7663bba7e7f2774af775be46672e35ad107f

Authored by YunaiV
1 parent 24e083b3

多模块重构 11:代码生成器,支持多租户

Showing 27 changed files with 34 additions and 831 deletions
yudao-module-tool/yudao-module-tool-impl/pom.xml
... ... @@ -38,6 +38,10 @@
38 38 <groupId>cn.iocoder.boot</groupId>
39 39 <artifactId>yudao-spring-boot-starter-biz-dict</artifactId>
40 40 </dependency>
  41 + <dependency>
  42 + <groupId>cn.iocoder.boot</groupId>
  43 + <artifactId>yudao-spring-boot-starter-biz-tenant</artifactId>
  44 + </dependency>
41 45  
42 46 <!-- Web 相关 -->
43 47 <dependency>
... ...
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/package-info.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.admin.test;
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoBaseVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.admin.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -import javax.validation.constraints.*;
7   -
8   -/**
9   -* 字典类型 Base VO,提供给添加、修改、详细的子 VO 使用
10   -* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
11   -*/
12   -@Data
13   -public class TestDemoBaseVO {
14   -
15   - @ApiModelProperty(value = "名字", required = true)
16   - @NotNull(message = "名字不能为空")
17   - private String name;
18   -
19   - @ApiModelProperty(value = "状态", required = true)
20   - @NotNull(message = "状态不能为空")
21   - private Integer status;
22   -
23   - @ApiModelProperty(value = "类型", required = true)
24   - @NotNull(message = "类型不能为空")
25   - private Integer type;
26   -
27   - @ApiModelProperty(value = "分类", required = true)
28   - @NotNull(message = "分类不能为空")
29   - private Integer category;
30   -
31   - @ApiModelProperty(value = "备注")
32   - private String remark;
33   -
34   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoCreateReqVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.admin.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -import javax.validation.constraints.*;
7   -
8   -@ApiModel("管理后台 - 字典类型创建 Request VO")
9   -@Data
10   -@EqualsAndHashCode(callSuper = true)
11   -@ToString(callSuper = true)
12   -public class TestDemoCreateReqVO extends TestDemoBaseVO {
13   -
14   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExportReqVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.admin.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -import cn.iocoder.yudao.framework.common.pojo.PageParam;
7   -import org.springframework.format.annotation.DateTimeFormat;
8   -
9   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10   -
11   -@ApiModel(value = "管理后台 - 字典类型 Excel 导出 Request VO", description = "参数和 TestDemoPageReqVO 是一致的")
12   -@Data
13   -public class TestDemoExportReqVO {
14   -
15   - @ApiModelProperty(value = "名字")
16   - private String name;
17   -
18   - @ApiModelProperty(value = "状态")
19   - private Integer status;
20   -
21   - @ApiModelProperty(value = "类型")
22   - private Integer type;
23   -
24   - @ApiModelProperty(value = "分类")
25   - private Integer category;
26   -
27   - @ApiModelProperty(value = "备注")
28   - private String remark;
29   -
30   - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
31   - @ApiModelProperty(value = "开始创建时间")
32   - private Date beginCreateTime;
33   -
34   - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
35   - @ApiModelProperty(value = "结束创建时间")
36   - private Date endCreateTime;
37   -
38   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoPageReqVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.admin.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -import cn.iocoder.yudao.framework.common.pojo.PageParam;
7   -import org.springframework.format.annotation.DateTimeFormat;
8   -
9   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10   -
11   -@ApiModel("管理后台 - 字典类型分页 Request VO")
12   -@Data
13   -@EqualsAndHashCode(callSuper = true)
14   -@ToString(callSuper = true)
15   -public class TestDemoPageReqVO extends PageParam {
16   -
17   - @ApiModelProperty(value = "名字")
18   - private String name;
19   -
20   - @ApiModelProperty(value = "状态")
21   - private Integer status;
22   -
23   - @ApiModelProperty(value = "类型")
24   - private Integer type;
25   -
26   - @ApiModelProperty(value = "分类")
27   - private Integer category;
28   -
29   - @ApiModelProperty(value = "备注")
30   - private String remark;
31   -
32   - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
33   - @ApiModelProperty(value = "开始创建时间")
34   - private Date beginCreateTime;
35   -
36   - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
37   - @ApiModelProperty(value = "结束创建时间")
38   - private Date endCreateTime;
39   -
40   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoRespVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.admin.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -
7   -@ApiModel("管理后台 - 字典类型 Response VO")
8   -@Data
9   -@EqualsAndHashCode(callSuper = true)
10   -@ToString(callSuper = true)
11   -public class TestDemoRespVO extends TestDemoBaseVO {
12   -
13   - @ApiModelProperty(value = "编号", required = true)
14   - private Long id;
15   -
16   - @ApiModelProperty(value = "创建时间", required = true)
17   - private Date createTime;
18   -
19   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoUpdateReqVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.admin.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -import javax.validation.constraints.*;
7   -
8   -@ApiModel("管理后台 - 字典类型更新 Request VO")
9   -@Data
10   -@EqualsAndHashCode(callSuper = true)
11   -@ToString(callSuper = true)
12   -public class TestDemoUpdateReqVO extends TestDemoBaseVO {
13   -
14   - @ApiModelProperty(value = "编号", required = true)
15   - @NotNull(message = "编号不能为空")
16   - private Long id;
17   -
18   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/test/AppTestDemoController.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.app.test;
2   -
3   -import org.springframework.security.access.prepost.PreAuthorize;
4   -import org.springframework.web.bind.annotation.*;
5   -import javax.annotation.Resource;
6   -import org.springframework.validation.annotation.Validated;
7   -
8   -import io.swagger.annotations.*;
9   -
10   -import javax.validation.constraints.*;
11   -import javax.validation.*;
12   -import javax.servlet.http.*;
13   -import java.util.*;
14   -import java.io.IOException;
15   -
16   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
17   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
18   -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
19   -
20   -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
21   -
22   -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
23   -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
24   -
25   -import cn.iocoder.yudao.module.tool.controller.app.test.vo.*;
26   -import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO;
27   -import cn.iocoder.yudao.module.tool.convert.test.TestDemoConvert;
28   -import cn.iocoder.yudao.module.tool.service.test.TestDemoService;
29   -
30   -@Api(tags = "用户 APP - 字典类型")
31   -@RestController
32   -@RequestMapping("/tool/test-demo")
33   -@Validated
34   -public class AppTestDemoController {
35   -
36   - @Resource
37   - private TestDemoService testDemoService;
38   -
39   - @PostMapping("/create")
40   - @ApiOperation("创建字典类型")
41   - public CommonResult<Long> createTestDemo(@Valid @RequestBody AppTestDemoCreateReqVO createReqVO) {
42   - return success(testDemoService.createTestDemo(createReqVO));
43   - }
44   -
45   - @PutMapping("/update")
46   - @ApiOperation("更新字典类型")
47   - public CommonResult<Boolean> updateTestDemo(@Valid @RequestBody AppTestDemoUpdateReqVO updateReqVO) {
48   - testDemoService.updateTestDemo(updateReqVO);
49   - return success(true);
50   - }
51   -
52   - @DeleteMapping("/delete")
53   - @ApiOperation("删除字典类型")
54   - @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class)
55   - public CommonResult<Boolean> deleteTestDemo(@RequestParam("id") Long id) {
56   - testDemoService.deleteTestDemo(id);
57   - return success(true);
58   - }
59   -
60   - @GetMapping("/get")
61   - @ApiOperation("获得字典类型")
62   - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
63   - @PreAuthorize("@ss.hasPermission('tool:test-demo:query')")
64   - public CommonResult<AppTestDemoRespVO> getTestDemo(@RequestParam("id") Long id) {
65   - TestDemoDO testDemo = testDemoService.getTestDemo(id);
66   - return success(TestDemoConvert.INSTANCE.convert(testDemo));
67   - }
68   -
69   - @GetMapping("/list")
70   - @ApiOperation("获得字典类型列表")
71   - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class)
72   - public CommonResult<List<AppTestDemoRespVO>> getTestDemoList(@RequestParam("ids") Collection<Long> ids) {
73   - List<TestDemoDO> list = testDemoService.getTestDemoList(ids);
74   - return success(TestDemoConvert.INSTANCE.convertList(list));
75   - }
76   -
77   - @GetMapping("/page")
78   - @ApiOperation("获得字典类型分页")
79   - public CommonResult<PageResult<AppTestDemoRespVO>> getTestDemoPage(@Valid AppTestDemoPageReqVO pageVO) {
80   - PageResult<TestDemoDO> pageResult = testDemoService.getTestDemoPage(pageVO);
81   - return success(TestDemoConvert.INSTANCE.convertPage(pageResult));
82   - }
83   -
84   - @GetMapping("/export-excel")
85   - @ApiOperation("导出字典类型 Excel")
86   - @OperateLog(type = EXPORT)
87   - public void exportTestDemoExcel(@Valid AppTestDemoExportReqVO exportReqVO,
88   - HttpServletResponse response) throws IOException {
89   - List<TestDemoDO> list = testDemoService.getTestDemoList(exportReqVO);
90   - // 导出 Excel
91   - List<AppTestDemoExcelVO> datas = TestDemoConvert.INSTANCE.convertList02(list);
92   - ExcelUtils.write(response, "字典类型.xls", "数据", AppTestDemoExcelVO.class, datas);
93   - }
94   -
95   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/test/vo/AppTestDemoBaseVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.app.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -import javax.validation.constraints.*;
7   -
8   -/**
9   -* 字典类型 Base VO,提供给添加、修改、详细的子 VO 使用
10   -* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
11   -*/
12   -@Data
13   -public class AppTestDemoBaseVO {
14   -
15   - @ApiModelProperty(value = "名字", required = true)
16   - @NotNull(message = "名字不能为空")
17   - private String name;
18   -
19   - @ApiModelProperty(value = "状态", required = true)
20   - @NotNull(message = "状态不能为空")
21   - private Integer status;
22   -
23   - @ApiModelProperty(value = "类型", required = true)
24   - @NotNull(message = "类型不能为空")
25   - private Integer type;
26   -
27   - @ApiModelProperty(value = "分类", required = true)
28   - @NotNull(message = "分类不能为空")
29   - private Integer category;
30   -
31   - @ApiModelProperty(value = "备注")
32   - private String remark;
33   -
34   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/test/vo/AppTestDemoCreateReqVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.app.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -import javax.validation.constraints.*;
7   -
8   -@ApiModel("用户 APP - 字典类型创建 Request VO")
9   -@Data
10   -@EqualsAndHashCode(callSuper = true)
11   -@ToString(callSuper = true)
12   -public class AppTestDemoCreateReqVO extends AppTestDemoBaseVO {
13   -
14   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/test/vo/AppTestDemoExcelVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.app.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -
7   -import com.alibaba.excel.annotation.ExcelProperty;
8   -
9   -/**
10   - * 字典类型 Excel VO
11   - *
12   - * @author 芋道源码
13   - */
14   -@Data
15   -public class AppTestDemoExcelVO {
16   -
17   - @ExcelProperty("编号")
18   - private Long id;
19   -
20   - @ExcelProperty("名字")
21   - private String name;
22   -
23   - @ExcelProperty("状态")
24   - private Integer status;
25   -
26   - @ExcelProperty("类型")
27   - private Integer type;
28   -
29   - @ExcelProperty("分类")
30   - private Integer category;
31   -
32   - @ExcelProperty("备注")
33   - private String remark;
34   -
35   - @ExcelProperty("创建时间")
36   - private Date createTime;
37   -
38   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/test/vo/AppTestDemoExportReqVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.app.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -import cn.iocoder.yudao.framework.common.pojo.PageParam;
7   -import org.springframework.format.annotation.DateTimeFormat;
8   -
9   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10   -
11   -@ApiModel(value = "用户 APP - 字典类型 Excel 导出 Request VO", description = "参数和 TestDemoPageReqVO 是一致的")
12   -@Data
13   -public class AppTestDemoExportReqVO {
14   -
15   - @ApiModelProperty(value = "名字")
16   - private String name;
17   -
18   - @ApiModelProperty(value = "状态")
19   - private Integer status;
20   -
21   - @ApiModelProperty(value = "类型")
22   - private Integer type;
23   -
24   - @ApiModelProperty(value = "分类")
25   - private Integer category;
26   -
27   - @ApiModelProperty(value = "备注")
28   - private String remark;
29   -
30   - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
31   - @ApiModelProperty(value = "开始创建时间")
32   - private Date beginCreateTime;
33   -
34   - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
35   - @ApiModelProperty(value = "结束创建时间")
36   - private Date endCreateTime;
37   -
38   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/test/vo/AppTestDemoPageReqVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.app.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -import cn.iocoder.yudao.framework.common.pojo.PageParam;
7   -import org.springframework.format.annotation.DateTimeFormat;
8   -
9   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10   -
11   -@ApiModel("用户 APP - 字典类型分页 Request VO")
12   -@Data
13   -@EqualsAndHashCode(callSuper = true)
14   -@ToString(callSuper = true)
15   -public class AppTestDemoPageReqVO extends PageParam {
16   -
17   - @ApiModelProperty(value = "名字")
18   - private String name;
19   -
20   - @ApiModelProperty(value = "状态")
21   - private Integer status;
22   -
23   - @ApiModelProperty(value = "类型")
24   - private Integer type;
25   -
26   - @ApiModelProperty(value = "分类")
27   - private Integer category;
28   -
29   - @ApiModelProperty(value = "备注")
30   - private String remark;
31   -
32   - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
33   - @ApiModelProperty(value = "开始创建时间")
34   - private Date beginCreateTime;
35   -
36   - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
37   - @ApiModelProperty(value = "结束创建时间")
38   - private Date endCreateTime;
39   -
40   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/test/vo/AppTestDemoRespVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.app.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -
7   -@ApiModel("用户 APP - 字典类型 Response VO")
8   -@Data
9   -@EqualsAndHashCode(callSuper = true)
10   -@ToString(callSuper = true)
11   -public class AppTestDemoRespVO extends AppTestDemoBaseVO {
12   -
13   - @ApiModelProperty(value = "编号", required = true)
14   - private Long id;
15   -
16   - @ApiModelProperty(value = "创建时间", required = true)
17   - private Date createTime;
18   -
19   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/test/vo/AppTestDemoUpdateReqVO.java deleted
1   -package cn.iocoder.yudao.module.tool.controller.app.test.vo;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import io.swagger.annotations.*;
6   -import javax.validation.constraints.*;
7   -
8   -@ApiModel("用户 APP - 字典类型更新 Request VO")
9   -@Data
10   -@EqualsAndHashCode(callSuper = true)
11   -@ToString(callSuper = true)
12   -public class AppTestDemoUpdateReqVO extends AppTestDemoBaseVO {
13   -
14   - @ApiModelProperty(value = "编号", required = true)
15   - @NotNull(message = "编号不能为空")
16   - private Long id;
17   -
18   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/test/TestDemoConvert.java deleted
1   -package cn.iocoder.yudao.module.tool.convert.test;
2   -
3   -import java.util.*;
4   -
5   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
6   -
7   -import org.mapstruct.Mapper;
8   -import org.mapstruct.factory.Mappers;
9   -import cn.iocoder.yudao.module.tool.controller.app.test.vo.*;
10   -import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO;
11   -
12   -/**
13   - * 字典类型 Convert
14   - *
15   - * @author 芋道源码
16   - */
17   -@Mapper
18   -public interface TestDemoConvert {
19   -
20   - TestDemoConvert INSTANCE = Mappers.getMapper(TestDemoConvert.class);
21   -
22   - TestDemoDO convert(AppTestDemoCreateReqVO bean);
23   -
24   - TestDemoDO convert(AppTestDemoUpdateReqVO bean);
25   -
26   - AppTestDemoRespVO convert(TestDemoDO bean);
27   -
28   - List<AppTestDemoRespVO> convertList(List<TestDemoDO> list);
29   -
30   - PageResult<AppTestDemoRespVO> convertPage(PageResult<TestDemoDO> page);
31   -
32   - List<AppTestDemoExcelVO> convertList02(List<TestDemoDO> list);
33   -
34   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/test/TestDemoDO.java deleted
1   -package cn.iocoder.yudao.module.tool.dal.dataobject.test;
2   -
3   -import lombok.*;
4   -import java.util.*;
5   -import com.baomidou.mybatisplus.annotation.*;
6   -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
7   -
8   -/**
9   - * 字典类型 DO
10   - *
11   - * @author 芋道源码
12   - */
13   -@TableName("tool_test_demo")
14   -@Data
15   -@EqualsAndHashCode(callSuper = true)
16   -@ToString(callSuper = true)
17   -@Builder
18   -@NoArgsConstructor
19   -@AllArgsConstructor
20   -public class TestDemoDO extends BaseDO {
21   -
22   - /**
23   - * 编号
24   - */
25   - @TableId
26   - private Long id;
27   - /**
28   - * 名字
29   - */
30   - private String name;
31   - /**
32   - * 状态
33   - */
34   - private Integer status;
35   - /**
36   - * 类型
37   - */
38   - private Integer type;
39   - /**
40   - * 分类
41   - */
42   - private Integer category;
43   - /**
44   - * 备注
45   - */
46   - private String remark;
47   -
48   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/test/TestDemoMapper.java deleted
1   -package cn.iocoder.yudao.module.tool.dal.mysql.test;
2   -
3   -import java.util.*;
4   -
5   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
6   -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
7   -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8   -import cn.iocoder.yudao.module.tool.controller.app.test.vo.AppTestDemoExportReqVO;
9   -import cn.iocoder.yudao.module.tool.controller.app.test.vo.AppTestDemoPageReqVO;
10   -import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO;
11   -import org.apache.ibatis.annotations.Mapper;
12   -import cn.iocoder.yudao.module.tool.controller.admin.test.vo.*;
13   -
14   -/**
15   - * 字典类型 Mapper
16   - *
17   - * @author 芋道源码
18   - */
19   -@Mapper
20   -public interface TestDemoMapper extends BaseMapperX<TestDemoDO> {
21   -
22   - default PageResult<TestDemoDO> selectPage(TestDemoPageReqVO reqVO) {
23   - return selectPage(reqVO, new LambdaQueryWrapperX<TestDemoDO>()
24   - .likeIfPresent(TestDemoDO::getName, reqVO.getName())
25   - .eqIfPresent(TestDemoDO::getStatus, reqVO.getStatus())
26   - .eqIfPresent(TestDemoDO::getType, reqVO.getType())
27   - .eqIfPresent(TestDemoDO::getCategory, reqVO.getCategory())
28   - .eqIfPresent(TestDemoDO::getRemark, reqVO.getRemark())
29   - .betweenIfPresent(TestDemoDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
30   - .orderByDesc(TestDemoDO::getId));
31   - }
32   -
33   - default List<TestDemoDO> selectList(TestDemoExportReqVO reqVO) {
34   - return selectList(new LambdaQueryWrapperX<TestDemoDO>()
35   - .likeIfPresent(TestDemoDO::getName, reqVO.getName())
36   - .eqIfPresent(TestDemoDO::getStatus, reqVO.getStatus())
37   - .eqIfPresent(TestDemoDO::getType, reqVO.getType())
38   - .eqIfPresent(TestDemoDO::getCategory, reqVO.getCategory())
39   - .eqIfPresent(TestDemoDO::getRemark, reqVO.getRemark())
40   - .betweenIfPresent(TestDemoDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
41   - .orderByDesc(TestDemoDO::getId));
42   - }
43   -
44   - default PageResult<TestDemoDO> selectPage(AppTestDemoPageReqVO reqVO) {
45   - return selectPage(reqVO, new LambdaQueryWrapperX<TestDemoDO>()
46   - .likeIfPresent(TestDemoDO::getName, reqVO.getName())
47   - .eqIfPresent(TestDemoDO::getStatus, reqVO.getStatus())
48   - .eqIfPresent(TestDemoDO::getType, reqVO.getType())
49   - .eqIfPresent(TestDemoDO::getCategory, reqVO.getCategory())
50   - .eqIfPresent(TestDemoDO::getRemark, reqVO.getRemark())
51   - .betweenIfPresent(TestDemoDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
52   - .orderByDesc(TestDemoDO::getId));
53   - }
54   -
55   - default List<TestDemoDO> selectList(AppTestDemoExportReqVO reqVO) {
56   - return selectList(new LambdaQueryWrapperX<TestDemoDO>()
57   - .likeIfPresent(TestDemoDO::getName, reqVO.getName())
58   - .eqIfPresent(TestDemoDO::getStatus, reqVO.getStatus())
59   - .eqIfPresent(TestDemoDO::getType, reqVO.getType())
60   - .eqIfPresent(TestDemoDO::getCategory, reqVO.getCategory())
61   - .eqIfPresent(TestDemoDO::getRemark, reqVO.getRemark())
62   - .betweenIfPresent(TestDemoDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
63   - .orderByDesc(TestDemoDO::getId));
64   - }
65   -
66   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java
... ... @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.tool.service.codegen.inner;
3 3 import cn.hutool.core.map.MapUtil;
4 4 import cn.hutool.core.util.StrUtil;
5 5 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  6 +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
6 7 import cn.iocoder.yudao.module.tool.convert.codegen.CodegenConvert;
7 8 import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO;
8 9 import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO;
... ... @@ -55,7 +56,11 @@ public class CodegenBuilder {
55 56 .build();
56 57  
57 58 /**
58   - * {@link BaseDO} 的字段
  59 + * 多租户编号的字段名
  60 + */
  61 + public static final String TENANT_ID_FIELD = "tenant_id";
  62 + /**
  63 + * {@link TenantBaseDO} 的字段
59 64 */
60 65 public static final Set<String> BASE_DO_FIELDS = new HashSet<>();
61 66 /**
... ... @@ -91,7 +96,7 @@ public class CodegenBuilder {
91 96 .build();
92 97  
93 98 static {
94   - Arrays.stream(BaseDO.class.getDeclaredFields()).forEach(field -> BASE_DO_FIELDS.add(field.getName()));
  99 + Arrays.stream(TenantBaseDO.class.getDeclaredFields()).forEach(field -> BASE_DO_FIELDS.add(field.getName()));
95 100 // 处理 OPERATION 相关的字段
96 101 CREATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
97 102 UPDATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
... ...
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java
1 1 package cn.iocoder.yudao.module.tool.service.codegen.inner;
2 2  
  3 +import cn.hutool.core.collection.ListUtil;
3 4 import cn.hutool.core.map.MapUtil;
  5 +import cn.hutool.core.util.ArrayUtil;
4 6 import cn.hutool.core.util.StrUtil;
5 7 import cn.hutool.extra.template.TemplateConfig;
6 8 import cn.hutool.extra.template.TemplateEngine;
... ... @@ -10,6 +12,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
10 12 import cn.iocoder.yudao.framework.common.pojo.PageParam;
11 13 import cn.iocoder.yudao.framework.common.pojo.PageResult;
12 14 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  15 +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
13 16 import cn.iocoder.yudao.module.tool.enums.codegen.CodegenSceneEnum;
14 17 import cn.iocoder.yudao.module.tool.framework.codegen.config.CodegenProperties;
15 18 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
... ... @@ -121,7 +124,6 @@ public class CodegenEngine {
121 124 globalBindingMap.put("DictFormatClassName", DictFormat.class.getName());
122 125 // DO 类,独有字段
123 126 globalBindingMap.put("baseDOFields", CodegenBuilder.BASE_DO_FIELDS);
124   - globalBindingMap.put("BaseDOClassName", BaseDO.class.getName());
125 127 globalBindingMap.put("QueryWrapperClassName", LambdaQueryWrapperX.class.getName());
126 128 globalBindingMap.put("BaseMapperClassName", BaseMapperX.class.getName());
127 129 // Util 工具类
... ... @@ -141,6 +143,7 @@ public class CodegenEngine {
141 143 bindingMap.put("columns", columns);
142 144 bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, CodegenColumnDO::getPrimaryKey)); // 主键字段
143 145 bindingMap.put("sceneEnum", CodegenSceneEnum.valueOf(table.getScene()));
  146 +
144 147 // className 相关
145 148 // 去掉指定前缀,将 TestDictType 转换成 DictType. 因为在 create 等方法后,不需要带上 Test 前缀
146 149 String simpleClassName = removePrefix(table.getClassName(), upperFirst(table.getModuleName()));
... ... @@ -153,6 +156,15 @@ public class CodegenEngine {
153 156 // permission 前缀
154 157 bindingMap.put("permissionPrefix", table.getModuleName() + ":" + simpleClassNameStrikeCase);
155 158  
  159 + // 如果多租户,则进行覆盖 DB 独有字段
  160 + if (CollectionUtils.findFirst(columns, column -> column.getColumnName().equals(CodegenBuilder.TENANT_ID_FIELD)) != null) {
  161 + globalBindingMap.put("BaseDOClassName", TenantBaseDO.class.getName());
  162 + globalBindingMap.put("BaseDOClassName_simple", TenantBaseDO.class.getSimpleName());
  163 + } else {
  164 + globalBindingMap.put("BaseDOClassName", BaseDO.class.getName());
  165 + globalBindingMap.put("BaseDOClassName_simple", BaseDO.class.getSimpleName());
  166 + }
  167 +
156 168 // 执行生成
157 169 final Map<String, String> result = Maps.newLinkedHashMapWithExpectedSize(TEMPLATES.size()); // 有序
158 170 TEMPLATES.forEach((vmPath, filePath) -> {
... ...
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoService.java deleted
1   -package cn.iocoder.yudao.module.tool.service.test;
2   -
3   -import java.util.*;
4   -import javax.validation.*;
5   -import cn.iocoder.yudao.module.tool.controller.app.test.vo.*;
6   -import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO;
7   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
8   -
9   -/**
10   - * 字典类型 Service 接口
11   - *
12   - * @author 芋道源码
13   - */
14   -public interface TestDemoService {
15   -
16   - /**
17   - * 创建字典类型
18   - *
19   - * @param createReqVO 创建信息
20   - * @return 编号
21   - */
22   - Long createTestDemo(@Valid AppTestDemoCreateReqVO createReqVO);
23   -
24   - /**
25   - * 更新字典类型
26   - *
27   - * @param updateReqVO 更新信息
28   - */
29   - void updateTestDemo(@Valid AppTestDemoUpdateReqVO updateReqVO);
30   -
31   - /**
32   - * 删除字典类型
33   - *
34   - * @param id 编号
35   - */
36   - void deleteTestDemo(Long id);
37   -
38   - /**
39   - * 获得字典类型
40   - *
41   - * @param id 编号
42   - * @return 字典类型
43   - */
44   - TestDemoDO getTestDemo(Long id);
45   -
46   - /**
47   - * 获得字典类型列表
48   - *
49   - * @param ids 编号
50   - * @return 字典类型列表
51   - */
52   - List<TestDemoDO> getTestDemoList(Collection<Long> ids);
53   -
54   - /**
55   - * 获得字典类型分页
56   - *
57   - * @param pageReqVO 分页查询
58   - * @return 字典类型分页
59   - */
60   - PageResult<TestDemoDO> getTestDemoPage(AppTestDemoPageReqVO pageReqVO);
61   -
62   - /**
63   - * 获得字典类型列表, 用于 Excel 导出
64   - *
65   - * @param exportReqVO 查询条件
66   - * @return 字典类型列表
67   - */
68   - List<TestDemoDO> getTestDemoList(AppTestDemoExportReqVO exportReqVO);
69   -
70   -}
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImpl.java deleted
1   -package cn.iocoder.yudao.module.tool.service.test;
2   -
3   -import org.springframework.stereotype.Service;
4   -import javax.annotation.Resource;
5   -import org.springframework.validation.annotation.Validated;
6   -
7   -import java.util.*;
8   -import cn.iocoder.yudao.module.tool.controller.app.test.vo.*;
9   -import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO;
10   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
11   -
12   -import cn.iocoder.yudao.module.tool.convert.test.TestDemoConvert;
13   -import cn.iocoder.yudao.module.tool.dal.mysql.test.TestDemoMapper;
14   -
15   -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
16   -import static cn.iocoder.yudao.module.tool.enums.ErrorCodeConstants.*;
17   -
18   -/**
19   - * 字典类型 Service 实现类
20   - *
21   - * @author 芋道源码
22   - */
23   -@Service
24   -@Validated
25   -public class TestDemoServiceImpl implements TestDemoService {
26   -
27   - @Resource
28   - private TestDemoMapper testDemoMapper;
29   -
30   - @Override
31   - public Long createTestDemo(AppTestDemoCreateReqVO createReqVO) {
32   - // 插入
33   - TestDemoDO testDemo = TestDemoConvert.INSTANCE.convert(createReqVO);
34   - testDemoMapper.insert(testDemo);
35   - // 返回
36   - return testDemo.getId();
37   - }
38   -
39   - @Override
40   - public void updateTestDemo(AppTestDemoUpdateReqVO updateReqVO) {
41   - // 校验存在
42   - this.validateTestDemoExists(updateReqVO.getId());
43   - // 更新
44   - TestDemoDO updateObj = TestDemoConvert.INSTANCE.convert(updateReqVO);
45   - testDemoMapper.updateById(updateObj);
46   - }
47   -
48   - @Override
49   - public void deleteTestDemo(Long id) {
50   - // 校验存在
51   - this.validateTestDemoExists(id);
52   - // 删除
53   - testDemoMapper.deleteById(id);
54   - }
55   -
56   - private void validateTestDemoExists(Long id) {
57   - if (testDemoMapper.selectById(id) == null) {
58   - throw exception(TEST_DEMO_NOT_EXISTS);
59   - }
60   - }
61   -
62   - @Override
63   - public TestDemoDO getTestDemo(Long id) {
64   - return testDemoMapper.selectById(id);
65   - }
66   -
67   - @Override
68   - public List<TestDemoDO> getTestDemoList(Collection<Long> ids) {
69   - return testDemoMapper.selectBatchIds(ids);
70   - }
71   -
72   - @Override
73   - public PageResult<TestDemoDO> getTestDemoPage(AppTestDemoPageReqVO pageReqVO) {
74   - return testDemoMapper.selectPage(pageReqVO);
75   - }
76   -
77   - @Override
78   - public List<TestDemoDO> getTestDemoList(AppTestDemoExportReqVO exportReqVO) {
79   - return testDemoMapper.selectList(exportReqVO);
80   - }
81   -
82   -}
yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/do.vm
... ... @@ -17,7 +17,7 @@ import ${BaseDOClassName};
17 17 @Builder
18 18 @NoArgsConstructor
19 19 @AllArgsConstructor
20   -public class ${table.className}DO extends BaseDO {
  20 +public class ${table.className}DO extends ${BaseDOClassName_simple} {
21 21  
22 22 #foreach ($column in $columns)
23 23 #if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段
... ...
yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/test/BaseDbUnitTest.java deleted
1   -package cn.iocoder.yudao.module.tool.test;
2   -
3   -import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
4   -import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
5   -import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
6   -import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
7   -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
8   -import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
9   -import org.springframework.boot.test.context.SpringBootTest;
10   -import org.springframework.context.annotation.Import;
11   -import org.springframework.test.context.ActiveProfiles;
12   -import org.springframework.test.context.jdbc.Sql;
13   -
14   -/**
15   - * 依赖内存 DB 的单元测试
16   - *
17   - * 注意,Service 层同样适用。对于 Service 层的单元测试,我们针对自己模块的 Mapper 走的是 H2 内存数据库,针对别的模块的 Service 走的是 Mock 方法
18   - *
19   - * @author 芋道源码
20   - */
21   -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class)
22   -@ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件
23   -@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB
24   -public class BaseDbUnitTest {
25   -
26   - @Import({
27   - // DB 配置类
28   - YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类
29   - DataSourceAutoConfiguration.class, // Spring DB 自动配置类
30   - DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类
31   - DruidDataSourceAutoConfigure.class, // Druid 自动配置类
32   - // MyBatis 配置类
33   - YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类
34   - MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类
35   - })
36   - public static class Application {
37   - }
38   -
39   -}
yudao-ui-admin/src/views/tool/codegen/index.vue
... ... @@ -3,34 +3,16 @@
3 3 <!-- 操作工作栏 -->
4 4 <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
5 5 <el-form-item label="表名称" prop="tableName">
6   - <el-input
7   - v-model="queryParams.tableName"
8   - placeholder="请输入表名称"
9   - clearable
10   - size="small"
11   - @keyup.enter.native="handleQuery"
12   - />
  6 + <el-input v-model="queryParams.tableName" placeholder="请输入表名称" clearable size="small"
  7 + @keyup.enter.native="handleQuery"/>
13 8 </el-form-item>
14 9 <el-form-item label="表描述" prop="tableComment">
15   - <el-input
16   - v-model="queryParams.tableComment"
17   - placeholder="请输入表描述"
18   - clearable
19   - size="small"
20   - @keyup.enter.native="handleQuery"
21   - />
  10 + <el-input v-model="queryParams.tableComment" placeholder="请输入表描述" clearable size="small"
  11 + @keyup.enter.native="handleQuery"/>
22 12 </el-form-item>
23 13 <el-form-item label="创建时间">
24   - <el-date-picker
25   - v-model="dateRange"
26   - size="small"
27   - style="width: 240px"
28   - value-format="yyyy-MM-dd"
29   - type="daterange"
30   - range-separator="-"
31   - start-placeholder="开始日期"
32   - end-placeholder="结束日期"
33   - ></el-date-picker>
  14 + <el-date-picker v-model="dateRange" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange"
  15 + range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"/>
34 16 </el-form-item>
35 17 <el-form-item>
36 18 <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
... ... @@ -79,11 +61,11 @@
79 61 <!-- 预览界面 -->
80 62 <el-dialog :title="preview.title" :visible.sync="preview.open" width="90%" top="5vh" append-to-body>
81 63 <el-row>
82   - <el-col :span="7">
  64 + <el-col :span="9">
83 65 <el-tree :data="preview.fileTree" :expand-on-click-node="false" default-expand-all highlight-current
84 66 @node-click="handleNodeClick"/>
85 67 </el-col>
86   - <el-col :span="17">
  68 + <el-col :span="15">
87 69 <el-tabs v-model="preview.activeName">
88 70 <el-tab-pane v-for="item in preview.data" :label="item.filePath.substring(item.filePath.lastIndexOf('/') + 1)"
89 71 :name="item.filePath" :key="item.filePath">
... ... @@ -252,7 +234,6 @@ export default {
252 234 previewCodegen(row.id).then(response => {
253 235 this.preview.data = response.data;
254 236 let files = this.handleFiles(response.data);
255   - // console.log(files)
256 237 this.preview.fileTree = this.handleTree(files, "id", "parentId", "children",
257 238 "/"); // "/" 为根节点
258 239 // console.log(this.preview.fileTree)
... ...
更新日志.md
... ... @@ -24,7 +24,7 @@
24 24  
25 25 *【重构】大模块按照多 Maven Module 的方式拆分,提升可维护性,为后续重构 onemall 提供基础
26 26 *【新增】Spring Security 支持读取多种用户类型,从不同的数据库表,从而实现单项目提供管理后台、用户 APP 的不同 RESTful API 接口
27   -*【新增】代码生成器支持多 Maven Module 的方式生成代码,支持管理后台、用户 APP 两种场景的 RESTful API 的生成,支持 H2 测试数据库的生成
  27 +*【新增】代码生成器支持多 Maven Module 的方式生成代码,支持管理后台、用户 APP 两种场景的 RESTful API 的生成,支持 H2 SQL 脚本的生成
28 28 *【重构】将数据库文档调整到 tool 模块,更加明确
29 29  
30 30 ### 🐞 Bug Fixes
... ...