From b0c25ea9f45149303c11e40dbb610b7f90e5d875 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 2 Feb 2022 13:57:25 +0800 Subject: [PATCH] 多模块重构 11:修改代码生成器的实现 --- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java | 15 --------------- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/config/AdminServerConfiguration.java | 9 --------- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/package-info.java | 4 ---- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md | 1 - yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/package-info.java | 6 ------ yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java | 50 -------------------------------------------------- yudao-admin-server/src/main/java/cn/iocoder/yudao/server/AdminServerApplication.java | 14 ++++++++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/config/AdminServerConfiguration.java | 9 +++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/package-info.java | 4 ++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md | 1 + yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/package-info.java | 6 ++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/security/SecurityConfiguration.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-admin-server/src/main/resources/application-local.yaml | 15 +++++---------- yudao-admin-server/src/main/resources/application.yaml | 7 ++----- yudao-admin-server/src/main/resources/codegen/java/controller/controller.vm | 102 ------------------------------------------------------------------------------------------------------ yudao-admin-server/src/main/resources/codegen/java/controller/vo/_column.vm | 13 ------------- yudao-admin-server/src/main/resources/codegen/java/controller/vo/baseVO.vm | 31 ------------------------------- yudao-admin-server/src/main/resources/codegen/java/controller/vo/createReqVO.vm | 30 ------------------------------ yudao-admin-server/src/main/resources/codegen/java/controller/vo/excelVO.vm | 37 ------------------------------------- yudao-admin-server/src/main/resources/codegen/java/controller/vo/exportReqVO.vm | 42 ------------------------------------------ yudao-admin-server/src/main/resources/codegen/java/controller/vo/pageReqVO.vm | 44 -------------------------------------------- yudao-admin-server/src/main/resources/codegen/java/controller/vo/respVO.vm | 20 -------------------- yudao-admin-server/src/main/resources/codegen/java/controller/vo/updateReqVO.vm | 30 ------------------------------ yudao-admin-server/src/main/resources/codegen/java/convert/convert.vm | 34 ---------------------------------- yudao-admin-server/src/main/resources/codegen/java/dal/do.vm | 38 -------------------------------------- yudao-admin-server/src/main/resources/codegen/java/dal/mapper.vm | 66 ------------------------------------------------------------------ yudao-admin-server/src/main/resources/codegen/java/enums/errorcode.vm | 2 -- yudao-admin-server/src/main/resources/codegen/java/service/service.vm | 70 ---------------------------------------------------------------------- yudao-admin-server/src/main/resources/codegen/java/service/serviceImpl.vm | 83 ----------------------------------------------------------------------------------- yudao-admin-server/src/main/resources/codegen/java/test/serviceTest.vm | 161 ----------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-admin-server/src/main/resources/codegen/sql/sql.vm | 27 --------------------------- yudao-admin-server/src/main/resources/codegen/vue/api/api.js.vm | 55 ------------------------------------------------------- yudao-admin-server/src/main/resources/codegen/vue/views/index.vue.vm | 403 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/BaseDbAndRedisIntegrationTest.java | 2 +- yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/BaseRedisIntegrationTest.java | 2 +- yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/quartz/core/SchedulerManagerTest.java | 4 ++-- yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java | 4 ++-- yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java | 2 +- yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaColumnMapperTest.java | 2 +- yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaTableMapperTest.java | 2 +- yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenEngineTest.java | 2 +- yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenSQLParserTest.java | 2 +- yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenServiceImplTest.java | 2 +- yudao-admin-ui/src/utils/dict.js | 1 + yudao-admin-ui/src/views/tool/codegen/genInfoForm.vue | 22 +++++++++++++++------- yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java | 4 +--- yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java | 39 --------------------------------------- yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceTest.java | 2 +- yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceTest.java | 2 +- yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/server/BaseDbUnitTest.java | 39 +++++++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/pom.xml | 5 +++++ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java | 6 ++++-- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java | 4 ++++ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java | 7 +++++++ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenSceneEnum.java | 31 +++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java | 11 +++++++---- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java | 19 ++++++++++++------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java | 41 ++++------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java | 66 ++++++++++++++++++++++++++++++++++++++---------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/controller.vm | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/_column.vm | 13 +++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm | 31 +++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm | 30 ++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm | 37 +++++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm | 42 ++++++++++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm | 44 ++++++++++++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/respVO.vm | 20 ++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm | 30 ++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/convert/convert.vm | 34 ++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/do.vm | 38 ++++++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/mapper.vm | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/enums/errorcode.vm | 2 ++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/service.vm | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/serviceImpl.vm | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/test/serviceTest.vm | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/sql.vm | 27 +++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/api/api.js.vm | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/views/index.vue.vm | 403 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 78 files changed, 1561 insertions(+), 1529 deletions(-) delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/config/AdminServerConfiguration.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/package-info.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/server/AdminServerApplication.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/config/AdminServerConfiguration.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/package-info.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/package-info.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/security/SecurityConfiguration.java delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/controller/controller.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/controller/vo/_column.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/controller/vo/baseVO.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/controller/vo/createReqVO.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/controller/vo/excelVO.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/controller/vo/exportReqVO.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/controller/vo/pageReqVO.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/controller/vo/respVO.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/controller/vo/updateReqVO.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/convert/convert.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/dal/do.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/dal/mapper.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/enums/errorcode.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/service/service.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/service/serviceImpl.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/java/test/serviceTest.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/sql/sql.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/vue/api/api.js.vm delete mode 100644 yudao-admin-server/src/main/resources/codegen/vue/views/index.vue.vm delete mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java create mode 100644 yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/server/BaseDbUnitTest.java create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenSceneEnum.java create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/controller.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/_column.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/respVO.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/convert/convert.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/do.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/mapper.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/enums/errorcode.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/service.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/serviceImpl.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/test/serviceTest.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/sql.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/api/api.js.vm create mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/views/index.vue.vm diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java deleted file mode 100644 index 2adf77b..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/AdminServerApplication.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.yudao.adminserver; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package} 和 ${yudao.core-service.base-package} -@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}", "${yudao.core-service.base-package}", - "${yudao.info.base-package2}"}) // TODO 芋艿:重构 -public class AdminServerApplication { - - public static void main(String[] args) { - SpringApplication.run(AdminServerApplication.class, args); - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/config/AdminServerConfiguration.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/config/AdminServerConfiguration.java deleted file mode 100644 index c961441..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/config/AdminServerConfiguration.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.iocoder.yudao.adminserver.framework.monitor.config; - -import de.codecentric.boot.admin.server.config.EnableAdminServer; -import org.springframework.context.annotation.Configuration; - -@Configuration -@EnableAdminServer -public class AdminServerConfiguration { -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/package-info.java deleted file mode 100644 index 0d380cf..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 使用 Spring Boot Admin 实现简单的监控平台 - */ -package cn.iocoder.yudao.adminserver.framework.monitor; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md deleted file mode 100644 index a1e3676..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/package-info.java deleted file mode 100644 index fcb2a09..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * 属于整个 yudao-admin-server 的 framework 封装 - * - * @author 芋道源码 - */ -package cn.iocoder.yudao.adminserver.framework; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java deleted file mode 100644 index 2d911a6..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/security/SecurityConfiguration.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.iocoder.yudao.adminserver.framework.security; - -import cn.iocoder.yudao.framework.web.config.WebProperties; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.Customizer; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; - -import javax.annotation.Resource; - -@Configuration -public class SecurityConfiguration { - - @Resource - private WebProperties webProperties; - - @Value("${spring.boot.admin.context-path:''}") - private String adminSeverContextPath; - - @Bean - public Customizer.ExpressionInterceptUrlRegistry> authorizeRequestsCustomizer() { - return registry -> { - // 验证码的接口 - registry.antMatchers(buildAdminApi("/system/captcha/**")).anonymous(); - // 获得租户编号的接口 - registry.antMatchers(buildAdminApi("/system/tenant/get-id-by-name")).anonymous(); - // Spring Boot Admin Server 的安全配置 - registry.antMatchers(adminSeverContextPath).anonymous() - .antMatchers(adminSeverContextPath + "/**").anonymous(); - // 短信回调 API - registry.antMatchers(buildAdminApi("/system/sms/callback/**")).anonymous(); - - // 设置 App API 无需认证 - registry.antMatchers(buildAppApi("/**")).permitAll(); - }; - } - - private String buildAdminApi(String url) { - // TODO 芋艿:多模块 - return webProperties.getAdminApi().getPrefix() + url; - } - - private String buildAppApi(String url) { - // TODO 芋艿:多模块 - return webProperties.getAppApi().getPrefix() + url; - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/AdminServerApplication.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/AdminServerApplication.java new file mode 100644 index 0000000..db8e7fd --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/AdminServerApplication.java @@ -0,0 +1,14 @@ +package cn.iocoder.yudao.server; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package} +@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}.server", "${yudao.info.base-package}.module"}) +public class AdminServerApplication { + + public static void main(String[] args) { + SpringApplication.run(AdminServerApplication.class, args); + } + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/config/AdminServerConfiguration.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/config/AdminServerConfiguration.java new file mode 100644 index 0000000..f378457 --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/config/AdminServerConfiguration.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.server.framework.monitor.config; + +import de.codecentric.boot.admin.server.config.EnableAdminServer; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableAdminServer +public class AdminServerConfiguration { +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/package-info.java new file mode 100644 index 0000000..99a6c75 --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/package-info.java @@ -0,0 +1,4 @@ +/** + * 使用 Spring Boot Admin 实现简单的监控平台 + */ +package cn.iocoder.yudao.server.framework.monitor; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md new file mode 100644 index 0000000..a1e3676 --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md @@ -0,0 +1 @@ + diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/package-info.java new file mode 100644 index 0000000..bca0067 --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/package-info.java @@ -0,0 +1,6 @@ +/** + * 属于整个 yudao-admin-server 的 framework 封装 + * + * @author 芋道源码 + */ +package cn.iocoder.yudao.server.framework; diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/security/SecurityConfiguration.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/security/SecurityConfiguration.java new file mode 100644 index 0000000..0a698be --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/server/framework/security/SecurityConfiguration.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.server.framework.security; + +import cn.iocoder.yudao.framework.web.config.WebProperties; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; + +import javax.annotation.Resource; + +@Configuration +public class SecurityConfiguration { + + @Resource + private WebProperties webProperties; + + @Value("${spring.boot.admin.context-path:''}") + private String adminSeverContextPath; + + @Bean + public Customizer.ExpressionInterceptUrlRegistry> authorizeRequestsCustomizer() { + return registry -> { + // 验证码的接口 + registry.antMatchers(buildAdminApi("/system/captcha/**")).anonymous(); + // 获得租户编号的接口 + registry.antMatchers(buildAdminApi("/system/tenant/get-id-by-name")).anonymous(); + // Spring Boot Admin Server 的安全配置 + registry.antMatchers(adminSeverContextPath).anonymous() + .antMatchers(adminSeverContextPath + "/**").anonymous(); + // 短信回调 API + registry.antMatchers(buildAdminApi("/system/sms/callback/**")).anonymous(); + + // 设置 App API 无需认证 + registry.antMatchers(buildAppApi("/**")).permitAll(); + }; + } + + private String buildAdminApi(String url) { + // TODO 芋艿:多模块 + return webProperties.getAdminApi().getPrefix() + url; + } + + private String buildAppApi(String url) { + // TODO 芋艿:多模块 + return webProperties.getAppApi().getPrefix() + url; + } + +} diff --git a/yudao-admin-server/src/main/resources/application-local.yaml b/yudao-admin-server/src/main/resources/application-local.yaml index addd7fb..8cb2d7a 100644 --- a/yudao-admin-server/src/main/resources/application-local.yaml +++ b/yudao-admin-server/src/main/resources/application-local.yaml @@ -163,16 +163,11 @@ logging: name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 level: # 配置自己写的 MyBatis Mapper 打印日志 - cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql: debug - cn.iocoder.yudao.adminserver.modules.infra.dal.mysql: debug - cn.iocoder.yudao.adminserver.modules.pay.dal.mysql: debug - cn.iocoder.yudao.adminserver.modules.system.dal.mysql: debug - cn.iocoder.yudao.adminserver.modules.tool.dal.mysql: debug - cn.iocoder.yudao.coreservice.modules.bpm.dal.mysql: debug - cn.iocoder.yudao.coreservice.modules.infra.dal.mysql: debug - cn.iocoder.yudao.coreservice.modules.pay.dal.mysql: debug - cn.iocoder.yudao.coreservice.modules.system.dal.mysql: debug - cn.iocoder.yudao.coreservice.modules.tool.dal.mysql: debug + cn.iocoder.yudao.module.bpm.dal.mysql: debug + cn.iocoder.yudao.module.infra.dal.mysql: debug + cn.iocoder.yudao.module.pay.dal.mysql: debug + cn.iocoder.yudao.module.system.dal.mysql: debug + cn.iocoder.yudao.module.tool.dal.mysql: debug --- #################### 微信公众号相关配置 #################### wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 diff --git a/yudao-admin-server/src/main/resources/application.yaml b/yudao-admin-server/src/main/resources/application.yaml index 14c5025..14fd67f 100644 --- a/yudao-admin-server/src/main/resources/application.yaml +++ b/yudao-admin-server/src/main/resources/application.yaml @@ -40,17 +40,14 @@ mybatis-plus: id-type: AUTO # 自增 ID logic-delete-value: 1 # 逻辑已删除值(默认为 1) logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) - type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject, ${yudao.core-service.base-package}.modules.*.dal.dataobject + type-aliases-package: ${yudao.info.base-package}.module.*.dal.dataobject --- #################### 芋道相关配置 #################### yudao: info: version: 1.0.0 - base-package: cn.iocoder.yudao.adminserver - base-package2: cn.iocoder.yudao.module - core-service: - base-package: cn.iocoder.yudao.coreservice + base-package: cn.iocoder.yudao web: admin-api: prefix: /admin-api diff --git a/yudao-admin-server/src/main/resources/codegen/java/controller/controller.vm b/yudao-admin-server/src/main/resources/codegen/java/controller/controller.vm deleted file mode 100644 index 6038d39..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/controller/controller.vm +++ /dev/null @@ -1,102 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}; - -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.annotations.*; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import ${PageResultClassName}; -import ${CommonResultClassName}; -import static ${CommonResultClassName}.success; - -import ${ExcelUtilsClassName}; - -import ${OperateLogClassName}; -import static ${OperateTypeEnumClassName}.*; - -import ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo.*; -import ${basePackage}.modules.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import ${basePackage}.modules.${table.moduleName}.convert.${table.businessName}.${table.className}Convert; -import ${basePackage}.modules.${table.moduleName}.service.${table.businessName}.${table.className}Service; - -@Api(tags = "${table.classComment}") -@RestController -##二级的 businessName 暂时不算在 HTTP 路径上,可以根据需要写 -@RequestMapping("/${table.moduleName}/${simpleClassName_strikeCase}") -@Validated -public class ${table.className}Controller { - - @Resource - private ${table.className}Service ${classNameVar}Service; - - @PostMapping("/create") - @ApiOperation("创建${table.classComment}") - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:create')") - public CommonResult<${primaryColumn.javaType}> create${simpleClassName}(@Valid @RequestBody ${table.className}CreateReqVO createReqVO) { - return success(${classNameVar}Service.create${simpleClassName}(createReqVO)); - } - - @PutMapping("/update") - @ApiOperation("更新${table.classComment}") - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:update')") - public CommonResult update${simpleClassName}(@Valid @RequestBody ${table.className}UpdateReqVO updateReqVO) { - ${classNameVar}Service.update${simpleClassName}(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @ApiOperation("删除${table.classComment}") - @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = ${primaryColumn.javaType}.class) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')") - public CommonResult delete${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { - ${classNameVar}Service.delete${simpleClassName}(id); - return success(true); - } - - @GetMapping("/get") - @ApiOperation("获得${table.classComment}") - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = ${primaryColumn.javaType}.class) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") - public CommonResult<${table.className}RespVO> get${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { - ${table.className}DO ${classNameVar} = ${classNameVar}Service.get${simpleClassName}(id); - return success(${table.className}Convert.INSTANCE.convert(${classNameVar})); - } - - @GetMapping("/list") - @ApiOperation("获得${table.classComment}列表") - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") - public CommonResult> get${simpleClassName}List(@RequestParam("ids") Collection<${primaryColumn.javaType}> ids) { - List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(ids); - return success(${table.className}Convert.INSTANCE.convertList(list)); - } - - @GetMapping("/page") - @ApiOperation("获得${table.classComment}分页") - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") - public CommonResult> get${simpleClassName}Page(@Valid ${table.className}PageReqVO pageVO) { - PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(pageVO); - return success(${table.className}Convert.INSTANCE.convertPage(pageResult)); - } - - @GetMapping("/export-excel") - @ApiOperation("导出${table.classComment} Excel") - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:export')") - @OperateLog(type = EXPORT) - public void export${simpleClassName}Excel(@Valid ${table.className}ExportReqVO exportReqVO, - HttpServletResponse response) throws IOException { - List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(exportReqVO); - // 导出 Excel - List<${table.className}ExcelVO> datas = ${table.className}Convert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${table.className}ExcelVO.class, datas); - } - -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/_column.vm b/yudao-admin-server/src/main/resources/codegen/java/controller/vo/_column.vm deleted file mode 100644 index 2e22225..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/_column.vm +++ /dev/null @@ -1,13 +0,0 @@ -## 提供给 baseVO、createVO、updateVO 生成字段 - @ApiModelProperty(value = "${column.columnComment}"#if (!${column.nullable}), required = true#end#if ("$!column.example" != ""), example = "${column.example}"#end) -#if (!${column.nullable})## 判断 @NotEmpty 和 @NotNull 注解 -#if (${field.fieldType} == 'String') - @NotEmpty(message = "${column.columnComment}不能为空") -#else - @NotNull(message = "${column.columnComment}不能为空") -#end -#end -#if (${column.javaType} == "Date")## 时间类型 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) -#end - private ${column.javaType} ${column.javaField}; diff --git a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/baseVO.vm b/yudao-admin-server/src/main/resources/codegen/java/controller/vo/baseVO.vm deleted file mode 100644 index 705869a..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/baseVO.vm +++ /dev/null @@ -1,31 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; -## 处理 Date 字段的引入 -#foreach ($column in $columns) -#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult} - && ${column.javaType} == "Date")## 时间类型 -import org.springframework.format.annotation.DateTimeFormat; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end - -/** -* ${table.classComment} Base VO,提供给添加、修改、详细的子 VO 使用 -* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 -*/ -@Data -public class ${table.className}BaseVO { - -#foreach ($column in $columns) -#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult})##通用操作 - #parse("codegen/java/controller/vo/_column.vm") - -#end -#end -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/createReqVO.vm b/yudao-admin-server/src/main/resources/codegen/java/controller/vo/createReqVO.vm deleted file mode 100644 index cfb2882..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/createReqVO.vm +++ /dev/null @@ -1,30 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; -## 处理 Date 字段的引入 -#foreach ($column in $columns) -#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult}) - && ${column.javaType} == "Date")## 时间类型 -import org.springframework.format.annotation.DateTimeFormat; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end - -@ApiModel("${table.classComment}创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class ${table.className}CreateReqVO extends ${table.className}BaseVO { - -#foreach ($column in $columns) -#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult}))##不是通用字段 - #parse("codegen/java/controller/vo/_column.vm") - -#end -#end -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/excelVO.vm b/yudao-admin-server/src/main/resources/codegen/java/controller/vo/excelVO.vm deleted file mode 100644 index b91e4e1..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/excelVO.vm +++ /dev/null @@ -1,37 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -import com.alibaba.excel.annotation.ExcelProperty; -#foreach ($column in $columns) -#if ("$!column.dictType" != "")## 有设置数据字典 -import ${DictFormatClassName}; -import ${DictConvertClassName}; - -#break -#end -#end - -/** - * ${table.classComment} Excel VO - * - * @author ${table.author} - */ -@Data -public class ${table.className}ExcelVO { - -#foreach ($column in $columns) - #if (${column.listOperationResult})##返回字段 - #if ("$!column.dictType" != "")##处理枚举值 - @ExcelProperty(value = "${column.columnComment}", converter = DictConvert.class) - @DictFormat("${column.dictType}") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 - #else - @ExcelProperty("${column.columnComment}") - #end - private ${column.javaType} ${column.javaField}; - - #end -#end -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/exportReqVO.vm b/yudao-admin-server/src/main/resources/codegen/java/controller/vo/exportReqVO.vm deleted file mode 100644 index cd0e340..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/exportReqVO.vm +++ /dev/null @@ -1,42 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import ${PageParamClassName}; -## 处理 Date 字段的引入 -#foreach ($column in $columns) -#if (${column.listOperation} && ${column.javaType} == "Date")## 时间类型 -import org.springframework.format.annotation.DateTimeFormat; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end -## 字段模板 -#macro(columnTpl $prefix $prefixStr) -#if (${column.javaType} == "Date")## 时间类型 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) -#end - @ApiModelProperty(value = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) - private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; -#end - -@ApiModel(value = "${table.classComment} Excel 导出 Request VO", description = "参数和 ${table.className}PageReqVO 是一致的") -@Data -public class ${table.className}ExportReqVO { - -#foreach ($column in $columns) -#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 -#if (${column.listOperation})##查询操作 -#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 - #columnTpl('begin', '开始') - - #columnTpl('end', '结束') -#else##情况二,非 Between 的时间 - #columnTpl('', '') -#end - -#end -#end -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/pageReqVO.vm b/yudao-admin-server/src/main/resources/codegen/java/controller/vo/pageReqVO.vm deleted file mode 100644 index 0ac69e9..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/pageReqVO.vm +++ /dev/null @@ -1,44 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import ${PageParamClassName}; -## 处理 Date 字段的引入 -#foreach ($column in $columns) -#if (${column.listOperation} && ${column.javaType} == "Date")## 时间类型 -import org.springframework.format.annotation.DateTimeFormat; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end -## 字段模板 -#macro(columnTpl $prefix $prefixStr) -#if (${column.javaType} == "Date")## 时间类型 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) -#end - @ApiModelProperty(value = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) - private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; -#end - -@ApiModel("${table.classComment}分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class ${table.className}PageReqVO extends PageParam { - -#foreach ($column in $columns) -#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 -#if (${column.listOperation})##查询操作 -#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 - #columnTpl('begin', '开始') - - #columnTpl('end', '结束') -#else##情况二,非 Between 的时间 - #columnTpl('', '') -#end - -#end -#end -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/respVO.vm b/yudao-admin-server/src/main/resources/codegen/java/controller/vo/respVO.vm deleted file mode 100644 index a100dd1..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/respVO.vm +++ /dev/null @@ -1,20 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -@ApiModel("${table.classComment} Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class ${table.className}RespVO extends ${table.className}BaseVO { - -#foreach ($column in $columns) -#if (${column.listOperationResult} && (!${column.createOperation} || !${column.updateOperation}))##不是通用字段 - @ApiModelProperty(value = "${column.columnComment}"#if (!${column.nullable}), required = true#end#if ("$!column.example" != ""), example = "${column.example}"#end) - private ${column.javaType} ${column.javaField}; - -#end -#end -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/updateReqVO.vm b/yudao-admin-server/src/main/resources/codegen/java/controller/vo/updateReqVO.vm deleted file mode 100644 index a05ae8d..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/controller/vo/updateReqVO.vm +++ /dev/null @@ -1,30 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; -## 处理 Date 字段的引入 -#foreach ($column in $columns) -#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}) - && ${column.javaType} == "Date"))## 时间类型 -import org.springframework.format.annotation.DateTimeFormat; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end - -@ApiModel("${table.classComment}更新 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class ${table.className}UpdateReqVO extends ${table.className}BaseVO { - -#foreach ($column in $columns) -#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}))##不是通用字段 - #parse("codegen/java/controller/vo/_column.vm") - -#end -#end -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/convert/convert.vm b/yudao-admin-server/src/main/resources/codegen/java/convert/convert.vm deleted file mode 100644 index 4302bd2..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/convert/convert.vm +++ /dev/null @@ -1,34 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.convert.${table.businessName}; - -import java.util.*; - -import ${PageResultClassName}; - -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; -import ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo.*; -import ${basePackage}.modules.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; - -/** - * ${table.classComment} Convert - * - * @author ${table.author} - */ -@Mapper -public interface ${table.className}Convert { - - ${table.className}Convert INSTANCE = Mappers.getMapper(${table.className}Convert.class); - - ${table.className}DO convert(${table.className}CreateReqVO bean); - - ${table.className}DO convert(${table.className}UpdateReqVO bean); - - ${table.className}RespVO convert(${table.className}DO bean); - - List<${table.className}RespVO> convertList(List<${table.className}DO> list); - - PageResult<${table.className}RespVO> convertPage(PageResult<${table.className}DO> page); - - List<${table.className}ExcelVO> convertList02(List<${table.className}DO> list); - -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/dal/do.vm b/yudao-admin-server/src/main/resources/codegen/java/dal/do.vm deleted file mode 100644 index 8f10fd5..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/dal/do.vm +++ /dev/null @@ -1,38 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.dal.dataobject.${table.businessName}; - -import lombok.*; -import java.util.*; -import com.baomidou.mybatisplus.annotation.*; -import ${BaseDOClassName}; - -/** - * ${table.classComment} DO - * - * @author ${table.author} - */ -@TableName("${table.tableName}") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class ${table.className}DO extends BaseDO { - -#foreach ($column in $columns) -#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段 - /** - * ${column.columnComment} - #if ("$!column.dictType" != "")##处理枚举值 - * - * 枚举 {@link TODO ${column.dictType} 对应的类} - #end - */ - #if (${column.primaryKey})##处理主键 - @TableId#if (${column.javaType} == 'String')type = IdType.INPUT)#end - #end - private ${column.javaType} ${column.javaField}; -#end -#end - -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/dal/mapper.vm b/yudao-admin-server/src/main/resources/codegen/java/dal/mapper.vm deleted file mode 100644 index 2452ca8..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/dal/mapper.vm +++ /dev/null @@ -1,66 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.dal.mysql.${table.businessName}; - -import java.util.*; - -import ${PageResultClassName}; -import ${QueryWrapperClassName}; -import ${BaseMapperClassName}; -import ${basePackage}.modules.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import org.apache.ibatis.annotations.Mapper; -import ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo.*; - -## 字段模板 -#macro(listCondition) -#foreach ($column in $columns) -#if (${column.listOperation}) -#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 -#if (${column.listOperationCondition} == "=")##情况一,= 的时候 - .eqIfPresent("${column.columnName}", reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "!=")##情况二,!= 的时候 - .neIfPresent("${column.columnName}", reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == ">")##情况三,> 的时候 - .gtIfPresent("${column.columnName}", reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == ">=")##情况四,>= 的时候 - .geIfPresent("${column.columnName}", reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "<")##情况五,< 的时候 - .ltIfPresent("${column.columnName}", reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "<=")##情况五,<= 的时候 - .leIfPresent("${column.columnName}", reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "LIKE")##情况七,Like 的时候 - .likeIfPresent("${column.columnName}", reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "BETWEEN")##情况八,Between 的时候 - .betweenIfPresent("${column.columnName}", reqVO.getBegin${JavaField}(), reqVO.getEnd${JavaField}()) -#end -#end -#end -#end -/** - * ${table.classComment} Mapper - * - * @author ${table.author} - */ -@Mapper -public interface ${table.className}Mapper extends BaseMapperX<${table.className}DO> { - - default PageResult<${table.className}DO> selectPage(${table.className}PageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX<${table.className}DO>() - #listCondition() - .orderByDesc("id")## 大多数情况下,id 倒序 - ); - } - - default List<${table.className}DO> selectList(${table.className}ExportReqVO reqVO) { - return selectList(new QueryWrapperX<${table.className}DO>() - #listCondition() - .orderByDesc("id")## 大多数情况下,id 倒序 - ); - } - -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/enums/errorcode.vm b/yudao-admin-server/src/main/resources/codegen/java/enums/errorcode.vm deleted file mode 100644 index 94f12df..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/enums/errorcode.vm +++ /dev/null @@ -1,2 +0,0 @@ -// ========== ${table.classComment} TODO 补充编号 ========== -ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${table.classComment}不存在"); diff --git a/yudao-admin-server/src/main/resources/codegen/java/service/service.vm b/yudao-admin-server/src/main/resources/codegen/java/service/service.vm deleted file mode 100644 index 17a9b39..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/service/service.vm +++ /dev/null @@ -1,70 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.service.${table.businessName}; - -import java.util.*; -import javax.validation.*; -import ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo.*; -import ${basePackage}.modules.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import ${PageResultClassName}; - -/** - * ${table.classComment} Service 接口 - * - * @author ${table.author} - */ -public interface ${table.className}Service { - - /** - * 创建${table.classComment} - * - * @param createReqVO 创建信息 - * @return 编号 - */ - ${primaryColumn.javaType} create${simpleClassName}(@Valid ${table.className}CreateReqVO createReqVO); - - /** - * 更新${table.classComment} - * - * @param updateReqVO 更新信息 - */ - void update${simpleClassName}(@Valid ${table.className}UpdateReqVO updateReqVO); - - /** - * 删除${table.classComment} - * - * @param id 编号 - */ - void delete${simpleClassName}(${primaryColumn.javaType} id); - - /** - * 获得${table.classComment} - * - * @param id 编号 - * @return ${table.classComment} - */ - ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id); - - /** - * 获得${table.classComment}列表 - * - * @param ids 编号 - * @return ${table.classComment}列表 - */ - List<${table.className}DO> get${simpleClassName}List(Collection<${primaryColumn.javaType}> ids); - - /** - * 获得${table.classComment}分页 - * - * @param pageReqVO 分页查询 - * @return ${table.classComment}分页 - */ - PageResult<${table.className}DO> get${simpleClassName}Page(${table.className}PageReqVO pageReqVO); - - /** - * 获得${table.classComment}列表, 用于 Excel 导出 - * - * @param exportReqVO 查询条件 - * @return ${table.classComment}列表 - */ - List<${table.className}DO> get${simpleClassName}List(${table.className}ExportReqVO exportReqVO); - -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/service/serviceImpl.vm b/yudao-admin-server/src/main/resources/codegen/java/service/serviceImpl.vm deleted file mode 100644 index 33201a6..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/service/serviceImpl.vm +++ /dev/null @@ -1,83 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.service.${table.businessName}.impl; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; - -import java.util.*; -import ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo.*; -import ${basePackage}.modules.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import ${PageResultClassName}; - -import ${basePackage}.modules.${table.moduleName}.convert.${table.businessName}.${table.className}Convert; -import ${basePackage}.modules.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; -import ${basePackage}.modules.${table.moduleName}.service.${table.businessName}.${table.className}Service; - -import static ${ServiceExceptionUtilClassName}.exception; -import static ${basePackage}.modules.${table.moduleName}.enums.${simpleModuleName_upperFirst}ErrorCodeConstants.*; - -/** - * ${table.classComment} Service 实现类 - * - * @author ${table.author} - */ -@Service -@Validated -public class ${table.className}ServiceImpl implements ${table.className}Service { - - @Resource - private ${table.className}Mapper ${classNameVar}Mapper; - - @Override - public ${primaryColumn.javaType} create${simpleClassName}(${table.className}CreateReqVO createReqVO) { - // 插入 - ${table.className}DO ${classNameVar} = ${table.className}Convert.INSTANCE.convert(createReqVO); - ${classNameVar}Mapper.insert(${classNameVar}); - // 返回 - return ${classNameVar}.getId(); - } - - @Override - public void update${simpleClassName}(${table.className}UpdateReqVO updateReqVO) { - // 校验存在 - this.validate${simpleClassName}Exists(updateReqVO.getId()); - // 更新 - ${table.className}DO updateObj = ${table.className}Convert.INSTANCE.convert(updateReqVO); - ${classNameVar}Mapper.updateById(updateObj); - } - - @Override - public void delete${simpleClassName}(${primaryColumn.javaType} id) { - // 校验存在 - this.validate${simpleClassName}Exists(id); - // 删除 - ${classNameVar}Mapper.deleteById(id); - } - - private void validate${simpleClassName}Exists(${primaryColumn.javaType} id) { - if (${classNameVar}Mapper.selectById(id) == null) { - throw exception(${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); - } - } - - @Override - public ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id) { - return ${classNameVar}Mapper.selectById(id); - } - - @Override - public List<${table.className}DO> get${simpleClassName}List(Collection<${primaryColumn.javaType}> ids) { - return ${classNameVar}Mapper.selectBatchIds(ids); - } - - @Override - public PageResult<${table.className}DO> get${simpleClassName}Page(${table.className}PageReqVO pageReqVO) { - return ${classNameVar}Mapper.selectPage(pageReqVO); - } - - @Override - public List<${table.className}DO> get${simpleClassName}List(${table.className}ExportReqVO exportReqVO) { - return ${classNameVar}Mapper.selectList(exportReqVO); - } - -} diff --git a/yudao-admin-server/src/main/resources/codegen/java/test/serviceTest.vm b/yudao-admin-server/src/main/resources/codegen/java/test/serviceTest.vm deleted file mode 100644 index 511d651..0000000 --- a/yudao-admin-server/src/main/resources/codegen/java/test/serviceTest.vm +++ /dev/null @@ -1,161 +0,0 @@ -package ${basePackage}.modules.${table.moduleName}.service.${table.businessName}; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import ${basePackage}.BaseDbUnitTest; -import ${basePackage}.modules.${table.moduleName}.service.${table.businessName}.impl.${table.className}ServiceImpl; -import ${basePackage}.modules.${table.moduleName}.controller.${table.businessName}.vo.*; -import ${basePackage}.modules.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import ${basePackage}.modules.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; -import ${PageResultClassName}; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; - -import static cn.hutool.core.util.RandomUtil.*; -import static ${basePackage}.modules.${table.moduleName}.enums.${simpleModuleName_upperFirst}ErrorCodeConstants.*; -import static ${baseFrameworkPackage}.test.core.util.AssertUtils.*; -import static ${baseFrameworkPackage}.test.core.util.RandomUtils.*; -import static ${ObjectUtilsClassName}.*; -import static ${DateUtilsClassName}.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -## 字段模板 -#macro(getPageCondition $VO) - // mock 数据 - ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class, o -> { // 等会查询到 - #foreach ($column in $columns) - #if (${column.listOperation}) - #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 - o.set$JavaField(null); - #end - #end - }); - ${classNameVar}Mapper.insert(db${simpleClassName}); - #foreach ($column in $columns) - #if (${column.listOperation}) - #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 - // 测试 ${column.javaField} 不匹配 - ${classNameVar}Mapper.insert(cloneIgnoreId(db${simpleClassName}, o -> o.set$JavaField(null))); - #end - #end - // 准备参数 - ${table.className}${VO} reqVO = new ${table.className}${VO}(); - #foreach ($column in $columns) - #if (${column.listOperation}) - #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 - #if (${column.listOperationCondition} == "BETWEEN")## BETWEEN 的情况 - reqVO.setBegin${JavaField}(null); - reqVO.setEnd${JavaField}(null); - #else - reqVO.set$JavaField(null); - #end - #end - #end -#end -/** -* {@link ${table.className}ServiceImpl} 的单元测试类 -* -* @author ${table.author} -*/ -@Import(${table.className}ServiceImpl.class) -public class ${table.className}ServiceTest extends BaseDbUnitTest { - - @Resource - private ${table.className}ServiceImpl ${classNameVar}Service; - - @Resource - private ${table.className}Mapper ${classNameVar}Mapper; - - @Test - public void testCreate${simpleClassName}_success() { - // 准备参数 - ${table.className}CreateReqVO reqVO = randomPojo(${table.className}CreateReqVO.class); - - // 调用 - ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(reqVO); - // 断言 - assertNotNull(${classNameVar}Id); - // 校验记录的属性是否正确 - ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(${classNameVar}Id); - assertPojoEquals(reqVO, ${classNameVar}); - } - - @Test - public void testUpdate${simpleClassName}_success() { - // mock 数据 - ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); - ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 - // 准备参数 - ${table.className}UpdateReqVO reqVO = randomPojo(${table.className}UpdateReqVO.class, o -> { - o.setId(db${simpleClassName}.getId()); // 设置更新的 ID - }); - - // 调用 - ${classNameVar}Service.update${simpleClassName}(reqVO); - // 校验是否更新正确 - ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, ${classNameVar}); - } - - @Test - public void testUpdate${simpleClassName}_notExists() { - // 准备参数 - ${table.className}UpdateReqVO reqVO = randomPojo(${table.className}UpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(reqVO), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); - } - - @Test - public void testDelete${simpleClassName}_success() { - // mock 数据 - ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); - ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 - // 准备参数 - ${primaryColumn.javaType} id = db${simpleClassName}.getId(); - - // 调用 - ${classNameVar}Service.delete${simpleClassName}(id); - // 校验数据不存在了 - assertNull(${classNameVar}Mapper.selectById(id)); - } - - @Test - public void testDelete${simpleClassName}_notExists() { - // 准备参数 - ${primaryColumn.javaType} id = random${primaryColumn.javaType}Id(); - - // 调用, 并断言异常 - assertServiceException(() -> ${classNameVar}Service.delete${simpleClassName}(id), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); - } - - @Test // TODO 请修改 null 为需要的值 - public void testGet${simpleClassName}Page() { - #getPageCondition("PageReqVO") - - // 调用 - PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0)); - } - - @Test // TODO 请修改 null 为需要的值 - public void testGet${simpleClassName}List() { - #getPageCondition("ExportReqVO") - - // 调用 - List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(reqVO); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(db${simpleClassName}, list.get(0)); - } - -} diff --git a/yudao-admin-server/src/main/resources/codegen/sql/sql.vm b/yudao-admin-server/src/main/resources/codegen/sql/sql.vm deleted file mode 100644 index 741016c..0000000 --- a/yudao-admin-server/src/main/resources/codegen/sql/sql.vm +++ /dev/null @@ -1,27 +0,0 @@ --- 菜单 SQL -INSERT INTO `sys_menu`( - `name`, `permission`, `menu_type`, `sort`, `parent_id`, - `path`, `icon`, `component`, `status` -) -VALUES ( - '${table.classComment}管理', '', 2, 0, ${table.parentMenuId}, - '${simpleClassName_strikeCase}', '', '${table.moduleName}/${classNameVar}/index', 0 -); - --- 按钮父菜单ID -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -#set ($functionNames = ['查询', '创建', '更新', '删除', '导出']) -#set ($functionOps = ['query', 'create', 'update', 'delete', 'export']) -#foreach ($functionName in $functionNames) -#set ($index = $foreach.count - 1) -INSERT INTO `sys_menu`( - `name`, `permission`, `menu_type`, `sort`, `parent_id`, - `path`, `icon`, `component`, `status` -) -VALUES ( - '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, @parentId, - '', '', '', 0 -); -#end diff --git a/yudao-admin-server/src/main/resources/codegen/vue/api/api.js.vm b/yudao-admin-server/src/main/resources/codegen/vue/api/api.js.vm deleted file mode 100644 index 5e9da32..0000000 --- a/yudao-admin-server/src/main/resources/codegen/vue/api/api.js.vm +++ /dev/null @@ -1,55 +0,0 @@ -import request from '@/utils/request' -#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") - -// 创建${table.classComment} -export function create${simpleClassName}(data) { - return request({ - url: '${baseURL}/create', - method: 'post', - data: data - }) -} - -// 更新${table.classComment} -export function update${simpleClassName}(data) { - return request({ - url: '${baseURL}/update', - method: 'put', - data: data - }) -} - -// 删除${table.classComment} -export function delete${simpleClassName}(id) { - return request({ - url: '${baseURL}/delete?id=' + id, - method: 'delete' - }) -} - -// 获得${table.classComment} -export function get${simpleClassName}(id) { - return request({ - url: '${baseURL}/get?id=' + id, - method: 'get' - }) -} - -// 获得${table.classComment}分页 -export function get${simpleClassName}Page(query) { - return request({ - url: '${baseURL}/page', - method: 'get', - params: query - }) -} - -// 导出${table.classComment} Excel -export function export${simpleClassName}Excel(query) { - return request({ - url: '${baseURL}/export-excel', - method: 'get', - params: query, - responseType: 'blob' - }) -} diff --git a/yudao-admin-server/src/main/resources/codegen/vue/views/index.vue.vm b/yudao-admin-server/src/main/resources/codegen/vue/views/index.vue.vm deleted file mode 100644 index 5456d88..0000000 --- a/yudao-admin-server/src/main/resources/codegen/vue/views/index.vue.vm +++ /dev/null @@ -1,403 +0,0 @@ - - - diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/BaseDbAndRedisIntegrationTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/BaseDbAndRedisIntegrationTest.java index 915715c..cf7b03f 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/BaseDbAndRedisIntegrationTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/BaseDbAndRedisIntegrationTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver; +package cn.iocoder.yudao.server; import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/BaseRedisIntegrationTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/BaseRedisIntegrationTest.java index 78857e0..d82d0da 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/BaseRedisIntegrationTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/BaseRedisIntegrationTest.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.adminserver; +package cn.iocoder.yudao.server; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; import org.redisson.spring.starter.RedissonAutoConfiguration; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/quartz/core/SchedulerManagerTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/quartz/core/SchedulerManagerTest.java index 72ce3cd..0fb4cc6 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/quartz/core/SchedulerManagerTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/quartz/core/SchedulerManagerTest.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.framework.quartz.core; +package cn.iocoder.yudao.server.framework.quartz.core; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; +import cn.iocoder.yudao.server.BaseDbUnitTest; import cn.iocoder.yudao.module.system.job.auth.SysUserSessionTimeoutJob; import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager; import org.junit.jupiter.api.Test; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java index a99c65e..284fb10 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/redis/core/stream/RedisStreamTest.java @@ -1,7 +1,7 @@ -package cn.iocoder.yudao.adminserver.framework.redis.core.stream; +package cn.iocoder.yudao.server.framework.redis.core.stream; import cn.hutool.core.thread.ThreadUtil; -import cn.iocoder.yudao.adminserver.BaseRedisIntegrationTest; +import cn.iocoder.yudao.server.BaseRedisIntegrationTest; import cn.iocoder.yudao.module.system.mq.consumer.mail.SysMailSendConsumer; import cn.iocoder.yudao.module.system.mq.consumer.sms.SysSmsSendConsumer; import cn.iocoder.yudao.module.system.mq.message.mail.SysMailSendMessage; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java index ad63132..f3fab89 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceIntegrationTest.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.map.MapUtil; import cn.hutool.core.thread.ThreadUtil; -import cn.iocoder.yudao.adminserver.BaseDbAndRedisIntegrationTest; +import cn.iocoder.yudao.server.BaseDbAndRedisIntegrationTest; import cn.iocoder.yudao.module.system.mq.consumer.sms.SysSmsSendConsumer; import cn.iocoder.yudao.module.system.mq.producer.sms.SysSmsProducer; import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsChannelServiceImpl; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaColumnMapperTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaColumnMapperTest.java index f945ddb..c8ef701 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaColumnMapperTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaColumnMapperTest.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.tool.dal.mysql.codegen; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; +import cn.iocoder.yudao.server.BaseDbUnitTest; import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.ToolSchemaColumnDO; import org.junit.jupiter.api.Test; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaTableMapperTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaTableMapperTest.java index 88b4c58..43f8f4c 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaTableMapperTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/dal/mysql/codegen/ToolInformationSchemaTableMapperTest.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.tool.dal.mysql.codegen; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; +import cn.iocoder.yudao.server.BaseDbUnitTest; import javax.annotation.Resource; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenEngineTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenEngineTest.java index 6a461f0..6d9fd3d 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenEngineTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenEngineTest.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.tool.service.codegen; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; +import cn.iocoder.yudao.server.BaseDbUnitTest; import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.ToolCodegenColumnDO; import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.ToolCodegenTableDO; import cn.iocoder.yudao.module.tool.dal.mysql.codegen.ToolCodegenColumnMapper; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenSQLParserTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenSQLParserTest.java index e498dc0..5d7f636 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenSQLParserTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenSQLParserTest.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.tool.service.codegen; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; +import cn.iocoder.yudao.server.BaseDbUnitTest; import cn.iocoder.yudao.module.tool.service.codegen.impl.ToolCodegenSQLParser; import org.junit.jupiter.api.Test; diff --git a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenServiceImplTest.java b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenServiceImplTest.java index cedd387..27bf28d 100644 --- a/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenServiceImplTest.java +++ b/yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/modules/tool/service/codegen/ToolCodegenServiceImplTest.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.tool.service.codegen; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; +import cn.iocoder.yudao.server.BaseDbUnitTest; import cn.iocoder.yudao.module.tool.service.codegen.impl.ToolCodegenServiceImpl; import org.junit.jupiter.api.Test; diff --git a/yudao-admin-ui/src/utils/dict.js b/yudao-admin-ui/src/utils/dict.js index c3813c3..1c46aeb 100644 --- a/yudao-admin-ui/src/utils/dict.js +++ b/yudao-admin-ui/src/utils/dict.js @@ -33,6 +33,7 @@ export const DICT_TYPE = { // ========== TOOL 模块 ========== TOOL_CODEGEN_TEMPLATE_TYPE: 'tool_codegen_template_type', + TOOL_CODEGEN_SCENE: 'tool_codegen_scene', // ========== BPM 模块 ========== BPM_MODEL_CATEGORY: 'bpm_model_category', diff --git a/yudao-admin-ui/src/views/tool/codegen/genInfoForm.vue b/yudao-admin-ui/src/views/tool/codegen/genInfoForm.vue index 187baf0..e3827ea 100644 --- a/yudao-admin-ui/src/views/tool/codegen/genInfoForm.vue +++ b/yudao-admin-ui/src/views/tool/codegen/genInfoForm.vue @@ -2,15 +2,20 @@ - + 生成模板 - + + + + + + + 生成模板 + + @@ -249,6 +254,9 @@ export default { templateType: [ { required: true, message: "请选择生成模板", trigger: "blur" } ], + scene: [ + { required: true, message: "请选择生成场景", trigger: "blur" } + ], // packageName: [ // { required: true, message: "请输入生成包路径", trigger: "blur" } // ], diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java index 7e25761..f8eeeef 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java @@ -15,9 +15,7 @@ import org.springframework.context.annotation.Configuration; * @author 芋道源码 */ @Configuration -@MapperScan(value = {"${yudao.info.base-package}", "${yudao.core-service.base-package}", - "${yudao.info.base-package2}"}, - annotationClass = Mapper.class, +@MapperScan(value = "${yudao.info.base-package}", annotationClass = Mapper.class, lazyInitialization = "${mybatis.lazy-initialization:false}") // Mapper 懒加载,目前仅用于单元测试 public class YudaoMybatisAutoConfiguration { diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java deleted file mode 100644 index 5f7daed..0000000 --- a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.adminserver; - -import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; -import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; -import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; -import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Import; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.jdbc.Sql; - -/** - * 依赖内存 DB 的单元测试 - * - * 注意,Service 层同样适用。对于 Service 层的单元测试,我们针对自己模块的 Mapper 走的是 H2 内存数据库,针对别的模块的 Service 走的是 Mock 方法 - * - * @author 芋道源码 - */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class) -@ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 -@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB -public class BaseDbUnitTest { - - @Import({ - // DB 配置类 - YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类 - DataSourceAutoConfiguration.class, // Spring DB 自动配置类 - DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类 - DruidDataSourceAutoConfigure.class, // Druid 自动配置类 - // MyBatis 配置类 - YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类 - MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类 - }) - public static class Application { - } - -} diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceTest.java b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceTest.java index ca9d675..75e1727 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceTest.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmFormServiceTest.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.bpm.service.definition; import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; +import cn.iocoder.yudao.server.BaseDbUnitTest; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormUpdateReqVO; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceTest.java b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceTest.java index 9c04d64..494d104 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceTest.java +++ b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmUserGroupServiceTest.java @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.bpm.service.definition; -import cn.iocoder.yudao.adminserver.BaseDbUnitTest; +import cn.iocoder.yudao.server.BaseDbUnitTest; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupUpdateReqVO; diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/server/BaseDbUnitTest.java b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/server/BaseDbUnitTest.java new file mode 100644 index 0000000..592545a --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-base/src/test/java/cn/iocoder/yudao/server/BaseDbUnitTest.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.server; + +import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; +import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.jdbc.Sql; + +/** + * 依赖内存 DB 的单元测试 + * + * 注意,Service 层同样适用。对于 Service 层的单元测试,我们针对自己模块的 Mapper 走的是 H2 内存数据库,针对别的模块的 Service 走的是 Mock 方法 + * + * @author 芋道源码 + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class) +@ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 +@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB +public class BaseDbUnitTest { + + @Import({ + // DB 配置类 + YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类 + DataSourceAutoConfiguration.class, // Spring DB 自动配置类 + DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类 + DruidDataSourceAutoConfigure.class, // Druid 自动配置类 + // MyBatis 配置类 + YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类 + MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类 + }) + public static class Application { + } + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/pom.xml b/yudao-module-tool/yudao-module-tool-impl/pom.xml index 8e998e0..2e2c35c 100644 --- a/yudao-module-tool/yudao-module-tool-impl/pom.xml +++ b/yudao-module-tool/yudao-module-tool-impl/pom.xml @@ -23,6 +23,11 @@ yudao-module-tool-api ${revision} + + cn.iocoder.boot + yudao-module-system-api + ${revision} + diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java index 4523b1a..c7d6e93 100644 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java @@ -4,6 +4,7 @@ import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ZipUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenDetailRespVO; import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenPreviewRespVO; import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenUpdateReqVO; @@ -36,6 +37,7 @@ import java.util.Map; import java.util.Set; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @Api(tags = "管理后台 - 代码生成器") @RestController @@ -88,7 +90,7 @@ public class CodegenController { @PostMapping("/create-list-from-db") @PreAuthorize("@ss.hasPermission('tool:codegen:create')") public CommonResult> createCodegenListFromDB(@RequestParam("tableNames") List tableNames) { - return success(codegenService.createCodegenListFromDB(tableNames)); + return success(codegenService.createCodegenListFromDB(getLoginUserId(), tableNames)); } @ApiOperation("基于 SQL 建表语句,创建代码生成器的表和字段定义") @@ -96,7 +98,7 @@ public class CodegenController { @PostMapping("/create-list-from-sql") @PreAuthorize("@ss.hasPermission('tool:codegen:create')") public CommonResult createCodegenListFromSQL(@RequestParam("sql") String sql) { - return success(codegenService.createCodegenListFromSQL(sql)); + return success(codegenService.createCodegenListFromSQL(getLoginUserId(), sql)); } @ApiOperation("更新数据库的表和字段定义") diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java index 1b57219..dbe155c 100644 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java @@ -16,6 +16,10 @@ public class CodegenTableBaseVO { @NotNull(message = "导入类型不能为空") private Integer importType; + @ApiModelProperty(value = "生成场景", required = true, example = "1", notes = "参见 CodegenSceneEnum 枚举") + @NotNull(message = "导入类型不能为空") + private Integer scene; + @ApiModelProperty(value = "表名称", required = true, example = "yudao") @NotNull(message = "表名称不能为空") private String tableName; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java index c299e01..9585cb3 100644 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.tool.dal.dataobject.codegen; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.tool.enums.codegen.CodegenSceneEnum; import cn.iocoder.yudao.module.tool.enums.codegen.CodegenTemplateTypeEnum; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -29,6 +30,12 @@ public class CodegenTableDO extends BaseDO { * 枚举 {@link CodegenTemplateTypeEnum} */ private Integer importType; + /** + * 生成场景 + * + * 枚举 {@link CodegenSceneEnum} + */ + private Integer scene; // ========== 表相关字段 ========== diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenSceneEnum.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenSceneEnum.java new file mode 100644 index 0000000..84f309a --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenSceneEnum.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.tool.enums.codegen; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 代码生成的场景枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum CodegenSceneEnum { + + ADMIN(1, "管理后台", "admin"), + APP(2, "用户 APP", "app"); + + /** + * 场景 + */ + private final Integer scene; + /** + * 场景名 + */ + private final String name; + /** + * 基础包名 + */ + private final String basePackage; + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java index 7b8f84b..75327b3 100644 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java @@ -20,26 +20,29 @@ public interface CodegenService { /** * 基于 SQL 建表语句,创建代码生成器的表定义 * + * @param userId 用户编号 * @param sql SQL 建表语句 * @return 创建的表定义的编号 */ - Long createCodegenListFromSQL(String sql); + Long createCodegenListFromSQL(Long userId, String sql); /** * 基于数据库的表结构,创建代码生成器的表定义 * + * @param userId 用户编号 * @param tableName 表名称 * @return 创建的表定义的编号 */ - Long createCodegen(String tableName); + Long createCodegen(Long userId, String tableName); /** - * 基于 {@link #createCodegen(String)} 的批量创建 + * 基于 {@link #createCodegen(Long, String)} 的批量创建 * + * @param userId 用户编号 * @param tableNames 表名称数组 * @return 创建的表定义的编号数组 */ - List createCodegenListFromDB(List tableNames); + List createCodegenListFromDB(Long userId, List tableNames); /** * 更新数据库的表和字段定义 diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java index f478244..93210f2 100644 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.tool.service.codegen; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.tool.framework.codegen.config.CodegenProperties; import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenUpdateReqVO; import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTablePageReqVO; @@ -51,6 +52,9 @@ public class CodegenServiceImpl implements CodegenService { private CodegenColumnMapper codegenColumnMapper; @Resource + private AdminUserApi userApi; + + @Resource private CodegenBuilder codegenBuilder; @Resource private CodegenEngine codegenEngine; @@ -58,7 +62,7 @@ public class CodegenServiceImpl implements CodegenService { @Resource private CodegenProperties codegenProperties; - private Long createCodegen0(CodegenImportTypeEnum importType, + private Long createCodegen0(Long userId, CodegenImportTypeEnum importType, SchemaTableDO schemaTable, List schemaColumns) { // 校验导入的表和字段非空 if (schemaTable == null) { @@ -75,6 +79,7 @@ public class CodegenServiceImpl implements CodegenService { // 构建 CodegenTableDO 对象,插入到 DB 中 CodegenTableDO table = codegenBuilder.buildTable(schemaTable); table.setImportType(importType.getType()); + table.setAuthor(userApi.getUser(userId).getNickname()); codegenTableMapper.insert(table); // 构建 CodegenColumnDO 数组,插入到 DB 中 List columns = codegenBuilder.buildColumns(schemaColumns); @@ -86,7 +91,7 @@ public class CodegenServiceImpl implements CodegenService { } @Override - public Long createCodegenListFromSQL(String sql) { + public Long createCodegenListFromSQL(Long userId, String sql) { // 从 SQL 中,获得数据库表结构 SchemaTableDO schemaTable; List schemaColumns; @@ -98,26 +103,26 @@ public class CodegenServiceImpl implements CodegenService { throw exception(CODEGEN_PARSE_SQL_ERROR); } // 导入 - return this.createCodegen0(CodegenImportTypeEnum.SQL, schemaTable, schemaColumns); + return this.createCodegen0(userId, CodegenImportTypeEnum.SQL, schemaTable, schemaColumns); } @Override - public Long createCodegen(String tableName) { + public Long createCodegen(Long userId, String tableName) { // 获取当前schema String tableSchema = codegenProperties.getDbSchemas().iterator().next(); // 从数据库中,获得数据库表结构 SchemaTableDO schemaTable = schemaTableMapper.selectByTableSchemaAndTableName(tableSchema, tableName); List schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, tableName); // 导入 - return this.createCodegen0(CodegenImportTypeEnum.DB, schemaTable, schemaColumns); + return this.createCodegen0(userId, CodegenImportTypeEnum.DB, schemaTable, schemaColumns); } @Override @Transactional(rollbackFor = Exception.class) - public List createCodegenListFromDB(List tableNames) { + public List createCodegenListFromDB(Long userId, List tableNames) { List ids = new ArrayList<>(tableNames.size()); // 遍历添加。虽然效率会低一点,但是没必要做成完全批量,因为不会这么大量 - tableNames.forEach(tableName -> ids.add(createCodegen(tableName))); + tableNames.forEach(tableName -> ids.add(createCodegen(userId, tableName))); return ids; } diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java index cf9b6c3..774aea2 100644 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java @@ -28,18 +28,6 @@ import static cn.hutool.core.text.CharSequenceUtil.*; public class CodegenBuilder { /** - * Module 名字的映射 TODO 后续梳理到配置类 - * - * key:模块的完整名 - * value:模块的缩写名 - */ - private static final Map moduleNames = MapUtil.builder() - .put("system", "sys") - .put("infra", "inf") - .put("tool", "tool") - .build(); - - /** * 字段名与 {@link CodegenColumnListConditionEnum} 的默认映射 * 注意,字段的匹配以后缀的方式 */ @@ -125,8 +113,10 @@ public class CodegenBuilder { * @param table 表定义 */ private void initTableDefault(CodegenTableDO table) { - table.setModuleName(getFullModuleName(StrUtil.subBefore(table.getTableName(), - '_', false))); // 第一个 _ 前缀的前面,作为 module 名字 + // 以 system_dept 举例子。moduleName 为 system、businessName 为 dept、className 为 SystemDept + // 如果不希望 System 前缀,则可以手动在【代码生成 - 修改生成配置 - 基本信息】,将实体类名称改为 Dept 即可 + table.setModuleName(StrUtil.subBefore(table.getTableName(), + '_', false)); // 第一个 _ 前缀的前面,作为 module 名字 table.setBusinessName(toCamelCase(subAfter(table.getTableName(), '_', false))); // 第一步,第一个 _ 前缀的后面,作为 module 名字; 第二步,可能存在多个 _ 的情况,转换成驼峰 table.setClassName(upperFirst(toCamelCase(table.getTableName()))); // 驼峰 + 首字母大写 @@ -208,27 +198,4 @@ public class CodegenBuilder { } } - /** - * 获得模块的缩略名 - * - * @param fullModuleName 模块的完整名 - * @return 缩略名 - */ - public String getSimpleModuleName(String fullModuleName) { - return moduleNames.getOrDefault(fullModuleName, fullModuleName); - } - - /** - * 获得模块的完整名 - * - * @param shortModuleName 模块的缩略名 - * @return 完整名 - */ - public String getFullModuleName(String shortModuleName) { - return moduleNames.entrySet().stream() - .filter(entry -> entry.getValue().equals(shortModuleName)) // 匹配 - .findFirst().map(Map.Entry::getKey) // 返回 key - .orElse(shortModuleName); // 兜底返回 shortModuleName - } - } diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java index 89a3af1..21e6ecb 100644 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java @@ -53,38 +53,39 @@ public class CodegenEngine { * value:生成的路径 */ private static final Map TEMPLATES = MapUtil.builder(new LinkedHashMap<>()) // 有序 - // Java Main + // Java module-impl Main .put(javaTemplatePath("controller/vo/baseVO"), - javaFilePath("controller/${table.businessName}/vo/${table.className}BaseVO")) + javaModuleImplMainFilePath("controller/${table.businessName}/vo/${table.className}BaseVO")) .put(javaTemplatePath("controller/vo/createReqVO"), - javaFilePath("controller/${table.businessName}/vo/${table.className}CreateReqVO")) + javaModuleImplMainFilePath("controller/${table.businessName}/vo/${table.className}CreateReqVO")) .put(javaTemplatePath("controller/vo/pageReqVO"), - javaFilePath("controller/${table.businessName}/vo/${table.className}PageReqVO")) + javaModuleImplMainFilePath("controller/${table.businessName}/vo/${table.className}PageReqVO")) .put(javaTemplatePath("controller/vo/respVO"), - javaFilePath("controller/${table.businessName}/vo/${table.className}RespVO")) + javaModuleImplMainFilePath("controller/${table.businessName}/vo/${table.className}RespVO")) .put(javaTemplatePath("controller/vo/updateReqVO"), - javaFilePath("controller/${table.businessName}/vo/${table.className}UpdateReqVO")) + javaModuleImplMainFilePath("controller/${table.businessName}/vo/${table.className}UpdateReqVO")) .put(javaTemplatePath("controller/vo/exportReqVO"), - javaFilePath("controller/${table.businessName}/vo/${table.className}ExportReqVO")) + javaModuleImplMainFilePath("controller/${table.businessName}/vo/${table.className}ExportReqVO")) .put(javaTemplatePath("controller/vo/excelVO"), - javaFilePath("controller/${table.businessName}/vo/${table.className}ExcelVO")) + javaModuleImplMainFilePath("controller/${table.businessName}/vo/${table.className}ExcelVO")) .put(javaTemplatePath("controller/controller"), - javaFilePath("controller/${table.businessName}/${table.className}Controller")) + javaModuleImplMainFilePath("controller/${table.businessName}/${table.className}Controller")) .put(javaTemplatePath("convert/convert"), - javaFilePath("convert/${table.businessName}/${table.className}Convert")) + javaModuleImplMainFilePath("convert/${table.businessName}/${table.className}Convert")) .put(javaTemplatePath("dal/do"), - javaFilePath("dal/dataobject/${table.businessName}/${table.className}DO")) + javaModuleImplMainFilePath("dal/dataobject/${table.businessName}/${table.className}DO")) .put(javaTemplatePath("dal/mapper"), - javaFilePath("dal/mysql/${table.businessName}/${table.className}Mapper")) - .put(javaTemplatePath("enums/errorcode"), - javaFilePath("enums/${simpleModuleName_upperFirst}ErrorCodeConstants")) + javaModuleImplMainFilePath("dal/mysql/${table.businessName}/${table.className}Mapper")) .put(javaTemplatePath("service/serviceImpl"), - javaFilePath("service/${table.businessName}/impl/${table.className}ServiceImpl")) + javaModuleImplMainFilePath("service/${table.businessName}/${table.className}ServiceImpl")) .put(javaTemplatePath("service/service"), - javaFilePath("service/${table.businessName}/${table.className}Service")) - // Java Test + javaModuleImplMainFilePath("service/${table.businessName}/${table.className}Service")) + // Java module-impl Test .put(javaTemplatePath("test/serviceTest"), - javaFilePath("service/${table.businessName}/${table.className}ServiceTest")) + javaModuleImplTestFilePath("service/${table.businessName}/${table.className}ServiceTest")) + // Java module-api Main + .put(javaTemplatePath("enums/errorcode"), + javaModuleApiMainFilePath("enums/ErrorCodeConstants")) // Vue .put(vueTemplatePath("views/index.vue"), vueFilePath("views/${table.moduleName}/${classNameVar}/index.vue")) @@ -121,7 +122,7 @@ public class CodegenEngine { // 全局配置 globalBindingMap.put("basePackage", codegenProperties.getBasePackage()); globalBindingMap.put("baseFrameworkPackage", StrUtil.subBefore(codegenProperties.getBasePackage(), - '.', true) + '.' + "framework"); + '.', true) + '.' + "framework"); // 用于后续获取测试类的 package 地址 // 全局 Java Bean globalBindingMap.put("CommonResultClassName", CommonResult.class.getName()); globalBindingMap.put("PageResultClassName", PageResult.class.getName()); @@ -149,13 +150,9 @@ public class CodegenEngine { bindingMap.put("table", table); bindingMap.put("columns", columns); bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, CodegenColumnDO::getPrimaryKey)); // 主键字段 - // moduleName 相关 - String simpleModuleName = codegenBuilder.getSimpleModuleName(table.getModuleName()); - bindingMap.put("simpleModuleName", simpleModuleName); // 将 system 转成 sys - bindingMap.put("simpleModuleName_upperFirst", upperFirst(simpleModuleName)); // 将 sys 转成 Sys // className 相关 // 去掉指定前缀 将 TestDictType 转换成 DictType. 因为在 create 等方法后,不需要带上 Test 前缀 - String simpleClassName = removePrefix(table.getClassName(), upperFirst(simpleModuleName)); + String simpleClassName = removePrefix(table.getClassName(), upperFirst(table.getModuleName())); bindingMap.put("simpleClassName", simpleClassName); bindingMap.put("simpleClassName_underlineCase", toUnderlineCase(simpleClassName)); // 将 DictType 转换成 dict_type bindingMap.put("classNameVar", lowerFirst(simpleClassName)); // 将 DictType 转换成 dictType,用于变量 @@ -177,8 +174,6 @@ public class CodegenEngine { private String formatFilePath(String filePath, Map bindingMap) { filePath = StrUtil.replace(filePath, "${basePackage}", getStr(bindingMap, "basePackage").replaceAll("\\.", "/")); - filePath = StrUtil.replace(filePath, "${simpleModuleName_upperFirst}", - getStr(bindingMap, "simpleModuleName_upperFirst")); filePath = StrUtil.replace(filePath, "${classNameVar}", getStr(bindingMap, "classNameVar")); @@ -194,8 +189,23 @@ public class CodegenEngine { return "codegen/java/" + path + ".vm"; } - private static String javaFilePath(String path) { - return "java/${basePackage}/modules/${table.moduleName}/" + path + ".java"; + private static String javaModuleImplMainFilePath(String path) { + return javaModuleFilePath(path, "impl", "main"); + } + + private static String javaModuleApiMainFilePath(String path) { + return javaModuleFilePath(path, "api", "main"); + + } + + private static String javaModuleImplTestFilePath(String path) { + return javaModuleFilePath(path, "impl", "test"); + } + + private static String javaModuleFilePath(String path, String module, String src) { + return "yudao-module-${table.moduleName}/" + // 顶级模块 + "yudao-module-${table.moduleName}-" + module + "/" + // 子模块 + "src/" + src + "/java/${basePackage}/module/${table.moduleName}/" + path + ".java"; } private static String vueTemplatePath(String path) { diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/controller.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/controller.vm new file mode 100644 index 0000000..7c5e63a --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/controller.vm @@ -0,0 +1,102 @@ +package ${basePackage}.module.${table.moduleName}.controller.${table.businessName}; + +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.annotations.*; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import ${PageResultClassName}; +import ${CommonResultClassName}; +import static ${CommonResultClassName}.success; + +import ${ExcelUtilsClassName}; + +import ${OperateLogClassName}; +import static ${OperateTypeEnumClassName}.*; + +import ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import ${basePackage}.module.${table.moduleName}.convert.${table.businessName}.${table.className}Convert; +import ${basePackage}.module.${table.moduleName}.service.${table.businessName}.${table.className}Service; + +@Api(tags = "${table.classComment}") +@RestController +##二级的 businessName 暂时不算在 HTTP 路径上,可以根据需要写 +@RequestMapping("/${table.moduleName}/${simpleClassName_strikeCase}") +@Validated +public class ${table.className}Controller { + + @Resource + private ${table.className}Service ${classNameVar}Service; + + @PostMapping("/create") + @ApiOperation("创建${table.classComment}") + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:create')") + public CommonResult<${primaryColumn.javaType}> create${simpleClassName}(@Valid @RequestBody ${table.className}CreateReqVO createReqVO) { + return success(${classNameVar}Service.create${simpleClassName}(createReqVO)); + } + + @PutMapping("/update") + @ApiOperation("更新${table.classComment}") + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:update')") + public CommonResult update${simpleClassName}(@Valid @RequestBody ${table.className}UpdateReqVO updateReqVO) { + ${classNameVar}Service.update${simpleClassName}(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除${table.classComment}") + @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = ${primaryColumn.javaType}.class) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')") + public CommonResult delete${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { + ${classNameVar}Service.delete${simpleClassName}(id); + return success(true); + } + + @GetMapping("/get") + @ApiOperation("获得${table.classComment}") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = ${primaryColumn.javaType}.class) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") + public CommonResult<${table.className}RespVO> get${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { + ${table.className}DO ${classNameVar} = ${classNameVar}Service.get${simpleClassName}(id); + return success(${table.className}Convert.INSTANCE.convert(${classNameVar})); + } + + @GetMapping("/list") + @ApiOperation("获得${table.classComment}列表") + @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") + public CommonResult> get${simpleClassName}List(@RequestParam("ids") Collection<${primaryColumn.javaType}> ids) { + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(ids); + return success(${table.className}Convert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @ApiOperation("获得${table.classComment}分页") + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") + public CommonResult> get${simpleClassName}Page(@Valid ${table.className}PageReqVO pageVO) { + PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(pageVO); + return success(${table.className}Convert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @ApiOperation("导出${table.classComment} Excel") + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:export')") + @OperateLog(type = EXPORT) + public void export${simpleClassName}Excel(@Valid ${table.className}ExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(exportReqVO); + // 导出 Excel + List<${table.className}ExcelVO> datas = ${table.className}Convert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${table.className}ExcelVO.class, datas); + } + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/_column.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/_column.vm new file mode 100644 index 0000000..2e22225 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/_column.vm @@ -0,0 +1,13 @@ +## 提供给 baseVO、createVO、updateVO 生成字段 + @ApiModelProperty(value = "${column.columnComment}"#if (!${column.nullable}), required = true#end#if ("$!column.example" != ""), example = "${column.example}"#end) +#if (!${column.nullable})## 判断 @NotEmpty 和 @NotNull 注解 +#if (${field.fieldType} == 'String') + @NotEmpty(message = "${column.columnComment}不能为空") +#else + @NotNull(message = "${column.columnComment}不能为空") +#end +#end +#if (${column.javaType} == "Date")## 时间类型 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) +#end + private ${column.javaType} ${column.javaField}; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm new file mode 100644 index 0000000..43fc531 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm @@ -0,0 +1,31 @@ +package ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; +## 处理 Date 字段的引入 +#foreach ($column in $columns) +#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult} + && ${column.javaType} == "Date")## 时间类型 +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end + +/** +* ${table.classComment} Base VO,提供给添加、修改、详细的子 VO 使用 +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 +*/ +@Data +public class ${table.className}BaseVO { + +#foreach ($column in $columns) +#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult})##通用操作 + #parse("codegen/java/controller/vo/_column.vm") + +#end +#end +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm new file mode 100644 index 0000000..145c36a --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm @@ -0,0 +1,30 @@ +package ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; +## 处理 Date 字段的引入 +#foreach ($column in $columns) +#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult}) + && ${column.javaType} == "Date")## 时间类型 +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end + +@ApiModel("${table.classComment}创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ${table.className}CreateReqVO extends ${table.className}BaseVO { + +#foreach ($column in $columns) +#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult}))##不是通用字段 + #parse("codegen/java/controller/vo/_column.vm") + +#end +#end +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm new file mode 100644 index 0000000..0698ce5 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm @@ -0,0 +1,37 @@ +package ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; + +import com.alibaba.excel.annotation.ExcelProperty; +#foreach ($column in $columns) +#if ("$!column.dictType" != "")## 有设置数据字典 +import ${DictFormatClassName}; +import ${DictConvertClassName}; + +#break +#end +#end + +/** + * ${table.classComment} Excel VO + * + * @author ${table.author} + */ +@Data +public class ${table.className}ExcelVO { + +#foreach ($column in $columns) + #if (${column.listOperationResult})##返回字段 + #if ("$!column.dictType" != "")##处理枚举值 + @ExcelProperty(value = "${column.columnComment}", converter = DictConvert.class) + @DictFormat("${column.dictType}") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + #else + @ExcelProperty("${column.columnComment}") + #end + private ${column.javaType} ${column.javaField}; + + #end +#end +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm new file mode 100644 index 0000000..42b8858 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm @@ -0,0 +1,42 @@ +package ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import ${PageParamClassName}; +## 处理 Date 字段的引入 +#foreach ($column in $columns) +#if (${column.listOperation} && ${column.javaType} == "Date")## 时间类型 +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end +## 字段模板 +#macro(columnTpl $prefix $prefixStr) +#if (${column.javaType} == "Date")## 时间类型 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) +#end + @ApiModelProperty(value = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; +#end + +@ApiModel(value = "${table.classComment} Excel 导出 Request VO", description = "参数和 ${table.className}PageReqVO 是一致的") +@Data +public class ${table.className}ExportReqVO { + +#foreach ($column in $columns) +#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 +#if (${column.listOperation})##查询操作 +#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 + #columnTpl('begin', '开始') + + #columnTpl('end', '结束') +#else##情况二,非 Between 的时间 + #columnTpl('', '') +#end + +#end +#end +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm new file mode 100644 index 0000000..721c67d --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm @@ -0,0 +1,44 @@ +package ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import ${PageParamClassName}; +## 处理 Date 字段的引入 +#foreach ($column in $columns) +#if (${column.listOperation} && ${column.javaType} == "Date")## 时间类型 +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end +## 字段模板 +#macro(columnTpl $prefix $prefixStr) +#if (${column.javaType} == "Date")## 时间类型 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) +#end + @ApiModelProperty(value = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; +#end + +@ApiModel("${table.classComment}分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ${table.className}PageReqVO extends PageParam { + +#foreach ($column in $columns) +#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 +#if (${column.listOperation})##查询操作 +#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 + #columnTpl('begin', '开始') + + #columnTpl('end', '结束') +#else##情况二,非 Between 的时间 + #columnTpl('', '') +#end + +#end +#end +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/respVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/respVO.vm new file mode 100644 index 0000000..b52c98b --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/respVO.vm @@ -0,0 +1,20 @@ +package ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; + +@ApiModel("${table.classComment} Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ${table.className}RespVO extends ${table.className}BaseVO { + +#foreach ($column in $columns) +#if (${column.listOperationResult} && (!${column.createOperation} || !${column.updateOperation}))##不是通用字段 + @ApiModelProperty(value = "${column.columnComment}"#if (!${column.nullable}), required = true#end#if ("$!column.example" != ""), example = "${column.example}"#end) + private ${column.javaType} ${column.javaField}; + +#end +#end +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm new file mode 100644 index 0000000..67bd1da --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm @@ -0,0 +1,30 @@ +package ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; +## 处理 Date 字段的引入 +#foreach ($column in $columns) +#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}) + && ${column.javaType} == "Date"))## 时间类型 +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end + +@ApiModel("${table.classComment}更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ${table.className}UpdateReqVO extends ${table.className}BaseVO { + +#foreach ($column in $columns) +#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}))##不是通用字段 + #parse("codegen/java/controller/vo/_column.vm") + +#end +#end +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/convert/convert.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/convert/convert.vm new file mode 100644 index 0000000..43bf1d0 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/convert/convert.vm @@ -0,0 +1,34 @@ +package ${basePackage}.module.${table.moduleName}.convert.${table.businessName}; + +import java.util.*; + +import ${PageResultClassName}; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; + +/** + * ${table.classComment} Convert + * + * @author ${table.author} + */ +@Mapper +public interface ${table.className}Convert { + + ${table.className}Convert INSTANCE = Mappers.getMapper(${table.className}Convert.class); + + ${table.className}DO convert(${table.className}CreateReqVO bean); + + ${table.className}DO convert(${table.className}UpdateReqVO bean); + + ${table.className}RespVO convert(${table.className}DO bean); + + List<${table.className}RespVO> convertList(List<${table.className}DO> list); + + PageResult<${table.className}RespVO> convertPage(PageResult<${table.className}DO> page); + + List<${table.className}ExcelVO> convertList02(List<${table.className}DO> list); + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/do.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/do.vm new file mode 100644 index 0000000..687a090 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/do.vm @@ -0,0 +1,38 @@ +package ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}; + +import lombok.*; +import java.util.*; +import com.baomidou.mybatisplus.annotation.*; +import ${BaseDOClassName}; + +/** + * ${table.classComment} DO + * + * @author ${table.author} + */ +@TableName("${table.tableName}") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ${table.className}DO extends BaseDO { + +#foreach ($column in $columns) +#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段 + /** + * ${column.columnComment} + #if ("$!column.dictType" != "")##处理枚举值 + * + * 枚举 {@link TODO ${column.dictType} 对应的类} + #end + */ + #if (${column.primaryKey})##处理主键 + @TableId#if (${column.javaType} == 'String')type = IdType.INPUT)#end + #end + private ${column.javaType} ${column.javaField}; +#end +#end + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/mapper.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/mapper.vm new file mode 100644 index 0000000..54831fc --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/mapper.vm @@ -0,0 +1,66 @@ +package ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}; + +import java.util.*; + +import ${PageResultClassName}; +import ${QueryWrapperClassName}; +import ${BaseMapperClassName}; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import org.apache.ibatis.annotations.Mapper; +import ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo.*; + +## 字段模板 +#macro(listCondition) +#foreach ($column in $columns) +#if (${column.listOperation}) +#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 +#if (${column.listOperationCondition} == "=")##情况一,= 的时候 + .eqIfPresent("${column.columnName}", reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "!=")##情况二,!= 的时候 + .neIfPresent("${column.columnName}", reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == ">")##情况三,> 的时候 + .gtIfPresent("${column.columnName}", reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == ">=")##情况四,>= 的时候 + .geIfPresent("${column.columnName}", reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "<")##情况五,< 的时候 + .ltIfPresent("${column.columnName}", reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "<=")##情况五,<= 的时候 + .leIfPresent("${column.columnName}", reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "LIKE")##情况七,Like 的时候 + .likeIfPresent("${column.columnName}", reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "BETWEEN")##情况八,Between 的时候 + .betweenIfPresent("${column.columnName}", reqVO.getBegin${JavaField}(), reqVO.getEnd${JavaField}()) +#end +#end +#end +#end +/** + * ${table.classComment} Mapper + * + * @author ${table.author} + */ +@Mapper +public interface ${table.className}Mapper extends BaseMapperX<${table.className}DO> { + + default PageResult<${table.className}DO> selectPage(${table.className}PageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX<${table.className}DO>() + #listCondition() + .orderByDesc("id")## 大多数情况下,id 倒序 + ); + } + + default List<${table.className}DO> selectList(${table.className}ExportReqVO reqVO) { + return selectList(new QueryWrapperX<${table.className}DO>() + #listCondition() + .orderByDesc("id")## 大多数情况下,id 倒序 + ); + } + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/enums/errorcode.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/enums/errorcode.vm new file mode 100644 index 0000000..94f12df --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/enums/errorcode.vm @@ -0,0 +1,2 @@ +// ========== ${table.classComment} TODO 补充编号 ========== +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${table.classComment}不存在"); diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/service.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/service.vm new file mode 100644 index 0000000..9895780 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/service.vm @@ -0,0 +1,70 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import java.util.*; +import javax.validation.*; +import ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import ${PageResultClassName}; + +/** + * ${table.classComment} Service 接口 + * + * @author ${table.author} + */ +public interface ${table.className}Service { + + /** + * 创建${table.classComment} + * + * @param createReqVO 创建信息 + * @return 编号 + */ + ${primaryColumn.javaType} create${simpleClassName}(@Valid ${table.className}CreateReqVO createReqVO); + + /** + * 更新${table.classComment} + * + * @param updateReqVO 更新信息 + */ + void update${simpleClassName}(@Valid ${table.className}UpdateReqVO updateReqVO); + + /** + * 删除${table.classComment} + * + * @param id 编号 + */ + void delete${simpleClassName}(${primaryColumn.javaType} id); + + /** + * 获得${table.classComment} + * + * @param id 编号 + * @return ${table.classComment} + */ + ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id); + + /** + * 获得${table.classComment}列表 + * + * @param ids 编号 + * @return ${table.classComment}列表 + */ + List<${table.className}DO> get${simpleClassName}List(Collection<${primaryColumn.javaType}> ids); + + /** + * 获得${table.classComment}分页 + * + * @param pageReqVO 分页查询 + * @return ${table.classComment}分页 + */ + PageResult<${table.className}DO> get${simpleClassName}Page(${table.className}PageReqVO pageReqVO); + + /** + * 获得${table.classComment}列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return ${table.classComment}列表 + */ + List<${table.className}DO> get${simpleClassName}List(${table.className}ExportReqVO exportReqVO); + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/serviceImpl.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/serviceImpl.vm new file mode 100644 index 0000000..979e312 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/serviceImpl.vm @@ -0,0 +1,83 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import ${PageResultClassName}; + +import ${basePackage}.module.${table.moduleName}.convert.${table.businessName}.${table.className}Convert; +import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; +import ${basePackage}.module.${table.moduleName}.service.${table.businessName}.${table.className}Service; + +import static ${ServiceExceptionUtilClassName}.exception; +import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; + +/** + * ${table.classComment} Service 实现类 + * + * @author ${table.author} + */ +@Service +@Validated +public class ${table.className}ServiceImpl implements ${table.className}Service { + + @Resource + private ${table.className}Mapper ${classNameVar}Mapper; + + @Override + public ${primaryColumn.javaType} create${simpleClassName}(${table.className}CreateReqVO createReqVO) { + // 插入 + ${table.className}DO ${classNameVar} = ${table.className}Convert.INSTANCE.convert(createReqVO); + ${classNameVar}Mapper.insert(${classNameVar}); + // 返回 + return ${classNameVar}.getId(); + } + + @Override + public void update${simpleClassName}(${table.className}UpdateReqVO updateReqVO) { + // 校验存在 + this.validate${simpleClassName}Exists(updateReqVO.getId()); + // 更新 + ${table.className}DO updateObj = ${table.className}Convert.INSTANCE.convert(updateReqVO); + ${classNameVar}Mapper.updateById(updateObj); + } + + @Override + public void delete${simpleClassName}(${primaryColumn.javaType} id) { + // 校验存在 + this.validate${simpleClassName}Exists(id); + // 删除 + ${classNameVar}Mapper.deleteById(id); + } + + private void validate${simpleClassName}Exists(${primaryColumn.javaType} id) { + if (${classNameVar}Mapper.selectById(id) == null) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + } + + @Override + public ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id) { + return ${classNameVar}Mapper.selectById(id); + } + + @Override + public List<${table.className}DO> get${simpleClassName}List(Collection<${primaryColumn.javaType}> ids) { + return ${classNameVar}Mapper.selectBatchIds(ids); + } + + @Override + public PageResult<${table.className}DO> get${simpleClassName}Page(${table.className}PageReqVO pageReqVO) { + return ${classNameVar}Mapper.selectPage(pageReqVO); + } + + @Override + public List<${table.className}DO> get${simpleClassName}List(${table.className}ExportReqVO exportReqVO) { + return ${classNameVar}Mapper.selectList(exportReqVO); + } + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/test/serviceTest.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/test/serviceTest.vm new file mode 100644 index 0000000..e4556c4 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/test/serviceTest.vm @@ -0,0 +1,161 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import ${basePackage}.BaseDbUnitTest; +import ${basePackage}.module.${table.moduleName}.service.${table.businessName}.impl.${table.className}ServiceImpl; +import ${basePackage}.module.${table.moduleName}.controller.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; +import ${PageResultClassName}; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; + +import static cn.hutool.core.util.RandomUtil.*; +import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; +import static ${baseFrameworkPackage}.test.core.util.AssertUtils.*; +import static ${baseFrameworkPackage}.test.core.util.RandomUtils.*; +import static ${ObjectUtilsClassName}.*; +import static ${DateUtilsClassName}.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +## 字段模板 +#macro(getPageCondition $VO) + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class, o -> { // 等会查询到 + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + o.set$JavaField(null); + #end + #end + }); + ${classNameVar}Mapper.insert(db${simpleClassName}); + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + // 测试 ${column.javaField} 不匹配 + ${classNameVar}Mapper.insert(cloneIgnoreId(db${simpleClassName}, o -> o.set$JavaField(null))); + #end + #end + // 准备参数 + ${table.className}${VO} reqVO = new ${table.className}${VO}(); + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + #if (${column.listOperationCondition} == "BETWEEN")## BETWEEN 的情况 + reqVO.setBegin${JavaField}(null); + reqVO.setEnd${JavaField}(null); + #else + reqVO.set$JavaField(null); + #end + #end + #end +#end +/** +* {@link ${table.className}ServiceImpl} 的单元测试类 +* +* @author ${table.author} +*/ +@Import(${table.className}ServiceImpl.class) +public class ${table.className}ServiceTest extends BaseDbUnitTest { + + @Resource + private ${table.className}ServiceImpl ${classNameVar}Service; + + @Resource + private ${table.className}Mapper ${classNameVar}Mapper; + + @Test + public void testCreate${simpleClassName}_success() { + // 准备参数 + ${table.className}CreateReqVO reqVO = randomPojo(${table.className}CreateReqVO.class); + + // 调用 + ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(reqVO); + // 断言 + assertNotNull(${classNameVar}Id); + // 校验记录的属性是否正确 + ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(${classNameVar}Id); + assertPojoEquals(reqVO, ${classNameVar}); + } + + @Test + public void testUpdate${simpleClassName}_success() { + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); + ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 + // 准备参数 + ${table.className}UpdateReqVO reqVO = randomPojo(${table.className}UpdateReqVO.class, o -> { + o.setId(db${simpleClassName}.getId()); // 设置更新的 ID + }); + + // 调用 + ${classNameVar}Service.update${simpleClassName}(reqVO); + // 校验是否更新正确 + ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, ${classNameVar}); + } + + @Test + public void testUpdate${simpleClassName}_notExists() { + // 准备参数 + ${table.className}UpdateReqVO reqVO = randomPojo(${table.className}UpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(reqVO), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + + @Test + public void testDelete${simpleClassName}_success() { + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); + ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 + // 准备参数 + ${primaryColumn.javaType} id = db${simpleClassName}.getId(); + + // 调用 + ${classNameVar}Service.delete${simpleClassName}(id); + // 校验数据不存在了 + assertNull(${classNameVar}Mapper.selectById(id)); + } + + @Test + public void testDelete${simpleClassName}_notExists() { + // 准备参数 + ${primaryColumn.javaType} id = random${primaryColumn.javaType}Id(); + + // 调用, 并断言异常 + assertServiceException(() -> ${classNameVar}Service.delete${simpleClassName}(id), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + + @Test // TODO 请修改 null 为需要的值 + public void testGet${simpleClassName}Page() { + #getPageCondition("PageReqVO") + + // 调用 + PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0)); + } + + @Test // TODO 请修改 null 为需要的值 + public void testGet${simpleClassName}List() { + #getPageCondition("ExportReqVO") + + // 调用 + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(db${simpleClassName}, list.get(0)); + } + +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/sql.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/sql.vm new file mode 100644 index 0000000..25d76ae --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/sql.vm @@ -0,0 +1,27 @@ +-- 菜单 SQL +INSERT INTO `system_menu`( + `name`, `permission`, `menu_type`, `sort`, `parent_id`, + `path`, `icon`, `component`, `status` +) +VALUES ( + '${table.classComment}管理', '', 2, 0, ${table.parentMenuId}, + '${simpleClassName_strikeCase}', '', '${table.moduleName}/${classNameVar}/index', 0 +); + +-- 按钮父菜单ID +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +#set ($functionNames = ['查询', '创建', '更新', '删除', '导出']) +#set ($functionOps = ['query', 'create', 'update', 'delete', 'export']) +#foreach ($functionName in $functionNames) +#set ($index = $foreach.count - 1) +INSERT INTO `system_menu`( + `name`, `permission`, `menu_type`, `sort`, `parent_id`, + `path`, `icon`, `component`, `status` +) +VALUES ( + '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, @parentId, + '', '', '', 0 +); +#end diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/api/api.js.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/api/api.js.vm new file mode 100644 index 0000000..5e9da32 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/api/api.js.vm @@ -0,0 +1,55 @@ +import request from '@/utils/request' +#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") + +// 创建${table.classComment} +export function create${simpleClassName}(data) { + return request({ + url: '${baseURL}/create', + method: 'post', + data: data + }) +} + +// 更新${table.classComment} +export function update${simpleClassName}(data) { + return request({ + url: '${baseURL}/update', + method: 'put', + data: data + }) +} + +// 删除${table.classComment} +export function delete${simpleClassName}(id) { + return request({ + url: '${baseURL}/delete?id=' + id, + method: 'delete' + }) +} + +// 获得${table.classComment} +export function get${simpleClassName}(id) { + return request({ + url: '${baseURL}/get?id=' + id, + method: 'get' + }) +} + +// 获得${table.classComment}分页 +export function get${simpleClassName}Page(query) { + return request({ + url: '${baseURL}/page', + method: 'get', + params: query + }) +} + +// 导出${table.classComment} Excel +export function export${simpleClassName}Excel(query) { + return request({ + url: '${baseURL}/export-excel', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/views/index.vue.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/views/index.vue.vm new file mode 100644 index 0000000..5456d88 --- /dev/null +++ b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/views/index.vue.vm @@ -0,0 +1,403 @@ + + + -- libgit2 0.21.4