From 842d8b8082797fbf28b468194fd11ebed69f3952 Mon Sep 17 00:00:00 2001 From: wangwei_123 <1255324804@qq.com> Date: Fri, 25 Jul 2025 13:04:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=97=A0=E7=94=A8=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=92=8C=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-vue-pro-master-jdk17/pom.xml | 1 - .../yudao-dependencies/pom.xml | 36 +- ruoyi-vue-pro-master-jdk17/yudao-framework/pom.xml | 1 - .../yudao-framework/yudao-common/pom.xml | 6 +- .../yudao-spring-boot-starter-mybatis/pom.xml | 8 +- .../yudao-spring-boot-starter-test/pom.xml | 60 -- .../test/config/RedisTestConfiguration.java | 35 - .../config/SqlInitializationTestConfiguration.java | 52 -- .../test/core/ut/BaseDbAndRedisUnitTest.java | 55 -- .../framework/test/core/ut/BaseDbUnitTest.java | 47 -- .../test/core/ut/BaseMockitoUnitTest.java | 13 - .../framework/test/core/ut/BaseRedisUnitTest.java | 36 - .../yudao/framework/test/core/ut/package-info.java | 4 - .../framework/test/core/util/AssertUtils.java | 101 --- .../framework/test/core/util/RandomUtils.java | 146 ---- .../iocoder/yudao/framework/test/package-info.java | 4 - ...‹é“ Spring Boot å•元测试 Test 入门》.md | 1 - .../framework/file/core/ftp/FtpFileClientTest.java | 56 -- .../file/core/local/LocalFileClientTest.java | 29 - .../framework/file/core/s3/S3FileClientTest.java | 118 ---- .../file/core/sftp/SftpFileClientTest.java | 49 -- .../infra/service/DefaultDatabaseQueryTest.java | 37 - .../service/codegen/CodegenServiceImplTest.java | 552 --------------- .../service/codegen/inner/CodegenBuilderTest.java | 87 --- .../codegen/inner/CodegenEngineAbstractTest.java | 138 ---- .../codegen/inner/CodegenEngineVue2Test.java | 100 --- .../codegen/inner/CodegenEngineVue3Test.java | 100 --- .../service/config/ConfigServiceImplTest.java | 219 ------ .../db/DataSourceConfigServiceImplTest.java | 208 ------ .../service/db/DatabaseTableServiceImplTest.java | 89 --- .../service/file/FileConfigServiceImplTest.java | 281 -------- .../infra/service/file/FileServiceImplTest.java | 309 --------- .../infra/service/job/JobLogServiceImplTest.java | 172 ----- .../infra/service/job/JobServiceImplTest.java | 257 ------- .../logger/ApiAccessLogServiceImplTest.java | 110 --- .../service/logger/ApiErrorLogServiceImplTest.java | 164 ----- .../src/test/resources/application-unit-test.yaml | 50 -- .../src/test/resources/codegen/table/category.json | 52 -- .../src/test/resources/codegen/table/contact.json | 143 ---- .../src/test/resources/codegen/table/student.json | 134 ---- .../src/test/resources/codegen/table/teacher.json | 143 ---- .../codegen/windows10/vue2_master_erp/assert.json | 73 -- .../java/ErrorCodeConstants_手动æ“作 | 6 - .../vue2_master_erp/java/InfraStudentContactDO | 71 -- .../vue2_master_erp/java/InfraStudentContactMapper | 30 - .../vue2_master_erp/java/InfraStudentController | 183 ----- .../windows10/vue2_master_erp/java/InfraStudentDO | 67 -- .../vue2_master_erp/java/InfraStudentMapper | 30 - .../vue2_master_erp/java/InfraStudentPageReqVO | 34 - .../vue2_master_erp/java/InfraStudentRespVO | 60 -- .../vue2_master_erp/java/InfraStudentSaveReqVO | 52 -- .../vue2_master_erp/java/InfraStudentService | 139 ---- .../vue2_master_erp/java/InfraStudentServiceImpl | 180 ----- .../java/InfraStudentServiceImplTest | 146 ---- .../vue2_master_erp/java/InfraStudentTeacherDO | 71 -- .../vue2_master_erp/java/InfraStudentTeacherMapper | 30 - .../codegen/windows10/vue2_master_erp/js/index | 141 ---- .../codegen/windows10/vue2_master_erp/sql/h2 | 17 - .../codegen/windows10/vue2_master_erp/sql/sql | 55 -- .../vue2_master_erp/vue/StudentContactForm | 151 ---- .../vue2_master_erp/vue/StudentContactList | 129 ---- .../windows10/vue2_master_erp/vue/StudentForm | 149 ---- .../vue2_master_erp/vue/StudentTeacherForm | 151 ---- .../vue2_master_erp/vue/StudentTeacherList | 129 ---- .../codegen/windows10/vue2_master_erp/vue/index | 233 ------- .../vue2_master_erp/xml/InfraStudentMapper | 12 - .../windows10/vue2_master_inner/assert.json | 73 -- .../java/ErrorCodeConstants_手动æ“作 | 3 - .../vue2_master_inner/java/InfraStudentContactDO | 71 -- .../java/InfraStudentContactMapper | 28 - .../vue2_master_inner/java/InfraStudentController | 117 ---- .../vue2_master_inner/java/InfraStudentDO | 67 -- .../vue2_master_inner/java/InfraStudentMapper | 30 - .../vue2_master_inner/java/InfraStudentPageReqVO | 34 - .../vue2_master_inner/java/InfraStudentRespVO | 60 -- .../vue2_master_inner/java/InfraStudentSaveReqVO | 58 -- .../vue2_master_inner/java/InfraStudentService | 77 --- .../vue2_master_inner/java/InfraStudentServiceImpl | 147 ---- .../java/InfraStudentServiceImplTest | 146 ---- .../vue2_master_inner/java/InfraStudentTeacherDO | 71 -- .../java/InfraStudentTeacherMapper | 28 - .../codegen/windows10/vue2_master_inner/js/index | 74 -- .../codegen/windows10/vue2_master_inner/sql/h2 | 17 - .../codegen/windows10/vue2_master_inner/sql/sql | 55 -- .../vue2_master_inner/vue/StudentContactForm | 177 ----- .../vue2_master_inner/vue/StudentContactList | 89 --- .../windows10/vue2_master_inner/vue/StudentForm | 180 ----- .../vue2_master_inner/vue/StudentTeacherForm | 127 ---- .../vue2_master_inner/vue/StudentTeacherList | 93 --- .../codegen/windows10/vue2_master_inner/vue/index | 222 ------ .../vue2_master_inner/xml/InfraStudentMapper | 12 - .../windows10/vue2_master_normal/assert.json | 67 -- .../java/ErrorCodeConstants_手动æ“作 | 3 - .../vue2_master_normal/java/InfraStudentContactDO | 71 -- .../java/InfraStudentContactMapper | 28 - .../vue2_master_normal/java/InfraStudentController | 117 ---- .../vue2_master_normal/java/InfraStudentDO | 67 -- .../vue2_master_normal/java/InfraStudentMapper | 30 - .../vue2_master_normal/java/InfraStudentPageReqVO | 34 - .../vue2_master_normal/java/InfraStudentRespVO | 60 -- .../vue2_master_normal/java/InfraStudentSaveReqVO | 58 -- .../vue2_master_normal/java/InfraStudentService | 77 --- .../java/InfraStudentServiceImpl | 147 ---- .../java/InfraStudentServiceImplTest | 146 ---- .../vue2_master_normal/java/InfraStudentTeacherDO | 71 -- .../java/InfraStudentTeacherMapper | 28 - .../codegen/windows10/vue2_master_normal/js/index | 74 -- .../codegen/windows10/vue2_master_normal/sql/h2 | 17 - .../codegen/windows10/vue2_master_normal/sql/sql | 55 -- .../vue2_master_normal/vue/StudentContactForm | 177 ----- .../windows10/vue2_master_normal/vue/StudentForm | 180 ----- .../vue2_master_normal/vue/StudentTeacherForm | 127 ---- .../codegen/windows10/vue2_master_normal/vue/index | 205 ------ .../vue2_master_normal/xml/InfraStudentMapper | 12 - .../codegen/windows10/vue2_one/assert.json | 49 -- .../vue2_one/java/ErrorCodeConstants_手动æ“作 | 3 - .../windows10/vue2_one/java/InfraStudentController | 95 --- .../codegen/windows10/vue2_one/java/InfraStudentDO | 67 -- .../windows10/vue2_one/java/InfraStudentMapper | 30 - .../windows10/vue2_one/java/InfraStudentPageReqVO | 34 - .../windows10/vue2_one/java/InfraStudentRespVO | 60 -- .../windows10/vue2_one/java/InfraStudentSaveReqVO | 50 -- .../windows10/vue2_one/java/InfraStudentService | 55 -- .../vue2_one/java/InfraStudentServiceImpl | 74 -- .../vue2_one/java/InfraStudentServiceImplTest | 146 ---- .../resources/codegen/windows10/vue2_one/js/index | 53 -- .../resources/codegen/windows10/vue2_one/sql/h2 | 17 - .../resources/codegen/windows10/vue2_one/sql/sql | 55 -- .../codegen/windows10/vue2_one/vue/StudentForm | 149 ---- .../resources/codegen/windows10/vue2_one/vue/index | 205 ------ .../windows10/vue2_one/xml/InfraStudentMapper | 12 - .../codegen/windows10/vue2_tree/assert.json | 49 -- .../vue2_tree/java/ErrorCodeConstants_手动æ“作 | 8 - .../vue2_tree/java/InfraCategoryController | 94 --- .../windows10/vue2_tree/java/InfraCategoryDO | 39 -- .../vue2_tree/java/InfraCategoryListReqVO | 15 - .../windows10/vue2_tree/java/InfraCategoryMapper | 34 - .../windows10/vue2_tree/java/InfraCategoryRespVO | 26 - .../vue2_tree/java/InfraCategorySaveReqVO | 24 - .../windows10/vue2_tree/java/InfraCategoryService | 55 -- .../vue2_tree/java/InfraCategoryServiceImpl | 136 ---- .../vue2_tree/java/InfraCategoryServiceImplTest | 129 ---- .../resources/codegen/windows10/vue2_tree/js/index | 53 -- .../resources/codegen/windows10/vue2_tree/sql/h2 | 10 - .../resources/codegen/windows10/vue2_tree/sql/sql | 55 -- .../codegen/windows10/vue2_tree/vue/CategoryForm | 130 ---- .../codegen/windows10/vue2_tree/vue/index | 161 ----- .../windows10/vue2_tree/xml/InfraCategoryMapper | 12 - .../codegen/windows10/vue3_master_erp/assert.json | 73 -- .../java/ErrorCodeConstants_手动æ“作 | 6 - .../vue3_master_erp/java/InfraStudentContactDO | 71 -- .../vue3_master_erp/java/InfraStudentContactMapper | 30 - .../vue3_master_erp/java/InfraStudentController | 183 ----- .../windows10/vue3_master_erp/java/InfraStudentDO | 67 -- .../vue3_master_erp/java/InfraStudentMapper | 30 - .../vue3_master_erp/java/InfraStudentPageReqVO | 34 - .../vue3_master_erp/java/InfraStudentRespVO | 60 -- .../vue3_master_erp/java/InfraStudentSaveReqVO | 52 -- .../vue3_master_erp/java/InfraStudentService | 139 ---- .../vue3_master_erp/java/InfraStudentServiceImpl | 180 ----- .../java/InfraStudentServiceImplTest | 146 ---- .../vue3_master_erp/java/InfraStudentTeacherDO | 71 -- .../vue3_master_erp/java/InfraStudentTeacherMapper | 30 - .../codegen/windows10/vue3_master_erp/sql/h2 | 17 - .../codegen/windows10/vue3_master_erp/sql/sql | 55 -- .../codegen/windows10/vue3_master_erp/ts/index | 95 --- .../vue3_master_erp/vue/StudentContactForm | 155 ----- .../vue3_master_erp/vue/StudentContactList | 146 ---- .../windows10/vue3_master_erp/vue/StudentForm | 152 ---- .../vue3_master_erp/vue/StudentTeacherForm | 155 ----- .../vue3_master_erp/vue/StudentTeacherList | 146 ---- .../codegen/windows10/vue3_master_erp/vue/index | 278 -------- .../vue3_master_erp/xml/InfraStudentMapper | 12 - .../windows10/vue3_master_inner/assert.json | 73 -- .../java/ErrorCodeConstants_手动æ“作 | 3 - .../vue3_master_inner/java/InfraStudentContactDO | 71 -- .../java/InfraStudentContactMapper | 28 - .../vue3_master_inner/java/InfraStudentController | 117 ---- .../vue3_master_inner/java/InfraStudentDO | 67 -- .../vue3_master_inner/java/InfraStudentMapper | 30 - .../vue3_master_inner/java/InfraStudentPageReqVO | 34 - .../vue3_master_inner/java/InfraStudentRespVO | 60 -- .../vue3_master_inner/java/InfraStudentSaveReqVO | 58 -- .../vue3_master_inner/java/InfraStudentService | 77 --- .../vue3_master_inner/java/InfraStudentServiceImpl | 147 ---- .../java/InfraStudentServiceImplTest | 146 ---- .../vue3_master_inner/java/InfraStudentTeacherDO | 71 -- .../java/InfraStudentTeacherMapper | 28 - .../codegen/windows10/vue3_master_inner/sql/h2 | 17 - .../codegen/windows10/vue3_master_inner/sql/sql | 55 -- .../codegen/windows10/vue3_master_inner/ts/index | 57 -- .../vue3_master_inner/vue/StudentContactForm | 174 ----- .../vue3_master_inner/vue/StudentContactList | 72 -- .../windows10/vue3_master_inner/vue/StudentForm | 184 ----- .../vue3_master_inner/vue/StudentTeacherForm | 122 ---- .../vue3_master_inner/vue/StudentTeacherList | 76 -- .../codegen/windows10/vue3_master_inner/vue/index | 267 ------- .../vue3_master_inner/xml/InfraStudentMapper | 12 - .../windows10/vue3_master_normal/assert.json | 67 -- .../java/ErrorCodeConstants_手动æ“作 | 3 - .../vue3_master_normal/java/InfraStudentContactDO | 71 -- .../java/InfraStudentContactMapper | 28 - .../vue3_master_normal/java/InfraStudentController | 117 ---- .../vue3_master_normal/java/InfraStudentDO | 67 -- .../vue3_master_normal/java/InfraStudentMapper | 30 - .../vue3_master_normal/java/InfraStudentPageReqVO | 34 - .../vue3_master_normal/java/InfraStudentRespVO | 60 -- .../vue3_master_normal/java/InfraStudentSaveReqVO | 58 -- .../vue3_master_normal/java/InfraStudentService | 77 --- .../java/InfraStudentServiceImpl | 147 ---- .../java/InfraStudentServiceImplTest | 146 ---- .../vue3_master_normal/java/InfraStudentTeacherDO | 71 -- .../java/InfraStudentTeacherMapper | 28 - .../codegen/windows10/vue3_master_normal/sql/h2 | 17 - .../codegen/windows10/vue3_master_normal/sql/sql | 55 -- .../codegen/windows10/vue3_master_normal/ts/index | 57 -- .../vue3_master_normal/vue/StudentContactForm | 174 ----- .../windows10/vue3_master_normal/vue/StudentForm | 184 ----- .../vue3_master_normal/vue/StudentTeacherForm | 122 ---- .../codegen/windows10/vue3_master_normal/vue/index | 252 ------- .../vue3_master_normal/xml/InfraStudentMapper | 12 - .../codegen/windows10/vue3_one/assert.json | 49 -- .../vue3_one/java/ErrorCodeConstants_手动æ“作 | 3 - .../windows10/vue3_one/java/InfraStudentController | 95 --- .../codegen/windows10/vue3_one/java/InfraStudentDO | 67 -- .../windows10/vue3_one/java/InfraStudentMapper | 30 - .../windows10/vue3_one/java/InfraStudentPageReqVO | 34 - .../windows10/vue3_one/java/InfraStudentRespVO | 60 -- .../windows10/vue3_one/java/InfraStudentSaveReqVO | 50 -- .../windows10/vue3_one/java/InfraStudentService | 55 -- .../vue3_one/java/InfraStudentServiceImpl | 74 -- .../vue3_one/java/InfraStudentServiceImplTest | 146 ---- .../resources/codegen/windows10/vue3_one/sql/h2 | 17 - .../resources/codegen/windows10/vue3_one/sql/sql | 55 -- .../resources/codegen/windows10/vue3_one/ts/index | 43 -- .../codegen/windows10/vue3_one/vue/StudentForm | 152 ---- .../resources/codegen/windows10/vue3_one/vue/index | 252 ------- .../windows10/vue3_one/xml/InfraStudentMapper | 12 - .../codegen/windows10/vue3_tree/assert.json | 49 -- .../vue3_tree/java/ErrorCodeConstants_手动æ“作 | 8 - .../vue3_tree/java/InfraCategoryController | 94 --- .../windows10/vue3_tree/java/InfraCategoryDO | 39 -- .../vue3_tree/java/InfraCategoryListReqVO | 15 - .../windows10/vue3_tree/java/InfraCategoryMapper | 34 - .../windows10/vue3_tree/java/InfraCategoryRespVO | 26 - .../vue3_tree/java/InfraCategorySaveReqVO | 24 - .../windows10/vue3_tree/java/InfraCategoryService | 55 -- .../vue3_tree/java/InfraCategoryServiceImpl | 136 ---- .../vue3_tree/java/InfraCategoryServiceImplTest | 129 ---- .../resources/codegen/windows10/vue3_tree/sql/h2 | 10 - .../resources/codegen/windows10/vue3_tree/sql/sql | 55 -- .../resources/codegen/windows10/vue3_tree/ts/index | 37 - .../codegen/windows10/vue3_tree/vue/CategoryForm | 114 --- .../codegen/windows10/vue3_tree/vue/index | 185 ----- .../windows10/vue3_tree/xml/InfraCategoryMapper | 12 - .../src/test/resources/logback.xml | 4 - .../src/test/resources/sql/clean.sql | 11 - .../src/test/resources/sql/create_tables.sql | 216 ------ .../yudao-module-iot/yudao-module-iot-biz/pom.xml | 4 +- .../yudao-module-member/pom.xml | 86 --- .../member/api/address/MemberAddressApi.java | 29 - .../member/api/address/MemberAddressApiImpl.java | 33 - .../api/address/dto/MemberAddressRespDTO.java | 42 -- .../module/member/api/config/MemberConfigApi.java | 18 - .../member/api/config/MemberConfigApiImpl.java | 28 - .../member/api/config/dto/MemberConfigRespDTO.java | 32 - .../module/member/api/level/MemberLevelApi.java | 41 -- .../member/api/level/MemberLevelApiImpl.java | 47 -- .../member/api/level/dto/MemberLevelRespDTO.java | 41 -- .../module/member/api/message/package-info.java | 4 - .../api/message/user/MemberUserCreateMessage.java | 21 - .../yudao/module/member/api/package-info.java | 4 - .../module/member/api/point/MemberPointApi.java | 36 - .../member/api/point/MemberPointApiImpl.java | 49 -- .../module/member/api/user/MemberUserApi.java | 68 -- .../module/member/api/user/MemberUserApiImpl.java | 58 -- .../member/api/user/dto/MemberUserRespDTO.java | 55 -- .../admin/address/AddressController.java | 41 -- .../controller/admin/address/package-info.java | 1 - .../controller/admin/address/vo/AddressBaseVO.java | 37 - .../controller/admin/address/vo/AddressRespVO.java | 19 - .../admin/config/MemberConfigController.java | 45 -- .../admin/config/vo/MemberConfigBaseVO.java | 31 - .../admin/config/vo/MemberConfigRespVO.java | 17 - .../admin/config/vo/MemberConfigSaveReqVO.java | 13 - .../admin/group/MemberGroupController.java | 81 --- .../admin/group/vo/MemberGroupBaseVO.java | 29 - .../admin/group/vo/MemberGroupCreateReqVO.java | 14 - .../admin/group/vo/MemberGroupPageReqVO.java | 30 - .../admin/group/vo/MemberGroupRespVO.java | 22 - .../admin/group/vo/MemberGroupSimpleRespVO.java | 18 - .../admin/group/vo/MemberGroupUpdateReqVO.java | 20 - .../level/MemberExperienceRecordController.java | 52 -- .../admin/level/MemberLevelController.java | 80 --- .../admin/level/MemberLevelRecordController.java | 52 -- .../experience/MemberExperienceRecordBaseVO.java | 43 -- .../MemberExperienceRecordPageReqVO.java | 36 - .../experience/MemberExperienceRecordRespVO.java | 22 - .../admin/level/vo/level/MemberLevelBaseVO.java | 53 -- .../level/vo/level/MemberLevelCreateReqVO.java | 14 - .../admin/level/vo/level/MemberLevelListReqVO.java | 18 - .../admin/level/vo/level/MemberLevelRespVO.java | 22 - .../level/vo/level/MemberLevelSimpleRespVO.java | 21 - .../level/vo/level/MemberLevelUpdateReqVO.java | 20 - .../level/vo/record/MemberLevelRecordBaseVO.java | 47 -- .../vo/record/MemberLevelRecordPageReqVO.java | 30 - .../level/vo/record/MemberLevelRecordRespVO.java | 22 - .../admin/point/MemberPointRecordController.java | 56 -- .../vo/recrod/MemberPointRecordPageReqVO.java | 27 - .../point/vo/recrod/MemberPointRecordRespVO.java | 42 -- .../admin/signin/MemberSignInConfigController.java | 74 -- .../admin/signin/MemberSignInRecordController.java | 55 -- .../signin/vo/config/MemberSignInConfigBaseVO.java | 45 -- .../vo/config/MemberSignInConfigCreateReqVO.java | 12 - .../signin/vo/config/MemberSignInConfigRespVO.java | 19 - .../vo/config/MemberSignInConfigUpdateReqVO.java | 18 - .../vo/record/MemberSignInRecordPageReqVO.java | 33 - .../signin/vo/record/MemberSignInRecordRespVO.java | 30 - .../controller/admin/tag/MemberTagController.java | 94 --- .../controller/admin/tag/vo/MemberTagBaseVO.java | 19 - .../admin/tag/vo/MemberTagCreateReqVO.java | 14 - .../admin/tag/vo/MemberTagPageReqVO.java | 27 - .../controller/admin/tag/vo/MemberTagRespVO.java | 22 - .../admin/tag/vo/MemberTagUpdateReqVO.java | 20 - .../admin/user/MemberUserController.java | 113 --- .../controller/admin/user/vo/MemberUserBaseVO.java | 65 -- .../admin/user/vo/MemberUserPageReqVO.java | 48 -- .../controller/admin/user/vo/MemberUserRespVO.java | 52 -- .../admin/user/vo/MemberUserUpdateLevelReqVO.java | 29 - .../admin/user/vo/MemberUserUpdatePointReqVO.java | 22 - .../admin/user/vo/MemberUserUpdateReqVO.java | 20 - .../app/address/AppAddressController.http | 54 -- .../app/address/AppAddressController.java | 75 -- .../app/address/vo/AppAddressBaseVO.java | 35 - .../app/address/vo/AppAddressCreateReqVO.java | 11 - .../app/address/vo/AppAddressRespVO.java | 20 - .../app/address/vo/AppAddressUpdateReqVO.java | 16 - .../controller/app/auth/AppAuthController.http | 67 -- .../controller/app/auth/AppAuthController.java | 135 ---- .../app/auth/vo/AppAuthCheckCodeReqVO.java | 41 -- .../controller/app/auth/vo/AppAuthLoginReqVO.java | 56 -- .../controller/app/auth/vo/AppAuthLoginRespVO.java | 38 - .../app/auth/vo/AppAuthSmsLoginReqVO.java | 58 -- .../app/auth/vo/AppAuthSmsSendReqVO.java | 26 - .../app/auth/vo/AppAuthSmsValidateReqVO.java | 35 - .../app/auth/vo/AppAuthSocialLoginReqVO.java | 34 - .../auth/vo/AppAuthWeixinMiniAppLoginReqVO.java | 30 - .../auth/vo/AuthWeixinJsapiSignatureRespVO.java | 31 - .../level/AppMemberExperienceRecordController.java | 41 -- .../app/level/AppMemberLevelController.java | 38 - .../AppMemberExperienceRecordRespVO.java | 24 - .../app/level/vo/level/AppMemberLevelRespVO.java | 28 - .../app/point/AppMemberPointRecordController.java | 39 -- .../point/vo/AppMemberPointRecordPageReqVO.java | 23 - .../app/point/vo/AppMemberPointRecordRespVO.java | 27 - .../signin/AppMemberSignInConfigController.java | 39 -- .../signin/AppMemberSignInRecordController.java | 52 -- .../vo/config/AppMemberSignInConfigRespVO.java | 16 - .../vo/record/AppMemberSignInRecordRespVO.java | 24 - .../record/AppMemberSignInRecordSummaryRespVO.java | 19 - .../app/social/AppSocialUserController.java | 79 --- .../app/social/vo/AppSocialUserBindReqVO.java | 31 - .../app/social/vo/AppSocialUserRespVO.java | 19 - .../app/social/vo/AppSocialUserUnbindReqVO.java | 27 - .../app/social/vo/AppSocialWxaQrcodeReqVO.java | 38 - .../vo/AppSocialWxaSubscribeTemplateRespVO.java | 27 - .../app/user/AppMemberUserController.http | 4 - .../app/user/AppMemberUserController.java | 78 --- .../app/user/vo/AppMemberUserInfoRespVO.java | 59 -- .../user/vo/AppMemberUserResetPasswordReqVO.java | 38 - .../vo/AppMemberUserUpdateMobileByWeixinReqVO.java | 16 - .../user/vo/AppMemberUserUpdateMobileReqVO.java | 36 - .../user/vo/AppMemberUserUpdatePasswordReqVO.java | 31 - .../app/user/vo/AppMemberUserUpdateReqVO.java | 23 - .../module/member/controller/package-info.java | 6 - .../member/convert/address/AddressConvert.java | 45 -- .../module/member/convert/auth/AuthConvert.java | 35 - .../member/convert/config/MemberConfigConvert.java | 25 - .../member/convert/group/MemberGroupConvert.java | 35 - .../level/MemberExperienceRecordConvert.java | 34 - .../member/convert/level/MemberLevelConvert.java | 39 -- .../convert/level/MemberLevelRecordConvert.java | 37 - .../yudao/module/member/convert/package-info.java | 6 - .../convert/point/MemberPointRecordConvert.java | 37 - .../convert/signin/MemberSignInConfigConvert.java | 33 - .../convert/signin/MemberSignInRecordConvert.java | 74 -- .../member/convert/tag/MemberTagConvert.java | 33 - .../member/convert/user/MemberUserConvert.java | 68 -- ...Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md | 1 - .../dal/dataobject/address/MemberAddressDO.java | 56 -- .../dal/dataobject/config/MemberConfigDO.java | 48 -- .../member/dal/dataobject/group/MemberGroupDO.java | 45 -- .../dataobject/level/MemberExperienceRecordDO.java | 64 -- .../member/dal/dataobject/level/MemberLevelDO.java | 64 -- .../dal/dataobject/level/MemberLevelRecordDO.java | 71 -- .../dal/dataobject/point/MemberPointRecordDO.java | 69 -- .../dataobject/signin/MemberSignInConfigDO.java | 50 -- .../dataobject/signin/MemberSignInRecordDO.java | 46 -- .../member/dal/dataobject/tag/MemberTagDO.java | 34 - .../member/dal/dataobject/user/MemberUserDO.java | 145 ---- .../dal/mysql/address/MemberAddressMapper.java | 22 - .../dal/mysql/config/MemberConfigMapper.java | 14 - .../member/dal/mysql/group/MemberGroupMapper.java | 31 - .../mysql/level/MemberExperienceRecordMapper.java | 35 - .../member/dal/mysql/level/MemberLevelMapper.java | 33 - .../dal/mysql/level/MemberLevelRecordMapper.java | 26 - .../dal/mysql/point/MemberPointRecordMapper.java | 42 -- .../dal/mysql/signin/MemberSignInConfigMapper.java | 24 - .../dal/mysql/signin/MemberSignInRecordMapper.java | 65 -- .../member/dal/mysql/tag/MemberTagMapper.java | 28 - .../member/dal/mysql/user/MemberUserMapper.java | 96 --- .../yudao/module/member/dal/package-info.java | 9 - .../module/member/dal/redis/package-info.java | 4 - .../module/member/enums/DictTypeConstants.java | 15 - .../module/member/enums/ErrorCodeConstants.java | 58 -- .../member/enums/MemberExperienceBizTypeEnum.java | 51 -- .../member/enums/point/MemberPointBizTypeEnum.java | 58 -- .../module/member/framework/package-info.java | 6 - .../web/config/MemberWebConfiguration.java | 24 - .../module/member/framework/web/package-info.java | 4 - .../module/member/mq/consumer/package-info.java | 4 - .../module/member/mq/message/package-info.java | 4 - .../module/member/mq/producer/package-info.java | 4 - .../mq/producer/user/MemberUserProducer.java | 31 - .../iocoder/yudao/module/member/package-info.java | 8 - .../member/service/address/AddressService.java | 67 -- .../member/service/address/AddressServiceImpl.java | 97 --- .../member/service/auth/MemberAuthService.java | 88 --- .../member/service/auth/MemberAuthServiceImpl.java | 285 -------- .../member/service/config/MemberConfigService.java | 29 - .../service/config/MemberConfigServiceImpl.java | 44 -- .../member/service/group/MemberGroupService.java | 84 --- .../service/group/MemberGroupServiceImpl.java | 103 --- .../level/MemberExperienceRecordService.java | 53 -- .../level/MemberExperienceRecordServiceImpl.java | 55 -- .../service/level/MemberLevelRecordService.java | 37 - .../level/MemberLevelRecordServiceImpl.java | 39 -- .../member/service/level/MemberLevelService.java | 102 --- .../service/level/MemberLevelServiceImpl.java | 298 -------- .../service/point/MemberPointRecordService.java | 42 -- .../point/MemberPointRecordServiceImpl.java | 96 --- .../service/signin/MemberSignInConfigService.java | 62 -- .../signin/MemberSignInConfigServiceImpl.java | 106 --- .../service/signin/MemberSignInRecordService.java | 50 -- .../signin/MemberSignInRecordServiceImpl.java | 145 ---- .../member/service/tag/MemberTagService.java | 73 -- .../member/service/tag/MemberTagServiceImpl.java | 125 ---- .../member/service/user/MemberUserService.java | 190 ----- .../member/service/user/MemberUserServiceImpl.java | 317 --------- .../address/MemberAddressServiceImplTest.java | 98 --- .../member/service/auth/MemberAuthServiceTest.java | 118 ---- .../service/group/MemberGroupServiceImplTest.java | 160 ----- .../service/level/MemberLevelServiceImplTest.java | 268 -------- .../service/tag/MemberTagServiceImplTest.java | 133 ---- .../service/user/MemberUserServiceImplTest.java | 115 ---- .../src/test/resources/application-unit-test.yaml | 48 -- .../src/test/resources/logback.xml | 4 - .../src/test/resources/sql/clean.sql | 5 - .../src/test/resources/sql/create_tables.sql | 113 --- .../yudao-module-system/pom.xml | 18 +- .../module/system/api/social/SocialClientApi.java | 84 --- .../system/api/social/SocialClientApiImpl.java | 107 --- .../module/system/api/social/SocialUserApi.java | 54 -- .../system/api/social/SocialUserApiImpl.java | 45 -- .../api/social/dto/SocialUserBindReqDTO.java | 52 -- .../system/api/social/dto/SocialUserRespDTO.java | 35 - .../api/social/dto/SocialUserUnbindReqDTO.java | 48 -- .../social/dto/SocialWxJsapiSignatureRespDTO.java | 34 - .../social/dto/SocialWxPhoneNumberInfoRespDTO.java | 27 - .../api/social/dto/SocialWxQrcodeReqDTO.java | 66 -- .../SocialWxaOrderNotifyConfirmReceiveReqDTO.java | 30 - .../SocialWxaOrderUploadShippingInfoReqDTO.java | 67 -- .../dto/SocialWxaSubscribeMessageSendReqDTO.java | 61 -- .../dto/SocialWxaSubscribeTemplateRespDTO.java | 42 -- .../controller/admin/auth/AuthController.java | 23 - .../admin/socail/SocialClientController.http | 20 - .../admin/socail/SocialClientController.java | 94 --- .../admin/socail/SocialUserController.java | 82 --- .../socail/vo/client/SocialClientPageReqVO.java | 30 - .../admin/socail/vo/client/SocialClientRespVO.java | 39 -- .../socail/vo/client/SocialClientSaveReqVO.java | 61 -- .../admin/socail/vo/user/SocialUserBindReqVO.java | 34 - .../admin/socail/vo/user/SocialUserPageReqVO.java | 33 - .../admin/socail/vo/user/SocialUserRespVO.java | 48 -- .../socail/vo/user/SocialUserUnbindReqVO.java | 30 - .../module/system/convert/auth/AuthConvert.java | 2 - .../dal/dataobject/social/SocialClientDO.java | 76 -- .../dal/dataobject/social/SocialUserBindDO.java | 56 -- .../system/dal/dataobject/social/SocialUserDO.java | 73 -- .../dal/mysql/social/SocialClientMapper.java | 28 - .../dal/mysql/social/SocialUserBindMapper.java | 44 -- .../system/dal/mysql/social/SocialUserMapper.java | 33 - .../config/YudaoJustAuthConfiguration.java | 39 -- .../justauth/core/AuthRequestFactory.java | 321 --------- .../system/framework/justauth/package-info.java | 6 - .../system/service/auth/AdminAuthService.java | 7 - .../system/service/auth/AdminAuthServiceImpl.java | 31 +- .../system/service/social/SocialClientService.java | 160 ----- .../service/social/SocialClientServiceImpl.java | 511 -------------- .../system/service/social/SocialUserService.java | 89 --- .../service/social/SocialUserServiceImpl.java | 173 ----- .../admin/oauth2/OAuth2OpenControllerTest.java | 337 --------- .../sms/core/client/impl/AliyunSmsClientTest.java | 160 ----- .../sms/core/client/impl/HuaweiSmsClientTest.java | 127 ---- .../sms/core/client/impl/QiniuSmsClientTest.java | 131 ---- .../sms/core/client/impl/SmsClientTests.java | 151 ---- .../sms/core/client/impl/TencentSmsClientTest.java | 218 ------ .../service/auth/AdminAuthServiceImplTest.java | 358 ---------- .../system/service/dept/DeptServiceImplTest.java | 296 -------- .../system/service/dept/PostServiceImplTest.java | 248 ------- .../service/dict/DictDataServiceImplTest.java | 352 ---------- .../service/dict/DictTypeServiceImplTest.java | 271 -------- .../service/logger/LoginLogServiceImplTest.java | 76 -- .../service/logger/OperateLogServiceImplTest.java | 113 --- .../service/mail/MailAccountServiceImplTest.java | 179 ----- .../service/mail/MailLogServiceImplTest.java | 183 ----- .../service/mail/MailSendServiceImplTest.java | 329 --------- .../service/mail/MailTemplateServiceImplTest.java | 215 ------ .../service/notice/NoticeServiceImplTest.java | 130 ---- .../notify/NotifyMessageServiceImplTest.java | 276 -------- .../service/notify/NotifySendServiceImplTest.java | 190 ----- .../notify/NotifyTemplateServiceImplTest.java | 178 ----- .../oauth2/OAuth2ApproveServiceImplTest.java | 270 -------- .../oauth2/OAuth2ClientServiceImplTest.java | 220 ------ .../service/oauth2/OAuth2CodeServiceImplTest.java | 101 --- .../service/oauth2/OAuth2GrantServiceImplTest.java | 173 ----- .../service/oauth2/OAuth2TokenServiceImplTest.java | 329 --------- .../service/permission/MenuServiceImplTest.java | 331 --------- .../service/permission/PermissionServiceTest.java | 527 -------------- .../service/permission/RoleServiceImplTest.java | 372 ---------- .../system/service/sms/SmsChannelServiceTest.java | 217 ------ .../system/service/sms/SmsCodeServiceImplTest.java | 191 ------ .../system/service/sms/SmsLogServiceImplTest.java | 190 ----- .../system/service/sms/SmsSendServiceImplTest.java | 298 -------- .../service/sms/SmsTemplateServiceImplTest.java | 348 ---------- .../social/SocialClientServiceImplTest.java | 471 ------------- .../service/social/SocialUserServiceImplTest.java | 288 -------- .../tenant/TenantPackageServiceImplTest.java | 236 ------- .../service/tenant/TenantServiceImplTest.java | 458 ------------- .../service/user/AdminUserServiceImplTest.java | 763 --------------------- .../src/test/resources/application-unit-test.yaml | 48 -- .../src/test/resources/logback.xml | 4 - .../src/test/resources/sql/clean.sql | 33 - .../src/test/resources/sql/create_tables.sql | 614 ----------------- ruoyi-vue-pro-master-jdk17/yudao-server/pom.xml | 7 +- .../yudao-ui/yudao-ui-admin-uniapp/README.md | 4 - .../yudao-ui/yudao-ui-admin-vben/README.md | 4 - .../yudao-ui/yudao-ui-admin-vue2/README.md | 4 - .../yudao-ui/yudao-ui-admin-vue3/README.md | 4 - .../yudao-ui/yudao-ui-mall-uniapp/README.md | 8 - 550 files changed, 44 insertions(+), 45071 deletions(-) delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/pom.xml delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/config/RedisTestConfiguration.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/config/SqlInitializationTestConfiguration.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbAndRedisUnitTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbUnitTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseMockitoUnitTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseRedisUnitTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/AssertUtils.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/ã€ŠèŠ‹é“ Spring Boot å•元测试 Test 入门》.md delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/ftp/FtpFileClientTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/local/LocalFileClientTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/s3/S3FileClientTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/sftp/SftpFileClientTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/DefaultDatabaseQueryTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilderTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineAbstractTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineVue2Test.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineVue3Test.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/db/DataSourceConfigServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/application-unit-test.yaml delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/category.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/contact.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/student.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/teacher.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/assert.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/ErrorCodeConstants_手动æ“作 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentContactDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentContactMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentController delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentPageReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentRespVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentSaveReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentService delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentServiceImpl delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentServiceImplTest delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentTeacherDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentTeacherMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/js/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/sql/h2 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/sql/sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentContactForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentContactList delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentTeacherForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentTeacherList delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/xml/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/assert.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/ErrorCodeConstants_手动æ“作 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentContactDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentContactMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentController delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentPageReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentRespVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentSaveReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentService delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentServiceImpl delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentServiceImplTest delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentTeacherDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentTeacherMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/js/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/sql/h2 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/sql/sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentContactForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentContactList delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentTeacherForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentTeacherList delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/xml/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/assert.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/ErrorCodeConstants_手动æ“作 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentContactDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentContactMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentController delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentPageReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentRespVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentSaveReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentService delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentServiceImpl delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentServiceImplTest delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentTeacherDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentTeacherMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/js/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/sql/h2 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/sql/sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentContactForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentTeacherForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/xml/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/assert.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/ErrorCodeConstants_手动æ“作 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentController delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentPageReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentRespVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentSaveReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentService delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentServiceImpl delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentServiceImplTest delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/js/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/sql/h2 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/sql/sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/vue/StudentForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/vue/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/xml/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/assert.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/ErrorCodeConstants_手动æ“作 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryController delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryListReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryRespVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategorySaveReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryService delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryServiceImpl delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryServiceImplTest delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/js/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/sql/h2 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/sql/sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/vue/CategoryForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/vue/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/xml/InfraCategoryMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/assert.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/ErrorCodeConstants_手动æ“作 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentContactDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentContactMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentController delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentPageReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentRespVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentSaveReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentService delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentServiceImpl delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentServiceImplTest delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentTeacherDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentTeacherMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/sql/h2 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/sql/sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/ts/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentContactForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentContactList delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentTeacherForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentTeacherList delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/xml/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/assert.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/ErrorCodeConstants_手动æ“作 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentContactDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentContactMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentController delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentPageReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentRespVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentSaveReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentService delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentServiceImpl delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentServiceImplTest delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentTeacherDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentTeacherMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/sql/h2 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/sql/sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/ts/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentContactForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentContactList delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentTeacherForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentTeacherList delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/xml/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/assert.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/ErrorCodeConstants_手动æ“作 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentContactDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentContactMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentController delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentPageReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentRespVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentSaveReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentService delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentServiceImpl delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentServiceImplTest delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentTeacherDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentTeacherMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/sql/h2 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/sql/sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/ts/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentContactForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentTeacherForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/xml/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/assert.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/ErrorCodeConstants_手动æ“作 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentController delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentPageReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentRespVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentSaveReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentService delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentServiceImpl delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentServiceImplTest delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/sql/h2 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/sql/sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/ts/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/vue/StudentForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/vue/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/xml/InfraStudentMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/assert.json delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/ErrorCodeConstants_手动æ“作 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryController delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryDO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryListReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryRespVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategorySaveReqVO delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryService delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryServiceImpl delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryServiceImplTest delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/sql/h2 delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/sql/sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/ts/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/vue/CategoryForm delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/vue/index delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/xml/InfraCategoryMapper delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/logback.xml delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/sql/clean.sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/sql/create_tables.sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/pom.xml delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/MemberAddressApi.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/MemberAddressApiImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/dto/MemberAddressRespDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/MemberConfigApi.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/MemberConfigApiImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/dto/MemberConfigRespDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApi.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApiImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/dto/MemberLevelRespDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/message/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/message/user/MemberUserCreateMessage.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/point/MemberPointApi.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/point/MemberPointApiImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApiImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/AddressController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/vo/AddressBaseVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/vo/AddressRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/MemberConfigController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigSaveReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/MemberGroupController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupBaseVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupCreateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupPageReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupSimpleRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupUpdateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberExperienceRecordController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberLevelController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberLevelRecordController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordBaseVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordPageReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelBaseVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelCreateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelListReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelSimpleRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelUpdateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordBaseVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordPageReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/MemberPointRecordController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/vo/recrod/MemberPointRecordPageReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/vo/recrod/MemberPointRecordRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/MemberSignInConfigController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/MemberSignInRecordController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigBaseVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigCreateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigUpdateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/record/MemberSignInRecordPageReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/record/MemberSignInRecordRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/MemberTagController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagBaseVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagCreateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagPageReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagUpdateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserPageReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdateLevelReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdatePointReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.http delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressBaseVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressCreateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressUpdateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsSendReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsValidateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthWeixinMiniAppLoginReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AuthWeixinJsapiSignatureRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberExperienceRecordController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberLevelController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/vo/experience/AppMemberExperienceRecordRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/vo/level/AppMemberLevelRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/vo/AppMemberPointRecordPageReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/vo/AppMemberPointRecordRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInConfigController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInRecordController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/config/AppMemberSignInConfigRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/record/AppMemberSignInRecordRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/record/AppMemberSignInRecordSummaryRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/AppSocialUserController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserBindReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserUnbindReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialWxaQrcodeReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialWxaSubscribeTemplateRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.http delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserResetPasswordReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateMobileByWeixinReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateMobileReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdatePasswordReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/address/AddressConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/config/MemberConfigConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/group/MemberGroupConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberExperienceRecordConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberLevelConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberLevelRecordConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/point/MemberPointRecordConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/signin/MemberSignInConfigConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/signin/MemberSignInRecordConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/tag/MemberTagConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/address/MemberAddressDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/group/MemberGroupDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberExperienceRecordDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelRecordDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/point/MemberPointRecordDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/signin/MemberSignInConfigDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/signin/MemberSignInRecordDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/tag/MemberTagDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/address/MemberAddressMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/config/MemberConfigMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberExperienceRecordMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberLevelMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberLevelRecordMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/point/MemberPointRecordMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/signin/MemberSignInConfigMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/signin/MemberSignInRecordMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/tag/MemberTagMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/DictTypeConstants.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/MemberExperienceBizTypeEnum.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/point/MemberPointBizTypeEnum.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/web/config/MemberWebConfiguration.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/web/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/consumer/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/message/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/producer/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/producer/user/MemberUserProducer.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/address/AddressService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/address/AddressServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/config/MemberConfigService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/config/MemberConfigServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceRecordService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceRecordServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelRecordService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelRecordServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInConfigService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInConfigServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInRecordService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInRecordServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/address/MemberAddressServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/application-unit-test.yaml delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/logback.xml delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/sql/clean.sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/sql/create_tables.sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApi.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApiImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserRespDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxJsapiSignatureRespDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxQrcodeReqDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaOrderNotifyConfirmReceiveReqDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaOrderUploadShippingInfoReqDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaSubscribeMessageSendReqDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaSubscribeTemplateRespDTO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.http delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialUserController.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientPageReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientSaveReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserBindReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserPageReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserRespVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserUnbindReqVO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialClientDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialUserBindDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialUserDO.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialClientMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserBindMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserMapper.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/config/YudaoJustAuthConfiguration.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/core/AuthRequestFactory.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/package-info.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2OpenControllerTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/AliyunSmsClientTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/HuaweiSmsClientTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/QiniuSmsClientTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/SmsClientTests.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/TencentSmsClientTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailAccountServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailLogServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailSendServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifySendServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ApproveServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2CodeServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2GrantServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/application-unit-test.yaml delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/logback.xml delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/sql/clean.sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/sql/create_tables.sql delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-uniapp/README.md delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vben/README.md delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vue2/README.md delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vue3/README.md delete mode 100644 ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-mall-uniapp/README.md diff --git a/ruoyi-vue-pro-master-jdk17/pom.xml b/ruoyi-vue-pro-master-jdk17/pom.xml index 36a4802..e0750ab 100644 --- a/ruoyi-vue-pro-master-jdk17/pom.xml +++ b/ruoyi-vue-pro-master-jdk17/pom.xml @@ -15,7 +15,6 @@ yudao-module-system yudao-module-infra - yudao-module-member yudao-module-bpm yudao-module-report yudao-module-iot diff --git a/ruoyi-vue-pro-master-jdk17/yudao-dependencies/pom.xml b/ruoyi-vue-pro-master-jdk17/yudao-dependencies/pom.xml index 3f05da8..a470f4c 100644 --- a/ruoyi-vue-pro-master-jdk17/yudao-dependencies/pom.xml +++ b/ruoyi-vue-pro-master-jdk17/yudao-dependencies/pom.xml @@ -72,11 +72,15 @@ 2.17.0 1.27.1 2.30.14 + 1.4.0 2.0.0 1.9.5 + @@ -251,23 +255,23 @@ - + + + com.taosdata.jdbc @@ -445,11 +449,11 @@ mapstruct ${mapstruct.version} - + org.mapstruct mapstruct-processor @@ -549,25 +553,25 @@ ${awssdk.version} - + + JustAuth <!– 社交登陆(例如说,个人微信ã€ä¼ä¸šå¾®ä¿¡ç­‰ç­‰ï¼‰ –> ${justauth.version} - - + –>--> + + <!– 移除,é¿å…和项目里的 hutool-all å†²çª –> cn.hutool hutool-core - + --> - + diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/pom.xml b/ruoyi-vue-pro-master-jdk17/yudao-framework/pom.xml index 76e6740..d22b463 100644 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/pom.xml +++ b/ruoyi-vue-pro-master-jdk17/yudao-framework/pom.xml @@ -23,7 +23,6 @@ yudao-spring-boot-starter-mq yudao-spring-boot-starter-excel - yudao-spring-boot-starter-test yudao-spring-boot-starter-biz-tenant yudao-spring-boot-starter-biz-data-permission diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-common/pom.xml b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-common/pom.xml index b28da08..e4ac64b 100644 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-common/pom.xml +++ b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-common/pom.xml @@ -80,10 +80,10 @@ org.mapstruct mapstruct - + - + mapstruct-jdk8 <!– use mapstruct-jdk8 for Java 8 or higher –> + --> org.mapstruct mapstruct-processor diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-mybatis/pom.xml b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-mybatis/pom.xml index 3272059..a303082 100644 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-mybatis/pom.xml +++ b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-mybatis/pom.xml @@ -48,7 +48,7 @@ mssql-jdbc true - + + com.taosdata.jdbc taos-jdbcdriver diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/pom.xml b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/pom.xml deleted file mode 100644 index 04576fe..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/pom.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - cn.iocoder.boot - yudao-framework - ${revision} - - 4.0.0 - yudao-spring-boot-starter-test - jar - - ${project.artifactId} - 测试组件,用于å•元测试ã€é›†æˆæµ‹è¯• - https://github.com/YunaiV/ruoyi-vue-pro - - - - cn.iocoder.boot - yudao-common - - - - - cn.iocoder.boot - yudao-spring-boot-starter-mybatis - - - - cn.iocoder.boot - yudao-spring-boot-starter-redis - - - - - org.mockito - mockito-inline - - - org.springframework.boot - spring-boot-starter-test - - - - com.h2database - h2 - - - - com.github.fppt - jedis-mock - - - - uk.co.jemos.podam - podam - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/config/RedisTestConfiguration.java b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/config/RedisTestConfiguration.java deleted file mode 100644 index 4622291..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/config/RedisTestConfiguration.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.framework.test.config; - -import com.github.fppt.jedismock.RedisServer; -import org.springframework.boot.autoconfigure.data.redis.RedisProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Lazy; - -import java.io.IOException; - -/** - * Redis 测试 Configuration,主è¦å®žçŽ°å†…åµŒ Redis çš„å¯åЍ - * - * @author èŠ‹é“æºç  - */ -@Configuration(proxyBeanMethods = false) -@Lazy(false) // ç¦æ­¢å»¶è¿ŸåŠ è½½ -@EnableConfigurationProperties(RedisProperties.class) -public class RedisTestConfiguration { - - /** - * 创建模拟的 Redis Server æœåС噍 - */ - @Bean - public RedisServer redisServer(RedisProperties properties) throws IOException { - RedisServer redisServer = new RedisServer(properties.getPort()); - // 一次执行多个å•元测试时,貌似创建多个 spring 容器,导致ä¸è¿›è¡Œ stop。这样,就导致端å£è¢«å ç”¨ï¼Œæ— æ³•å¯åŠ¨ã€‚ã€‚ã€‚ - try { - redisServer.start(); - } catch (Exception ignore) {} - return redisServer; - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/config/SqlInitializationTestConfiguration.java b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/config/SqlInitializationTestConfiguration.java deleted file mode 100644 index abaec9d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/config/SqlInitializationTestConfiguration.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.yudao.framework.test.config; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate; -import org.springframework.boot.autoconfigure.sql.init.SqlInitializationProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer; -import org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer; -import org.springframework.boot.sql.init.DatabaseInitializationSettings; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Lazy; - -import javax.sql.DataSource; - -/** - * SQL åˆå§‹åŒ–的测试 Configuration - * - * 为什么ä¸ä½¿ç”¨ org.springframework.boot.autoconfigure.sql.init.DataSourceInitializationConfiguration 呢? - * 因为我们在å•元测试会使用 spring.main.lazy-initialization 为 true,开å¯å»¶è¿ŸåŠ è½½ã€‚æ­¤æ—¶ï¼Œä¼šå¯¼è‡´ DataSourceInitializationConfiguration åˆå§‹åŒ– - * ä¸è¿‡å‘¢ï¼Œå½“å‰ç±»çš„实现代ç ï¼ŒåŸºæœ¬æ˜¯å¤åˆ¶ DataSourceInitializationConfiguration çš„å“ˆï¼ - * - * @author èŠ‹é“æºç  - */ -@Configuration(proxyBeanMethods = false) -@ConditionalOnMissingBean(AbstractScriptDatabaseInitializer.class) -@ConditionalOnSingleCandidate(DataSource.class) -@ConditionalOnClass(name = "org.springframework.jdbc.datasource.init.DatabasePopulator") -@Lazy(value = false) // ç¦æ­¢å»¶è¿ŸåŠ è½½ -@EnableConfigurationProperties(SqlInitializationProperties.class) -public class SqlInitializationTestConfiguration { - - @Bean - public DataSourceScriptDatabaseInitializer dataSourceScriptDatabaseInitializer(DataSource dataSource, - SqlInitializationProperties initializationProperties) { - DatabaseInitializationSettings settings = createFrom(initializationProperties); - return new DataSourceScriptDatabaseInitializer(dataSource, settings); - } - - static DatabaseInitializationSettings createFrom(SqlInitializationProperties properties) { - DatabaseInitializationSettings settings = new DatabaseInitializationSettings(); - settings.setSchemaLocations(properties.getSchemaLocations()); - settings.setDataLocations(properties.getDataLocations()); - settings.setContinueOnError(properties.isContinueOnError()); - settings.setSeparator(properties.getSeparator()); - settings.setEncoding(properties.getEncoding()); - settings.setMode(properties.getMode()); - return settings; - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbAndRedisUnitTest.java b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbAndRedisUnitTest.java deleted file mode 100644 index 46a6927..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbAndRedisUnitTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.iocoder.yudao.framework.test.core.ut; - -import cn.hutool.extra.spring.SpringUtil; -import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; -import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; -import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import cn.iocoder.yudao.framework.test.config.RedisTestConfiguration; -import cn.iocoder.yudao.framework.test.config.SqlInitializationTestConfiguration; -import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure; -import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; -import org.redisson.spring.starter.RedissonAutoConfiguration; -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -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 + Redis çš„å•元测试 - * - * 相比 {@link BaseDbUnitTest} æ¥è¯´ï¼Œé¢å¤–增加了内存 Redis - * - * @author èŠ‹é“æºç  - */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisUnitTest.Application.class) -@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 -@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // æ¯ä¸ªå•元测试结æŸåŽï¼Œæ¸…ç† DB -public class BaseDbAndRedisUnitTest { - - @Import({ - // DB é…置类 - YudaoDataSourceAutoConfiguration.class, // 自己的 DB é…置类 - DataSourceAutoConfiguration.class, // Spring DB 自动é…置类 - DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动é…置类 - DruidDataSourceAutoConfigure.class, // Druid 自动é…置类 - SqlInitializationTestConfiguration.class, // SQL åˆå§‹åŒ– - // MyBatis é…置类 - YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis é…置类 - MybatisPlusAutoConfiguration.class, // MyBatis 的自动é…置类 - - // Redis é…置类 - RedisTestConfiguration.class, // Redis 测试é…置类,用于å¯åЍ RedisServer - YudaoRedisAutoConfiguration.class, // 自己的 Redis é…置类 - RedisAutoConfiguration.class, // Spring Redis 自动é…置类 - RedissonAutoConfiguration.class, // Redisson 自动é…置类 - - // 其它é…置类 - SpringUtil.class - }) - public static class Application { - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbUnitTest.java b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbUnitTest.java deleted file mode 100644 index 98b06f9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbUnitTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.iocoder.yudao.framework.test.core.ut; - -import cn.hutool.extra.spring.SpringUtil; -import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; -import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; -import cn.iocoder.yudao.framework.test.config.SqlInitializationTestConfiguration; -import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure; -import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; -import com.github.yulichang.autoconfigure.MybatisPlusJoinAutoConfiguration; -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 自动é…置类 - SqlInitializationTestConfiguration.class, // SQL åˆå§‹åŒ– - // MyBatis é…置类 - YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis é…置类 - MybatisPlusAutoConfiguration.class, // MyBatis 的自动é…置类 - MybatisPlusJoinAutoConfiguration.class, // MyBatis çš„Joiné…置类 - - // 其它é…置类 - SpringUtil.class - }) - public static class Application { - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseMockitoUnitTest.java b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseMockitoUnitTest.java deleted file mode 100644 index 2604869..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseMockitoUnitTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.iocoder.yudao.framework.test.core.ut; - -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; - -/** - * 纯 Mockito çš„å•元测试 - * - * @author èŠ‹é“æºç  - */ -@ExtendWith(MockitoExtension.class) -public class BaseMockitoUnitTest { -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseRedisUnitTest.java b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseRedisUnitTest.java deleted file mode 100644 index ff6315a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseRedisUnitTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.yudao.framework.test.core.ut; - -import cn.hutool.extra.spring.SpringUtil; -import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import cn.iocoder.yudao.framework.test.config.RedisTestConfiguration; -import org.redisson.spring.starter.RedissonAutoConfiguration; -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Import; -import org.springframework.test.context.ActiveProfiles; - -/** - * ä¾èµ–内存 Redis çš„å•元测试 - * - * 相比 {@link BaseDbUnitTest} æ¥è¯´ï¼Œä»Žå†…å­˜ DB 改æˆäº†å†…å­˜ Redis - * - * @author èŠ‹é“æºç  - */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseRedisUnitTest.Application.class) -@ActiveProfiles("unit-test") // 设置使用 application-unit-test é…置文件 -public class BaseRedisUnitTest { - - @Import({ - // Redis é…置类 - RedisTestConfiguration.class, // Redis 测试é…置类,用于å¯åЍ RedisServer - RedisAutoConfiguration.class, // Spring Redis 自动é…置类 - YudaoRedisAutoConfiguration.class, // 自己的 Redis é…置类 - RedissonAutoConfiguration.class, // Redisson 自动é…置类 - - // 其它é…置类 - SpringUtil.class - }) - public static class Application { - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/package-info.java deleted file mode 100644 index bda7aad..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * æä¾›å•元测试 Unit Test 的基类 - */ -package cn.iocoder.yudao.framework.test.core.ut; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/AssertUtils.java b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/AssertUtils.java deleted file mode 100644 index e98f498..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/AssertUtils.java +++ /dev/null @@ -1,101 +0,0 @@ -package cn.iocoder.yudao.framework.test.core.util; - -import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.ReflectUtil; -import cn.iocoder.yudao.framework.common.exception.ErrorCode; -import cn.iocoder.yudao.framework.common.exception.ServiceException; -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.function.Executable; - -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Objects; - -import static org.junit.jupiter.api.Assertions.assertThrows; - -/** - * å•元测试,assert 断言工具类 - * - * @author èŠ‹é“æºç  - */ -public class AssertUtils { - - /** - * 比对两个对象的属性是å¦ä¸€è‡´ - * - * 注æ„,如果 expected 存在的属性,actual ä¸å­˜åœ¨çš„æ—¶å€™ï¼Œä¼šè¿›è¡Œå¿½ç•¥ - * - * @param expected 期望对象 - * @param actual 实际对象 - * @param ignoreFields 忽略的属性数组 - */ - public static void assertPojoEquals(Object expected, Object actual, String... ignoreFields) { - Field[] expectedFields = ReflectUtil.getFields(expected.getClass()); - Arrays.stream(expectedFields).forEach(expectedField -> { - // 忽略 jacoco 自动生æˆçš„ $jacocoData 属性的情况 - if (expectedField.isSynthetic()) { - return; - } - // 如果是忽略的属性,则ä¸è¿›è¡Œæ¯”对 - if (ArrayUtil.contains(ignoreFields, expectedField.getName())) { - return; - } - // 忽略ä¸å­˜åœ¨çš„属性 - Field actualField = ReflectUtil.getField(actual.getClass(), expectedField.getName()); - if (actualField == null) { - return; - } - // 比对 - Assertions.assertEquals( - ReflectUtil.getFieldValue(expected, expectedField), - ReflectUtil.getFieldValue(actual, actualField), - String.format("Field(%s) ä¸åŒ¹é…", expectedField.getName()) - ); - }); - } - - /** - * 比对两个对象的属性是å¦ä¸€è‡´ - * - * 注æ„,如果 expected 存在的属性,actual ä¸å­˜åœ¨çš„æ—¶å€™ï¼Œä¼šè¿›è¡Œå¿½ç•¥ - * - * @param expected 期望对象 - * @param actual 实际对象 - * @param ignoreFields 忽略的属性数组 - * @return 是å¦ä¸€è‡´ - */ - public static boolean isPojoEquals(Object expected, Object actual, String... ignoreFields) { - Field[] expectedFields = ReflectUtil.getFields(expected.getClass()); - return Arrays.stream(expectedFields).allMatch(expectedField -> { - // 如果是忽略的属性,则ä¸è¿›è¡Œæ¯”对 - if (ArrayUtil.contains(ignoreFields, expectedField.getName())) { - return true; - } - // 忽略ä¸å­˜åœ¨çš„属性 - Field actualField = ReflectUtil.getField(actual.getClass(), expectedField.getName()); - if (actualField == null) { - return true; - } - return Objects.equals(ReflectUtil.getFieldValue(expected, expectedField), - ReflectUtil.getFieldValue(actual, actualField)); - }); - } - - /** - * 执行方法,校验抛出的 Service 是å¦ç¬¦åˆæ¡ä»¶ - * - * @param executable 业务异常 - * @param errorCode 错误ç å¯¹è±¡ - * @param messageParams 消æ¯å‚æ•° - */ - public static void assertServiceException(Executable executable, ErrorCode errorCode, Object... messageParams) { - // 调用方法 - ServiceException serviceException = assertThrows(ServiceException.class, executable); - // æ ¡éªŒé”™è¯¯ç  - Assertions.assertEquals(errorCode.getCode(), serviceException.getCode(), "错误ç ä¸åŒ¹é…"); - String message = ServiceExceptionUtil.doFormat(errorCode.getCode(), errorCode.getMsg(), messageParams); - Assertions.assertEquals(message, serviceException.getMessage(), "错误æç¤ºä¸åŒ¹é…"); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java deleted file mode 100644 index 1cafbcd..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java +++ /dev/null @@ -1,146 +0,0 @@ -package cn.iocoder.yudao.framework.test.core.util; - -import cn.hutool.core.date.LocalDateTimeUtil; -import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import uk.co.jemos.podam.api.PodamFactory; -import uk.co.jemos.podam.api.PodamFactoryImpl; - -import java.lang.reflect.Type; -import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Set; -import java.util.function.Consumer; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -/** - * éšæœºå·¥å…·ç±» - * - * @author èŠ‹é“æºç  - */ -public class RandomUtils { - - private static final int RANDOM_STRING_LENGTH = 10; - - private static final int TINYINT_MAX = 127; - - private static final int RANDOM_DATE_MAX = 30; - - private static final int RANDOM_COLLECTION_LENGTH = 5; - - private static final PodamFactory PODAM_FACTORY = new PodamFactoryImpl(); - - static { - // 字符串 - PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(String.class, - (dataProviderStrategy, attributeMetadata, map) -> randomString()); - // Integer - PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(Integer.class, (dataProviderStrategy, attributeMetadata, map) -> { - // 如果是 status 的字段,返回 0 或 1 - if ("status".equals(attributeMetadata.getAttributeName())) { - return RandomUtil.randomEle(CommonStatusEnum.values()).getStatus(); - } - // 如果是 typeã€status 结尾的字段,返回 tinyint 范围 - if (StrUtil.endWithAnyIgnoreCase(attributeMetadata.getAttributeName(), - "type", "status", "category", "scope", "result")) { - return RandomUtil.randomInt(0, TINYINT_MAX + 1); - } - return RandomUtil.randomInt(); - }); - // LocalDateTime - PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(LocalDateTime.class, - (dataProviderStrategy, attributeMetadata, map) -> randomLocalDateTime()); - // Boolean - PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(Boolean.class, (dataProviderStrategy, attributeMetadata, map) -> { - // 如果是 deleted 的字段,返回éžåˆ é™¤ - if ("deleted".equals(attributeMetadata.getAttributeName())) { - return false; - } - return RandomUtil.randomBoolean(); - }); - } - - public static String randomString() { - return RandomUtil.randomString(RANDOM_STRING_LENGTH); - } - - public static Long randomLongId() { - return RandomUtil.randomLong(0, Long.MAX_VALUE); - } - - public static Integer randomInteger() { - return RandomUtil.randomInt(0, Integer.MAX_VALUE); - } - - public static Date randomDate() { - return RandomUtil.randomDay(0, RANDOM_DATE_MAX); - } - - public static LocalDateTime randomLocalDateTime() { - // 设置 Nano 为零的原因,é¿å… MySQLã€H2 存储ä¸åˆ°æ—¶é—´æˆ³ - return LocalDateTimeUtil.of(randomDate()).withNano(0); - } - - public static Short randomShort() { - return (short) RandomUtil.randomInt(0, Short.MAX_VALUE); - } - - public static Set randomSet(Class clazz) { - return Stream.iterate(0, i -> i).limit(RandomUtil.randomInt(1, RANDOM_COLLECTION_LENGTH)) - .map(i -> randomPojo(clazz)).collect(Collectors.toSet()); - } - - public static Integer randomCommonStatus() { - return RandomUtil.randomEle(CommonStatusEnum.values()).getStatus(); - } - - public static String randomEmail() { - return randomString() + "@qq.com"; - } - - public static String randomMobile() { - return "13800138" + RandomUtil.randomNumbers(3); - } - - public static String randomURL() { - return "https://www.iocoder.cn/" + randomString(); - } - - @SafeVarargs - public static T randomPojo(Class clazz, Consumer... consumers) { - T pojo = PODAM_FACTORY.manufacturePojo(clazz); - // éžç©ºæ—¶ï¼Œå›žè°ƒé€»è¾‘。通过它,å¯ä»¥å®žçް Pojo çš„è¿›ä¸€æ­¥å¤„ç† - if (ArrayUtil.isNotEmpty(consumers)) { - Arrays.stream(consumers).forEach(consumer -> consumer.accept(pojo)); - } - return pojo; - } - - @SafeVarargs - public static T randomPojo(Class clazz, Type type, Consumer... consumers) { - T pojo = PODAM_FACTORY.manufacturePojo(clazz, type); - // éžç©ºæ—¶ï¼Œå›žè°ƒé€»è¾‘。通过它,å¯ä»¥å®žçް Pojo çš„è¿›ä¸€æ­¥å¤„ç† - if (ArrayUtil.isNotEmpty(consumers)) { - Arrays.stream(consumers).forEach(consumer -> consumer.accept(pojo)); - } - return pojo; - } - - @SafeVarargs - public static List randomPojoList(Class clazz, Consumer... consumers) { - int size = RandomUtil.randomInt(1, RANDOM_COLLECTION_LENGTH); - return randomPojoList(clazz, size, consumers); - } - - @SafeVarargs - public static List randomPojoList(Class clazz, int size, Consumer... consumers) { - return Stream.iterate(0, i -> i).limit(size).map(o -> randomPojo(clazz, consumers)) - .collect(Collectors.toList()); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/package-info.java deleted file mode 100644 index 3a17f51..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 测试组件,用于å•元测试ã€é›†æˆæµ‹è¯•等等 - */ -package cn.iocoder.yudao.framework.test; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/ã€ŠèŠ‹é“ Spring Boot å•元测试 Test 入门》.md b/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/ã€ŠèŠ‹é“ Spring Boot å•元测试 Test 入门》.md deleted file mode 100644 index c6d0e9a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-framework/yudao-spring-boot-starter-test/ã€ŠèŠ‹é“ Spring Boot å•元测试 Test 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/ftp/FtpFileClientTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/ftp/FtpFileClientTest.java deleted file mode 100644 index 8db47da..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/ftp/FtpFileClientTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package cn.iocoder.yudao.module.infra.framework.file.core.ftp; - -import cn.hutool.core.io.resource.ResourceUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.extra.ftp.FtpMode; -import cn.iocoder.yudao.module.infra.framework.file.core.client.ftp.FtpFileClient; -import cn.iocoder.yudao.module.infra.framework.file.core.client.ftp.FtpFileClientConfig; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -/** - * {@link FtpFileClient} é›†æˆæµ‹è¯• - * - * @author èŠ‹é“æºç  - */ -public class FtpFileClientTest { - -// docker run -d \ -// -p 2121:21 -p 30000-30009:30000-30009 \ -// -e FTP_USER=foo \ -// -e FTP_PASS=pass \ -// -e PASV_ADDRESS=127.0.0.1 \ -// -e PASV_MIN_PORT=30000 \ -// -e PASV_MAX_PORT=30009 \ -// -v $(pwd)/ftp-data:/home/vsftpd \ -// fauria/vsftpd - - @Test - @Disabled - public void test() { - // 创建客户端 - FtpFileClientConfig config = new FtpFileClientConfig(); - config.setDomain("http://127.0.0.1:48080"); - config.setBasePath("/home/ftp"); - config.setHost("127.0.0.1"); - config.setPort(2121); - config.setUsername("foo"); - config.setPassword("pass"); - config.setMode(FtpMode.Passive.name()); - FtpFileClient client = new FtpFileClient(0L, config); - client.init(); - // 上传文件 - String path = IdUtil.fastSimpleUUID() + ".jpg"; - byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); - String fullPath = client.upload(content, path, "image/jpeg"); - System.out.println("访问地å€ï¼š" + fullPath); - if (false) { - byte[] bytes = client.getContent(path); - System.out.println("文件内容:" + bytes); - } - if (false) { - client.delete(path); - } - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/local/LocalFileClientTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/local/LocalFileClientTest.java deleted file mode 100644 index 7c622a5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/local/LocalFileClientTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.infra.framework.file.core.local; - -import cn.hutool.core.io.resource.ResourceUtil; -import cn.hutool.core.util.IdUtil; -import cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClient; -import cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClientConfig; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -public class LocalFileClientTest { - - @Test - @Disabled - public void test() { - // 创建客户端 - LocalFileClientConfig config = new LocalFileClientConfig(); - config.setDomain("http://127.0.0.1:48080"); - config.setBasePath("/Users/yunai/file_test"); - LocalFileClient client = new LocalFileClient(0L, config); - client.init(); - // 上传文件 - String path = IdUtil.fastSimpleUUID() + ".jpg"; - byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); - String fullPath = client.upload(content, path, "image/jpeg"); - System.out.println("访问地å€ï¼š" + fullPath); - client.delete(path); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/s3/S3FileClientTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/s3/S3FileClientTest.java deleted file mode 100644 index 3c40ce2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/s3/S3FileClientTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package cn.iocoder.yudao.module.infra.framework.file.core.s3; - -import cn.hutool.core.io.resource.ResourceUtil; -import cn.hutool.core.util.IdUtil; -import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; -import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClient; -import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig; -import jakarta.validation.Validation; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -public class S3FileClientTest { - - @Test - @Disabled // MinIO,如果è¦é›†æˆæµ‹è¯•,å¯ä»¥æ³¨é‡Šæœ¬è¡Œ - public void testMinIO() throws Exception { - S3FileClientConfig config = new S3FileClientConfig(); - // é…ç½®æˆä½ è‡ªå·±çš„ - config.setAccessKey("admin"); - config.setAccessSecret("password"); - config.setBucket("yudaoyuanma"); - config.setDomain(null); - // 默认 9000 endpoint - config.setEndpoint("http://127.0.0.1:9000"); - - // 执行上传 - testExecuteUpload(config); - } - - @Test - @Disabled // 阿里云 OSS,如果è¦é›†æˆæµ‹è¯•,å¯ä»¥æ³¨é‡Šæœ¬è¡Œ - public void testAliyun() throws Exception { - S3FileClientConfig config = new S3FileClientConfig(); - // é…ç½®æˆä½ è‡ªå·±çš„ - config.setAccessKey(System.getenv("ALIYUN_ACCESS_KEY")); - config.setAccessSecret(System.getenv("ALIYUN_SECRET_KEY")); - config.setBucket("yunai-aoteman"); - config.setDomain(null); // 如果有自定义域å,则å¯ä»¥è®¾ç½®ã€‚http://ali-oss.iocoder.cn - // 默认北京的 endpoint - config.setEndpoint("oss-cn-beijing.aliyuncs.com"); - - // 执行上传 - testExecuteUpload(config); - } - - @Test - @Disabled // 腾讯云 COS,如果è¦é›†æˆæµ‹è¯•,å¯ä»¥æ³¨é‡Šæœ¬è¡Œ - public void testQCloud() throws Exception { - S3FileClientConfig config = new S3FileClientConfig(); - // é…ç½®æˆä½ è‡ªå·±çš„ - config.setAccessKey(System.getenv("QCLOUD_ACCESS_KEY")); - config.setAccessSecret(System.getenv("QCLOUD_SECRET_KEY")); - config.setBucket("aoteman-1255880240"); - config.setDomain(null); // 如果有自定义域å,则å¯ä»¥è®¾ç½®ã€‚http://tengxun-oss.iocoder.cn - // 默认上海的 endpoint - config.setEndpoint("cos.ap-shanghai.myqcloud.com"); - - // 执行上传 - testExecuteUpload(config); - } - - @Test - @Disabled // 七牛云存储,如果è¦é›†æˆæµ‹è¯•,å¯ä»¥æ³¨é‡Šæœ¬è¡Œ - public void testQiniu() throws Exception { - S3FileClientConfig config = new S3FileClientConfig(); - // é…ç½®æˆä½ è‡ªå·±çš„ -// config.setAccessKey(System.getenv("QINIU_ACCESS_KEY")); -// config.setAccessSecret(System.getenv("QINIU_SECRET_KEY")); - config.setAccessKey("b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8"); - config.setAccessSecret("kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP"); - config.setBucket("ruoyi-vue-pro"); - config.setDomain("http://test.yudao.iocoder.cn"); // 如果有自定义域å,则å¯ä»¥è®¾ç½®ã€‚http://static.yudao.iocoder.cn - // 默认上海的 endpoint - config.setEndpoint("s3-cn-south-1.qiniucs.com"); - - // 执行上传 - testExecuteUpload(config); - } - - @Test - @Disabled // åŽä¸ºäº‘存储,如果è¦é›†æˆæµ‹è¯•,å¯ä»¥æ³¨é‡Šæœ¬è¡Œ - public void testHuaweiCloud() throws Exception { - S3FileClientConfig config = new S3FileClientConfig(); - // é…ç½®æˆä½ è‡ªå·±çš„ -// config.setAccessKey(System.getenv("HUAWEI_CLOUD_ACCESS_KEY")); -// config.setAccessSecret(System.getenv("HUAWEI_CLOUD_SECRET_KEY")); - config.setBucket("yudao"); - config.setDomain(null); // 如果有自定义域å,则å¯ä»¥è®¾ç½®ã€‚ - // 默认上海的 endpoint - config.setEndpoint("obs.cn-east-3.myhuaweicloud.com"); - - // 执行上传 - testExecuteUpload(config); - } - - private void testExecuteUpload(S3FileClientConfig config) throws Exception { - // 校验é…ç½® - ValidationUtils.validate(Validation.buildDefaultValidatorFactory().getValidator(), config); - // 创建 Client - S3FileClient client = new S3FileClient(0L, config); - client.init(); - // 上传文件 - String path = IdUtil.fastSimpleUUID() + ".jpg"; - byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); - String fullPath = client.upload(content, path, "image/jpeg"); - System.out.println("访问地å€ï¼š" + fullPath); - // è¯»å–æ–‡ä»¶ - if (true) { - byte[] bytes = client.getContent(path); - System.out.println("文件内容:" + bytes.length); - } - // 删除文件 - if (false) { - client.delete(path); - } - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/sftp/SftpFileClientTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/sftp/SftpFileClientTest.java deleted file mode 100644 index 53c904e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/sftp/SftpFileClientTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.iocoder.yudao.module.infra.framework.file.core.sftp; - -import cn.hutool.core.io.resource.ResourceUtil; -import cn.hutool.core.util.IdUtil; -import cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClient; -import cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClientConfig; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -/** - * {@link SftpFileClient} é›†æˆæµ‹è¯• - * - * @author èŠ‹é“æºç  - */ -public class SftpFileClientTest { - -// docker run -p 2222:22 -d \ -// -v $(pwd)/sftp-data:/home/foo/upload \ -// atmoz/sftp \ -// foo:pass:1001 - - @Test - @Disabled - public void test() { - // 创建客户端 - SftpFileClientConfig config = new SftpFileClientConfig(); - config.setDomain("http://127.0.0.1:48080"); - config.setBasePath("/upload"); // 注æ„ï¼Œè¿™ä¸ªæ˜¯ç›¸å¯¹è·¯å¾„ï¼Œä¸æ˜¯å®žé™… linux 上的路径ï¼ï¼ï¼ - config.setHost("127.0.0.1"); - config.setPort(2222); - config.setUsername("foo"); - config.setPassword("pass"); - SftpFileClient client = new SftpFileClient(0L, config); - client.init(); - // 上传文件 - String path = IdUtil.fastSimpleUUID() + ".jpg"; - byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); - String fullPath = client.upload(content, path, "image/jpeg"); - System.out.println("访问地å€ï¼š" + fullPath); - if (false) { - byte[] bytes = client.getContent(path); - System.out.println("文件内容:" + bytes); - } - if (false) { - client.delete(path); - } - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/DefaultDatabaseQueryTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/DefaultDatabaseQueryTest.java deleted file mode 100644 index a6de8d9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/DefaultDatabaseQueryTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.iocoder.yudao.module.infra.service; - -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.generator.query.DefaultQuery; -import com.baomidou.mybatisplus.generator.config.DataSourceConfig; -import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder; -import com.baomidou.mybatisplus.generator.config.po.TableInfo; - -import java.util.List; - -public class DefaultDatabaseQueryTest { - - public static void main(String[] args) { -// DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder("jdbc:oracle:thin:@127.0.0.1:1521:xe", -// "root", "123456").build(); - DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder("jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro", - "root", "123456").build(); -// StrategyConfig strategyConfig = new StrategyConfig.Builder().build(); - - ConfigBuilder builder = new ConfigBuilder(null, dataSourceConfig, null, null, null, null); - - DefaultQuery query = new DefaultQuery(builder); - - long time = System.currentTimeMillis(); - List tableInfos = query.queryTables(); - for (TableInfo tableInfo : tableInfos) { - if (StrUtil.startWithAny(tableInfo.getName().toLowerCase(), "act_", "flw_", "qrtz_")) { - continue; - } - System.out.println(String.format("CREATE SEQUENCE %s_seq MINVALUE 1;", tableInfo.getName())); -// System.out.println(String.format("DELETE FROM %s WHERE deleted = '1';", tableInfo.getName())); - } - System.out.println(tableInfos.size()); - System.out.println(System.currentTimeMillis() - time); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java deleted file mode 100644 index 8ca4a0e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java +++ /dev/null @@ -1,552 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.codegen; - -import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenCreateListReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenUpdateReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.column.CodegenColumnSaveReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTablePageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.DatabaseTableRespVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO; -import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenColumnMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper; -import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum; -import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum; -import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum; -import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties; -import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenBuilder; -import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenEngine; -import cn.iocoder.yudao.module.infra.service.db.DatabaseTableService; -import com.baomidou.mybatisplus.generator.config.po.TableField; -import com.baomidou.mybatisplus.generator.config.po.TableInfo; -import jakarta.annotation.Resource; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -/** - * {@link CodegenServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(CodegenServiceImpl.class) -public class CodegenServiceImplTest extends BaseDbUnitTest { - - @Resource - private CodegenServiceImpl codegenService; - - @Resource - private CodegenTableMapper codegenTableMapper; - @Resource - private CodegenColumnMapper codegenColumnMapper; - - @MockBean - private DatabaseTableService databaseTableService; - - @MockBean - private CodegenBuilder codegenBuilder; - @MockBean - private CodegenEngine codegenEngine; - - @MockBean - private CodegenProperties codegenProperties; - - @Test - public void testCreateCodegenList() { - // 准备傿•° - String author = randomString(); - CodegenCreateListReqVO reqVO = randomPojo(CodegenCreateListReqVO.class, - o -> o.setDataSourceConfigId(1L).setTableNames(Collections.singletonList("t_yunai"))); - // mock 方法(TableInfo) - TableInfo tableInfo = mock(TableInfo.class); - when(databaseTableService.getTable(eq(1L), eq("t_yunai"))) - .thenReturn(tableInfo); - when(tableInfo.getComment()).thenReturn("芋艿"); - // mock 方法(TableInfo fields) - TableField field01 = mock(TableField.class); - when(field01.getComment()).thenReturn("主键"); - TableField field02 = mock(TableField.class); - when(field02.getComment()).thenReturn("åå­—"); - List fields = Arrays.asList(field01, field02); - when(tableInfo.getFields()).thenReturn(fields); - // mock 方法(CodegenTableDO) - CodegenTableDO table = randomPojo(CodegenTableDO.class); - when(codegenBuilder.buildTable(same(tableInfo))).thenReturn(table); - // mock 方法(CodegenColumnDO) - List columns = randomPojoList(CodegenColumnDO.class); - when(codegenBuilder.buildColumns(eq(table.getId()), same(fields))) - .thenReturn(columns); - // mock 方法(CodegenProperties) - when(codegenProperties.getFrontType()).thenReturn(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType()); - - // 调用 - List result = codegenService.createCodegenList(author, reqVO); - // 断言 - assertEquals(1, result.size()); - // 断言(CodegenTableDO) - CodegenTableDO dbTable = codegenTableMapper.selectList().get(0); - assertPojoEquals(table, dbTable); - assertEquals(1L, dbTable.getDataSourceConfigId()); - assertEquals(CodegenSceneEnum.ADMIN.getScene(), dbTable.getScene()); - assertEquals(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType(), dbTable.getFrontType()); - assertEquals(author, dbTable.getAuthor()); - // 断言(CodegenColumnDO) - List dbColumns = codegenColumnMapper.selectList(); - assertEquals(columns.size(), dbColumns.size()); - assertTrue(dbColumns.get(0).getPrimaryKey()); - for (int i = 0; i < dbColumns.size(); i++) { - assertPojoEquals(columns.get(i), dbColumns.get(i)); - } - } - - @Test - public void testValidateTableInfo() { - // 情况一 - assertServiceException(() -> codegenService.validateTableInfo(null), - CODEGEN_IMPORT_TABLE_NULL); - // 情况二 - TableInfo tableInfo = mock(TableInfo.class); - assertServiceException(() -> codegenService.validateTableInfo(tableInfo), - CODEGEN_TABLE_INFO_TABLE_COMMENT_IS_NULL); - // 情况三 - when(tableInfo.getComment()).thenReturn("芋艿"); - assertServiceException(() -> codegenService.validateTableInfo(tableInfo), - CODEGEN_IMPORT_COLUMNS_NULL); - // 情况四 - TableField field = mock(TableField.class); - when(field.getName()).thenReturn("name"); - when(tableInfo.getFields()).thenReturn(Collections.singletonList(field)); - assertServiceException(() -> codegenService.validateTableInfo(tableInfo), - CODEGEN_TABLE_INFO_COLUMN_COMMENT_IS_NULL, field.getName()); - } - - @Test - public void testUpdateCodegen_notExists() { - // 准备傿•° - CodegenUpdateReqVO updateReqVO = randomPojo(CodegenUpdateReqVO.class); - // mock 方法 - - // 调用,并断言 - assertServiceException(() -> codegenService.updateCodegen(updateReqVO), - CODEGEN_TABLE_NOT_EXISTS); - } - - @Test - public void testUpdateCodegen_sub_masterNotExists() { - // mock æ•°æ® - CodegenTableDO table = randomPojo(CodegenTableDO.class, - o -> o.setTemplateType(CodegenTemplateTypeEnum.SUB.getType()) - .setScene(CodegenSceneEnum.ADMIN.getScene())); - codegenTableMapper.insert(table); - // 准备傿•° - CodegenUpdateReqVO updateReqVO = randomPojo(CodegenUpdateReqVO.class, - o -> o.getTable().setId(table.getId()) - .setTemplateType(CodegenTemplateTypeEnum.SUB.getType())); - - // 调用,并断言 - assertServiceException(() -> codegenService.updateCodegen(updateReqVO), - CODEGEN_MASTER_TABLE_NOT_EXISTS, updateReqVO.getTable().getMasterTableId()); - } - - @Test - public void testUpdateCodegen_sub_columnNotExists() { - // mock æ•°æ® - CodegenTableDO subTable = randomPojo(CodegenTableDO.class, - o -> o.setTemplateType(CodegenTemplateTypeEnum.SUB.getType()) - .setScene(CodegenSceneEnum.ADMIN.getScene())); - codegenTableMapper.insert(subTable); - // mock æ•°æ®ï¼ˆmaster) - CodegenTableDO masterTable = randomPojo(CodegenTableDO.class, - o -> o.setTemplateType(CodegenTemplateTypeEnum.MASTER_ERP.getType()) - .setScene(CodegenSceneEnum.ADMIN.getScene())); - codegenTableMapper.insert(masterTable); - // 准备傿•° - CodegenUpdateReqVO updateReqVO = randomPojo(CodegenUpdateReqVO.class, - o -> o.getTable().setId(subTable.getId()) - .setTemplateType(CodegenTemplateTypeEnum.SUB.getType()) - .setMasterTableId(masterTable.getId())); - - // 调用,并断言 - assertServiceException(() -> codegenService.updateCodegen(updateReqVO), - CODEGEN_SUB_COLUMN_NOT_EXISTS, updateReqVO.getTable().getSubJoinColumnId()); - } - - @Test - public void testUpdateCodegen_success() { - // mock æ•°æ® - CodegenTableDO table = randomPojo(CodegenTableDO.class, - o -> o.setTemplateType(CodegenTemplateTypeEnum.ONE.getType()) - .setScene(CodegenSceneEnum.ADMIN.getScene())); - codegenTableMapper.insert(table); - CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId())); - codegenColumnMapper.insert(column01); - CodegenColumnDO column02 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId())); - codegenColumnMapper.insert(column02); - // 准备傿•° - CodegenUpdateReqVO updateReqVO = randomPojo(CodegenUpdateReqVO.class, - o -> o.getTable().setId(table.getId()) - .setTemplateType(CodegenTemplateTypeEnum.ONE.getType()) - .setScene(CodegenSceneEnum.ADMIN.getScene())); - CodegenColumnSaveReqVO columnVO01 = randomPojo(CodegenColumnSaveReqVO.class, - o -> o.setId(column01.getId()).setTableId(table.getId())); - CodegenColumnSaveReqVO columnVO02 = randomPojo(CodegenColumnSaveReqVO.class, - o -> o.setId(column02.getId()).setTableId(table.getId())); - updateReqVO.setColumns(Arrays.asList(columnVO01, columnVO02)); - - // 调用 - codegenService.updateCodegen(updateReqVO); - // 断言 - CodegenTableDO dbTable = codegenTableMapper.selectById(table.getId()); - assertPojoEquals(updateReqVO.getTable(), dbTable); - List dbColumns = codegenColumnMapper.selectList(); - assertEquals(2, dbColumns.size()); - assertPojoEquals(columnVO01, dbColumns.get(0)); - assertPojoEquals(columnVO02, dbColumns.get(1)); - } - - @Test - public void testSyncCodegenFromDB() { - // mock æ•°æ®ï¼ˆCodegenTableDO) - CodegenTableDO table = randomPojo(CodegenTableDO.class, o -> o.setTableName("t_yunai") - .setDataSourceConfigId(1L).setScene(CodegenSceneEnum.ADMIN.getScene())); - codegenTableMapper.insert(table); - CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) - .setColumnName("id").setPrimaryKey(true).setOrdinalPosition(0)); - codegenColumnMapper.insert(column01); - CodegenColumnDO column02 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) - .setColumnName("name").setOrdinalPosition(1)); - codegenColumnMapper.insert(column02); - // 准备傿•° - Long tableId = table.getId(); - // mock 方法(TableInfo) - TableInfo tableInfo = mock(TableInfo.class); - when(databaseTableService.getTable(eq(1L), eq("t_yunai"))) - .thenReturn(tableInfo); - when(tableInfo.getComment()).thenReturn("芋艿"); - // mock 方法(TableInfo fields) - TableField field01 = mock(TableField.class); - when(field01.getComment()).thenReturn("主键"); - TableField field03 = mock(TableField.class); - when(field03.getComment()).thenReturn("分类"); - List fields = Arrays.asList(field01, field03); - when(tableInfo.getFields()).thenReturn(fields); - when(databaseTableService.getTable(eq(1L), eq("t_yunai"))) - .thenReturn(tableInfo); - // mock 方法(CodegenTableDO) - List newColumns = randomPojoList(CodegenColumnDO.class, 2); - when(codegenBuilder.buildColumns(eq(table.getId()), argThat(tableFields -> { - assertEquals(2, tableFields.size()); - assertSame(tableInfo.getFields(), tableFields); - return true; - }))).thenReturn(newColumns); - - // 调用 - codegenService.syncCodegenFromDB(tableId); - // 断言 - List dbColumns = codegenColumnMapper.selectList(); - assertEquals(newColumns.size(), dbColumns.size()); - assertPojoEquals(newColumns.get(0), dbColumns.get(0)); - assertPojoEquals(newColumns.get(1), dbColumns.get(1)); - } - - @Test - public void testDeleteCodegen_notExists() { - assertServiceException(() -> codegenService.deleteCodegen(randomLongId()), - CODEGEN_TABLE_NOT_EXISTS); - } - - @Test - public void testDeleteCodegen_success() { - // mock æ•°æ® - CodegenTableDO table = randomPojo(CodegenTableDO.class, - o -> o.setScene(CodegenSceneEnum.ADMIN.getScene())); - codegenTableMapper.insert(table); - CodegenColumnDO column = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId())); - codegenColumnMapper.insert(column); - // 准备傿•° - Long tableId = table.getId(); - - // 调用 - codegenService.deleteCodegen(tableId); - // 断言 - assertNull(codegenTableMapper.selectById(tableId)); - assertEquals(0, codegenColumnMapper.selectList().size()); - } - - @Test - public void testGetCodegenTableList() { - // mock æ•°æ® - CodegenTableDO table01 = randomPojo(CodegenTableDO.class, - o -> o.setScene(CodegenSceneEnum.ADMIN.getScene())); - codegenTableMapper.insert(table01); - CodegenTableDO table02 = randomPojo(CodegenTableDO.class, - o -> o.setScene(CodegenSceneEnum.ADMIN.getScene())); - codegenTableMapper.insert(table02); - // 准备傿•° - Long dataSourceConfigId = table01.getDataSourceConfigId(); - - // 调用 - List result = codegenService.getCodegenTableList(dataSourceConfigId); - // 断言 - assertEquals(1, result.size()); - assertPojoEquals(table01, result.get(0)); - } - - @Test - public void testGetCodegenTablePage() { - // mock æ•°æ® - CodegenTableDO tableDO = randomPojo(CodegenTableDO.class, o -> { - o.setTableName("t_yunai"); - o.setTableComment("芋艿"); - o.setClassName("SystemYunai"); - o.setCreateTime(buildTime(2021, 3, 10)); - }).setScene(CodegenSceneEnum.ADMIN.getScene()); - codegenTableMapper.insert(tableDO); - // 测试 tableName ä¸åŒ¹é… - codegenTableMapper.insert(cloneIgnoreId(tableDO, o -> o.setTableName(randomString()))); - // 测试 tableComment ä¸åŒ¹é… - codegenTableMapper.insert(cloneIgnoreId(tableDO, o -> o.setTableComment(randomString()))); - // 测试 className ä¸åŒ¹é… - codegenTableMapper.insert(cloneIgnoreId(tableDO, o -> o.setClassName(randomString()))); - // 测试 createTime ä¸åŒ¹é… - codegenTableMapper.insert(cloneIgnoreId(tableDO, logDO -> logDO.setCreateTime(buildTime(2021, 4, 10)))); - // 准备傿•° - CodegenTablePageReqVO reqVO = new CodegenTablePageReqVO(); - reqVO.setTableName("yunai"); - reqVO.setTableComment("芋"); - reqVO.setClassName("Yunai"); - reqVO.setCreateTime(buildBetweenTime(2021, 3, 1, 2021, 3, 31)); - - // 调用 - PageResult pageResult = codegenService.getCodegenTablePage(reqVO); - // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(tableDO, pageResult.getList().get(0)); - } - - @Test - public void testGetCodegenTable() { - // mock æ•°æ® - CodegenTableDO tableDO = randomPojo(CodegenTableDO.class, o -> o.setScene(CodegenSceneEnum.ADMIN.getScene())); - codegenTableMapper.insert(tableDO); - // 准备傿•° - Long id = tableDO.getId(); - - // 调用 - CodegenTableDO result = codegenService.getCodegenTable(id); - // 断言 - assertPojoEquals(tableDO, result); - } - - @Test - public void testGetCodegenColumnListByTableId() { - // mock æ•°æ® - CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class); - codegenColumnMapper.insert(column01); - CodegenColumnDO column02 = randomPojo(CodegenColumnDO.class); - codegenColumnMapper.insert(column02); - // 准备傿•° - Long tableId = column01.getTableId(); - - // 调用 - List result = codegenService.getCodegenColumnListByTableId(tableId); - // 断言 - assertEquals(1, result.size()); - assertPojoEquals(column01, result.get(0)); - } - - @Test - public void testGenerationCodes_tableNotExists() { - assertServiceException(() -> codegenService.generationCodes(randomLongId()), - CODEGEN_TABLE_NOT_EXISTS); - } - - @Test - public void testGenerationCodes_columnNotExists() { - // mock æ•°æ®ï¼ˆCodegenTableDO) - CodegenTableDO table = randomPojo(CodegenTableDO.class, - o -> o.setScene(CodegenSceneEnum.ADMIN.getScene()) - .setTemplateType(CodegenTemplateTypeEnum.MASTER_NORMAL.getType())); - codegenTableMapper.insert(table); - // 准备傿•° - Long tableId = table.getId(); - - // 调用,并断言 - assertServiceException(() -> codegenService.generationCodes(tableId), - CODEGEN_COLUMN_NOT_EXISTS); - } - - @Test - public void testGenerationCodes_sub_tableNotExists() { - // mock æ•°æ®ï¼ˆCodegenTableDO) - CodegenTableDO table = randomPojo(CodegenTableDO.class, - o -> o.setScene(CodegenSceneEnum.ADMIN.getScene()) - .setTemplateType(CodegenTemplateTypeEnum.MASTER_NORMAL.getType())); - codegenTableMapper.insert(table); - // mock æ•°æ®ï¼ˆCodegenColumnDO) - CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId())); - codegenColumnMapper.insert(column01); - // 准备傿•° - Long tableId = table.getId(); - - // 调用,并断言 - assertServiceException(() -> codegenService.generationCodes(tableId), - CODEGEN_MASTER_GENERATION_FAIL_NO_SUB_TABLE); - } - - @Test - public void testGenerationCodes_sub_columnNotExists() { - // mock æ•°æ®ï¼ˆCodegenTableDO) - CodegenTableDO table = randomPojo(CodegenTableDO.class, - o -> o.setScene(CodegenSceneEnum.ADMIN.getScene()) - .setTemplateType(CodegenTemplateTypeEnum.MASTER_NORMAL.getType())); - codegenTableMapper.insert(table); - // mock æ•°æ®ï¼ˆCodegenColumnDO) - CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId())); - codegenColumnMapper.insert(column01); - // mock æ•°æ®ï¼ˆsub CodegenTableDO) - CodegenTableDO subTable = randomPojo(CodegenTableDO.class, - o -> o.setScene(CodegenSceneEnum.ADMIN.getScene()) - .setTemplateType(CodegenTemplateTypeEnum.SUB.getType()) - .setMasterTableId(table.getId())); - codegenTableMapper.insert(subTable); - // 准备傿•° - Long tableId = table.getId(); - - // 调用,并断言 - assertServiceException(() -> codegenService.generationCodes(tableId), - CODEGEN_SUB_COLUMN_NOT_EXISTS, subTable.getId()); - } - - @Test - public void testGenerationCodes_one_success() { - // mock æ•°æ®ï¼ˆCodegenTableDO) - CodegenTableDO table = randomPojo(CodegenTableDO.class, - o -> o.setScene(CodegenSceneEnum.ADMIN.getScene()) - .setTemplateType(CodegenTemplateTypeEnum.ONE.getType())); - codegenTableMapper.insert(table); - // mock æ•°æ®ï¼ˆCodegenColumnDO) - CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) - .setOrdinalPosition(1)); - codegenColumnMapper.insert(column01); - CodegenColumnDO column02 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) - .setOrdinalPosition(2)); - codegenColumnMapper.insert(column02); - // mock æ‰§è¡Œç”Ÿæˆ - Map codes = MapUtil.of(randomString(), randomString()); - when(codegenEngine.execute(eq(table), argThat(columns -> { - assertEquals(2, columns.size()); - assertEquals(column01, columns.get(0)); - assertEquals(column02, columns.get(1)); - return true; - }), isNull(), isNull())).thenReturn(codes); - // 准备傿•° - Long tableId = table.getId(); - - // 调用 - Map result = codegenService.generationCodes(tableId); - // 断言 - assertSame(codes, result); - } - - @Test - public void testGenerationCodes_master_success() { - // mock æ•°æ®ï¼ˆCodegenTableDO) - CodegenTableDO table = randomPojo(CodegenTableDO.class, - o -> o.setScene(CodegenSceneEnum.ADMIN.getScene()) - .setTemplateType(CodegenTemplateTypeEnum.MASTER_NORMAL.getType())); - codegenTableMapper.insert(table); - // mock æ•°æ®ï¼ˆCodegenColumnDO) - CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) - .setOrdinalPosition(1)); - codegenColumnMapper.insert(column01); - CodegenColumnDO column02 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) - .setOrdinalPosition(2)); - codegenColumnMapper.insert(column02); - // mock æ•°æ®ï¼ˆsub CodegenTableDO) - CodegenTableDO subTable = randomPojo(CodegenTableDO.class, - o -> o.setScene(CodegenSceneEnum.ADMIN.getScene()) - .setTemplateType(CodegenTemplateTypeEnum.SUB.getType()) - .setMasterTableId(table.getId()) - .setSubJoinColumnId(1024L)); - codegenTableMapper.insert(subTable); - // mock æ•°æ®ï¼ˆsub CodegenColumnDO) - CodegenColumnDO subColumn01 = randomPojo(CodegenColumnDO.class, o -> o.setId(1024L).setTableId(subTable.getId())); - codegenColumnMapper.insert(subColumn01); - // mock æ‰§è¡Œç”Ÿæˆ - Map codes = MapUtil.of(randomString(), randomString()); - when(codegenEngine.execute(eq(table), argThat(columns -> { - assertEquals(2, columns.size()); - assertEquals(column01, columns.get(0)); - assertEquals(column02, columns.get(1)); - return true; - }), argThat(tables -> { - assertEquals(1, tables.size()); - assertPojoEquals(subTable, tables.get(0)); - return true; - }), argThat(columns -> { - assertEquals(1, columns.size()); - assertPojoEquals(subColumn01, columns.size()); - return true; - }))).thenReturn(codes); - // 准备傿•° - Long tableId = table.getId(); - - // 调用 - Map result = codegenService.generationCodes(tableId); - // 断言 - assertSame(codes, result); - } - - @Test - public void testGetDatabaseTableList() { - // 准备傿•° - Long dataSourceConfigId = randomLongId(); - String name = randomString(); - String comment = randomString(); - // mock 方法 - TableInfo tableInfo01 = mock(TableInfo.class); - when(tableInfo01.getName()).thenReturn("t_yunai"); - when(tableInfo01.getComment()).thenReturn("芋艿"); - TableInfo tableInfo02 = mock(TableInfo.class); - when(tableInfo02.getName()).thenReturn("t_yunai_02"); - when(tableInfo02.getComment()).thenReturn("芋艿_02"); - when(databaseTableService.getTableList(eq(dataSourceConfigId), eq(name), eq(comment))) - .thenReturn(ListUtil.toList(tableInfo01, tableInfo02)); - // mock æ•°æ® - CodegenTableDO tableDO = randomPojo(CodegenTableDO.class, - o -> o.setScene(CodegenSceneEnum.ADMIN.getScene()) - .setTableName("t_yunai_02") - .setDataSourceConfigId(dataSourceConfigId)); - codegenTableMapper.insert(tableDO); - - // 调用 - List result = codegenService.getDatabaseTableList(dataSourceConfigId, name, comment); - // 断言 - assertEquals(1, result.size()); - assertEquals("t_yunai", result.get(0).getName()); - assertEquals("芋艿", result.get(0).getComment()); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilderTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilderTest.java deleted file mode 100644 index 7a26ea9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilderTest.java +++ /dev/null @@ -1,87 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.codegen.inner; - -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO; -import com.baomidou.mybatisplus.generator.config.po.TableField; -import com.baomidou.mybatisplus.generator.config.po.TableInfo; -import com.baomidou.mybatisplus.generator.config.rules.IColumnType; -import org.apache.ibatis.type.JdbcType; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; - -import java.util.Collections; -import java.util.List; - -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class CodegenBuilderTest extends BaseMockitoUnitTest { - - @InjectMocks - private CodegenBuilder codegenBuilder; - - @Test - public void testBuildTable() { - // 准备傿•° - TableInfo tableInfo = mock(TableInfo.class); - // mock 方法 - when(tableInfo.getName()).thenReturn("system_user"); - when(tableInfo.getComment()).thenReturn("用户"); - - // 调用 - CodegenTableDO table = codegenBuilder.buildTable(tableInfo); - // 断言 - assertEquals("system_user", table.getTableName()); - assertEquals("用户", table.getTableComment()); - assertEquals("system", table.getModuleName()); - assertEquals("user", table.getBusinessName()); - assertEquals("User", table.getClassName()); - assertEquals("用户", table.getClassComment()); - } - - @Test - public void testBuildColumns() { - // 准备傿•° - Long tableId = randomLongId(); - TableField tableField = mock(TableField.class); - List tableFields = Collections.singletonList(tableField); - // mock 方法 - TableField.MetaInfo metaInfo = mock(TableField.MetaInfo.class); - when(tableField.getMetaInfo()).thenReturn(metaInfo); - when(metaInfo.getJdbcType()).thenReturn(JdbcType.BIGINT); - when(tableField.getComment()).thenReturn("ç¼–å·"); - when(tableField.isKeyFlag()).thenReturn(true); - IColumnType columnType = mock(IColumnType.class); - when(tableField.getColumnType()).thenReturn(columnType); - when(columnType.getType()).thenReturn("Long"); - when(tableField.getName()).thenReturn("id2"); - when(tableField.getPropertyName()).thenReturn("id"); - - // 调用 - List columns = codegenBuilder.buildColumns(tableId, tableFields); - // 断言 - assertEquals(1, columns.size()); - CodegenColumnDO column = columns.get(0); - assertEquals(tableId, column.getTableId()); - assertEquals("id2", column.getColumnName()); - assertEquals("BIGINT", column.getDataType()); - assertEquals("ç¼–å·", column.getColumnComment()); - assertFalse(column.getNullable()); - assertTrue(column.getPrimaryKey()); - assertEquals(1, column.getOrdinalPosition()); - assertEquals("Long", column.getJavaType()); - assertEquals("id", column.getJavaField()); - assertNull(column.getDictType()); - assertNotNull(column.getExample()); - assertFalse(column.getCreateOperation()); - assertTrue(column.getUpdateOperation()); - assertFalse(column.getListOperation()); - assertEquals("=", column.getListOperationCondition()); - assertTrue(column.getListOperationResult()); - assertEquals("input", column.getHtmlType()); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineAbstractTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineAbstractTest.java deleted file mode 100644 index 3c7390a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineAbstractTest.java +++ /dev/null @@ -1,138 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.codegen.inner; - -import cn.hutool.core.io.FileUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.io.resource.ResourceUtil; -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.ZipUtil; -import cn.iocoder.yudao.framework.common.util.json.JsonUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO; -import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties; -import org.junit.jupiter.api.BeforeEach; -import org.mockito.InjectMocks; -import org.mockito.Spy; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * {@link CodegenEngine} çš„å•元测试抽象基类 - * - * @author èŠ‹é“æºç  - */ -public abstract class CodegenEngineAbstractTest extends BaseMockitoUnitTest { - - /** - * 测试文件资æºç›®å½• - */ - private String resourcesPath = ""; - - @InjectMocks - protected CodegenEngine codegenEngine; - - @Spy - protected CodegenProperties codegenProperties = new CodegenProperties() - .setBasePackage("cn.iocoder.yudao"); - - @BeforeEach - public void setUp() { - codegenEngine.setJakartaEnable(true); // 强制使用 jakarta,ä¿è¯å•测å¯ä»¥åŸºäºŽ jakarta 断言 - codegenEngine.initGlobalBindingMap(); - // 啿µ‹å¼ºåˆ¶ä½¿ç”¨ - // èŽ·å–æµ‹è¯•文件 resources 路径 - String absolutePath = FileUtil.getAbsolutePath("application-unit-test.yaml"); - // 系统ä¸ä¸€æ ·ç”Ÿæˆçš„æ–‡ä»¶ä¹Ÿæœ‰å·®å¼‚,那就å„自生æˆå„自的 - resourcesPath = absolutePath.split("/target")[0] + "/src/test/resources/codegen/"; - } - - protected static CodegenTableDO getTable(String name) { - String content = ResourceUtil.readUtf8Str("codegen/table/" + name + ".json"); - return JsonUtils.parseObject(content, "table", CodegenTableDO.class); - } - - protected static List getColumnList(String name) { - String content = ResourceUtil.readUtf8Str("codegen/table/" + name + ".json"); - List list = JsonUtils.parseArray(content, "columns", CodegenColumnDO.class); - list.forEach(column -> { - if (column.getNullable() == null) { - column.setNullable(false); - } - if (column.getCreateOperation() == null) { - column.setCreateOperation(false); - } - if (column.getUpdateOperation() == null) { - column.setUpdateOperation(false); - } - if (column.getListOperation() == null) { - column.setListOperation(false); - } - if (column.getListOperationResult() == null) { - column.setListOperationResult(false); - } - }); - return list; - } - - @SuppressWarnings("rawtypes") - protected static void assertResult(Map result, String path) { - String assertContent = ResourceUtil.readUtf8Str("codegen/" + path + "/assert.json"); - List asserts = JsonUtils.parseArray(assertContent, HashMap.class); - assertEquals(asserts.size(), result.size()); - // 校验æ¯ä¸ªæ–‡ä»¶ - asserts.forEach(assertMap -> { - String contentPath = (String) assertMap.get("contentPath"); - String filePath = (String) assertMap.get("filePath"); - String content = ResourceUtil.readUtf8Str("codegen/" + path + "/" + contentPath); - assertEquals(content, result.get(filePath), filePath + ":ä¸åŒ¹é…"); - }); - } - - // ==================== 调试专用 ==================== - - /** - * ã€è°ƒè¯•使用】将生æˆçš„代ç ï¼Œå†™å…¥åˆ°æ–‡ä»¶ - * - * @param result 生æˆçš„ä»£ç  - * @param path 写入文件的路径 - */ - protected void writeFile(Map result, String path) { - // 生æˆåŽ‹ç¼©åŒ… - String[] paths = result.keySet().toArray(new String[0]); - ByteArrayInputStream[] ins = result.values().stream().map(IoUtil::toUtf8Stream).toArray(ByteArrayInputStream[]::new); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ZipUtil.zip(outputStream, paths, ins); - // 写入文件 - FileUtil.writeBytes(outputStream.toByteArray(), path); - } - - /** - * ã€è°ƒè¯•使用】将生æˆçš„结果,写入到文件 - * - * @param result 生æˆçš„ä»£ç  - * @param basePath 写入文件的路径(ç»å¯¹è·¯å¾„) - */ - protected void writeResult(Map result, String basePath) { - // 写入文件内容 - List> asserts = new ArrayList<>(); - result.forEach((filePath, fileContent) -> { - String lastFilePath = StrUtil.subAfter(filePath, '/', true); - String contentPath = StrUtil.subAfter(lastFilePath, '.', true) - + '/' + StrUtil.subBefore(lastFilePath, '.', true); - asserts.add(MapUtil.builder().put("filePath", filePath) - .put("contentPath", contentPath).build()); - FileUtil.writeUtf8String(fileContent, basePath + "/" + contentPath); - }); - // 写入 assert.json 文件 - FileUtil.writeUtf8String(JsonUtils.toJsonPrettyString(asserts), basePath + "/assert.json"); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineVue2Test.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineVue2Test.java deleted file mode 100644 index a251484..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineVue2Test.java +++ /dev/null @@ -1,100 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.codegen.inner; - -import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO; -import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum; -import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -/** - * {@link CodegenEngine} çš„ Vue2 + Element UI å•元测试 - * - * @author èŠ‹é“æºç  - */ -@Disabled -public class CodegenEngineVue2Test extends CodegenEngineAbstractTest { - - @Test - public void testExecute_vue2_one() { - // 准备傿•° - CodegenTableDO table = getTable("student") - .setFrontType(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType()) - .setTemplateType(CodegenTemplateTypeEnum.ONE.getType()); - List columns = getColumnList("student"); - - // 调用 - Map result = codegenEngine.execute(table, columns, null, null); - // ç”Ÿæˆæµ‹è¯•文件 - //writeResult(result, resourcesPath + "/vue2_one"); - // 断言 - assertResult(result, "/vue2_one"); - } - - @Test - public void testExecute_vue2_tree() { - // 准备傿•° - CodegenTableDO table = getTable("category") - .setFrontType(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType()) - .setTemplateType(CodegenTemplateTypeEnum.TREE.getType()); - List columns = getColumnList("category"); - - // 调用 - Map result = codegenEngine.execute(table, columns, null, null); - // ç”Ÿæˆæµ‹è¯•文件 - //writeResult(result, resourcesPath + "/vue2_tree"); - // 断言 - assertResult(result, "/vue2_tree"); -// writeFile(result, "/Users/yunai/test/demo66.zip"); - } - - @Test - public void testExecute_vue2_master_normal() { - testExecute_vue2_master(CodegenTemplateTypeEnum.MASTER_NORMAL, "/vue2_master_normal"); - } - - @Test - public void testExecute_vue2_master_erp() { - testExecute_vue2_master(CodegenTemplateTypeEnum.MASTER_ERP, "/vue2_master_erp"); - } - - @Test - public void testExecute_vue2_master_inner() { - testExecute_vue2_master(CodegenTemplateTypeEnum.MASTER_INNER, "/vue2_master_inner"); - } - - private void testExecute_vue2_master(CodegenTemplateTypeEnum templateType, - String path) { - // 准备傿•° - CodegenTableDO table = getTable("student") - .setFrontType(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType()) - .setTemplateType(templateType.getType()); - List columns = getColumnList("student"); - // 准备傿•°ï¼ˆå­è¡¨ï¼‰ - CodegenTableDO contactTable = getTable("contact") - .setTemplateType(CodegenTemplateTypeEnum.SUB.getType()) - .setFrontType(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType()) - .setSubJoinColumnId(100L).setSubJoinMany(true); - List contactColumns = getColumnList("contact"); - // 准备傿•°ï¼ˆç­ä¸»ä»»ï¼‰ - CodegenTableDO teacherTable = getTable("teacher") - .setTemplateType(CodegenTemplateTypeEnum.SUB.getType()) - .setFrontType(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType()) - .setSubJoinColumnId(200L).setSubJoinMany(false); - List teacherColumns = getColumnList("teacher"); - - // 调用 - Map result = codegenEngine.execute(table, columns, - Arrays.asList(contactTable, teacherTable), Arrays.asList(contactColumns, teacherColumns)); - // ç”Ÿæˆæµ‹è¯•文件 - //writeResult(result, resourcesPath + path); - // 断言 - assertResult(result, path); -// writeFile(result, "/Users/yunai/test/demo11.zip"); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineVue3Test.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineVue3Test.java deleted file mode 100644 index 7695dac..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineVue3Test.java +++ /dev/null @@ -1,100 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.codegen.inner; - -import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO; -import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum; -import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -/** - * {@link CodegenEngine} çš„ Vue2 + Element Plus å•元测试 - * - * @author èŠ‹é“æºç  - */ -@Disabled -public class CodegenEngineVue3Test extends CodegenEngineAbstractTest { - - @Test - public void testExecute_vue3_one() { - // 准备傿•° - CodegenTableDO table = getTable("student") - .setFrontType(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType()) - .setTemplateType(CodegenTemplateTypeEnum.ONE.getType()); - List columns = getColumnList("student"); - - // 调用 - Map result = codegenEngine.execute(table, columns, null, null); - // ç”Ÿæˆæµ‹è¯•文件 - //writeResult(result, resourcesPath + "/vue3_one"); - // 断言 - assertResult(result, "/vue3_one"); - } - - @Test - public void testExecute_vue3_tree() { - // 准备傿•° - CodegenTableDO table = getTable("category") - .setFrontType(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType()) - .setTemplateType(CodegenTemplateTypeEnum.TREE.getType()); - List columns = getColumnList("category"); - - // 调用 - Map result = codegenEngine.execute(table, columns, null, null); - // ç”Ÿæˆæµ‹è¯•文件 - //writeResult(result, resourcesPath + "/vue3_tree"); - // 断言 - assertResult(result, "/vue3_tree"); -// writeFile(result, "/Users/yunai/test/demo66.zip"); - } - - @Test - public void testExecute_vue3_master_normal() { - testExecute_vue3_master(CodegenTemplateTypeEnum.MASTER_NORMAL, "/vue3_master_normal"); - } - - @Test - public void testExecute_vue3_master_erp() { - testExecute_vue3_master(CodegenTemplateTypeEnum.MASTER_ERP, "/vue3_master_erp"); - } - - @Test - public void testExecute_vue3_master_inner() { - testExecute_vue3_master(CodegenTemplateTypeEnum.MASTER_INNER, "/vue3_master_inner"); - } - - private void testExecute_vue3_master(CodegenTemplateTypeEnum templateType, - String path) { - // 准备傿•° - CodegenTableDO table = getTable("student") - .setFrontType(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType()) - .setTemplateType(templateType.getType()); - List columns = getColumnList("student"); - // 准备傿•°ï¼ˆå­è¡¨ï¼‰ - CodegenTableDO contactTable = getTable("contact") - .setTemplateType(CodegenTemplateTypeEnum.SUB.getType()) - .setFrontType(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType()) - .setSubJoinColumnId(100L).setSubJoinMany(true); - List contactColumns = getColumnList("contact"); - // 准备傿•°ï¼ˆç­ä¸»ä»»ï¼‰ - CodegenTableDO teacherTable = getTable("teacher") - .setTemplateType(CodegenTemplateTypeEnum.SUB.getType()) - .setFrontType(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType()) - .setSubJoinColumnId(200L).setSubJoinMany(false); - List teacherColumns = getColumnList("teacher"); - - // 调用 - Map result = codegenEngine.execute(table, columns, - Arrays.asList(contactTable, teacherTable), Arrays.asList(contactColumns, teacherColumns)); - // ç”Ÿæˆæµ‹è¯•文件 - //writeResult(result, resourcesPath + path); - // 断言 - assertResult(result, path); - // writeFile(result, "/Users/yunai/test/demo11.zip"); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImplTest.java deleted file mode 100644 index 8459abb..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImplTest.java +++ /dev/null @@ -1,219 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.config; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.framework.test.core.util.RandomUtils; -import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigSaveReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; -import cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigMapper; -import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.*; - -@Import(ConfigServiceImpl.class) -public class ConfigServiceImplTest extends BaseDbUnitTest { - - @Resource - private ConfigServiceImpl configService; - - @Resource - private ConfigMapper configMapper; - - @Test - public void testCreateConfig_success() { - // 准备傿•° - ConfigSaveReqVO reqVO = randomPojo(ConfigSaveReqVO.class) - .setId(null); // 防止 id 被赋值,导致唯一性校验失败 - - // 调用 - Long configId = configService.createConfig(reqVO); - // 断言 - assertNotNull(configId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - ConfigDO config = configMapper.selectById(configId); - assertPojoEquals(reqVO, config, "id"); - assertEquals(ConfigTypeEnum.CUSTOM.getType(), config.getType()); - } - - @Test - public void testUpdateConfig_success() { - // mock æ•°æ® - ConfigDO dbConfig = randomConfigDO(); - configMapper.insert(dbConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - ConfigSaveReqVO reqVO = randomPojo(ConfigSaveReqVO.class, o -> { - o.setId(dbConfig.getId()); // 设置更新的 ID - }); - - // 调用 - configService.updateConfig(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - ConfigDO config = configMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, config); - } - - @Test - public void testDeleteConfig_success() { - // mock æ•°æ® - ConfigDO dbConfig = randomConfigDO(o -> { - o.setType(ConfigTypeEnum.CUSTOM.getType()); // åªèƒ½åˆ é™¤ CUSTOM 类型 - }); - configMapper.insert(dbConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbConfig.getId(); - - // 调用 - configService.deleteConfig(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(configMapper.selectById(id)); - } - - @Test - public void testDeleteConfig_canNotDeleteSystemType() { - // mock æ•°æ® - ConfigDO dbConfig = randomConfigDO(o -> { - o.setType(ConfigTypeEnum.SYSTEM.getType()); // SYSTEM ä¸å…许删除 - }); - configMapper.insert(dbConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbConfig.getId(); - - // 调用, 并断言异常 - assertServiceException(() -> configService.deleteConfig(id), CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); - } - - @Test - public void testValidateConfigExists_success() { - // mock æ•°æ® - ConfigDO dbConfigDO = randomConfigDO(); - configMapper.insert(dbConfigDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用æˆåŠŸ - configService.validateConfigExists(dbConfigDO.getId()); - } - - @Test - public void testValidateConfigExist_notExists() { - assertServiceException(() -> configService.validateConfigExists(randomLongId()), CONFIG_NOT_EXISTS); - } - - @Test - public void testValidateConfigKeyUnique_success() { - // 调用,æˆåŠŸ - configService.validateConfigKeyUnique(randomLongId(), randomString()); - } - - @Test - public void testValidateConfigKeyUnique_keyDuplicateForCreate() { - // 准备傿•° - String key = randomString(); - // mock æ•°æ® - configMapper.insert(randomConfigDO(o -> o.setConfigKey(key))); - - // 调用,校验异常 - assertServiceException(() -> configService.validateConfigKeyUnique(null, key), - CONFIG_KEY_DUPLICATE); - } - - @Test - public void testValidateConfigKeyUnique_keyDuplicateForUpdate() { - // 准备傿•° - Long id = randomLongId(); - String key = randomString(); - // mock æ•°æ® - configMapper.insert(randomConfigDO(o -> o.setConfigKey(key))); - - // 调用,校验异常 - assertServiceException(() -> configService.validateConfigKeyUnique(id, key), - CONFIG_KEY_DUPLICATE); - } - - @Test - public void testGetConfigPage() { - // mock æ•°æ® - ConfigDO dbConfig = randomConfigDO(o -> { // 等会查询到 - o.setName("芋艿"); - o.setConfigKey("yunai"); - o.setType(ConfigTypeEnum.SYSTEM.getType()); - o.setCreateTime(buildTime(2021, 2, 1)); - }); - configMapper.insert(dbConfig); - // 测试 name ä¸åŒ¹é… - configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setName("土豆"))); - // 测试 key ä¸åŒ¹é… - configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setConfigKey("tudou"))); - // 测试 type ä¸åŒ¹é… - configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setType(ConfigTypeEnum.CUSTOM.getType()))); - // 测试 createTime ä¸åŒ¹é… - configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1)))); - // 准备傿•° - ConfigPageReqVO reqVO = new ConfigPageReqVO(); - reqVO.setName("艿"); - reqVO.setKey("nai"); - reqVO.setType(ConfigTypeEnum.SYSTEM.getType()); - reqVO.setCreateTime(buildBetweenTime(2021, 1, 15, 2021, 2, 15)); - - // 调用 - PageResult pageResult = configService.getConfigPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbConfig, pageResult.getList().get(0)); - } - - @Test - public void testGetConfig() { - // mock æ•°æ® - ConfigDO dbConfig = randomConfigDO(); - configMapper.insert(dbConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbConfig.getId(); - - // 调用 - ConfigDO config = configService.getConfig(id); - // 断言 - assertNotNull(config); - assertPojoEquals(dbConfig, config); - } - - @Test - public void testGetConfigByKey() { - // mock æ•°æ® - ConfigDO dbConfig = randomConfigDO(); - configMapper.insert(dbConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - String key = dbConfig.getConfigKey(); - - // 调用 - ConfigDO config = configService.getConfigByKey(key); - // 断言 - assertNotNull(config); - assertPojoEquals(dbConfig, config); - } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static ConfigDO randomConfigDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setType(randomEle(ConfigTypeEnum.values()).getType()); // ä¿è¯ key 的范围 - }; - return RandomUtils.randomPojo(ConfigDO.class, ArrayUtils.append(consumer, consumers)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/db/DataSourceConfigServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/db/DataSourceConfigServiceImplTest.java deleted file mode 100644 index 4be9e28..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/db/DataSourceConfigServiceImplTest.java +++ /dev/null @@ -1,208 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.db; - -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.ReflectUtil; -import cn.hutool.crypto.symmetric.AES; -import cn.iocoder.yudao.framework.mybatis.core.type.EncryptTypeHandler; -import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.infra.controller.admin.db.vo.DataSourceConfigSaveReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO; -import cn.iocoder.yudao.module.infra.dal.mysql.db.DataSourceConfigMapper; -import com.baomidou.dynamic.datasource.creator.DataSourceProperty; -import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; -import org.mockito.stubbing.Answer; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.List; - -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.DATA_SOURCE_CONFIG_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mockStatic; -import static org.mockito.Mockito.when; - -/** - * {@link DataSourceConfigServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(DataSourceConfigServiceImpl.class) -public class DataSourceConfigServiceImplTest extends BaseDbUnitTest { - - @Resource - private DataSourceConfigServiceImpl dataSourceConfigService; - - @Resource - private DataSourceConfigMapper dataSourceConfigMapper; - - @MockBean - private AES aes; - - @MockBean - private DynamicDataSourceProperties dynamicDataSourceProperties; - - @BeforeEach - public void setUp() { - // mock 一个空实现的 StringEncryptor,é¿å… EncryptTypeHandler 报错 - ReflectUtil.setFieldValue(EncryptTypeHandler.class, "aes", aes); - when(aes.encryptBase64(anyString())).then((Answer) invocation -> invocation.getArgument(0)); - when(aes.decryptStr(anyString())).then((Answer) invocation -> invocation.getArgument(0)); - - // mock DynamicDataSourceProperties - when(dynamicDataSourceProperties.getPrimary()).thenReturn("primary"); - DataSourceProperty dataSourceProperty = new DataSourceProperty(); - dataSourceProperty.setUrl("http://localhost:3306"); - dataSourceProperty.setUsername("yunai"); - dataSourceProperty.setPassword("tudou"); - when(dynamicDataSourceProperties.getDatasource()).thenReturn(MapUtil.of("primary", dataSourceProperty)); - } - - @Test - public void testCreateDataSourceConfig_success() { - try (MockedStatic databaseUtilsMock = mockStatic(JdbcUtils.class)) { - // 准备傿•° - DataSourceConfigSaveReqVO reqVO = randomPojo(DataSourceConfigSaveReqVO.class) - .setId(null); // é¿å… id 被设置 - // mock 方法 - databaseUtilsMock.when(() -> JdbcUtils.isConnectionOK(eq(reqVO.getUrl()), - eq(reqVO.getUsername()), eq(reqVO.getPassword()))).thenReturn(true); - - // 调用 - Long dataSourceConfigId = dataSourceConfigService.createDataSourceConfig(reqVO); - // 断言 - assertNotNull(dataSourceConfigId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - DataSourceConfigDO dataSourceConfig = dataSourceConfigMapper.selectById(dataSourceConfigId); - assertPojoEquals(reqVO, dataSourceConfig, "id"); - } - } - - @Test - public void testUpdateDataSourceConfig_success() { - try (MockedStatic databaseUtilsMock = mockStatic(JdbcUtils.class)) { - // mock æ•°æ® - DataSourceConfigDO dbDataSourceConfig = randomPojo(DataSourceConfigDO.class); - dataSourceConfigMapper.insert(dbDataSourceConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - DataSourceConfigSaveReqVO reqVO = randomPojo(DataSourceConfigSaveReqVO.class, o -> { - o.setId(dbDataSourceConfig.getId()); // 设置更新的 ID - }); - // mock 方法 - databaseUtilsMock.when(() -> JdbcUtils.isConnectionOK(eq(reqVO.getUrl()), - eq(reqVO.getUsername()), eq(reqVO.getPassword()))).thenReturn(true); - - // 调用 - dataSourceConfigService.updateDataSourceConfig(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - DataSourceConfigDO dataSourceConfig = dataSourceConfigMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, dataSourceConfig); - } - } - - @Test - public void testUpdateDataSourceConfig_notExists() { - // 准备傿•° - DataSourceConfigSaveReqVO reqVO = randomPojo(DataSourceConfigSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> dataSourceConfigService.updateDataSourceConfig(reqVO), DATA_SOURCE_CONFIG_NOT_EXISTS); - } - - @Test - public void testDeleteDataSourceConfig_success() { - // mock æ•°æ® - DataSourceConfigDO dbDataSourceConfig = randomPojo(DataSourceConfigDO.class); - dataSourceConfigMapper.insert(dbDataSourceConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbDataSourceConfig.getId(); - - // 调用 - dataSourceConfigService.deleteDataSourceConfig(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(dataSourceConfigMapper.selectById(id)); - } - - @Test - public void testDeleteDataSourceConfig_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> dataSourceConfigService.deleteDataSourceConfig(id), DATA_SOURCE_CONFIG_NOT_EXISTS); - } - - @Test // 测试使用 password 查询,å¯ä»¥æŸ¥è¯¢åˆ°æ•°æ® - public void testSelectPassword() { - // mock æ•°æ® - DataSourceConfigDO dbDataSourceConfig = randomPojo(DataSourceConfigDO.class); - dataSourceConfigMapper.insert(dbDataSourceConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用 - DataSourceConfigDO result = dataSourceConfigMapper.selectOne(DataSourceConfigDO::getPassword, - EncryptTypeHandler.encrypt(dbDataSourceConfig.getPassword())); - assertPojoEquals(dbDataSourceConfig, result); - } - - @Test - public void testGetDataSourceConfig_master() { - // 准备傿•° - Long id = 0L; - // mock 方法 - - // 调用 - DataSourceConfigDO dataSourceConfig = dataSourceConfigService.getDataSourceConfig(id); - // 断言 - assertEquals(id, dataSourceConfig.getId()); - assertEquals("primary", dataSourceConfig.getName()); - assertEquals("http://localhost:3306", dataSourceConfig.getUrl()); - assertEquals("yunai", dataSourceConfig.getUsername()); - assertEquals("tudou", dataSourceConfig.getPassword()); - } - - @Test - public void testGetDataSourceConfig_normal() { - // mock æ•°æ® - DataSourceConfigDO dbDataSourceConfig = randomPojo(DataSourceConfigDO.class); - dataSourceConfigMapper.insert(dbDataSourceConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbDataSourceConfig.getId(); - - // 调用 - DataSourceConfigDO dataSourceConfig = dataSourceConfigService.getDataSourceConfig(id); - // 断言 - assertPojoEquals(dbDataSourceConfig, dataSourceConfig); - } - - @Test - public void testGetDataSourceConfigList() { - // mock æ•°æ® - DataSourceConfigDO dbDataSourceConfig = randomPojo(DataSourceConfigDO.class); - dataSourceConfigMapper.insert(dbDataSourceConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - - // 调用 - List dataSourceConfigList = dataSourceConfigService.getDataSourceConfigList(); - // 断言 - assertEquals(2, dataSourceConfigList.size()); - // master - assertEquals(0L, dataSourceConfigList.get(0).getId()); - assertEquals("primary", dataSourceConfigList.get(0).getName()); - assertEquals("http://localhost:3306", dataSourceConfigList.get(0).getUrl()); - assertEquals("yunai", dataSourceConfigList.get(0).getUsername()); - assertEquals("tudou", dataSourceConfigList.get(0).getPassword()); - // normal - assertPojoEquals(dbDataSourceConfig, dataSourceConfigList.get(1)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImplTest.java deleted file mode 100644 index e7a5072..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImplTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.db; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO; -import com.baomidou.mybatisplus.generator.config.po.TableField; -import com.baomidou.mybatisplus.generator.config.po.TableInfo; -import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; -import org.apache.ibatis.type.JdbcType; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.List; - -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -@Import(DatabaseTableServiceImpl.class) -public class DatabaseTableServiceImplTest extends BaseDbUnitTest { - - @Resource - private DatabaseTableServiceImpl databaseTableService; - - @MockBean - private DataSourceConfigService dataSourceConfigService; - - @Test - public void testGetTableList() { - // 准备傿•° - Long dataSourceConfigId = randomLongId(); - // mock 方法 - DataSourceConfigDO dataSourceConfig = new DataSourceConfigDO().setUsername("sa").setPassword("") - .setUrl("jdbc:h2:mem:testdb"); - when(dataSourceConfigService.getDataSourceConfig(eq(dataSourceConfigId))) - .thenReturn(dataSourceConfig); - - // 调用 - List tables = databaseTableService.getTableList(dataSourceConfigId, - "config", "傿•°"); - // 断言 - assertEquals(1, tables.size()); - assertTableInfo(tables.get(0)); - } - - @Test - public void testGetTable() { - // 准备傿•° - Long dataSourceConfigId = randomLongId(); - // mock 方法 - DataSourceConfigDO dataSourceConfig = new DataSourceConfigDO().setUsername("sa").setPassword("") - .setUrl("jdbc:h2:mem:testdb"); - when(dataSourceConfigService.getDataSourceConfig(eq(dataSourceConfigId))) - .thenReturn(dataSourceConfig); - - // 调用 - TableInfo tableInfo = databaseTableService.getTable(dataSourceConfigId, "infra_config"); - // 断言 - assertTableInfo(tableInfo); - } - - private void assertTableInfo(TableInfo tableInfo) { - assertEquals("infra_config", tableInfo.getName()); - assertEquals("傿•°é…置表", tableInfo.getComment()); - assertEquals(13, tableInfo.getFields().size()); - // id 字段 - TableField idField = tableInfo.getFields().get(0); - assertEquals("id", idField.getName()); - assertEquals(JdbcType.BIGINT, idField.getMetaInfo().getJdbcType()); - assertEquals("ç¼–å·", idField.getComment()); - assertFalse(idField.getMetaInfo().isNullable()); - assertTrue(idField.isKeyFlag()); - assertTrue(idField.isKeyIdentityFlag()); - assertEquals(DbColumnType.LONG, idField.getColumnType()); - assertEquals("id", idField.getPropertyName()); - // name 字段 - TableField nameField = tableInfo.getFields().get(3); - assertEquals("name", nameField.getName()); - assertEquals(JdbcType.VARCHAR, nameField.getMetaInfo().getJdbcType()); - assertEquals("åå­—", nameField.getComment()); - assertFalse(nameField.getMetaInfo().isNullable()); - assertFalse(nameField.isKeyFlag()); - assertFalse(nameField.isKeyIdentityFlag()); - assertEquals(DbColumnType.STRING, nameField.getColumnType()); - assertEquals("name", nameField.getPropertyName()); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImplTest.java deleted file mode 100644 index cedb875..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImplTest.java +++ /dev/null @@ -1,281 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.file; - -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.LocalDateTimeUtil; -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient; -import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientConfig; -import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientFactory; -import cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClient; -import cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClientConfig; -import cn.iocoder.yudao.module.infra.framework.file.core.enums.FileStorageEnum; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO; -import cn.iocoder.yudao.module.infra.dal.mysql.file.FileConfigMapper; -import lombok.Data; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import jakarta.validation.Validator; -import java.io.Serializable; -import java.time.LocalDateTime; -import java.util.Map; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_CONFIG_DELETE_FAIL_MASTER; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_CONFIG_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - -/** - * {@link FileConfigServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(FileConfigServiceImpl.class) -public class FileConfigServiceImplTest extends BaseDbUnitTest { - - @Resource - private FileConfigServiceImpl fileConfigService; - - @Resource - private FileConfigMapper fileConfigMapper; - - @MockBean - private Validator validator; - @MockBean - private FileClientFactory fileClientFactory; - - @Test - public void testCreateFileConfig_success() { - // 准备傿•° - Map config = MapUtil.builder().put("basePath", "/yunai") - .put("domain", "https://www.iocoder.cn").build(); - FileConfigSaveReqVO reqVO = randomPojo(FileConfigSaveReqVO.class, - o -> o.setStorage(FileStorageEnum.LOCAL.getStorage()).setConfig(config)) - .setId(null); // é¿å… id 被赋值 - - // 调用 - Long fileConfigId = fileConfigService.createFileConfig(reqVO); - // 断言 - assertNotNull(fileConfigId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - FileConfigDO fileConfig = fileConfigMapper.selectById(fileConfigId); - assertPojoEquals(reqVO, fileConfig, "id", "config"); - assertFalse(fileConfig.getMaster()); - assertEquals("/yunai", ((LocalFileClientConfig) fileConfig.getConfig()).getBasePath()); - assertEquals("https://www.iocoder.cn", ((LocalFileClientConfig) fileConfig.getConfig()).getDomain()); - // éªŒè¯ cache - assertNull(fileConfigService.getClientCache().getIfPresent(fileConfigId)); - } - - @Test - public void testUpdateFileConfig_success() { - // mock æ•°æ® - FileConfigDO dbFileConfig = randomPojo(FileConfigDO.class, o -> o.setStorage(FileStorageEnum.LOCAL.getStorage()) - .setConfig(new LocalFileClientConfig().setBasePath("/yunai").setDomain("https://www.iocoder.cn"))); - fileConfigMapper.insert(dbFileConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - FileConfigSaveReqVO reqVO = randomPojo(FileConfigSaveReqVO.class, o -> { - o.setId(dbFileConfig.getId()); // 设置更新的 ID - o.setStorage(FileStorageEnum.LOCAL.getStorage()); - Map config = MapUtil.builder().put("basePath", "/yunai2") - .put("domain", "https://doc.iocoder.cn").build(); - o.setConfig(config); - }); - - // 调用 - fileConfigService.updateFileConfig(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - FileConfigDO fileConfig = fileConfigMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, fileConfig, "config"); - assertEquals("/yunai2", ((LocalFileClientConfig) fileConfig.getConfig()).getBasePath()); - assertEquals("https://doc.iocoder.cn", ((LocalFileClientConfig) fileConfig.getConfig()).getDomain()); - // éªŒè¯ cache - assertNull(fileConfigService.getClientCache().getIfPresent(fileConfig.getId())); - } - - @Test - public void testUpdateFileConfig_notExists() { - // 准备傿•° - FileConfigSaveReqVO reqVO = randomPojo(FileConfigSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> fileConfigService.updateFileConfig(reqVO), FILE_CONFIG_NOT_EXISTS); - } - - @Test - public void testUpdateFileConfigMaster_success() { - // mock æ•°æ® - FileConfigDO dbFileConfig = randomFileConfigDO().setMaster(false); - fileConfigMapper.insert(dbFileConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - FileConfigDO masterFileConfig = randomFileConfigDO().setMaster(true); - fileConfigMapper.insert(masterFileConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用 - fileConfigService.updateFileConfigMaster(dbFileConfig.getId()); - // æ–­è¨€æ•°æ® - assertTrue(fileConfigMapper.selectById(dbFileConfig.getId()).getMaster()); - assertFalse(fileConfigMapper.selectById(masterFileConfig.getId()).getMaster()); - // éªŒè¯ cache - assertNull(fileConfigService.getClientCache().getIfPresent(0L)); - } - - @Test - public void testUpdateFileConfigMaster_notExists() { - // 调用, 并断言异常 - assertServiceException(() -> fileConfigService.updateFileConfigMaster(randomLongId()), FILE_CONFIG_NOT_EXISTS); - } - - @Test - public void testDeleteFileConfig_success() { - // mock æ•°æ® - FileConfigDO dbFileConfig = randomFileConfigDO().setMaster(false); - fileConfigMapper.insert(dbFileConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbFileConfig.getId(); - - // 调用 - fileConfigService.deleteFileConfig(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(fileConfigMapper.selectById(id)); - // éªŒè¯ cache - assertNull(fileConfigService.getClientCache().getIfPresent(id)); - } - - @Test - public void testDeleteFileConfig_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> fileConfigService.deleteFileConfig(id), FILE_CONFIG_NOT_EXISTS); - } - - @Test - public void testDeleteFileConfig_master() { - // mock æ•°æ® - FileConfigDO dbFileConfig = randomFileConfigDO().setMaster(true); - fileConfigMapper.insert(dbFileConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbFileConfig.getId(); - - // 调用, 并断言异常 - assertServiceException(() -> fileConfigService.deleteFileConfig(id), FILE_CONFIG_DELETE_FAIL_MASTER); - } - - @Test - public void testGetFileConfigPage() { - // mock æ•°æ® - FileConfigDO dbFileConfig = randomFileConfigDO().setName("èŠ‹é“æºç ") - .setStorage(FileStorageEnum.LOCAL.getStorage()); - dbFileConfig.setCreateTime(LocalDateTimeUtil.parse("2020-01-23", DatePattern.NORM_DATE_PATTERN));// 等会查询到 - fileConfigMapper.insert(dbFileConfig); - // 测试 name ä¸åŒ¹é… - fileConfigMapper.insert(cloneIgnoreId(dbFileConfig, o -> o.setName("æºç "))); - // 测试 storage ä¸åŒ¹é… - fileConfigMapper.insert(cloneIgnoreId(dbFileConfig, o -> o.setStorage(FileStorageEnum.DB.getStorage()))); - // 测试 createTime ä¸åŒ¹é… - fileConfigMapper.insert(cloneIgnoreId(dbFileConfig, o -> o.setCreateTime(LocalDateTimeUtil.parse("2020-11-23", DatePattern.NORM_DATE_PATTERN)))); - // 准备傿•° - FileConfigPageReqVO reqVO = new FileConfigPageReqVO(); - reqVO.setName("芋é“"); - reqVO.setStorage(FileStorageEnum.LOCAL.getStorage()); - reqVO.setCreateTime((new LocalDateTime[]{buildTime(2020, 1, 1), - buildTime(2020, 1, 24)})); - - // 调用 - PageResult pageResult = fileConfigService.getFileConfigPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbFileConfig, pageResult.getList().get(0)); - } - - @Test - public void testFileConfig() throws Exception { - // mock æ•°æ® - FileConfigDO dbFileConfig = randomFileConfigDO().setMaster(false); - fileConfigMapper.insert(dbFileConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbFileConfig.getId(); - // mock 获得 Client - FileClient fileClient = mock(FileClient.class); - when(fileClientFactory.getFileClient(eq(id))).thenReturn(fileClient); - when(fileClient.upload(any(), any(), any())).thenReturn("https://www.iocoder.cn"); - - // 调用,并断言 - assertEquals("https://www.iocoder.cn", fileConfigService.testFileConfig(id)); - } - - @Test - public void testGetFileConfig() { - // mock æ•°æ® - FileConfigDO dbFileConfig = randomFileConfigDO().setMaster(false); - fileConfigMapper.insert(dbFileConfig);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbFileConfig.getId(); - - // 调用,并断言 - assertPojoEquals(dbFileConfig, fileConfigService.getFileConfig(id)); - } - - @Test - public void testGetFileClient() { - // mock æ•°æ® - FileConfigDO fileConfig = randomFileConfigDO().setMaster(false); - fileConfigMapper.insert(fileConfig); - // 准备傿•° - Long id = fileConfig.getId(); - // mock 获得 Client - FileClient fileClient = new LocalFileClient(id, new LocalFileClientConfig()); - when(fileClientFactory.getFileClient(eq(id))).thenReturn(fileClient); - - // 调用,并断言 - assertSame(fileClient, fileConfigService.getFileClient(id)); - // 断言缓存 - verify(fileClientFactory).createOrUpdateFileClient(eq(id), eq(fileConfig.getStorage()), - eq(fileConfig.getConfig())); - } - - @Test - public void testGetMasterFileClient() { - // mock æ•°æ® - FileConfigDO fileConfig = randomFileConfigDO().setMaster(true); - fileConfigMapper.insert(fileConfig); - // 准备傿•° - Long id = fileConfig.getId(); - // mock 获得 Client - FileClient fileClient = new LocalFileClient(id, new LocalFileClientConfig()); - when(fileClientFactory.getFileClient(eq(fileConfig.getId()))).thenReturn(fileClient); - - // 调用,并断言 - assertSame(fileClient, fileConfigService.getMasterFileClient()); - // 断言缓存 - verify(fileClientFactory).createOrUpdateFileClient(eq(fileConfig.getId()), eq(fileConfig.getStorage()), - eq(fileConfig.getConfig())); - } - - private FileConfigDO randomFileConfigDO() { - return randomPojo(FileConfigDO.class).setStorage(randomEle(FileStorageEnum.values()).getStorage()) - .setConfig(new EmptyFileClientConfig()); - } - - @Data - public static class EmptyFileClientConfig implements FileClientConfig, Serializable { - - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImplTest.java deleted file mode 100644 index c109b25..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImplTest.java +++ /dev/null @@ -1,309 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.file; - -import cn.hutool.core.io.resource.ResourceUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.framework.test.core.util.AssertUtils; -import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; -import cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper; -import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient; -import jakarta.annotation.Resource; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import java.time.LocalDateTime; -import java.util.concurrent.atomic.AtomicReference; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.same; -import static org.mockito.Mockito.*; - -@Import({FileServiceImpl.class}) -public class FileServiceImplTest extends BaseDbUnitTest { - - @Resource - private FileServiceImpl fileService; - - @Resource - private FileMapper fileMapper; - - @MockBean - private FileConfigService fileConfigService; - - @BeforeEach - public void setUp() { - FileServiceImpl.PATH_PREFIX_DATE_ENABLE = true; - FileServiceImpl.PATH_SUFFIX_TIMESTAMP_ENABLE = true; - } - - @Test - public void testGetFilePage() { - // mock æ•°æ® - FileDO dbFile = randomPojo(FileDO.class, o -> { // 等会查询到 - o.setPath("yunai"); - o.setType("image/jpg"); - o.setCreateTime(buildTime(2021, 1, 15)); - }); - fileMapper.insert(dbFile); - // 测试 path ä¸åŒ¹é… - fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> o.setPath("tudou"))); - // 测试 type ä¸åŒ¹é… - fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> { - o.setType("image/png"); - })); - // 测试 createTime ä¸åŒ¹é… - fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> { - o.setCreateTime(buildTime(2020, 1, 15)); - })); - // 准备傿•° - FilePageReqVO reqVO = new FilePageReqVO(); - reqVO.setPath("yunai"); - reqVO.setType("jp"); - reqVO.setCreateTime((new LocalDateTime[]{buildTime(2021, 1, 10), buildTime(2021, 1, 20)})); - - // 调用 - PageResult pageResult = fileService.getFilePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - AssertUtils.assertPojoEquals(dbFile, pageResult.getList().get(0)); - } - - /** - * contentã€nameã€directoryã€type 都éžç©º - */ - @Test - public void testCreateFile_success_01() throws Exception { - // 准备傿•° - byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); - String name = "啿µ‹æ–‡ä»¶å"; - String directory = randomString(); - String type = "image/jpeg"; - // mock Master 文件客户端 - FileClient client = mock(FileClient.class); - when(fileConfigService.getMasterFileClient()).thenReturn(client); - String url = randomString(); - AtomicReference pathRef = new AtomicReference<>(); - when(client.upload(same(content), argThat(path -> { - assertTrue(path.matches(directory + "/\\d{8}/" + name + "_\\d+.jpg")); - pathRef.set(path); - return true; - }), eq(type))).thenReturn(url); - when(client.getId()).thenReturn(10L); - // 调用 - String result = fileService.createFile(content, name, directory, type); - // 断言 - assertEquals(result, url); - // æ ¡éªŒæ•°æ® - FileDO file = fileMapper.selectOne(FileDO::getUrl, url); - assertEquals(10L, file.getConfigId()); - assertEquals(pathRef.get(), file.getPath()); - assertEquals(url, file.getUrl()); - assertEquals(type, file.getType()); - assertEquals(content.length, file.getSize()); - } - - /** - * content éžç©ºï¼Œå…¶å®ƒéƒ½ç©º - */ - @Test - public void testCreateFile_success_02() throws Exception { - // 准备傿•° - byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); - // mock Master 文件客户端 - String type = "image/jpeg"; - FileClient client = mock(FileClient.class); - when(fileConfigService.getMasterFileClient()).thenReturn(client); - String url = randomString(); - AtomicReference pathRef = new AtomicReference<>(); - when(client.upload(same(content), argThat(path -> { - assertTrue(path.matches("\\d{8}/6318848e882d8a7e7e82789d87608f684ee52d41966bfc8cad3ce15aad2b970e_\\d+\\.jpg")); - pathRef.set(path); - return true; - }), eq(type))).thenReturn(url); - when(client.getId()).thenReturn(10L); - // 调用 - String result = fileService.createFile(content, null, null, null); - // 断言 - assertEquals(result, url); - // æ ¡éªŒæ•°æ® - FileDO file = fileMapper.selectOne(FileDO::getUrl, url); - assertEquals(10L, file.getConfigId()); - assertEquals(pathRef.get(), file.getPath()); - assertEquals(url, file.getUrl()); - assertEquals(type, file.getType()); - assertEquals(content.length, file.getSize()); - } - - @Test - public void testDeleteFile_success() throws Exception { - // mock æ•°æ® - FileDO dbFile = randomPojo(FileDO.class, o -> o.setConfigId(10L).setPath("tudou.jpg")); - fileMapper.insert(dbFile);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // mock Master 文件客户端 - FileClient client = mock(FileClient.class); - when(fileConfigService.getFileClient(eq(10L))).thenReturn(client); - // 准备傿•° - Long id = dbFile.getId(); - - // 调用 - fileService.deleteFile(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(fileMapper.selectById(id)); - // 校验调用 - verify(client).delete(eq("tudou.jpg")); - } - - @Test - public void testDeleteFile_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> fileService.deleteFile(id), FILE_NOT_EXISTS); - } - - @Test - public void testGetFileContent() throws Exception { - // 准备傿•° - Long configId = 10L; - String path = "tudou.jpg"; - // mock 方法 - FileClient client = mock(FileClient.class); - when(fileConfigService.getFileClient(eq(10L))).thenReturn(client); - byte[] content = new byte[]{}; - when(client.getContent(eq("tudou.jpg"))).thenReturn(content); - - // 调用 - byte[] result = fileService.getFileContent(configId, path); - // 断言 - assertSame(result, content); - } - - @Test - public void testGenerateUploadPath_AllEnabled() { - // 准备傿•° - String name = "test.jpg"; - String directory = "avatar"; - FileServiceImpl.PATH_PREFIX_DATE_ENABLE = true; - FileServiceImpl.PATH_SUFFIX_TIMESTAMP_ENABLE = true; - - // 调用 - String path = fileService.generateUploadPath(name, directory); - - // 断言 - // æ ¼å¼ä¸ºï¼šavatar/yyyyMMdd/test_timestamp.jpg - assertTrue(path.startsWith(directory + "/")); - // åŒ…å«æ—¥æœŸæ ¼å¼ï¼š8 使•°å­—,如 20240517 - assertTrue(path.matches(directory + "/\\d{8}/test_\\d+\\.jpg")); - } - - @Test - public void testGenerateUploadPath_PrefixEnabled_SuffixDisabled() { - // 准备傿•° - String name = "test.jpg"; - String directory = "avatar"; - FileServiceImpl.PATH_PREFIX_DATE_ENABLE = true; - FileServiceImpl.PATH_SUFFIX_TIMESTAMP_ENABLE = false; - - // 调用 - String path = fileService.generateUploadPath(name, directory); - - // 断言 - // æ ¼å¼ä¸ºï¼šavatar/yyyyMMdd/test.jpg - assertTrue(path.startsWith(directory + "/")); - // åŒ…å«æ—¥æœŸæ ¼å¼ï¼š8 使•°å­—,如 20240517 - assertTrue(path.matches(directory + "/\\d{8}/test\\.jpg")); - } - - @Test - public void testGenerateUploadPath_PrefixDisabled_SuffixEnabled() { - // 准备傿•° - String name = "test.jpg"; - String directory = "avatar"; - FileServiceImpl.PATH_PREFIX_DATE_ENABLE = false; - FileServiceImpl.PATH_SUFFIX_TIMESTAMP_ENABLE = true; - - // 调用 - String path = fileService.generateUploadPath(name, directory); - - // 断言 - // æ ¼å¼ä¸ºï¼šavatar/test_timestamp.jpg - assertTrue(path.startsWith(directory + "/")); - assertTrue(path.matches(directory + "/test_\\d+\\.jpg")); - } - - @Test - public void testGenerateUploadPath_AllDisabled() { - // 准备傿•° - String name = "test.jpg"; - String directory = "avatar"; - FileServiceImpl.PATH_PREFIX_DATE_ENABLE = false; - FileServiceImpl.PATH_SUFFIX_TIMESTAMP_ENABLE = false; - - // 调用 - String path = fileService.generateUploadPath(name, directory); - - // 断言 - // æ ¼å¼ä¸ºï¼šavatar/test.jpg - assertEquals(directory + "/" + name, path); - } - - @Test - public void testGenerateUploadPath_NoExtension() { - // 准备傿•° - String name = "test"; - String directory = "avatar"; - FileServiceImpl.PATH_PREFIX_DATE_ENABLE = true; - FileServiceImpl.PATH_SUFFIX_TIMESTAMP_ENABLE = true; - - // 调用 - String path = fileService.generateUploadPath(name, directory); - - // 断言 - // æ ¼å¼ä¸ºï¼šavatar/yyyyMMdd/test_timestamp - assertTrue(path.startsWith(directory + "/")); - assertTrue(path.matches(directory + "/\\d{8}/test_\\d+")); - } - - @Test - public void testGenerateUploadPath_DirectoryNull() { - // 准备傿•° - String name = "test.jpg"; - String directory = null; - FileServiceImpl.PATH_PREFIX_DATE_ENABLE = true; - FileServiceImpl.PATH_SUFFIX_TIMESTAMP_ENABLE = true; - - // 调用 - String path = fileService.generateUploadPath(name, directory); - - // 断言 - // æ ¼å¼ä¸ºï¼šyyyyMMdd/test_timestamp.jpg - assertTrue(path.matches("\\d{8}/test_\\d+\\.jpg")); - } - - @Test - public void testGenerateUploadPath_DirectoryEmpty() { - // 准备傿•° - String name = "test.jpg"; - String directory = ""; - FileServiceImpl.PATH_PREFIX_DATE_ENABLE = true; - FileServiceImpl.PATH_SUFFIX_TIMESTAMP_ENABLE = true; - - // 调用 - String path = fileService.generateUploadPath(name, directory); - - // 断言 - // æ ¼å¼ä¸ºï¼šyyyyMMdd/test_timestamp.jpg - assertTrue(path.matches("\\d{8}/test_\\d+\\.jpg")); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImplTest.java deleted file mode 100644 index a6bd3c8..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImplTest.java +++ /dev/null @@ -1,172 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.job; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO; -import cn.iocoder.yudao.module.infra.dal.mysql.job.JobLogMapper; -import cn.iocoder.yudao.module.infra.enums.job.JobLogStatusEnum; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.time.Duration; -import java.time.LocalDateTime; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.addTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@Import(JobLogServiceImpl.class) -public class JobLogServiceImplTest extends BaseDbUnitTest { - - @Resource - private JobLogServiceImpl jobLogService; - @Resource - private JobLogMapper jobLogMapper; - - @Test - public void testCreateJobLog() { - // 准备傿•° - JobLogDO reqVO = randomPojo(JobLogDO.class, o -> o.setExecuteIndex(1)); - - // 调用 - Long id = jobLogService.createJobLog(reqVO.getJobId(), reqVO.getBeginTime(), - reqVO.getHandlerName(), reqVO.getHandlerParam(), reqVO.getExecuteIndex()); - // 断言 - assertNotNull(id); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - JobLogDO job = jobLogMapper.selectById(id); - assertEquals(JobLogStatusEnum.RUNNING.getStatus(), job.getStatus()); - } - - @Test - public void testUpdateJobLogResultAsync_success() { - // mock æ•°æ® - JobLogDO log = randomPojo(JobLogDO.class, o -> { - o.setExecuteIndex(1); - o.setStatus(JobLogStatusEnum.RUNNING.getStatus()); - }); - jobLogMapper.insert(log); - // 准备傿•° - Long logId = log.getId(); - LocalDateTime endTime = randomLocalDateTime(); - Integer duration = randomInteger(); - boolean success = true; - String result = randomString(); - - // 调用 - jobLogService.updateJobLogResultAsync(logId, endTime, duration, success, result); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - JobLogDO dbLog = jobLogMapper.selectById(log.getId()); - assertEquals(endTime, dbLog.getEndTime()); - assertEquals(duration, dbLog.getDuration()); - assertEquals(JobLogStatusEnum.SUCCESS.getStatus(), dbLog.getStatus()); - assertEquals(result, dbLog.getResult()); - } - - @Test - public void testUpdateJobLogResultAsync_failure() { - // mock æ•°æ® - JobLogDO log = randomPojo(JobLogDO.class, o -> { - o.setExecuteIndex(1); - o.setStatus(JobLogStatusEnum.RUNNING.getStatus()); - }); - jobLogMapper.insert(log); - // 准备傿•° - Long logId = log.getId(); - LocalDateTime endTime = randomLocalDateTime(); - Integer duration = randomInteger(); - boolean success = false; - String result = randomString(); - - // 调用 - jobLogService.updateJobLogResultAsync(logId, endTime, duration, success, result); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - JobLogDO dbLog = jobLogMapper.selectById(log.getId()); - assertEquals(endTime, dbLog.getEndTime()); - assertEquals(duration, dbLog.getDuration()); - assertEquals(JobLogStatusEnum.FAILURE.getStatus(), dbLog.getStatus()); - assertEquals(result, dbLog.getResult()); - } - - @Test - public void testCleanJobLog() { - // mock æ•°æ® - JobLogDO log01 = randomPojo(JobLogDO.class, o -> o.setCreateTime(addTime(Duration.ofDays(-3)))) - .setExecuteIndex(1); - jobLogMapper.insert(log01); - JobLogDO log02 = randomPojo(JobLogDO.class, o -> o.setCreateTime(addTime(Duration.ofDays(-1)))) - .setExecuteIndex(1); - jobLogMapper.insert(log02); - // 准备傿•° - Integer exceedDay = 2; - Integer deleteLimit = 1; - - // 调用 - Integer count = jobLogService.cleanJobLog(exceedDay, deleteLimit); - // 断言 - assertEquals(1, count); - List logs = jobLogMapper.selectList(); - assertEquals(1, logs.size()); - // TODO @芋艿:createTime updateTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(log02, logs.get(0), "createTime", "updateTime"); - } - - @Test - public void testGetJobLog() { - // mock æ•°æ® - JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> o.setExecuteIndex(1)); - jobLogMapper.insert(dbJobLog); - // 准备傿•° - Long id = dbJobLog.getId(); - - // 调用 - JobLogDO jobLog = jobLogService.getJobLog(id); - // 断言 - assertPojoEquals(dbJobLog, jobLog); - } - - @Test - public void testGetJobPage() { - // mock æ•°æ® - JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> { - o.setExecuteIndex(1); - o.setHandlerName("handlerName å•元测试"); - o.setStatus(JobLogStatusEnum.SUCCESS.getStatus()); - o.setBeginTime(buildTime(2021, 1, 8)); - o.setEndTime(buildTime(2021, 1, 8)); - }); - jobLogMapper.insert(dbJobLog); - // 测试 jobId ä¸åŒ¹é… - jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setJobId(randomLongId()))); - // 测试 handlerName ä¸åŒ¹é… - jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setHandlerName(randomString()))); - // 测试 beginTime ä¸åŒ¹é… - jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setBeginTime(buildTime(2021, 1, 7)))); - // 测试 endTime ä¸åŒ¹é… - jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setEndTime(buildTime(2021, 1, 9)))); - // 测试 status ä¸åŒ¹é… - jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setStatus(JobLogStatusEnum.FAILURE.getStatus()))); - // 准备傿•° - JobLogPageReqVO reqVo = new JobLogPageReqVO(); - reqVo.setJobId(dbJobLog.getJobId()); - reqVo.setHandlerName("å•å…ƒ"); - reqVo.setBeginTime(dbJobLog.getBeginTime()); - reqVo.setEndTime(dbJobLog.getEndTime()); - reqVo.setStatus(JobLogStatusEnum.SUCCESS.getStatus()); - - // 调用 - PageResult pageResult = jobLogService.getJobLogPage(reqVo); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbJobLog, pageResult.getList().get(0)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImplTest.java deleted file mode 100644 index 7cd160c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImplTest.java +++ /dev/null @@ -1,257 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.job; - -import cn.hutool.extra.spring.SpringUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobSaveReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO; -import cn.iocoder.yudao.module.infra.dal.mysql.job.JobMapper; -import cn.iocoder.yudao.module.infra.enums.job.JobStatusEnum; -import cn.iocoder.yudao.module.infra.job.job.JobLogCleanJob; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; -import org.quartz.SchedulerException; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mockStatic; -import static org.mockito.Mockito.verify; - -@Import(JobServiceImpl.class) -public class JobServiceImplTest extends BaseDbUnitTest { - - @Resource - private JobServiceImpl jobService; - @Resource - private JobMapper jobMapper; - @MockBean - private SchedulerManager schedulerManager; - - @MockBean - private JobLogCleanJob jobLogCleanJob; - - @Test - public void testCreateJob_cronExpressionValid() { - // 准备傿•°ã€‚Cron 表达å¼ä¸º String ç±»åž‹ï¼Œé»˜è®¤éšæœºå­—符串。 - JobSaveReqVO reqVO = randomPojo(JobSaveReqVO.class); - - // 调用,并断言异常 - assertServiceException(() -> jobService.createJob(reqVO), JOB_CRON_EXPRESSION_VALID); - } - - @Test - public void testCreateJob_jobHandlerExists() throws SchedulerException { - // 准备傿•° 指定 Cron è¡¨è¾¾å¼ - JobSaveReqVO reqVO = randomPojo(JobSaveReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(reqVO.getHandlerName()))) - .thenReturn(jobLogCleanJob); - - // 调用 - jobService.createJob(reqVO); - // 调用,并断言异常 - assertServiceException(() -> jobService.createJob(reqVO), JOB_HANDLER_EXISTS); - } - } - - @Test - public void testCreateJob_success() throws SchedulerException { - // 准备傿•° 指定 Cron è¡¨è¾¾å¼ - JobSaveReqVO reqVO = randomPojo(JobSaveReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")) - .setId(null); - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(reqVO.getHandlerName()))) - .thenReturn(jobLogCleanJob); - - // 调用 - Long jobId = jobService.createJob(reqVO); - // 断言 - assertNotNull(jobId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - JobDO job = jobMapper.selectById(jobId); - assertPojoEquals(reqVO, job, "id"); - assertEquals(JobStatusEnum.NORMAL.getStatus(), job.getStatus()); - // 校验调用 - verify(schedulerManager).addJob(eq(job.getId()), eq(job.getHandlerName()), eq(job.getHandlerParam()), - eq(job.getCronExpression()), eq(reqVO.getRetryCount()), eq(reqVO.getRetryInterval())); - } - } - - @Test - public void testUpdateJob_jobNotExists(){ - // 准备傿•° - JobSaveReqVO reqVO = randomPojo(JobSaveReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *")); - - // 调用,并断言异常 - assertServiceException(() -> jobService.updateJob(reqVO), JOB_NOT_EXISTS); - } - - @Test - public void testUpdateJob_onlyNormalStatus(){ - // mock æ•°æ® - JobDO job = randomPojo(JobDO.class, o -> o.setStatus(JobStatusEnum.INIT.getStatus())); - jobMapper.insert(job); - // 准备傿•° - JobSaveReqVO updateReqVO = randomPojo(JobSaveReqVO.class, o -> { - o.setId(job.getId()); - o.setCronExpression("0 0/1 * * * ? *"); - }); - - // 调用,并断言异常 - assertServiceException(() -> jobService.updateJob(updateReqVO), - JOB_UPDATE_ONLY_NORMAL_STATUS); - } - - @Test - public void testUpdateJob_success() throws SchedulerException { - // mock æ•°æ® - JobDO job = randomPojo(JobDO.class, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus())); - jobMapper.insert(job); - // 准备傿•° - JobSaveReqVO updateReqVO = randomPojo(JobSaveReqVO.class, o -> { - o.setId(job.getId()); - o.setCronExpression("0 0/1 * * * ? *"); - }); - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(updateReqVO.getHandlerName()))) - .thenReturn(jobLogCleanJob); - - // 调用 - jobService.updateJob(updateReqVO); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - JobDO updateJob = jobMapper.selectById(updateReqVO.getId()); - assertPojoEquals(updateReqVO, updateJob); - // 校验调用 - verify(schedulerManager).updateJob(eq(job.getHandlerName()), eq(updateReqVO.getHandlerParam()), - eq(updateReqVO.getCronExpression()), eq(updateReqVO.getRetryCount()), eq(updateReqVO.getRetryInterval())); - } - } - - @Test - public void testUpdateJobStatus_changeStatusInvalid() { - // 调用,并断言异常 - assertServiceException(() -> jobService.updateJobStatus(1L, JobStatusEnum.INIT.getStatus()), - JOB_CHANGE_STATUS_INVALID); - } - - @Test - public void testUpdateJobStatus_changeStatusEquals() { - // mock æ•°æ® - JobDO job = randomPojo(JobDO.class, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus())); - jobMapper.insert(job); - - // 调用,并断言异常 - assertServiceException(() -> jobService.updateJobStatus(job.getId(), job.getStatus()), - JOB_CHANGE_STATUS_EQUALS); - } - - @Test - public void testUpdateJobStatus_stopSuccess() throws SchedulerException { - // mock æ•°æ® - JobDO job = randomPojo(JobDO.class, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus())); - jobMapper.insert(job); - - // 调用 - jobService.updateJobStatus(job.getId(), JobStatusEnum.STOP.getStatus()); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - JobDO dbJob = jobMapper.selectById(job.getId()); - assertEquals(JobStatusEnum.STOP.getStatus(), dbJob.getStatus()); - // 校验调用 - verify(schedulerManager).pauseJob(eq(job.getHandlerName())); - } - - @Test - public void testUpdateJobStatus_normalSuccess() throws SchedulerException { - // mock æ•°æ® - JobDO job = randomPojo(JobDO.class, o -> o.setStatus(JobStatusEnum.STOP.getStatus())); - jobMapper.insert(job); - - // 调用 - jobService.updateJobStatus(job.getId(), JobStatusEnum.NORMAL.getStatus()); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - JobDO dbJob = jobMapper.selectById(job.getId()); - assertEquals(JobStatusEnum.NORMAL.getStatus(), dbJob.getStatus()); - // 校验调用 - verify(schedulerManager).resumeJob(eq(job.getHandlerName())); - } - - @Test - public void testTriggerJob_success() throws SchedulerException { - // mock æ•°æ® - JobDO job = randomPojo(JobDO.class); - jobMapper.insert(job); - - // 调用 - jobService.triggerJob(job.getId()); - // 校验调用 - verify(schedulerManager).triggerJob(eq(job.getId()), - eq(job.getHandlerName()), eq(job.getHandlerParam())); - } - - @Test - public void testDeleteJob_success() throws SchedulerException { - // mock æ•°æ® - JobDO job = randomPojo(JobDO.class); - jobMapper.insert(job); - - // 调用 - jobService.deleteJob(job.getId()); - // 校验ä¸å­˜åœ¨ - assertNull(jobMapper.selectById(job.getId())); - // 校验调用 - verify(schedulerManager).deleteJob(eq(job.getHandlerName())); - } - - @Test - public void testGetJobPage() { - // mock æ•°æ® - JobDO dbJob = randomPojo(JobDO.class, o -> { - o.setName("定时任务测试"); - o.setHandlerName("handlerName å•元测试"); - o.setStatus(JobStatusEnum.INIT.getStatus()); - }); - jobMapper.insert(dbJob); - // 测试 name ä¸åŒ¹é… - jobMapper.insert(cloneIgnoreId(dbJob, o -> o.setName("土豆"))); - // 测试 status ä¸åŒ¹é… - jobMapper.insert(cloneIgnoreId(dbJob, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus()))); - // 测试 handlerName ä¸åŒ¹é… - jobMapper.insert(cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString()))); - // 准备傿•° - JobPageReqVO reqVo = new JobPageReqVO(); - reqVo.setName("定时"); - reqVo.setStatus(JobStatusEnum.INIT.getStatus()); - reqVo.setHandlerName("å•å…ƒ"); - - // 调用 - PageResult pageResult = jobService.getJobPage(reqVo); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbJob, pageResult.getList().get(0)); - } - - @Test - public void testGetJob() { - // mock æ•°æ® - JobDO dbJob = randomPojo(JobDO.class); - jobMapper.insert(dbJob); - // 调用 - JobDO job = jobService.getJob(dbJob.getId()); - // 断言 - assertPojoEquals(dbJob, job); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImplTest.java deleted file mode 100644 index b8da238..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImplTest.java +++ /dev/null @@ -1,110 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.logger; - -import cn.iocoder.yudao.framework.common.biz.infra.logger.dto.ApiAccessLogCreateReqDTO; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; -import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiAccessLogMapper; -import jakarta.annotation.Resource; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import java.time.Duration; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.assertEquals; - -@Import(ApiAccessLogServiceImpl.class) -public class ApiAccessLogServiceImplTest extends BaseDbUnitTest { - - @Resource - private ApiAccessLogServiceImpl apiAccessLogService; - - @Resource - private ApiAccessLogMapper apiAccessLogMapper; - - @Test - public void testGetApiAccessLogPage() { - ApiAccessLogDO apiAccessLogDO = randomPojo(ApiAccessLogDO.class, o -> { - o.setUserId(2233L); - o.setUserType(UserTypeEnum.ADMIN.getValue()); - o.setApplicationName("yudao-test"); - o.setRequestUrl("foo"); - o.setBeginTime(buildTime(2021, 3, 13)); - o.setDuration(1000); - o.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode()); - }); - apiAccessLogMapper.insert(apiAccessLogDO); - // 测试 userId ä¸åŒ¹é… - apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setUserId(3344L))); - // 测试 userType ä¸åŒ¹é… - apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); - // 测试 applicationName ä¸åŒ¹é… - apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setApplicationName("test"))); - // 测试 requestUrl ä¸åŒ¹é… - apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setRequestUrl("bar"))); - // 测试 beginTime ä¸åŒ¹é…:构造一个早期时间 2021-02-06 00:00:00 - apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setBeginTime(buildTime(2021, 2, 6)))); - // 测试 duration ä¸åŒ¹é… - apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setDuration(100))); - // 测试 resultCode ä¸åŒ¹é… - apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setResultCode(2))); - // 准备傿•° - ApiAccessLogPageReqVO reqVO = new ApiAccessLogPageReqVO(); - reqVO.setUserId(2233L); - reqVO.setUserType(UserTypeEnum.ADMIN.getValue()); - reqVO.setApplicationName("yudao-test"); - reqVO.setRequestUrl("foo"); - reqVO.setBeginTime(buildBetweenTime(2021, 3, 13, 2021, 3, 13)); - reqVO.setDuration(1000); - reqVO.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode()); - - // 调用 - PageResult pageResult = apiAccessLogService.getApiAccessLogPage(reqVO); - // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(apiAccessLogDO, pageResult.getList().get(0)); - } - - @Test - public void testCleanJobLog() { - // mock æ•°æ® - ApiAccessLogDO log01 = randomPojo(ApiAccessLogDO.class, o -> o.setCreateTime(addTime(Duration.ofDays(-3)))); - apiAccessLogMapper.insert(log01); - ApiAccessLogDO log02 = randomPojo(ApiAccessLogDO.class, o -> o.setCreateTime(addTime(Duration.ofDays(-1)))); - apiAccessLogMapper.insert(log02); - // 准备傿•° - Integer exceedDay = 2; - Integer deleteLimit = 1; - - // 调用 - Integer count = apiAccessLogService.cleanAccessLog(exceedDay, deleteLimit); - // 断言 - assertEquals(1, count); - List logs = apiAccessLogMapper.selectList(); - assertEquals(1, logs.size()); - // TODO @芋艿:createTime updateTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(log02, logs.get(0), "createTime", "updateTime"); - } - - @Test - public void testCreateApiAccessLog() { - // 准备傿•° - ApiAccessLogCreateReqDTO createDTO = randomPojo(ApiAccessLogCreateReqDTO.class); - - // 调用 - apiAccessLogService.createApiAccessLog(createDTO); - // 断言 - ApiAccessLogDO apiAccessLogDO = apiAccessLogMapper.selectOne(null); - assertPojoEquals(createDTO, apiAccessLogDO); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImplTest.java deleted file mode 100644 index d4854e7..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImplTest.java +++ /dev/null @@ -1,164 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.logger; - -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.framework.common.biz.infra.logger.dto.ApiErrorLogCreateReqDTO; -import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; -import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; -import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper; -import cn.iocoder.yudao.module.infra.enums.logger.ApiErrorLogProcessStatusEnum; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.time.Duration; -import java.util.List; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.API_ERROR_LOG_NOT_FOUND; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.API_ERROR_LOG_PROCESSED; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@Import(ApiErrorLogServiceImpl.class) -public class ApiErrorLogServiceImplTest extends BaseDbUnitTest { - - @Resource - private ApiErrorLogServiceImpl apiErrorLogService; - - @Resource - private ApiErrorLogMapper apiErrorLogMapper; - - @Test - public void testGetApiErrorLogPage() { - // mock æ•°æ® - ApiErrorLogDO apiErrorLogDO = randomPojo(ApiErrorLogDO.class, o -> { - o.setUserId(2233L); - o.setUserType(UserTypeEnum.ADMIN.getValue()); - o.setApplicationName("yudao-test"); - o.setRequestUrl("foo"); - o.setExceptionTime(buildTime(2021, 3, 13)); - o.setProcessStatus(ApiErrorLogProcessStatusEnum.INIT.getStatus()); - }); - apiErrorLogMapper.insert(apiErrorLogDO); - // 测试 userId ä¸åŒ¹é… - apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, o -> o.setUserId(3344L))); - // 测试 userType ä¸åŒ¹é… - apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); - // 测试 applicationName ä¸åŒ¹é… - apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, o -> o.setApplicationName("test"))); - // 测试 requestUrl ä¸åŒ¹é… - apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, o -> o.setRequestUrl("bar"))); - // 测试 exceptionTime ä¸åŒ¹é…:构造一个早期时间 2021-02-06 00:00:00 - apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, o -> o.setExceptionTime(buildTime(2021, 2, 6)))); - // 测试 progressStatus ä¸åŒ¹é… - apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, logDO -> logDO.setProcessStatus(ApiErrorLogProcessStatusEnum.DONE.getStatus()))); - // 准备傿•° - ApiErrorLogPageReqVO reqVO = new ApiErrorLogPageReqVO(); - reqVO.setUserId(2233L); - reqVO.setUserType(UserTypeEnum.ADMIN.getValue()); - reqVO.setApplicationName("yudao-test"); - reqVO.setRequestUrl("foo"); - reqVO.setExceptionTime(buildBetweenTime(2021, 3, 1, 2021, 3, 31)); - reqVO.setProcessStatus(ApiErrorLogProcessStatusEnum.INIT.getStatus()); - - // 调用 - PageResult pageResult = apiErrorLogService.getApiErrorLogPage(reqVO); - // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(apiErrorLogDO, pageResult.getList().get(0)); - } - - @Test - public void testCreateApiErrorLog() { - // 准备傿•° - ApiErrorLogCreateReqDTO createDTO = randomPojo(ApiErrorLogCreateReqDTO.class); - - // 调用 - apiErrorLogService.createApiErrorLog(createDTO); - // 断言 - ApiErrorLogDO apiErrorLogDO = apiErrorLogMapper.selectOne(null); - assertPojoEquals(createDTO, apiErrorLogDO); - assertEquals(ApiErrorLogProcessStatusEnum.INIT.getStatus(), apiErrorLogDO.getProcessStatus()); - } - - @Test - public void testUpdateApiErrorLogProcess_success() { - // 准备傿•° - ApiErrorLogDO apiErrorLogDO = randomPojo(ApiErrorLogDO.class, - o -> o.setProcessStatus(ApiErrorLogProcessStatusEnum.INIT.getStatus())); - apiErrorLogMapper.insert(apiErrorLogDO); - // 准备傿•° - Long id = apiErrorLogDO.getId(); - Integer processStatus = randomEle(ApiErrorLogProcessStatusEnum.values()).getStatus(); - Long processUserId = randomLongId(); - - // 调用 - apiErrorLogService.updateApiErrorLogProcess(id, processStatus, processUserId); - // 断言 - ApiErrorLogDO dbApiErrorLogDO = apiErrorLogMapper.selectById(apiErrorLogDO.getId()); - assertEquals(processStatus, dbApiErrorLogDO.getProcessStatus()); - assertEquals(processUserId, dbApiErrorLogDO.getProcessUserId()); - assertNotNull(dbApiErrorLogDO.getProcessTime()); - } - - @Test - public void testUpdateApiErrorLogProcess_processed() { - // 准备傿•° - ApiErrorLogDO apiErrorLogDO = randomPojo(ApiErrorLogDO.class, - o -> o.setProcessStatus(ApiErrorLogProcessStatusEnum.DONE.getStatus())); - apiErrorLogMapper.insert(apiErrorLogDO); - // 准备傿•° - Long id = apiErrorLogDO.getId(); - Integer processStatus = randomEle(ApiErrorLogProcessStatusEnum.values()).getStatus(); - Long processUserId = randomLongId(); - - // 调用,并断言异常 - assertServiceException(() -> - apiErrorLogService.updateApiErrorLogProcess(id, processStatus, processUserId), - API_ERROR_LOG_PROCESSED); - } - - @Test - public void testUpdateApiErrorLogProcess_notFound() { - // 准备傿•° - Long id = randomLongId(); - Integer processStatus = randomEle(ApiErrorLogProcessStatusEnum.values()).getStatus(); - Long processUserId = randomLongId(); - - // 调用,并断言异常 - assertServiceException(() -> - apiErrorLogService.updateApiErrorLogProcess(id, processStatus, processUserId), - API_ERROR_LOG_NOT_FOUND); - } - - @Test - public void testCleanJobLog() { - // mock æ•°æ® - ApiErrorLogDO log01 = randomPojo(ApiErrorLogDO.class, o -> o.setCreateTime(addTime(Duration.ofDays(-3)))); - apiErrorLogMapper.insert(log01); - ApiErrorLogDO log02 = randomPojo(ApiErrorLogDO.class, o -> o.setCreateTime(addTime(Duration.ofDays(-1)))); - apiErrorLogMapper.insert(log02); - // 准备傿•° - Integer exceedDay = 2; - Integer deleteLimit = 1; - - // 调用 - Integer count = apiErrorLogService.cleanErrorLog(exceedDay, deleteLimit); - // 断言 - assertEquals(1, count); - List logs = apiErrorLogMapper.selectList(); - assertEquals(1, logs.size()); - // TODO @芋艿:createTime updateTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(log02, logs.get(0), "createTime", "updateTime"); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/application-unit-test.yaml b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/application-unit-test.yaml deleted file mode 100644 index 5ce2d4b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/application-unit-test.yaml +++ /dev/null @@ -1,50 +0,0 @@ -spring: - main: - lazy-initialization: true # 开坿‡’加载,加快速度 - banner-mode: off # å•元测试,ç¦ç”¨ Banner - ---- #################### æ•°æ®åº“相关é…ç½® #################### - -spring: - # æ•°æ®æºé…置项 - datasource: - name: ruoyi-vue-pro - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模å¼ï¼›DATABASE_TO_UPPER é…置表和字段使用å°å†™ - driver-class-name: org.h2.Driver - username: sa - password: - druid: - async-init: true # å•元测试,异步åˆå§‹åŒ– Druid 连接池,æå‡å¯åŠ¨é€Ÿåº¦ - initial-size: 1 # å•元测试,é…置为 1,æå‡å¯åŠ¨é€Ÿåº¦ - sql: - init: - schema-locations: classpath:/sql/create_tables.sql - encoding: UTF-8 - - # Redis é…置。Redisson 默认的é…置足够使用,一般ä¸éœ€è¦è¿›è¡Œè°ƒä¼˜ - data: - redis: - host: 127.0.0.1 # åœ°å€ - port: 16379 # 端å£ï¼ˆå•元测试,使用 16379 端å£ï¼‰ - database: 0 # æ•°æ®åº“索引 - -mybatis-plus: - lazy-initialization: true # å•元测试,设置 MyBatis Mapper 延迟加载,加速æ¯ä¸ªå•元测试 - type-aliases-package: ${yudao.info.base-package}.module.*.dal.dataobject - ---- #################### 定时任务相关é…ç½® #################### - ---- #################### é…置中心相关é…ç½® #################### - ---- #################### æœåŠ¡ä¿éšœç›¸å…³é…ç½® #################### - -# Lock4j é…置项(å•元测试,ç¦ç”¨ Lock4j) - ---- #################### 监控相关é…ç½® #################### - ---- #################### 芋é“相关é…ç½® #################### - -# 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® -yudao: - info: - base-package: cn.iocoder.yudao diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/category.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/category.json deleted file mode 100644 index 033c048..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/category.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "table": { - "id": 10, - "scene" : 1, - "parentMenuId" : 888, - "tableName" : "infra_category", - "tableComment" : "分类表", - "moduleName" : "infra", - "businessName" : "demo", - "className" : "InfraCategory", - "classComment" : "分类", - "author" : "èŠ‹é“æºç ", - "treeParentColumnId" : 22, - "treeNameColumnId" : 11 - }, - "columns": [ { - "columnName" : "id", - "dataType" : "BIGINT", - "columnComment" : "ç¼–å·", - "primaryKey" : true, - "javaType" : "Long", - "javaField" : "id", - "example" : "1024", - "updateOperation" : true, - "listOperationResult" : true - }, { - "id" : 11, - "columnName" : "name", - "dataType" : "VARCHAR", - "columnComment" : "åå­—", - "javaType" : "String", - "javaField" : "name", - "example" : "芋头", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "LIKE", - "listOperationResult" : true, - "htmlType" : "input" - }, { - "id" : 22, - "columnName" : "description", - "dataType" : "VARCHAR", - "columnComment" : "父编å·", - "javaType" : "Long", - "javaField" : "parentId", - "example" : "2048", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true - } ] -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/contact.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/contact.json deleted file mode 100644 index 74f92cd..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/contact.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "table": { - "scene" : 1, - "tableName" : "infra_student_contact", - "tableComment" : "学生è”系人表", - "moduleName" : "infra", - "businessName" : "demo", - "className" : "InfraStudentContact", - "classComment" : "学生è”系人", - "author" : "èŠ‹é“æºç " - }, - "columns": [ { - "columnName" : "id", - "dataType" : "BIGINT", - "columnComment" : "ç¼–å·", - "primaryKey" : true, - "javaType" : "Long", - "javaField" : "id", - "example" : "1024", - "updateOperation" : true, - "listOperationResult" : true - }, { - "id" : 100, - "columnName" : "student_id", - "dataType" : "BIGINT", - "columnComment" : "学生编å·", - "javaType" : "Long", - "javaField" : "studentId", - "example" : "2048", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true - }, { - "columnName" : "name", - "dataType" : "VARCHAR", - "columnComment" : "åå­—", - "javaType" : "String", - "javaField" : "name", - "example" : "芋头", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "LIKE", - "listOperationResult" : true, - "htmlType" : "input" - }, { - "columnName" : "description", - "dataType" : "VARCHAR", - "columnComment" : "简介", - "javaType" : "String", - "javaField" : "description", - "example" : "我是介ç»", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "textarea" - }, { - "columnName" : "birthday", - "dataType" : "DATE", - "columnComment" : "出生日期", - "javaType" : "LocalDateTime", - "javaField" : "birthday", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "=", - "listOperationResult" : true, - "htmlType" : "datetime" - }, { - "columnName" : "sex", - "dataType" : "INTEGER", - "columnComment" : "性别", - "javaType" : "Integer", - "javaField" : "sex", - "dictType" : "system_user_sex", - "example" : "1", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "=", - "listOperationResult" : true, - "htmlType" : "select" - }, { - "columnName" : "enabled", - "dataType" : "BOOLEAN", - "columnComment" : "æ˜¯å¦æœ‰æ•ˆ", - "javaType" : "Boolean", - "javaField" : "enabled", - "dictType" : "infra_boolean_string", - "example" : "true", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "=", - "listOperationResult" : true, - "htmlType" : "radio" - }, { - "columnName" : "avatar", - "dataType" : "VARCHAR", - "columnComment" : "头åƒ", - "javaType" : "String", - "javaField" : "avatar", - "example" : "https://www.iocoder.cn/1.png", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "imageUpload" - }, { - "columnName" : "video", - "dataType" : "VARCHAR", - "columnComment" : "附件", - "nullable" : true, - "javaType" : "String", - "javaField" : "video", - "example" : "https://www.iocoder.cn/1.mp4", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "fileUpload" - }, { - "columnName" : "memo", - "dataType" : "VARCHAR", - "columnComment" : "备注", - "javaType" : "String", - "javaField" : "memo", - "example" : "我是备注", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "editor" - }, { - "columnName" : "create_time", - "dataType" : "DATE", - "columnComment" : "创建时间", - "nullable" : true, - "javaType" : "LocalDateTime", - "javaField" : "createTime", - "listOperation" : true, - "listOperationCondition" : "BETWEEN", - "listOperationResult" : true, - "htmlType" : "datetime" - } ] -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/student.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/student.json deleted file mode 100644 index efe8af4..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/student.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "table": { - "id": 1, - "scene" : 1, - "parentMenuId" : 888, - "tableName" : "infra_student", - "tableComment" : "学生表", - "moduleName" : "infra", - "businessName" : "demo", - "className" : "InfraStudent", - "classComment" : "学生", - "author" : "èŠ‹é“æºç " - }, - "columns": [ { - "id" : 100, - "columnName" : "id", - "dataType" : "BIGINT", - "columnComment" : "ç¼–å·", - "primaryKey" : true, - "javaType" : "Long", - "javaField" : "id", - "example" : "1024", - "updateOperation" : true, - "listOperationResult" : true - }, { - "columnName" : "name", - "dataType" : "VARCHAR", - "columnComment" : "åå­—", - "javaType" : "String", - "javaField" : "name", - "example" : "芋头", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "LIKE", - "listOperationResult" : true, - "htmlType" : "input" - }, { - "columnName" : "description", - "dataType" : "VARCHAR", - "columnComment" : "简介", - "javaType" : "String", - "javaField" : "description", - "example" : "我是介ç»", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "textarea" - }, { - "columnName" : "birthday", - "dataType" : "DATE", - "columnComment" : "出生日期", - "javaType" : "LocalDateTime", - "javaField" : "birthday", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "=", - "listOperationResult" : true, - "htmlType" : "datetime" - }, { - "columnName" : "sex", - "dataType" : "INTEGER", - "columnComment" : "性别", - "javaType" : "Integer", - "javaField" : "sex", - "dictType" : "system_user_sex", - "example" : "1", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "=", - "listOperationResult" : true, - "htmlType" : "select" - }, { - "columnName" : "enabled", - "dataType" : "BOOLEAN", - "columnComment" : "æ˜¯å¦æœ‰æ•ˆ", - "javaType" : "Boolean", - "javaField" : "enabled", - "dictType" : "infra_boolean_string", - "example" : "true", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "=", - "listOperationResult" : true, - "htmlType" : "radio" - }, { - "columnName" : "avatar", - "dataType" : "VARCHAR", - "columnComment" : "头åƒ", - "javaType" : "String", - "javaField" : "avatar", - "example" : "https://www.iocoder.cn/1.png", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "imageUpload" - }, { - "columnName" : "video", - "dataType" : "VARCHAR", - "columnComment" : "附件", - "javaType" : "String", - "javaField" : "video", - "example" : "https://www.iocoder.cn/1.mp4", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "fileUpload" - }, { - "columnName" : "memo", - "dataType" : "VARCHAR", - "columnComment" : "备注", - "javaType" : "String", - "javaField" : "memo", - "example" : "我是备注", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "editor" - }, { - "columnName" : "create_time", - "dataType" : "DATE", - "columnComment" : "创建时间", - "nullable" : true, - "javaType" : "LocalDateTime", - "javaField" : "createTime", - "listOperation" : true, - "listOperationCondition" : "BETWEEN", - "listOperationResult" : true, - "htmlType" : "datetime" - } ] -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/teacher.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/teacher.json deleted file mode 100644 index 4d93518..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/table/teacher.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "table": { - "scene" : 1, - "tableName" : "infra_student_teacher", - "tableComment" : "学生ç­ä¸»ä»»è¡¨", - "moduleName" : "infra", - "businessName" : "demo", - "className" : "InfraStudentTeacher", - "classComment" : "学生ç­ä¸»ä»»", - "author" : "èŠ‹é“æºç " - }, - "columns": [ { - "columnName" : "id", - "dataType" : "BIGINT", - "columnComment" : "ç¼–å·", - "primaryKey" : true, - "javaType" : "Long", - "javaField" : "id", - "example" : "1024", - "updateOperation" : true, - "listOperationResult" : true - }, { - "id" : 200, - "columnName" : "student_id", - "dataType" : "BIGINT", - "columnComment" : "学生编å·", - "javaType" : "Long", - "javaField" : "studentId", - "example" : "2048", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true - }, { - "columnName" : "name", - "dataType" : "VARCHAR", - "columnComment" : "åå­—", - "javaType" : "String", - "javaField" : "name", - "example" : "芋头", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "LIKE", - "listOperationResult" : true, - "htmlType" : "input" - }, { - "columnName" : "description", - "dataType" : "VARCHAR", - "columnComment" : "简介", - "javaType" : "String", - "javaField" : "description", - "example" : "我是介ç»", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "textarea" - }, { - "columnName" : "birthday", - "dataType" : "DATE", - "columnComment" : "出生日期", - "javaType" : "LocalDateTime", - "javaField" : "birthday", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "=", - "listOperationResult" : true, - "htmlType" : "datetime" - }, { - "columnName" : "sex", - "dataType" : "INTEGER", - "columnComment" : "性别", - "javaType" : "Integer", - "javaField" : "sex", - "dictType" : "system_user_sex", - "example" : "1", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "=", - "listOperationResult" : true, - "htmlType" : "select" - }, { - "columnName" : "enabled", - "dataType" : "BOOLEAN", - "columnComment" : "æ˜¯å¦æœ‰æ•ˆ", - "javaType" : "Boolean", - "javaField" : "enabled", - "dictType" : "infra_boolean_string", - "example" : "true", - "createOperation" : true, - "updateOperation" : true, - "listOperation" : true, - "listOperationCondition" : "=", - "listOperationResult" : true, - "htmlType" : "radio" - }, { - "columnName" : "avatar", - "dataType" : "VARCHAR", - "columnComment" : "头åƒ", - "javaType" : "String", - "javaField" : "avatar", - "example" : "https://www.iocoder.cn/1.png", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "imageUpload" - }, { - "columnName" : "video", - "dataType" : "VARCHAR", - "columnComment" : "附件", - "nullable" : true, - "javaType" : "String", - "javaField" : "video", - "example" : "https://www.iocoder.cn/1.mp4", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "fileUpload" - }, { - "columnName" : "memo", - "dataType" : "VARCHAR", - "columnComment" : "备注", - "javaType" : "String", - "javaField" : "memo", - "example" : "我是备注", - "createOperation" : true, - "updateOperation" : true, - "listOperationResult" : true, - "htmlType" : "editor" - }, { - "columnName" : "create_time", - "dataType" : "DATE", - "columnComment" : "创建时间", - "nullable" : true, - "javaType" : "LocalDateTime", - "javaField" : "createTime", - "listOperation" : true, - "listOperationCondition" : "BETWEEN", - "listOperationResult" : true, - "htmlType" : "datetime" - } ] -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/assert.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/assert.json deleted file mode 100644 index 8edb8e6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/assert.json +++ /dev/null @@ -1,73 +0,0 @@ -[ { - "contentPath" : "java/InfraStudentPageReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentPageReqVO.java" -}, { - "contentPath" : "java/InfraStudentRespVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentRespVO.java" -}, { - "contentPath" : "java/InfraStudentSaveReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentSaveReqVO.java" -}, { - "contentPath" : "java/InfraStudentController", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/InfraStudentController.java" -}, { - "contentPath" : "java/InfraStudentDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentDO.java" -}, { - "contentPath" : "java/InfraStudentContactDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentContactDO.java" -}, { - "contentPath" : "java/InfraStudentTeacherDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentTeacherDO.java" -}, { - "contentPath" : "java/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentMapper.java" -}, { - "contentPath" : "java/InfraStudentContactMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentContactMapper.java" -}, { - "contentPath" : "java/InfraStudentTeacherMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentTeacherMapper.java" -}, { - "contentPath" : "xml/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/resources/mapper/demo/InfraStudentMapper.xml" -}, { - "contentPath" : "java/InfraStudentServiceImpl", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImpl.java" -}, { - "contentPath" : "java/InfraStudentService", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentService.java" -}, { - "contentPath" : "java/InfraStudentServiceImplTest", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImplTest.java" -}, { - "contentPath" : "java/ErrorCodeConstants_手动æ“作", - "filePath" : "yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants_手动æ“作.java" -}, { - "contentPath" : "sql/sql", - "filePath" : "sql/sql.sql" -}, { - "contentPath" : "sql/h2", - "filePath" : "sql/h2.sql" -}, { - "contentPath" : "vue/index", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/index.vue" -}, { - "contentPath": "js/index", - "filePath": "yudao-ui-admin-vue2/src/api/infra/demo/index.js" -}, { - "contentPath" : "vue/StudentForm", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/StudentForm.vue" -}, { - "contentPath" : "vue/StudentContactForm", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/components/StudentContactForm.vue" -}, { - "contentPath" : "vue/StudentTeacherForm", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/components/StudentTeacherForm.vue" -}, { - "contentPath" : "vue/StudentContactList", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/components/StudentContactList.vue" -}, { - "contentPath" : "vue/StudentTeacherList", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/components/StudentTeacherList.vue" -} ] \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/ErrorCodeConstants_手动æ“作 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/ErrorCodeConstants_手动æ“作 deleted file mode 100644 index d3201de..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/ErrorCodeConstants_手动æ“作 +++ /dev/null @@ -1,6 +0,0 @@ -// TODO 待办:请将下é¢çš„错误ç å¤åˆ¶åˆ° yudao-module-infra-api 模å—çš„ ErrorCodeConstants 类中。注æ„,请给“TODO 补充编å·â€è®¾ç½®ä¸€ä¸ªé”™è¯¯ç ç¼–å·ï¼ï¼ï¼ -// ========== 学生 TODO è¡¥å……ç¼–å· ========== -ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生ä¸å­˜åœ¨"); -ErrorCode STUDENT_CONTACT_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生è”系人ä¸å­˜åœ¨"); -ErrorCode STUDENT_TEACHER_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生ç­ä¸»ä»»ä¸å­˜åœ¨"); -ErrorCode STUDENT_TEACHER_EXISTS = new ErrorCode(TODO 补充编å·, "学生ç­ä¸»ä»»å·²å­˜åœ¨"); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentContactDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentContactDO deleted file mode 100644 index 17c668e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentContactDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生è”系人 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_contact") -@KeySequence("infra_student_contact_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentContactDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentContactMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentContactMapper deleted file mode 100644 index ca662d1..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentContactMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生è”系人 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentContactMapper extends BaseMapperX { - - default PageResult selectPage(PageParam reqVO, Long studentId) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eq(InfraStudentContactDO::getStudentId, studentId) - .orderByDesc(InfraStudentContactDO::getId)); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentContactDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentController b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentController deleted file mode 100644 index d6f2018..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentController +++ /dev/null @@ -1,183 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.module.infra.service.demo.InfraStudentService; - -@Tag(name = "管ç†åŽå° - 学生") -@RestController -@RequestMapping("/infra/student") -@Validated -public class InfraStudentController { - - @Resource - private InfraStudentService studentService; - - @PostMapping("/create") - @Operation(summary = "创建学生") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudent(@Valid @RequestBody InfraStudentSaveReqVO createReqVO) { - return success(studentService.createStudent(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新学生") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudent(@Valid @RequestBody InfraStudentSaveReqVO updateReqVO) { - studentService.updateStudent(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除学生") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudent(@RequestParam("id") Long id) { - studentService.deleteStudent(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得学生") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudent(@RequestParam("id") Long id) { - InfraStudentDO student = studentService.getStudent(id); - return success(BeanUtils.toBean(student, InfraStudentRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得学生分页") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentPage(@Valid InfraStudentPageReqVO pageReqVO) { - PageResult pageResult = studentService.getStudentPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, InfraStudentRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出学生 Excel") - @PreAuthorize("@ss.hasPermission('infra:student:export')") - @OperateLog(type = EXPORT) - public void exportStudentExcel(@Valid InfraStudentPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = studentService.getStudentPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "学生.xls", "æ•°æ®", InfraStudentRespVO.class, - BeanUtils.toBean(list, InfraStudentRespVO.class)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @GetMapping("/student-contact/page") - @Operation(summary = "获得学生è”系人分页") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentContactPage(PageParam pageReqVO, - @RequestParam("studentId") Long studentId) { - return success(studentService.getStudentContactPage(pageReqVO, studentId)); - } - - @PostMapping("/student-contact/create") - @Operation(summary = "创建学生è”系人") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudentContact(@Valid @RequestBody InfraStudentContactDO studentContact) { - return success(studentService.createStudentContact(studentContact)); - } - - @PutMapping("/student-contact/update") - @Operation(summary = "更新学生è”系人") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudentContact(@Valid @RequestBody InfraStudentContactDO studentContact) { - studentService.updateStudentContact(studentContact); - return success(true); - } - - @DeleteMapping("/student-contact/delete") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @Operation(summary = "删除学生è”系人") - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudentContact(@RequestParam("id") Long id) { - studentService.deleteStudentContact(id); - return success(true); - } - - @GetMapping("/student-contact/get") - @Operation(summary = "获得学生è”系人") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudentContact(@RequestParam("id") Long id) { - return success(studentService.getStudentContact(id)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @GetMapping("/student-teacher/page") - @Operation(summary = "获得学生ç­ä¸»ä»»åˆ†é¡µ") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentTeacherPage(PageParam pageReqVO, - @RequestParam("studentId") Long studentId) { - return success(studentService.getStudentTeacherPage(pageReqVO, studentId)); - } - - @PostMapping("/student-teacher/create") - @Operation(summary = "创建学生ç­ä¸»ä»»") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudentTeacher(@Valid @RequestBody InfraStudentTeacherDO studentTeacher) { - return success(studentService.createStudentTeacher(studentTeacher)); - } - - @PutMapping("/student-teacher/update") - @Operation(summary = "更新学生ç­ä¸»ä»»") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudentTeacher(@Valid @RequestBody InfraStudentTeacherDO studentTeacher) { - studentService.updateStudentTeacher(studentTeacher); - return success(true); - } - - @DeleteMapping("/student-teacher/delete") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @Operation(summary = "删除学生ç­ä¸»ä»»") - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudentTeacher(@RequestParam("id") Long id) { - studentService.deleteStudentTeacher(id); - return success(true); - } - - @GetMapping("/student-teacher/get") - @Operation(summary = "获得学生ç­ä¸»ä»»") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudentTeacher(@RequestParam("id") Long id) { - return success(studentService.getStudentTeacher(id)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentDO deleted file mode 100644 index b0d4bd2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentDO +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student") -@KeySequence("infra_student_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentMapper deleted file mode 100644 index 34e70a0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; - -/** - * 学生 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentMapper extends BaseMapperX { - - default PageResult selectPage(InfraStudentPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(InfraStudentDO::getName, reqVO.getName()) - .eqIfPresent(InfraStudentDO::getBirthday, reqVO.getBirthday()) - .eqIfPresent(InfraStudentDO::getSex, reqVO.getSex()) - .eqIfPresent(InfraStudentDO::getEnabled, reqVO.getEnabled()) - .betweenIfPresent(InfraStudentDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(InfraStudentDO::getId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentPageReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentPageReqVO deleted file mode 100644 index 41a3730..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentPageReqVO +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 学生分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class InfraStudentPageReqVO extends PageParam { - - @Schema(description = "åå­—", example = "芋头") - private String name; - - @Schema(description = "出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", example = "1") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", example = "true") - private Boolean enabled; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentRespVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentRespVO deleted file mode 100644 index c41a550..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentRespVO +++ /dev/null @@ -1,60 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; -import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; -import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; - -@Schema(description = "管ç†åŽå° - 学生 Response VO") -@Data -@ExcelIgnoreUnannotated -public class InfraStudentRespVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("ç¼–å·") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @ExcelProperty("åå­—") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @ExcelProperty("简介") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "性别", converter = DictConvert.class) - @DictFormat("system_user_sex") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @ExcelProperty(value = "æ˜¯å¦æœ‰æ•ˆ", converter = DictConvert.class) - @DictFormat("infra_boolean_string") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @ExcelProperty("头åƒ") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @ExcelProperty("附件") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @ExcelProperty("备注") - private String memo; - - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentSaveReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentSaveReqVO deleted file mode 100644 index eaadf74..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentSaveReqVO +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; - -@Schema(description = "管ç†åŽå° - 学生新增/修改 Request VO") -@Data -public class InfraStudentSaveReqVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @NotEmpty(message = "åå­—ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @NotEmpty(message = "简介ä¸èƒ½ä¸ºç©º") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "出生日期ä¸èƒ½ä¸ºç©º") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "性别ä¸èƒ½ä¸ºç©º") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @NotNull(message = "æ˜¯å¦æœ‰æ•ˆä¸èƒ½ä¸ºç©º") - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @NotEmpty(message = "头åƒä¸èƒ½ä¸ºç©º") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @NotEmpty(message = "附件ä¸èƒ½ä¸ºç©º") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @NotEmpty(message = "备注ä¸èƒ½ä¸ºç©º") - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentService b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentService deleted file mode 100644 index 7df090d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentService +++ /dev/null @@ -1,139 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -/** - * 学生 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfraStudentService { - - /** - * 创建学生 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudent(@Valid InfraStudentSaveReqVO createReqVO); - - /** - * 更新学生 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateStudent(@Valid InfraStudentSaveReqVO updateReqVO); - - /** - * 删除学生 - * - * @param id ç¼–å· - */ - void deleteStudent(Long id); - - /** - * 获得学生 - * - * @param id ç¼–å· - * @return 学生 - */ - InfraStudentDO getStudent(Long id); - - /** - * 获得学生分页 - * - * @param pageReqVO 分页查询 - * @return 学生分页 - */ - PageResult getStudentPage(InfraStudentPageReqVO pageReqVO); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - /** - * 获得学生è”系人分页 - * - * @param pageReqVO 分页查询 - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生è”系人分页 - */ - PageResult getStudentContactPage(PageParam pageReqVO, Long studentId); - - /** - * 创建学生è”系人 - * - * @param studentContact åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudentContact(@Valid InfraStudentContactDO studentContact); - - /** - * 更新学生è”系人 - * - * @param studentContact æ›´æ–°ä¿¡æ¯ - */ - void updateStudentContact(@Valid InfraStudentContactDO studentContact); - - /** - * 删除学生è”系人 - * - * @param id ç¼–å· - */ - void deleteStudentContact(Long id); - - /** - * 获得学生è”系人 - * - * @param id ç¼–å· - * @return 学生è”系人 - */ - InfraStudentContactDO getStudentContact(Long id); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - /** - * 获得学生ç­ä¸»ä»»åˆ†é¡µ - * - * @param pageReqVO 分页查询 - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生ç­ä¸»ä»»åˆ†é¡µ - */ - PageResult getStudentTeacherPage(PageParam pageReqVO, Long studentId); - - /** - * 创建学生ç­ä¸»ä»» - * - * @param studentTeacher åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudentTeacher(@Valid InfraStudentTeacherDO studentTeacher); - - /** - * 更新学生ç­ä¸»ä»» - * - * @param studentTeacher æ›´æ–°ä¿¡æ¯ - */ - void updateStudentTeacher(@Valid InfraStudentTeacherDO studentTeacher); - - /** - * 删除学生ç­ä¸»ä»» - * - * @param id ç¼–å· - */ - void deleteStudentTeacher(Long id); - - /** - * 获得学生ç­ä¸»ä»» - * - * @param id ç¼–å· - * @return 学生ç­ä¸»ä»» - */ - InfraStudentTeacherDO getStudentTeacher(Long id); - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentServiceImpl b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentServiceImpl deleted file mode 100644 index 793b2dd..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentServiceImpl +++ /dev/null @@ -1,180 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentContactMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentTeacherMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; - -/** - * 学生 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfraStudentServiceImpl implements InfraStudentService { - - @Resource - private InfraStudentMapper studentMapper; - @Resource - private InfraStudentContactMapper studentContactMapper; - @Resource - private InfraStudentTeacherMapper studentTeacherMapper; - - @Override - public Long createStudent(InfraStudentSaveReqVO createReqVO) { - // æ’å…¥ - InfraStudentDO student = BeanUtils.toBean(createReqVO, InfraStudentDO.class); - studentMapper.insert(student); - // 返回 - return student.getId(); - } - - @Override - public void updateStudent(InfraStudentSaveReqVO updateReqVO) { - // 校验存在 - validateStudentExists(updateReqVO.getId()); - // æ›´æ–° - InfraStudentDO updateObj = BeanUtils.toBean(updateReqVO, InfraStudentDO.class); - studentMapper.updateById(updateObj); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteStudent(Long id) { - // 校验存在 - validateStudentExists(id); - // 删除 - studentMapper.deleteById(id); - - // 删除å­è¡¨ - deleteStudentContactByStudentId(id); - deleteStudentTeacherByStudentId(id); - } - - private void validateStudentExists(Long id) { - if (studentMapper.selectById(id) == null) { - throw exception(STUDENT_NOT_EXISTS); - } - } - - @Override - public InfraStudentDO getStudent(Long id) { - return studentMapper.selectById(id); - } - - @Override - public PageResult getStudentPage(InfraStudentPageReqVO pageReqVO) { - return studentMapper.selectPage(pageReqVO); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @Override - public PageResult getStudentContactPage(PageParam pageReqVO, Long studentId) { - return studentContactMapper.selectPage(pageReqVO, studentId); - } - - @Override - public Long createStudentContact(InfraStudentContactDO studentContact) { - studentContactMapper.insert(studentContact); - return studentContact.getId(); - } - - @Override - public void updateStudentContact(InfraStudentContactDO studentContact) { - // 校验存在 - validateStudentContactExists(studentContact.getId()); - // æ›´æ–° - studentContactMapper.updateById(studentContact); - } - - @Override - public void deleteStudentContact(Long id) { - // 校验存在 - validateStudentContactExists(id); - // 删除 - studentContactMapper.deleteById(id); - } - - @Override - public InfraStudentContactDO getStudentContact(Long id) { - return studentContactMapper.selectById(id); - } - - private void validateStudentContactExists(Long id) { - if (studentContactMapper.selectById(id) == null) { - throw exception(STUDENT_CONTACT_NOT_EXISTS); - } - } - - private void deleteStudentContactByStudentId(Long studentId) { - studentContactMapper.deleteByStudentId(studentId); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @Override - public PageResult getStudentTeacherPage(PageParam pageReqVO, Long studentId) { - return studentTeacherMapper.selectPage(pageReqVO, studentId); - } - - @Override - public Long createStudentTeacher(InfraStudentTeacherDO studentTeacher) { - // 校验是å¦å·²ç»å­˜åœ¨ - if (studentTeacherMapper.selectByStudentId(studentTeacher.getStudentId()) != null) { - throw exception(STUDENT_TEACHER_EXISTS); - } - // æ’å…¥ - studentTeacherMapper.insert(studentTeacher); - return studentTeacher.getId(); - } - - @Override - public void updateStudentTeacher(InfraStudentTeacherDO studentTeacher) { - // 校验存在 - validateStudentTeacherExists(studentTeacher.getId()); - // æ›´æ–° - studentTeacherMapper.updateById(studentTeacher); - } - - @Override - public void deleteStudentTeacher(Long id) { - // 校验存在 - validateStudentTeacherExists(id); - // 删除 - studentTeacherMapper.deleteById(id); - } - - @Override - public InfraStudentTeacherDO getStudentTeacher(Long id) { - return studentTeacherMapper.selectById(id); - } - - private void validateStudentTeacherExists(Long id) { - if (studentTeacherMapper.selectById(id) == null) { - throw exception(STUDENT_TEACHER_NOT_EXISTS); - } - } - - private void deleteStudentTeacherByStudentId(Long studentId) { - studentTeacherMapper.deleteByStudentId(studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentServiceImplTest b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentServiceImplTest deleted file mode 100644 index b5f4bf0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentServiceImplTest +++ /dev/null @@ -1,146 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -/** - * {@link InfraStudentServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(InfraStudentServiceImpl.class) -public class InfraStudentServiceImplTest extends BaseDbUnitTest { - - @Resource - private InfraStudentServiceImpl studentService; - - @Resource - private InfraStudentMapper studentMapper; - - @Test - public void testCreateStudent_success() { - // 准备傿•° - InfraStudentSaveReqVO createReqVO = randomPojo(InfraStudentSaveReqVO.class).setId(null); - - // 调用 - Long studentId = studentService.createStudent(createReqVO); - // 断言 - assertNotNull(studentId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(studentId); - assertPojoEquals(createReqVO, student, "id"); - } - - @Test - public void testUpdateStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class, o -> { - o.setId(dbStudent.getId()); // 设置更新的 ID - }); - - // 调用 - studentService.updateStudent(updateReqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(updateReqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(updateReqVO, student); - } - - @Test - public void testUpdateStudent_notExists() { - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.updateStudent(updateReqVO), STUDENT_NOT_EXISTS); - } - - @Test - public void testDeleteStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbStudent.getId(); - - // 调用 - studentService.deleteStudent(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(studentMapper.selectById(id)); - } - - @Test - public void testDeleteStudent_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.deleteStudent(id), STUDENT_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需è¦çš„值,然åŽåˆ é™¤ @Disabled 注解 - public void testGetStudentPage() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class, o -> { // 等会查询到 - o.setName(null); - o.setBirthday(null); - o.setSex(null); - o.setEnabled(null); - o.setCreateTime(null); - }); - studentMapper.insert(dbStudent); - // 测试 name ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setName(null))); - // 测试 birthday ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setBirthday(null))); - // 测试 sex ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setSex(null))); - // 测试 enabled ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setEnabled(null))); - // 测试 createTime ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setCreateTime(null))); - // 准备傿•° - InfraStudentPageReqVO reqVO = new InfraStudentPageReqVO(); - reqVO.setName(null); - reqVO.setBirthday(null); - reqVO.setSex(null); - reqVO.setEnabled(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = studentService.getStudentPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbStudent, pageResult.getList().get(0)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentTeacherDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentTeacherDO deleted file mode 100644 index c19cf9f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentTeacherDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生ç­ä¸»ä»» DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_teacher") -@KeySequence("infra_student_teacher_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentTeacherDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentTeacherMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentTeacherMapper deleted file mode 100644 index 994212d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/java/InfraStudentTeacherMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生ç­ä¸»ä»» Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentTeacherMapper extends BaseMapperX { - - default PageResult selectPage(PageParam reqVO, Long studentId) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eq(InfraStudentTeacherDO::getStudentId, studentId) - .orderByDesc(InfraStudentTeacherDO::getId)); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentTeacherDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/js/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/js/index deleted file mode 100644 index 211d95e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/js/index +++ /dev/null @@ -1,141 +0,0 @@ -import request from '@/utils/request' - -// 创建学生 -export function createStudent(data) { - return request({ - url: '/infra/student/create', - method: 'post', - data: data - }) -} - -// 更新学生 -export function updateStudent(data) { - return request({ - url: '/infra/student/update', - method: 'put', - data: data - }) -} - -// 删除学生 -export function deleteStudent(id) { - return request({ - url: '/infra/student/delete?id=' + id, - method: 'delete' - }) -} - -// 获得学生 -export function getStudent(id) { - return request({ - url: '/infra/student/get?id=' + id, - method: 'get' - }) -} - -// 获得学生分页 -export function getStudentPage(params) { - return request({ - url: '/infra/student/page', - method: 'get', - params - }) -} -// 导出学生 Excel -export function exportStudentExcel(params) { - return request({ - url: '/infra/student/export-excel', - method: 'get', - params, - responseType: 'blob' - }) -} - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - // 获得学生è”系人分页 - export function getStudentContactPage(params) { - return request({ - url: '/infra/student/student-contact/page', - method: 'get', - params - }) - } - // 新增学生è”系人 - export function createStudentContact(data) { - return request({ - url: `/infra/student/student-contact/create`, - method: 'post', - data - }) - } - - // 修改学生è”系人 - export function updateStudentContact(data) { - return request({ - url: `/infra/student/student-contact/update`, - method: 'post', - data - }) - } - - // 删除学生è”系人 - export function deleteStudentContact(id) { - return request({ - url: `/infra/student/student-contact/delete?id=` + id, - method: 'delete' - }) - } - - // 获得学生è”系人 - export function getStudentContact(id) { - return request({ - url: `/infra/student/student-contact/get?id=` + id, - method: 'get' - }) - } - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - // 获得学生ç­ä¸»ä»»åˆ†é¡µ - export function getStudentTeacherPage(params) { - return request({ - url: '/infra/student/student-teacher/page', - method: 'get', - params - }) - } - // 新增学生ç­ä¸»ä»» - export function createStudentTeacher(data) { - return request({ - url: `/infra/student/student-teacher/create`, - method: 'post', - data - }) - } - - // 修改学生ç­ä¸»ä»» - export function updateStudentTeacher(data) { - return request({ - url: `/infra/student/student-teacher/update`, - method: 'post', - data - }) - } - - // 删除学生ç­ä¸»ä»» - export function deleteStudentTeacher(id) { - return request({ - url: `/infra/student/student-teacher/delete?id=` + id, - method: 'delete' - }) - } - - // 获得学生ç­ä¸»ä»» - export function getStudentTeacher(id) { - return request({ - url: `/infra/student/student-teacher/get?id=` + id, - method: 'get' - }) - } \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/sql/h2 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/sql/h2 deleted file mode 100644 index 6c1875f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/sql/h2 +++ /dev/null @@ -1,17 +0,0 @@ --- 将该建表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "infra_student" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "description" varchar NOT NULL, - "birthday" varchar NOT NULL, - "sex" int NOT NULL, - "enabled" bit NOT NULL, - "avatar" varchar NOT NULL, - "video" varchar NOT NULL, - "memo" varchar NOT NULL, - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY ("id") -) COMMENT '学生表'; - --- 将该删表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/clean.sql 文件里 -DELETE FROM "infra_student"; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/sql/sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/sql/sql deleted file mode 100644 index 83df279..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/sql/sql +++ /dev/null @@ -1,55 +0,0 @@ --- èœå• SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status, component_name -) -VALUES ( - '学生管ç†', '', 2, 0, 888, - 'student', '', 'infra/demo/index', 0, 'InfraStudent' -); - --- 按钮父èœå•ID --- æš‚æ—¶åªæ”¯æŒ MySQL。如果你是 Oracleã€PostgreSQLã€SQLServer çš„è¯ï¼Œéœ€è¦æ‰‹åŠ¨ä¿®æ”¹ @parentId çš„éƒ¨åˆ†çš„ä»£ç  -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生查询', 'infra:student:query', 3, 1, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生创建', 'infra:student:create', 3, 2, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生更新', 'infra:student:update', 3, 3, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生删除', 'infra:student:delete', 3, 4, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生导出', 'infra:student:export', 3, 5, @parentId, - '', '', '', 0 -); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentContactForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentContactForm deleted file mode 100644 index de3b0a7..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentContactForm +++ /dev/null @@ -1,151 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentContactList b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentContactList deleted file mode 100644 index 00f1ce0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentContactList +++ /dev/null @@ -1,129 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentForm deleted file mode 100644 index d89e506..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentForm +++ /dev/null @@ -1,149 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentTeacherForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentTeacherForm deleted file mode 100644 index 874a03b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentTeacherForm +++ /dev/null @@ -1,151 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentTeacherList b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentTeacherList deleted file mode 100644 index 7d561a0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/StudentTeacherList +++ /dev/null @@ -1,129 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/index deleted file mode 100644 index 9c7588f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/vue/index +++ /dev/null @@ -1,233 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/xml/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/xml/InfraStudentMapper deleted file mode 100644 index 155aa5c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_erp/xml/InfraStudentMapper +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/assert.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/assert.json deleted file mode 100644 index 8edb8e6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/assert.json +++ /dev/null @@ -1,73 +0,0 @@ -[ { - "contentPath" : "java/InfraStudentPageReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentPageReqVO.java" -}, { - "contentPath" : "java/InfraStudentRespVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentRespVO.java" -}, { - "contentPath" : "java/InfraStudentSaveReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentSaveReqVO.java" -}, { - "contentPath" : "java/InfraStudentController", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/InfraStudentController.java" -}, { - "contentPath" : "java/InfraStudentDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentDO.java" -}, { - "contentPath" : "java/InfraStudentContactDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentContactDO.java" -}, { - "contentPath" : "java/InfraStudentTeacherDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentTeacherDO.java" -}, { - "contentPath" : "java/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentMapper.java" -}, { - "contentPath" : "java/InfraStudentContactMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentContactMapper.java" -}, { - "contentPath" : "java/InfraStudentTeacherMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentTeacherMapper.java" -}, { - "contentPath" : "xml/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/resources/mapper/demo/InfraStudentMapper.xml" -}, { - "contentPath" : "java/InfraStudentServiceImpl", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImpl.java" -}, { - "contentPath" : "java/InfraStudentService", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentService.java" -}, { - "contentPath" : "java/InfraStudentServiceImplTest", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImplTest.java" -}, { - "contentPath" : "java/ErrorCodeConstants_手动æ“作", - "filePath" : "yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants_手动æ“作.java" -}, { - "contentPath" : "sql/sql", - "filePath" : "sql/sql.sql" -}, { - "contentPath" : "sql/h2", - "filePath" : "sql/h2.sql" -}, { - "contentPath" : "vue/index", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/index.vue" -}, { - "contentPath": "js/index", - "filePath": "yudao-ui-admin-vue2/src/api/infra/demo/index.js" -}, { - "contentPath" : "vue/StudentForm", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/StudentForm.vue" -}, { - "contentPath" : "vue/StudentContactForm", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/components/StudentContactForm.vue" -}, { - "contentPath" : "vue/StudentTeacherForm", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/components/StudentTeacherForm.vue" -}, { - "contentPath" : "vue/StudentContactList", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/components/StudentContactList.vue" -}, { - "contentPath" : "vue/StudentTeacherList", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/components/StudentTeacherList.vue" -} ] \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/ErrorCodeConstants_手动æ“作 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/ErrorCodeConstants_手动æ“作 deleted file mode 100644 index f8be662..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/ErrorCodeConstants_手动æ“作 +++ /dev/null @@ -1,3 +0,0 @@ -// TODO 待办:请将下é¢çš„错误ç å¤åˆ¶åˆ° yudao-module-infra-api 模å—çš„ ErrorCodeConstants 类中。注æ„,请给“TODO 补充编å·â€è®¾ç½®ä¸€ä¸ªé”™è¯¯ç ç¼–å·ï¼ï¼ï¼ -// ========== 学生 TODO è¡¥å……ç¼–å· ========== -ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生ä¸å­˜åœ¨"); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentContactDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentContactDO deleted file mode 100644 index 17c668e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentContactDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生è”系人 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_contact") -@KeySequence("infra_student_contact_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentContactDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentContactMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentContactMapper deleted file mode 100644 index 35bbd53..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentContactMapper +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生è”系人 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentContactMapper extends BaseMapperX { - - default List selectListByStudentId(Long studentId) { - return selectList(InfraStudentContactDO::getStudentId, studentId); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentContactDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentController b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentController deleted file mode 100644 index b9a587b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentController +++ /dev/null @@ -1,117 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.module.infra.service.demo.InfraStudentService; - -@Tag(name = "管ç†åŽå° - 学生") -@RestController -@RequestMapping("/infra/student") -@Validated -public class InfraStudentController { - - @Resource - private InfraStudentService studentService; - - @PostMapping("/create") - @Operation(summary = "创建学生") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudent(@Valid @RequestBody InfraStudentSaveReqVO createReqVO) { - return success(studentService.createStudent(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新学生") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudent(@Valid @RequestBody InfraStudentSaveReqVO updateReqVO) { - studentService.updateStudent(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除学生") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudent(@RequestParam("id") Long id) { - studentService.deleteStudent(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得学生") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudent(@RequestParam("id") Long id) { - InfraStudentDO student = studentService.getStudent(id); - return success(BeanUtils.toBean(student, InfraStudentRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得学生分页") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentPage(@Valid InfraStudentPageReqVO pageReqVO) { - PageResult pageResult = studentService.getStudentPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, InfraStudentRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出学生 Excel") - @PreAuthorize("@ss.hasPermission('infra:student:export')") - @OperateLog(type = EXPORT) - public void exportStudentExcel(@Valid InfraStudentPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = studentService.getStudentPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "学生.xls", "æ•°æ®", InfraStudentRespVO.class, - BeanUtils.toBean(list, InfraStudentRespVO.class)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @GetMapping("/student-contact/list-by-student-id") - @Operation(summary = "获得学生è”系人列表") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentContactListByStudentId(@RequestParam("studentId") Long studentId) { - return success(studentService.getStudentContactListByStudentId(studentId)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @GetMapping("/student-teacher/get-by-student-id") - @Operation(summary = "获得学生ç­ä¸»ä»»") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudentTeacherByStudentId(@RequestParam("studentId") Long studentId) { - return success(studentService.getStudentTeacherByStudentId(studentId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentDO deleted file mode 100644 index b0d4bd2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentDO +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student") -@KeySequence("infra_student_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentMapper deleted file mode 100644 index 34e70a0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; - -/** - * 学生 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentMapper extends BaseMapperX { - - default PageResult selectPage(InfraStudentPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(InfraStudentDO::getName, reqVO.getName()) - .eqIfPresent(InfraStudentDO::getBirthday, reqVO.getBirthday()) - .eqIfPresent(InfraStudentDO::getSex, reqVO.getSex()) - .eqIfPresent(InfraStudentDO::getEnabled, reqVO.getEnabled()) - .betweenIfPresent(InfraStudentDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(InfraStudentDO::getId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentPageReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentPageReqVO deleted file mode 100644 index 41a3730..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentPageReqVO +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 学生分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class InfraStudentPageReqVO extends PageParam { - - @Schema(description = "åå­—", example = "芋头") - private String name; - - @Schema(description = "出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", example = "1") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", example = "true") - private Boolean enabled; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentRespVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentRespVO deleted file mode 100644 index c41a550..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentRespVO +++ /dev/null @@ -1,60 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; -import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; -import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; - -@Schema(description = "管ç†åŽå° - 学生 Response VO") -@Data -@ExcelIgnoreUnannotated -public class InfraStudentRespVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("ç¼–å·") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @ExcelProperty("åå­—") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @ExcelProperty("简介") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "性别", converter = DictConvert.class) - @DictFormat("system_user_sex") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @ExcelProperty(value = "æ˜¯å¦æœ‰æ•ˆ", converter = DictConvert.class) - @DictFormat("infra_boolean_string") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @ExcelProperty("头åƒ") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @ExcelProperty("附件") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @ExcelProperty("备注") - private String memo; - - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentSaveReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentSaveReqVO deleted file mode 100644 index faa491d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentSaveReqVO +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; - -@Schema(description = "管ç†åŽå° - 学生新增/修改 Request VO") -@Data -public class InfraStudentSaveReqVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @NotEmpty(message = "åå­—ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @NotEmpty(message = "简介ä¸èƒ½ä¸ºç©º") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "出生日期ä¸èƒ½ä¸ºç©º") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "性别ä¸èƒ½ä¸ºç©º") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @NotNull(message = "æ˜¯å¦æœ‰æ•ˆä¸èƒ½ä¸ºç©º") - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @NotEmpty(message = "头åƒä¸èƒ½ä¸ºç©º") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @NotEmpty(message = "附件ä¸èƒ½ä¸ºç©º") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @NotEmpty(message = "备注ä¸èƒ½ä¸ºç©º") - private String memo; - - @Schema(description = "学生è”系人列表") - private List studentContacts; - - @Schema(description = "学生ç­ä¸»ä»»") - private InfraStudentTeacherDO studentTeacher; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentService b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentService deleted file mode 100644 index afa7d22..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentService +++ /dev/null @@ -1,77 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -/** - * 学生 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfraStudentService { - - /** - * 创建学生 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudent(@Valid InfraStudentSaveReqVO createReqVO); - - /** - * 更新学生 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateStudent(@Valid InfraStudentSaveReqVO updateReqVO); - - /** - * 删除学生 - * - * @param id ç¼–å· - */ - void deleteStudent(Long id); - - /** - * 获得学生 - * - * @param id ç¼–å· - * @return 学生 - */ - InfraStudentDO getStudent(Long id); - - /** - * 获得学生分页 - * - * @param pageReqVO 分页查询 - * @return 学生分页 - */ - PageResult getStudentPage(InfraStudentPageReqVO pageReqVO); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - /** - * 获得学生è”系人列表 - * - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生è”系人列表 - */ - List getStudentContactListByStudentId(Long studentId); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - /** - * 获得学生ç­ä¸»ä»» - * - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生ç­ä¸»ä»» - */ - InfraStudentTeacherDO getStudentTeacherByStudentId(Long studentId); - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentServiceImpl b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentServiceImpl deleted file mode 100644 index c57cba6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentServiceImpl +++ /dev/null @@ -1,147 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentContactMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentTeacherMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; - -/** - * 学生 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfraStudentServiceImpl implements InfraStudentService { - - @Resource - private InfraStudentMapper studentMapper; - @Resource - private InfraStudentContactMapper studentContactMapper; - @Resource - private InfraStudentTeacherMapper studentTeacherMapper; - - @Override - @Transactional(rollbackFor = Exception.class) - public Long createStudent(InfraStudentSaveReqVO createReqVO) { - // æ’å…¥ - InfraStudentDO student = BeanUtils.toBean(createReqVO, InfraStudentDO.class); - studentMapper.insert(student); - - // æ’å…¥å­è¡¨ - createStudentContactList(student.getId(), createReqVO.getStudentContacts()); - createStudentTeacher(student.getId(), createReqVO.getStudentTeacher()); - // 返回 - return student.getId(); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateStudent(InfraStudentSaveReqVO updateReqVO) { - // 校验存在 - validateStudentExists(updateReqVO.getId()); - // æ›´æ–° - InfraStudentDO updateObj = BeanUtils.toBean(updateReqVO, InfraStudentDO.class); - studentMapper.updateById(updateObj); - - // æ›´æ–°å­è¡¨ - updateStudentContactList(updateReqVO.getId(), updateReqVO.getStudentContacts()); - updateStudentTeacher(updateReqVO.getId(), updateReqVO.getStudentTeacher()); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteStudent(Long id) { - // 校验存在 - validateStudentExists(id); - // 删除 - studentMapper.deleteById(id); - - // 删除å­è¡¨ - deleteStudentContactByStudentId(id); - deleteStudentTeacherByStudentId(id); - } - - private void validateStudentExists(Long id) { - if (studentMapper.selectById(id) == null) { - throw exception(STUDENT_NOT_EXISTS); - } - } - - @Override - public InfraStudentDO getStudent(Long id) { - return studentMapper.selectById(id); - } - - @Override - public PageResult getStudentPage(InfraStudentPageReqVO pageReqVO) { - return studentMapper.selectPage(pageReqVO); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @Override - public List getStudentContactListByStudentId(Long studentId) { - return studentContactMapper.selectListByStudentId(studentId); - } - - private void createStudentContactList(Long studentId, List list) { - list.forEach(o -> o.setStudentId(studentId)); - studentContactMapper.insertBatch(list); - } - - private void updateStudentContactList(Long studentId, List list) { - deleteStudentContactByStudentId(studentId); - list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲çªï¼›2)updateTime 䏿›´æ–° - createStudentContactList(studentId, list); - } - - private void deleteStudentContactByStudentId(Long studentId) { - studentContactMapper.deleteByStudentId(studentId); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @Override - public InfraStudentTeacherDO getStudentTeacherByStudentId(Long studentId) { - return studentTeacherMapper.selectByStudentId(studentId); - } - - private void createStudentTeacher(Long studentId, InfraStudentTeacherDO studentTeacher) { - if (studentTeacher == null) { - return; - } - studentTeacher.setStudentId(studentId); - studentTeacherMapper.insert(studentTeacher); - } - - private void updateStudentTeacher(Long studentId, InfraStudentTeacherDO studentTeacher) { - if (studentTeacher == null) { - return; - } - studentTeacher.setStudentId(studentId); - studentTeacher.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 䏿›´æ–° - studentTeacherMapper.insertOrUpdate(studentTeacher); - } - - private void deleteStudentTeacherByStudentId(Long studentId) { - studentTeacherMapper.deleteByStudentId(studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentServiceImplTest b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentServiceImplTest deleted file mode 100644 index b5f4bf0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentServiceImplTest +++ /dev/null @@ -1,146 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -/** - * {@link InfraStudentServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(InfraStudentServiceImpl.class) -public class InfraStudentServiceImplTest extends BaseDbUnitTest { - - @Resource - private InfraStudentServiceImpl studentService; - - @Resource - private InfraStudentMapper studentMapper; - - @Test - public void testCreateStudent_success() { - // 准备傿•° - InfraStudentSaveReqVO createReqVO = randomPojo(InfraStudentSaveReqVO.class).setId(null); - - // 调用 - Long studentId = studentService.createStudent(createReqVO); - // 断言 - assertNotNull(studentId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(studentId); - assertPojoEquals(createReqVO, student, "id"); - } - - @Test - public void testUpdateStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class, o -> { - o.setId(dbStudent.getId()); // 设置更新的 ID - }); - - // 调用 - studentService.updateStudent(updateReqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(updateReqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(updateReqVO, student); - } - - @Test - public void testUpdateStudent_notExists() { - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.updateStudent(updateReqVO), STUDENT_NOT_EXISTS); - } - - @Test - public void testDeleteStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbStudent.getId(); - - // 调用 - studentService.deleteStudent(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(studentMapper.selectById(id)); - } - - @Test - public void testDeleteStudent_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.deleteStudent(id), STUDENT_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需è¦çš„值,然åŽåˆ é™¤ @Disabled 注解 - public void testGetStudentPage() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class, o -> { // 等会查询到 - o.setName(null); - o.setBirthday(null); - o.setSex(null); - o.setEnabled(null); - o.setCreateTime(null); - }); - studentMapper.insert(dbStudent); - // 测试 name ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setName(null))); - // 测试 birthday ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setBirthday(null))); - // 测试 sex ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setSex(null))); - // 测试 enabled ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setEnabled(null))); - // 测试 createTime ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setCreateTime(null))); - // 准备傿•° - InfraStudentPageReqVO reqVO = new InfraStudentPageReqVO(); - reqVO.setName(null); - reqVO.setBirthday(null); - reqVO.setSex(null); - reqVO.setEnabled(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = studentService.getStudentPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbStudent, pageResult.getList().get(0)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentTeacherDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentTeacherDO deleted file mode 100644 index c19cf9f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentTeacherDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生ç­ä¸»ä»» DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_teacher") -@KeySequence("infra_student_teacher_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentTeacherDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentTeacherMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentTeacherMapper deleted file mode 100644 index 0521bba..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/java/InfraStudentTeacherMapper +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生ç­ä¸»ä»» Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentTeacherMapper extends BaseMapperX { - - default InfraStudentTeacherDO selectByStudentId(Long studentId) { - return selectOne(InfraStudentTeacherDO::getStudentId, studentId); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentTeacherDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/js/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/js/index deleted file mode 100644 index b4e6ac5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/js/index +++ /dev/null @@ -1,74 +0,0 @@ -import request from '@/utils/request' - -// 创建学生 -export function createStudent(data) { - return request({ - url: '/infra/student/create', - method: 'post', - data: data - }) -} - -// 更新学生 -export function updateStudent(data) { - return request({ - url: '/infra/student/update', - method: 'put', - data: data - }) -} - -// 删除学生 -export function deleteStudent(id) { - return request({ - url: '/infra/student/delete?id=' + id, - method: 'delete' - }) -} - -// 获得学生 -export function getStudent(id) { - return request({ - url: '/infra/student/get?id=' + id, - method: 'get' - }) -} - -// 获得学生分页 -export function getStudentPage(params) { - return request({ - url: '/infra/student/page', - method: 'get', - params - }) -} -// 导出学生 Excel -export function exportStudentExcel(params) { - return request({ - url: '/infra/student/export-excel', - method: 'get', - params, - responseType: 'blob' - }) -} - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - // 获得学生è”系人列表 - export function getStudentContactListByStudentId(studentId) { - return request({ - url: `/infra/student/student-contact/list-by-student-id?studentId=` + studentId, - method: 'get' - }) - } - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - // 获得学生ç­ä¸»ä»» - export function getStudentTeacherByStudentId(studentId) { - return request({ - url: `/infra/student/student-teacher/get-by-student-id?studentId=` + studentId, - method: 'get' - }) - } - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/sql/h2 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/sql/h2 deleted file mode 100644 index 6c1875f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/sql/h2 +++ /dev/null @@ -1,17 +0,0 @@ --- 将该建表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "infra_student" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "description" varchar NOT NULL, - "birthday" varchar NOT NULL, - "sex" int NOT NULL, - "enabled" bit NOT NULL, - "avatar" varchar NOT NULL, - "video" varchar NOT NULL, - "memo" varchar NOT NULL, - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY ("id") -) COMMENT '学生表'; - --- 将该删表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/clean.sql 文件里 -DELETE FROM "infra_student"; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/sql/sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/sql/sql deleted file mode 100644 index 83df279..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/sql/sql +++ /dev/null @@ -1,55 +0,0 @@ --- èœå• SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status, component_name -) -VALUES ( - '学生管ç†', '', 2, 0, 888, - 'student', '', 'infra/demo/index', 0, 'InfraStudent' -); - --- 按钮父èœå•ID --- æš‚æ—¶åªæ”¯æŒ MySQL。如果你是 Oracleã€PostgreSQLã€SQLServer çš„è¯ï¼Œéœ€è¦æ‰‹åŠ¨ä¿®æ”¹ @parentId çš„éƒ¨åˆ†çš„ä»£ç  -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生查询', 'infra:student:query', 3, 1, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生创建', 'infra:student:create', 3, 2, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生更新', 'infra:student:update', 3, 3, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生删除', 'infra:student:delete', 3, 4, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生导出', 'infra:student:export', 3, 5, @parentId, - '', '', '', 0 -); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentContactForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentContactForm deleted file mode 100644 index c953bfa..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentContactForm +++ /dev/null @@ -1,177 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentContactList b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentContactList deleted file mode 100644 index c0a8710..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentContactList +++ /dev/null @@ -1,89 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentForm deleted file mode 100644 index 6d93b61..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentForm +++ /dev/null @@ -1,180 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentTeacherForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentTeacherForm deleted file mode 100644 index 0dac19b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentTeacherForm +++ /dev/null @@ -1,127 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentTeacherList b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentTeacherList deleted file mode 100644 index 9f57274..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/StudentTeacherList +++ /dev/null @@ -1,93 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/index deleted file mode 100644 index ddeafdf..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/vue/index +++ /dev/null @@ -1,222 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/xml/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/xml/InfraStudentMapper deleted file mode 100644 index 155aa5c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_inner/xml/InfraStudentMapper +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/assert.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/assert.json deleted file mode 100644 index 6f94535..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/assert.json +++ /dev/null @@ -1,67 +0,0 @@ -[ { - "contentPath" : "java/InfraStudentPageReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentPageReqVO.java" -}, { - "contentPath" : "java/InfraStudentRespVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentRespVO.java" -}, { - "contentPath" : "java/InfraStudentSaveReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentSaveReqVO.java" -}, { - "contentPath" : "java/InfraStudentController", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/InfraStudentController.java" -}, { - "contentPath" : "java/InfraStudentDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentDO.java" -}, { - "contentPath" : "java/InfraStudentContactDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentContactDO.java" -}, { - "contentPath" : "java/InfraStudentTeacherDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentTeacherDO.java" -}, { - "contentPath" : "java/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentMapper.java" -}, { - "contentPath" : "java/InfraStudentContactMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentContactMapper.java" -}, { - "contentPath" : "java/InfraStudentTeacherMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentTeacherMapper.java" -}, { - "contentPath" : "xml/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/resources/mapper/demo/InfraStudentMapper.xml" -}, { - "contentPath" : "java/InfraStudentServiceImpl", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImpl.java" -}, { - "contentPath" : "java/InfraStudentService", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentService.java" -}, { - "contentPath" : "java/InfraStudentServiceImplTest", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImplTest.java" -}, { - "contentPath" : "java/ErrorCodeConstants_手动æ“作", - "filePath" : "yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants_手动æ“作.java" -}, { - "contentPath" : "sql/sql", - "filePath" : "sql/sql.sql" -}, { - "contentPath" : "sql/h2", - "filePath" : "sql/h2.sql" -}, { - "contentPath" : "vue/index", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/index.vue" -}, { - "contentPath": "js/index", - "filePath": "yudao-ui-admin-vue2/src/api/infra/demo/index.js" -}, { - "contentPath" : "vue/StudentForm", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/StudentForm.vue" -}, { - "contentPath" : "vue/StudentContactForm", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/components/StudentContactForm.vue" -}, { - "contentPath" : "vue/StudentTeacherForm", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/components/StudentTeacherForm.vue" -} ] \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/ErrorCodeConstants_手动æ“作 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/ErrorCodeConstants_手动æ“作 deleted file mode 100644 index f8be662..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/ErrorCodeConstants_手动æ“作 +++ /dev/null @@ -1,3 +0,0 @@ -// TODO 待办:请将下é¢çš„错误ç å¤åˆ¶åˆ° yudao-module-infra-api 模å—çš„ ErrorCodeConstants 类中。注æ„,请给“TODO 补充编å·â€è®¾ç½®ä¸€ä¸ªé”™è¯¯ç ç¼–å·ï¼ï¼ï¼ -// ========== 学生 TODO è¡¥å……ç¼–å· ========== -ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生ä¸å­˜åœ¨"); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentContactDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentContactDO deleted file mode 100644 index 17c668e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentContactDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生è”系人 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_contact") -@KeySequence("infra_student_contact_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentContactDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentContactMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentContactMapper deleted file mode 100644 index 35bbd53..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentContactMapper +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生è”系人 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentContactMapper extends BaseMapperX { - - default List selectListByStudentId(Long studentId) { - return selectList(InfraStudentContactDO::getStudentId, studentId); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentContactDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentController b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentController deleted file mode 100644 index b9a587b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentController +++ /dev/null @@ -1,117 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.module.infra.service.demo.InfraStudentService; - -@Tag(name = "管ç†åŽå° - 学生") -@RestController -@RequestMapping("/infra/student") -@Validated -public class InfraStudentController { - - @Resource - private InfraStudentService studentService; - - @PostMapping("/create") - @Operation(summary = "创建学生") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudent(@Valid @RequestBody InfraStudentSaveReqVO createReqVO) { - return success(studentService.createStudent(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新学生") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudent(@Valid @RequestBody InfraStudentSaveReqVO updateReqVO) { - studentService.updateStudent(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除学生") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudent(@RequestParam("id") Long id) { - studentService.deleteStudent(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得学生") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudent(@RequestParam("id") Long id) { - InfraStudentDO student = studentService.getStudent(id); - return success(BeanUtils.toBean(student, InfraStudentRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得学生分页") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentPage(@Valid InfraStudentPageReqVO pageReqVO) { - PageResult pageResult = studentService.getStudentPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, InfraStudentRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出学生 Excel") - @PreAuthorize("@ss.hasPermission('infra:student:export')") - @OperateLog(type = EXPORT) - public void exportStudentExcel(@Valid InfraStudentPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = studentService.getStudentPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "学生.xls", "æ•°æ®", InfraStudentRespVO.class, - BeanUtils.toBean(list, InfraStudentRespVO.class)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @GetMapping("/student-contact/list-by-student-id") - @Operation(summary = "获得学生è”系人列表") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentContactListByStudentId(@RequestParam("studentId") Long studentId) { - return success(studentService.getStudentContactListByStudentId(studentId)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @GetMapping("/student-teacher/get-by-student-id") - @Operation(summary = "获得学生ç­ä¸»ä»»") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudentTeacherByStudentId(@RequestParam("studentId") Long studentId) { - return success(studentService.getStudentTeacherByStudentId(studentId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentDO deleted file mode 100644 index b0d4bd2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentDO +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student") -@KeySequence("infra_student_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentMapper deleted file mode 100644 index 34e70a0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; - -/** - * 学生 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentMapper extends BaseMapperX { - - default PageResult selectPage(InfraStudentPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(InfraStudentDO::getName, reqVO.getName()) - .eqIfPresent(InfraStudentDO::getBirthday, reqVO.getBirthday()) - .eqIfPresent(InfraStudentDO::getSex, reqVO.getSex()) - .eqIfPresent(InfraStudentDO::getEnabled, reqVO.getEnabled()) - .betweenIfPresent(InfraStudentDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(InfraStudentDO::getId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentPageReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentPageReqVO deleted file mode 100644 index 41a3730..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentPageReqVO +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 学生分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class InfraStudentPageReqVO extends PageParam { - - @Schema(description = "åå­—", example = "芋头") - private String name; - - @Schema(description = "出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", example = "1") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", example = "true") - private Boolean enabled; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentRespVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentRespVO deleted file mode 100644 index c41a550..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentRespVO +++ /dev/null @@ -1,60 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; -import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; -import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; - -@Schema(description = "管ç†åŽå° - 学生 Response VO") -@Data -@ExcelIgnoreUnannotated -public class InfraStudentRespVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("ç¼–å·") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @ExcelProperty("åå­—") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @ExcelProperty("简介") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "性别", converter = DictConvert.class) - @DictFormat("system_user_sex") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @ExcelProperty(value = "æ˜¯å¦æœ‰æ•ˆ", converter = DictConvert.class) - @DictFormat("infra_boolean_string") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @ExcelProperty("头åƒ") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @ExcelProperty("附件") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @ExcelProperty("备注") - private String memo; - - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentSaveReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentSaveReqVO deleted file mode 100644 index faa491d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentSaveReqVO +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; - -@Schema(description = "管ç†åŽå° - 学生新增/修改 Request VO") -@Data -public class InfraStudentSaveReqVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @NotEmpty(message = "åå­—ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @NotEmpty(message = "简介ä¸èƒ½ä¸ºç©º") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "出生日期ä¸èƒ½ä¸ºç©º") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "性别ä¸èƒ½ä¸ºç©º") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @NotNull(message = "æ˜¯å¦æœ‰æ•ˆä¸èƒ½ä¸ºç©º") - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @NotEmpty(message = "头åƒä¸èƒ½ä¸ºç©º") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @NotEmpty(message = "附件ä¸èƒ½ä¸ºç©º") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @NotEmpty(message = "备注ä¸èƒ½ä¸ºç©º") - private String memo; - - @Schema(description = "学生è”系人列表") - private List studentContacts; - - @Schema(description = "学生ç­ä¸»ä»»") - private InfraStudentTeacherDO studentTeacher; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentService b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentService deleted file mode 100644 index afa7d22..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentService +++ /dev/null @@ -1,77 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -/** - * 学生 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfraStudentService { - - /** - * 创建学生 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudent(@Valid InfraStudentSaveReqVO createReqVO); - - /** - * 更新学生 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateStudent(@Valid InfraStudentSaveReqVO updateReqVO); - - /** - * 删除学生 - * - * @param id ç¼–å· - */ - void deleteStudent(Long id); - - /** - * 获得学生 - * - * @param id ç¼–å· - * @return 学生 - */ - InfraStudentDO getStudent(Long id); - - /** - * 获得学生分页 - * - * @param pageReqVO 分页查询 - * @return 学生分页 - */ - PageResult getStudentPage(InfraStudentPageReqVO pageReqVO); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - /** - * 获得学生è”系人列表 - * - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生è”系人列表 - */ - List getStudentContactListByStudentId(Long studentId); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - /** - * 获得学生ç­ä¸»ä»» - * - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生ç­ä¸»ä»» - */ - InfraStudentTeacherDO getStudentTeacherByStudentId(Long studentId); - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentServiceImpl b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentServiceImpl deleted file mode 100644 index c57cba6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentServiceImpl +++ /dev/null @@ -1,147 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentContactMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentTeacherMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; - -/** - * 学生 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfraStudentServiceImpl implements InfraStudentService { - - @Resource - private InfraStudentMapper studentMapper; - @Resource - private InfraStudentContactMapper studentContactMapper; - @Resource - private InfraStudentTeacherMapper studentTeacherMapper; - - @Override - @Transactional(rollbackFor = Exception.class) - public Long createStudent(InfraStudentSaveReqVO createReqVO) { - // æ’å…¥ - InfraStudentDO student = BeanUtils.toBean(createReqVO, InfraStudentDO.class); - studentMapper.insert(student); - - // æ’å…¥å­è¡¨ - createStudentContactList(student.getId(), createReqVO.getStudentContacts()); - createStudentTeacher(student.getId(), createReqVO.getStudentTeacher()); - // 返回 - return student.getId(); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateStudent(InfraStudentSaveReqVO updateReqVO) { - // 校验存在 - validateStudentExists(updateReqVO.getId()); - // æ›´æ–° - InfraStudentDO updateObj = BeanUtils.toBean(updateReqVO, InfraStudentDO.class); - studentMapper.updateById(updateObj); - - // æ›´æ–°å­è¡¨ - updateStudentContactList(updateReqVO.getId(), updateReqVO.getStudentContacts()); - updateStudentTeacher(updateReqVO.getId(), updateReqVO.getStudentTeacher()); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteStudent(Long id) { - // 校验存在 - validateStudentExists(id); - // 删除 - studentMapper.deleteById(id); - - // 删除å­è¡¨ - deleteStudentContactByStudentId(id); - deleteStudentTeacherByStudentId(id); - } - - private void validateStudentExists(Long id) { - if (studentMapper.selectById(id) == null) { - throw exception(STUDENT_NOT_EXISTS); - } - } - - @Override - public InfraStudentDO getStudent(Long id) { - return studentMapper.selectById(id); - } - - @Override - public PageResult getStudentPage(InfraStudentPageReqVO pageReqVO) { - return studentMapper.selectPage(pageReqVO); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @Override - public List getStudentContactListByStudentId(Long studentId) { - return studentContactMapper.selectListByStudentId(studentId); - } - - private void createStudentContactList(Long studentId, List list) { - list.forEach(o -> o.setStudentId(studentId)); - studentContactMapper.insertBatch(list); - } - - private void updateStudentContactList(Long studentId, List list) { - deleteStudentContactByStudentId(studentId); - list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲çªï¼›2)updateTime 䏿›´æ–° - createStudentContactList(studentId, list); - } - - private void deleteStudentContactByStudentId(Long studentId) { - studentContactMapper.deleteByStudentId(studentId); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @Override - public InfraStudentTeacherDO getStudentTeacherByStudentId(Long studentId) { - return studentTeacherMapper.selectByStudentId(studentId); - } - - private void createStudentTeacher(Long studentId, InfraStudentTeacherDO studentTeacher) { - if (studentTeacher == null) { - return; - } - studentTeacher.setStudentId(studentId); - studentTeacherMapper.insert(studentTeacher); - } - - private void updateStudentTeacher(Long studentId, InfraStudentTeacherDO studentTeacher) { - if (studentTeacher == null) { - return; - } - studentTeacher.setStudentId(studentId); - studentTeacher.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 䏿›´æ–° - studentTeacherMapper.insertOrUpdate(studentTeacher); - } - - private void deleteStudentTeacherByStudentId(Long studentId) { - studentTeacherMapper.deleteByStudentId(studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentServiceImplTest b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentServiceImplTest deleted file mode 100644 index b5f4bf0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentServiceImplTest +++ /dev/null @@ -1,146 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -/** - * {@link InfraStudentServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(InfraStudentServiceImpl.class) -public class InfraStudentServiceImplTest extends BaseDbUnitTest { - - @Resource - private InfraStudentServiceImpl studentService; - - @Resource - private InfraStudentMapper studentMapper; - - @Test - public void testCreateStudent_success() { - // 准备傿•° - InfraStudentSaveReqVO createReqVO = randomPojo(InfraStudentSaveReqVO.class).setId(null); - - // 调用 - Long studentId = studentService.createStudent(createReqVO); - // 断言 - assertNotNull(studentId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(studentId); - assertPojoEquals(createReqVO, student, "id"); - } - - @Test - public void testUpdateStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class, o -> { - o.setId(dbStudent.getId()); // 设置更新的 ID - }); - - // 调用 - studentService.updateStudent(updateReqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(updateReqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(updateReqVO, student); - } - - @Test - public void testUpdateStudent_notExists() { - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.updateStudent(updateReqVO), STUDENT_NOT_EXISTS); - } - - @Test - public void testDeleteStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbStudent.getId(); - - // 调用 - studentService.deleteStudent(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(studentMapper.selectById(id)); - } - - @Test - public void testDeleteStudent_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.deleteStudent(id), STUDENT_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需è¦çš„值,然åŽåˆ é™¤ @Disabled 注解 - public void testGetStudentPage() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class, o -> { // 等会查询到 - o.setName(null); - o.setBirthday(null); - o.setSex(null); - o.setEnabled(null); - o.setCreateTime(null); - }); - studentMapper.insert(dbStudent); - // 测试 name ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setName(null))); - // 测试 birthday ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setBirthday(null))); - // 测试 sex ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setSex(null))); - // 测试 enabled ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setEnabled(null))); - // 测试 createTime ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setCreateTime(null))); - // 准备傿•° - InfraStudentPageReqVO reqVO = new InfraStudentPageReqVO(); - reqVO.setName(null); - reqVO.setBirthday(null); - reqVO.setSex(null); - reqVO.setEnabled(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = studentService.getStudentPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbStudent, pageResult.getList().get(0)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentTeacherDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentTeacherDO deleted file mode 100644 index c19cf9f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentTeacherDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生ç­ä¸»ä»» DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_teacher") -@KeySequence("infra_student_teacher_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentTeacherDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentTeacherMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentTeacherMapper deleted file mode 100644 index 0521bba..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/java/InfraStudentTeacherMapper +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生ç­ä¸»ä»» Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentTeacherMapper extends BaseMapperX { - - default InfraStudentTeacherDO selectByStudentId(Long studentId) { - return selectOne(InfraStudentTeacherDO::getStudentId, studentId); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentTeacherDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/js/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/js/index deleted file mode 100644 index b4e6ac5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/js/index +++ /dev/null @@ -1,74 +0,0 @@ -import request from '@/utils/request' - -// 创建学生 -export function createStudent(data) { - return request({ - url: '/infra/student/create', - method: 'post', - data: data - }) -} - -// 更新学生 -export function updateStudent(data) { - return request({ - url: '/infra/student/update', - method: 'put', - data: data - }) -} - -// 删除学生 -export function deleteStudent(id) { - return request({ - url: '/infra/student/delete?id=' + id, - method: 'delete' - }) -} - -// 获得学生 -export function getStudent(id) { - return request({ - url: '/infra/student/get?id=' + id, - method: 'get' - }) -} - -// 获得学生分页 -export function getStudentPage(params) { - return request({ - url: '/infra/student/page', - method: 'get', - params - }) -} -// 导出学生 Excel -export function exportStudentExcel(params) { - return request({ - url: '/infra/student/export-excel', - method: 'get', - params, - responseType: 'blob' - }) -} - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - // 获得学生è”系人列表 - export function getStudentContactListByStudentId(studentId) { - return request({ - url: `/infra/student/student-contact/list-by-student-id?studentId=` + studentId, - method: 'get' - }) - } - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - // 获得学生ç­ä¸»ä»» - export function getStudentTeacherByStudentId(studentId) { - return request({ - url: `/infra/student/student-teacher/get-by-student-id?studentId=` + studentId, - method: 'get' - }) - } - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/sql/h2 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/sql/h2 deleted file mode 100644 index 6c1875f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/sql/h2 +++ /dev/null @@ -1,17 +0,0 @@ --- 将该建表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "infra_student" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "description" varchar NOT NULL, - "birthday" varchar NOT NULL, - "sex" int NOT NULL, - "enabled" bit NOT NULL, - "avatar" varchar NOT NULL, - "video" varchar NOT NULL, - "memo" varchar NOT NULL, - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY ("id") -) COMMENT '学生表'; - --- 将该删表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/clean.sql 文件里 -DELETE FROM "infra_student"; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/sql/sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/sql/sql deleted file mode 100644 index 83df279..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/sql/sql +++ /dev/null @@ -1,55 +0,0 @@ --- èœå• SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status, component_name -) -VALUES ( - '学生管ç†', '', 2, 0, 888, - 'student', '', 'infra/demo/index', 0, 'InfraStudent' -); - --- 按钮父èœå•ID --- æš‚æ—¶åªæ”¯æŒ MySQL。如果你是 Oracleã€PostgreSQLã€SQLServer çš„è¯ï¼Œéœ€è¦æ‰‹åŠ¨ä¿®æ”¹ @parentId çš„éƒ¨åˆ†çš„ä»£ç  -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生查询', 'infra:student:query', 3, 1, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生创建', 'infra:student:create', 3, 2, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生更新', 'infra:student:update', 3, 3, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生删除', 'infra:student:delete', 3, 4, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生导出', 'infra:student:export', 3, 5, @parentId, - '', '', '', 0 -); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentContactForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentContactForm deleted file mode 100644 index c953bfa..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentContactForm +++ /dev/null @@ -1,177 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentForm deleted file mode 100644 index 6d93b61..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentForm +++ /dev/null @@ -1,180 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentTeacherForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentTeacherForm deleted file mode 100644 index 0dac19b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/StudentTeacherForm +++ /dev/null @@ -1,127 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/index deleted file mode 100644 index 4607581..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/vue/index +++ /dev/null @@ -1,205 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/xml/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/xml/InfraStudentMapper deleted file mode 100644 index 155aa5c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_master_normal/xml/InfraStudentMapper +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/assert.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/assert.json deleted file mode 100644 index 5a37c37..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/assert.json +++ /dev/null @@ -1,49 +0,0 @@ -[ { - "contentPath" : "java/InfraStudentPageReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentPageReqVO.java" -}, { - "contentPath" : "java/InfraStudentRespVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentRespVO.java" -}, { - "contentPath" : "java/InfraStudentSaveReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentSaveReqVO.java" -}, { - "contentPath" : "java/InfraStudentController", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/InfraStudentController.java" -}, { - "contentPath" : "java/InfraStudentDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentDO.java" -}, { - "contentPath" : "java/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentMapper.java" -}, { - "contentPath" : "xml/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/resources/mapper/demo/InfraStudentMapper.xml" -}, { - "contentPath" : "java/InfraStudentServiceImpl", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImpl.java" -}, { - "contentPath" : "java/InfraStudentService", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentService.java" -}, { - "contentPath" : "java/InfraStudentServiceImplTest", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImplTest.java" -}, { - "contentPath" : "java/ErrorCodeConstants_手动æ“作", - "filePath" : "yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants_手动æ“作.java" -}, { - "contentPath" : "sql/sql", - "filePath" : "sql/sql.sql" -}, { - "contentPath" : "sql/h2", - "filePath" : "sql/h2.sql" -}, { - "contentPath" : "vue/index", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/index.vue" -}, { - "contentPath": "js/index", - "filePath": "yudao-ui-admin-vue2/src/api/infra/demo/index.js" -}, { - "contentPath" : "vue/StudentForm", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/StudentForm.vue" -} ] \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/ErrorCodeConstants_手动æ“作 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/ErrorCodeConstants_手动æ“作 deleted file mode 100644 index f8be662..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/ErrorCodeConstants_手动æ“作 +++ /dev/null @@ -1,3 +0,0 @@ -// TODO 待办:请将下é¢çš„错误ç å¤åˆ¶åˆ° yudao-module-infra-api 模å—çš„ ErrorCodeConstants 类中。注æ„,请给“TODO 补充编å·â€è®¾ç½®ä¸€ä¸ªé”™è¯¯ç ç¼–å·ï¼ï¼ï¼ -// ========== 学生 TODO è¡¥å……ç¼–å· ========== -ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生ä¸å­˜åœ¨"); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentController b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentController deleted file mode 100644 index 3796982..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentController +++ /dev/null @@ -1,95 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.service.demo.InfraStudentService; - -@Tag(name = "管ç†åŽå° - 学生") -@RestController -@RequestMapping("/infra/student") -@Validated -public class InfraStudentController { - - @Resource - private InfraStudentService studentService; - - @PostMapping("/create") - @Operation(summary = "创建学生") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudent(@Valid @RequestBody InfraStudentSaveReqVO createReqVO) { - return success(studentService.createStudent(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新学生") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudent(@Valid @RequestBody InfraStudentSaveReqVO updateReqVO) { - studentService.updateStudent(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除学生") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudent(@RequestParam("id") Long id) { - studentService.deleteStudent(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得学生") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudent(@RequestParam("id") Long id) { - InfraStudentDO student = studentService.getStudent(id); - return success(BeanUtils.toBean(student, InfraStudentRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得学生分页") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentPage(@Valid InfraStudentPageReqVO pageReqVO) { - PageResult pageResult = studentService.getStudentPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, InfraStudentRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出学生 Excel") - @PreAuthorize("@ss.hasPermission('infra:student:export')") - @OperateLog(type = EXPORT) - public void exportStudentExcel(@Valid InfraStudentPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = studentService.getStudentPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "学生.xls", "æ•°æ®", InfraStudentRespVO.class, - BeanUtils.toBean(list, InfraStudentRespVO.class)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentDO deleted file mode 100644 index b0d4bd2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentDO +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student") -@KeySequence("infra_student_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentMapper deleted file mode 100644 index 34e70a0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; - -/** - * 学生 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentMapper extends BaseMapperX { - - default PageResult selectPage(InfraStudentPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(InfraStudentDO::getName, reqVO.getName()) - .eqIfPresent(InfraStudentDO::getBirthday, reqVO.getBirthday()) - .eqIfPresent(InfraStudentDO::getSex, reqVO.getSex()) - .eqIfPresent(InfraStudentDO::getEnabled, reqVO.getEnabled()) - .betweenIfPresent(InfraStudentDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(InfraStudentDO::getId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentPageReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentPageReqVO deleted file mode 100644 index 41a3730..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentPageReqVO +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 学生分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class InfraStudentPageReqVO extends PageParam { - - @Schema(description = "åå­—", example = "芋头") - private String name; - - @Schema(description = "出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", example = "1") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", example = "true") - private Boolean enabled; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentRespVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentRespVO deleted file mode 100644 index c41a550..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentRespVO +++ /dev/null @@ -1,60 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; -import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; -import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; - -@Schema(description = "管ç†åŽå° - 学生 Response VO") -@Data -@ExcelIgnoreUnannotated -public class InfraStudentRespVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("ç¼–å·") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @ExcelProperty("åå­—") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @ExcelProperty("简介") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "性别", converter = DictConvert.class) - @DictFormat("system_user_sex") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @ExcelProperty(value = "æ˜¯å¦æœ‰æ•ˆ", converter = DictConvert.class) - @DictFormat("infra_boolean_string") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @ExcelProperty("头åƒ") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @ExcelProperty("附件") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @ExcelProperty("备注") - private String memo; - - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentSaveReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentSaveReqVO deleted file mode 100644 index 43e7f14..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentSaveReqVO +++ /dev/null @@ -1,50 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 学生新增/修改 Request VO") -@Data -public class InfraStudentSaveReqVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @NotEmpty(message = "åå­—ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @NotEmpty(message = "简介ä¸èƒ½ä¸ºç©º") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "出生日期ä¸èƒ½ä¸ºç©º") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "性别ä¸èƒ½ä¸ºç©º") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @NotNull(message = "æ˜¯å¦æœ‰æ•ˆä¸èƒ½ä¸ºç©º") - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @NotEmpty(message = "头åƒä¸èƒ½ä¸ºç©º") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @NotEmpty(message = "附件ä¸èƒ½ä¸ºç©º") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @NotEmpty(message = "备注ä¸èƒ½ä¸ºç©º") - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentService b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentService deleted file mode 100644 index c4a0e17..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentService +++ /dev/null @@ -1,55 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -/** - * 学生 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfraStudentService { - - /** - * 创建学生 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudent(@Valid InfraStudentSaveReqVO createReqVO); - - /** - * 更新学生 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateStudent(@Valid InfraStudentSaveReqVO updateReqVO); - - /** - * 删除学生 - * - * @param id ç¼–å· - */ - void deleteStudent(Long id); - - /** - * 获得学生 - * - * @param id ç¼–å· - * @return 学生 - */ - InfraStudentDO getStudent(Long id); - - /** - * 获得学生分页 - * - * @param pageReqVO 分页查询 - * @return 学生分页 - */ - PageResult getStudentPage(InfraStudentPageReqVO pageReqVO); - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentServiceImpl b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentServiceImpl deleted file mode 100644 index 2292a66..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentServiceImpl +++ /dev/null @@ -1,74 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; - -/** - * 学生 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfraStudentServiceImpl implements InfraStudentService { - - @Resource - private InfraStudentMapper studentMapper; - - @Override - public Long createStudent(InfraStudentSaveReqVO createReqVO) { - // æ’å…¥ - InfraStudentDO student = BeanUtils.toBean(createReqVO, InfraStudentDO.class); - studentMapper.insert(student); - // 返回 - return student.getId(); - } - - @Override - public void updateStudent(InfraStudentSaveReqVO updateReqVO) { - // 校验存在 - validateStudentExists(updateReqVO.getId()); - // æ›´æ–° - InfraStudentDO updateObj = BeanUtils.toBean(updateReqVO, InfraStudentDO.class); - studentMapper.updateById(updateObj); - } - - @Override - public void deleteStudent(Long id) { - // 校验存在 - validateStudentExists(id); - // 删除 - studentMapper.deleteById(id); - } - - private void validateStudentExists(Long id) { - if (studentMapper.selectById(id) == null) { - throw exception(STUDENT_NOT_EXISTS); - } - } - - @Override - public InfraStudentDO getStudent(Long id) { - return studentMapper.selectById(id); - } - - @Override - public PageResult getStudentPage(InfraStudentPageReqVO pageReqVO) { - return studentMapper.selectPage(pageReqVO); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentServiceImplTest b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentServiceImplTest deleted file mode 100644 index b5f4bf0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/java/InfraStudentServiceImplTest +++ /dev/null @@ -1,146 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -/** - * {@link InfraStudentServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(InfraStudentServiceImpl.class) -public class InfraStudentServiceImplTest extends BaseDbUnitTest { - - @Resource - private InfraStudentServiceImpl studentService; - - @Resource - private InfraStudentMapper studentMapper; - - @Test - public void testCreateStudent_success() { - // 准备傿•° - InfraStudentSaveReqVO createReqVO = randomPojo(InfraStudentSaveReqVO.class).setId(null); - - // 调用 - Long studentId = studentService.createStudent(createReqVO); - // 断言 - assertNotNull(studentId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(studentId); - assertPojoEquals(createReqVO, student, "id"); - } - - @Test - public void testUpdateStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class, o -> { - o.setId(dbStudent.getId()); // 设置更新的 ID - }); - - // 调用 - studentService.updateStudent(updateReqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(updateReqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(updateReqVO, student); - } - - @Test - public void testUpdateStudent_notExists() { - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.updateStudent(updateReqVO), STUDENT_NOT_EXISTS); - } - - @Test - public void testDeleteStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbStudent.getId(); - - // 调用 - studentService.deleteStudent(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(studentMapper.selectById(id)); - } - - @Test - public void testDeleteStudent_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.deleteStudent(id), STUDENT_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需è¦çš„值,然åŽåˆ é™¤ @Disabled 注解 - public void testGetStudentPage() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class, o -> { // 等会查询到 - o.setName(null); - o.setBirthday(null); - o.setSex(null); - o.setEnabled(null); - o.setCreateTime(null); - }); - studentMapper.insert(dbStudent); - // 测试 name ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setName(null))); - // 测试 birthday ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setBirthday(null))); - // 测试 sex ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setSex(null))); - // 测试 enabled ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setEnabled(null))); - // 测试 createTime ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setCreateTime(null))); - // 准备傿•° - InfraStudentPageReqVO reqVO = new InfraStudentPageReqVO(); - reqVO.setName(null); - reqVO.setBirthday(null); - reqVO.setSex(null); - reqVO.setEnabled(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = studentService.getStudentPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbStudent, pageResult.getList().get(0)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/js/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/js/index deleted file mode 100644 index 44db468..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/js/index +++ /dev/null @@ -1,53 +0,0 @@ -import request from '@/utils/request' - -// 创建学生 -export function createStudent(data) { - return request({ - url: '/infra/student/create', - method: 'post', - data: data - }) -} - -// 更新学生 -export function updateStudent(data) { - return request({ - url: '/infra/student/update', - method: 'put', - data: data - }) -} - -// 删除学生 -export function deleteStudent(id) { - return request({ - url: '/infra/student/delete?id=' + id, - method: 'delete' - }) -} - -// 获得学生 -export function getStudent(id) { - return request({ - url: '/infra/student/get?id=' + id, - method: 'get' - }) -} - -// 获得学生分页 -export function getStudentPage(params) { - return request({ - url: '/infra/student/page', - method: 'get', - params - }) -} -// 导出学生 Excel -export function exportStudentExcel(params) { - return request({ - url: '/infra/student/export-excel', - method: 'get', - params, - responseType: 'blob' - }) -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/sql/h2 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/sql/h2 deleted file mode 100644 index 6c1875f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/sql/h2 +++ /dev/null @@ -1,17 +0,0 @@ --- 将该建表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "infra_student" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "description" varchar NOT NULL, - "birthday" varchar NOT NULL, - "sex" int NOT NULL, - "enabled" bit NOT NULL, - "avatar" varchar NOT NULL, - "video" varchar NOT NULL, - "memo" varchar NOT NULL, - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY ("id") -) COMMENT '学生表'; - --- 将该删表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/clean.sql 文件里 -DELETE FROM "infra_student"; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/sql/sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/sql/sql deleted file mode 100644 index 83df279..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/sql/sql +++ /dev/null @@ -1,55 +0,0 @@ --- èœå• SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status, component_name -) -VALUES ( - '学生管ç†', '', 2, 0, 888, - 'student', '', 'infra/demo/index', 0, 'InfraStudent' -); - --- 按钮父èœå•ID --- æš‚æ—¶åªæ”¯æŒ MySQL。如果你是 Oracleã€PostgreSQLã€SQLServer çš„è¯ï¼Œéœ€è¦æ‰‹åŠ¨ä¿®æ”¹ @parentId çš„éƒ¨åˆ†çš„ä»£ç  -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生查询', 'infra:student:query', 3, 1, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生创建', 'infra:student:create', 3, 2, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生更新', 'infra:student:update', 3, 3, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生删除', 'infra:student:delete', 3, 4, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生导出', 'infra:student:export', 3, 5, @parentId, - '', '', '', 0 -); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/vue/StudentForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/vue/StudentForm deleted file mode 100644 index d89e506..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/vue/StudentForm +++ /dev/null @@ -1,149 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/vue/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/vue/index deleted file mode 100644 index 4607581..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/vue/index +++ /dev/null @@ -1,205 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/xml/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/xml/InfraStudentMapper deleted file mode 100644 index 155aa5c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_one/xml/InfraStudentMapper +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/assert.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/assert.json deleted file mode 100644 index a7d2f56..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/assert.json +++ /dev/null @@ -1,49 +0,0 @@ -[ { - "contentPath" : "java/InfraCategoryListReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraCategoryListReqVO.java" -}, { - "contentPath" : "java/InfraCategoryRespVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraCategoryRespVO.java" -}, { - "contentPath" : "java/InfraCategorySaveReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraCategorySaveReqVO.java" -}, { - "contentPath" : "java/InfraCategoryController", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/InfraCategoryController.java" -}, { - "contentPath" : "java/InfraCategoryDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraCategoryDO.java" -}, { - "contentPath" : "java/InfraCategoryMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraCategoryMapper.java" -}, { - "contentPath" : "xml/InfraCategoryMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/resources/mapper/demo/InfraCategoryMapper.xml" -}, { - "contentPath" : "java/InfraCategoryServiceImpl", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraCategoryServiceImpl.java" -}, { - "contentPath" : "java/InfraCategoryService", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraCategoryService.java" -}, { - "contentPath" : "java/InfraCategoryServiceImplTest", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/demo/InfraCategoryServiceImplTest.java" -}, { - "contentPath" : "java/ErrorCodeConstants_手动æ“作", - "filePath" : "yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants_手动æ“作.java" -}, { - "contentPath" : "sql/sql", - "filePath" : "sql/sql.sql" -}, { - "contentPath" : "sql/h2", - "filePath" : "sql/h2.sql" -}, { - "contentPath" : "vue/index", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/index.vue" -}, { - "contentPath": "js/index", - "filePath": "yudao-ui-admin-vue2/src/api/infra/demo/index.js" -}, { - "contentPath" : "vue/CategoryForm", - "filePath" : "yudao-ui-admin-vue2/src/views/infra/demo/CategoryForm.vue" -} ] \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/ErrorCodeConstants_手动æ“作 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/ErrorCodeConstants_手动æ“作 deleted file mode 100644 index 36df675..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/ErrorCodeConstants_手动æ“作 +++ /dev/null @@ -1,8 +0,0 @@ -// TODO 待办:请将下é¢çš„错误ç å¤åˆ¶åˆ° yudao-module-infra-api 模å—çš„ ErrorCodeConstants 类中。注æ„,请给“TODO 补充编å·â€è®¾ç½®ä¸€ä¸ªé”™è¯¯ç ç¼–å·ï¼ï¼ï¼ -// ========== 分类 TODO è¡¥å……ç¼–å· ========== -ErrorCode CATEGORY_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "分类ä¸å­˜åœ¨"); -ErrorCode CATEGORY_EXITS_CHILDREN = new ErrorCode(TODO 补充编å·, "存在存在å­åˆ†ç±»ï¼Œæ— æ³•删除"); -ErrorCode CATEGORY_PARENT_NOT_EXITS = new ErrorCode(TODO 补充编å·,"父级分类ä¸å­˜åœ¨"); -ErrorCode CATEGORY_PARENT_ERROR = new ErrorCode(TODO 补充编å·, "ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶åˆ†ç±»"); -ErrorCode CATEGORY_NAME_DUPLICATE = new ErrorCode(TODO 补充编å·, "å·²ç»å­˜åœ¨è¯¥å字的分类"); -ErrorCode CATEGORY_PARENT_IS_CHILD = new ErrorCode(TODO 补充编å·, "ä¸èƒ½è®¾ç½®è‡ªå·±çš„å­InfraCategory为父InfraCategory"); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryController b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryController deleted file mode 100644 index a7b2f81..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryController +++ /dev/null @@ -1,94 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; -import cn.iocoder.yudao.module.infra.service.demo.InfraCategoryService; - -@Tag(name = "管ç†åŽå° - 分类") -@RestController -@RequestMapping("/infra/category") -@Validated -public class InfraCategoryController { - - @Resource - private InfraCategoryService categoryService; - - @PostMapping("/create") - @Operation(summary = "创建分类") - @PreAuthorize("@ss.hasPermission('infra:category:create')") - public CommonResult createCategory(@Valid @RequestBody InfraCategorySaveReqVO createReqVO) { - return success(categoryService.createCategory(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新分类") - @PreAuthorize("@ss.hasPermission('infra:category:update')") - public CommonResult updateCategory(@Valid @RequestBody InfraCategorySaveReqVO updateReqVO) { - categoryService.updateCategory(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除分类") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:category:delete')") - public CommonResult deleteCategory(@RequestParam("id") Long id) { - categoryService.deleteCategory(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得分类") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('infra:category:query')") - public CommonResult getCategory(@RequestParam("id") Long id) { - InfraCategoryDO category = categoryService.getCategory(id); - return success(BeanUtils.toBean(category, InfraCategoryRespVO.class)); - } - - @GetMapping("/list") - @Operation(summary = "获得分类列表") - @PreAuthorize("@ss.hasPermission('infra:category:query')") - public CommonResult> getCategoryList(@Valid InfraCategoryListReqVO listReqVO) { - List list = categoryService.getCategoryList(listReqVO); - return success(BeanUtils.toBean(list, InfraCategoryRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出分类 Excel") - @PreAuthorize("@ss.hasPermission('infra:category:export')") - @OperateLog(type = EXPORT) - public void exportCategoryExcel(@Valid InfraCategoryListReqVO listReqVO, - HttpServletResponse response) throws IOException { - List list = categoryService.getCategoryList(listReqVO); - // 导出 Excel - ExcelUtils.write(response, "分类.xls", "æ•°æ®", InfraCategoryRespVO.class, - BeanUtils.toBean(list, InfraCategoryRespVO.class)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryDO deleted file mode 100644 index 9bf21c0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryDO +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 分类 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_category") -@KeySequence("infra_category_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraCategoryDO extends BaseDO { - - public static final Long PARENT_ID_ROOT = 0L; - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * åå­— - */ - private String name; - /** - * çˆ¶ç¼–å· - */ - private Long parentId; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryListReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryListReqVO deleted file mode 100644 index e5c6f18..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryListReqVO +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -@Schema(description = "管ç†åŽå° - 分类列表 Request VO") -@Data -public class InfraCategoryListReqVO { - - @Schema(description = "åå­—", example = "芋头") - private String name; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryMapper deleted file mode 100644 index 9dadbf1..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryMapper +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; - -/** - * 分类 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraCategoryMapper extends BaseMapperX { - - default List selectList(InfraCategoryListReqVO reqVO) { - return selectList(new LambdaQueryWrapperX() - .likeIfPresent(InfraCategoryDO::getName, reqVO.getName()) - .orderByDesc(InfraCategoryDO::getId)); - } - - default InfraCategoryDO selectByParentIdAndName(Long parentId, String name) { - return selectOne(InfraCategoryDO::getParentId, parentId, InfraCategoryDO::getName, name); - } - - default Long selectCountByParentId(Long parentId) { - return selectCount(InfraCategoryDO::getParentId, parentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryRespVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryRespVO deleted file mode 100644 index 6325d86..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryRespVO +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import com.alibaba.excel.annotation.*; - -@Schema(description = "管ç†åŽå° - 分类 Response VO") -@Data -@ExcelIgnoreUnannotated -public class InfraCategoryRespVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("ç¼–å·") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @ExcelProperty("åå­—") - private String name; - - @Schema(description = "父编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") - @ExcelProperty("父编å·") - private Long parentId; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategorySaveReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategorySaveReqVO deleted file mode 100644 index 3c03b97..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategorySaveReqVO +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; - -@Schema(description = "管ç†åŽå° - 分类新增/修改 Request VO") -@Data -public class InfraCategorySaveReqVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @NotEmpty(message = "åå­—ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "父编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") - @NotNull(message = "父编å·ä¸èƒ½ä¸ºç©º") - private Long parentId; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryService b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryService deleted file mode 100644 index 9d0ae1a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryService +++ /dev/null @@ -1,55 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -/** - * 分类 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfraCategoryService { - - /** - * 创建分类 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createCategory(@Valid InfraCategorySaveReqVO createReqVO); - - /** - * 更新分类 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateCategory(@Valid InfraCategorySaveReqVO updateReqVO); - - /** - * 删除分类 - * - * @param id ç¼–å· - */ - void deleteCategory(Long id); - - /** - * 获得分类 - * - * @param id ç¼–å· - * @return 分类 - */ - InfraCategoryDO getCategory(Long id); - - /** - * 获得分类列表 - * - * @param listReqVO 查询æ¡ä»¶ - * @return 分类列表 - */ - List getCategoryList(InfraCategoryListReqVO listReqVO); - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryServiceImpl b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryServiceImpl deleted file mode 100644 index 351568b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryServiceImpl +++ /dev/null @@ -1,136 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraCategoryMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; - -/** - * 分类 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfraCategoryServiceImpl implements InfraCategoryService { - - @Resource - private InfraCategoryMapper categoryMapper; - - @Override - public Long createCategory(InfraCategorySaveReqVO createReqVO) { - // 校验父编å·çš„æœ‰æ•ˆæ€§ - validateParentCategory(null, createReqVO.getParentId()); - // 校验å字的唯一性 - validateCategoryNameUnique(null, createReqVO.getParentId(), createReqVO.getName()); - - // æ’å…¥ - InfraCategoryDO category = BeanUtils.toBean(createReqVO, InfraCategoryDO.class); - categoryMapper.insert(category); - // 返回 - return category.getId(); - } - - @Override - public void updateCategory(InfraCategorySaveReqVO updateReqVO) { - // 校验存在 - validateCategoryExists(updateReqVO.getId()); - // 校验父编å·çš„æœ‰æ•ˆæ€§ - validateParentCategory(updateReqVO.getId(), updateReqVO.getParentId()); - // 校验å字的唯一性 - validateCategoryNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName()); - - // æ›´æ–° - InfraCategoryDO updateObj = BeanUtils.toBean(updateReqVO, InfraCategoryDO.class); - categoryMapper.updateById(updateObj); - } - - @Override - public void deleteCategory(Long id) { - // 校验存在 - validateCategoryExists(id); - // æ ¡éªŒæ˜¯å¦æœ‰å­åˆ†ç±» - if (categoryMapper.selectCountByParentId(id) > 0) { - throw exception(CATEGORY_EXITS_CHILDREN); - } - // 删除 - categoryMapper.deleteById(id); - } - - private void validateCategoryExists(Long id) { - if (categoryMapper.selectById(id) == null) { - throw exception(CATEGORY_NOT_EXISTS); - } - } - - private void validateParentCategory(Long id, Long parentId) { - if (parentId == null || CategoryDO.PARENT_ID_ROOT.equals(parentId)) { - return; - } - // 1. ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶åˆ†ç±» - if (Objects.equals(id, parentId)) { - throw exception(CATEGORY_PARENT_ERROR); - } - // 2. 父分类ä¸å­˜åœ¨ - CategoryDO parentCategory = categoryMapper.selectById(parentId); - if (parentCategory == null) { - throw exception(CATEGORY_PARENT_NOT_EXITS); - } - // 3. 递归校验父分类,如果父分类是自己的å­åˆ†ç±»ï¼Œåˆ™æŠ¥é”™ï¼Œé¿å…å½¢æˆçŽ¯è·¯ - if (id == null) { // id 为空,说明新增,ä¸éœ€è¦è€ƒè™‘环路 - return; - } - for (int i = 0; i < Short.MAX_VALUE; i++) { - // 3.1 校验环路 - parentId = parentCategory.getParentId(); - if (Objects.equals(id, parentId)) { - throw exception(CATEGORY_PARENT_IS_CHILD); - } - // 3.2 继续递归下一级父分类 - if (parentId == null || CategoryDO.PARENT_ID_ROOT.equals(parentId)) { - break; - } - parentCategory = categoryMapper.selectById(parentId); - if (parentCategory == null) { - break; - } - } - } - - private void validateCategoryNameUnique(Long id, Long parentId, String name) { - CategoryDO category = categoryMapper.selectByParentIdAndName(parentId, name); - if (category == null) { - return; - } - // 如果 id 为空,说明ä¸ç”¨æ¯”较是å¦ä¸ºç›¸åŒ id 的分类 - if (id == null) { - throw exception(CATEGORY_NAME_DUPLICATE); - } - if (!Objects.equals(category.getId(), id)) { - throw exception(CATEGORY_NAME_DUPLICATE); - } - } - - @Override - public InfraCategoryDO getCategory(Long id) { - return categoryMapper.selectById(id); - } - - @Override - public List getCategoryList(InfraCategoryListReqVO listReqVO) { - return categoryMapper.selectList(listReqVO); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryServiceImplTest b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryServiceImplTest deleted file mode 100644 index efb70fd..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryServiceImplTest +++ /dev/null @@ -1,129 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraCategoryMapper; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -/** - * {@link InfraCategoryServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(InfraCategoryServiceImpl.class) -public class InfraCategoryServiceImplTest extends BaseDbUnitTest { - - @Resource - private InfraCategoryServiceImpl categoryService; - - @Resource - private InfraCategoryMapper categoryMapper; - - @Test - public void testCreateCategory_success() { - // 准备傿•° - InfraCategorySaveReqVO createReqVO = randomPojo(InfraCategorySaveReqVO.class).setId(null); - - // 调用 - Long categoryId = categoryService.createCategory(createReqVO); - // 断言 - assertNotNull(categoryId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfraCategoryDO category = categoryMapper.selectById(categoryId); - assertPojoEquals(createReqVO, category, "id"); - } - - @Test - public void testUpdateCategory_success() { - // mock æ•°æ® - InfraCategoryDO dbCategory = randomPojo(InfraCategoryDO.class); - categoryMapper.insert(dbCategory);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - InfraCategorySaveReqVO updateReqVO = randomPojo(InfraCategorySaveReqVO.class, o -> { - o.setId(dbCategory.getId()); // 设置更新的 ID - }); - - // 调用 - categoryService.updateCategory(updateReqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - InfraCategoryDO category = categoryMapper.selectById(updateReqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(updateReqVO, category); - } - - @Test - public void testUpdateCategory_notExists() { - // 准备傿•° - InfraCategorySaveReqVO updateReqVO = randomPojo(InfraCategorySaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> categoryService.updateCategory(updateReqVO), CATEGORY_NOT_EXISTS); - } - - @Test - public void testDeleteCategory_success() { - // mock æ•°æ® - InfraCategoryDO dbCategory = randomPojo(InfraCategoryDO.class); - categoryMapper.insert(dbCategory);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbCategory.getId(); - - // 调用 - categoryService.deleteCategory(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(categoryMapper.selectById(id)); - } - - @Test - public void testDeleteCategory_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> categoryService.deleteCategory(id), CATEGORY_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需è¦çš„值,然åŽåˆ é™¤ @Disabled 注解 - public void testGetCategoryList() { - // mock æ•°æ® - InfraCategoryDO dbCategory = randomPojo(InfraCategoryDO.class, o -> { // 等会查询到 - o.setName(null); - }); - categoryMapper.insert(dbCategory); - // 测试 name ä¸åŒ¹é… - categoryMapper.insert(cloneIgnoreId(dbCategory, o -> o.setName(null))); - // 准备傿•° - InfraCategoryListReqVO reqVO = new InfraCategoryListReqVO(); - reqVO.setName(null); - - // 调用 - List list = categoryService.getCategoryList(reqVO); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(dbCategory, list.get(0)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/js/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/js/index deleted file mode 100644 index 1e6ffdc..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/js/index +++ /dev/null @@ -1,53 +0,0 @@ -import request from '@/utils/request' - -// 创建分类 -export function createCategory(data) { - return request({ - url: '/infra/category/create', - method: 'post', - data: data - }) -} - -// 更新分类 -export function updateCategory(data) { - return request({ - url: '/infra/category/update', - method: 'put', - data: data - }) -} - -// 删除分类 -export function deleteCategory(id) { - return request({ - url: '/infra/category/delete?id=' + id, - method: 'delete' - }) -} - -// 获得分类 -export function getCategory(id) { - return request({ - url: '/infra/category/get?id=' + id, - method: 'get' - }) -} - -// 获得分类列表 -export function getCategoryList(params) { - return request({ - url: '/infra/category/list', - method: 'get', - params - }) -} -// 导出分类 Excel -export function exportCategoryExcel(params) { - return request({ - url: '/infra/category/export-excel', - method: 'get', - params, - responseType: 'blob' - }) -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/sql/h2 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/sql/h2 deleted file mode 100644 index 4141766..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/sql/h2 +++ /dev/null @@ -1,10 +0,0 @@ --- 将该建表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "infra_category" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "description" bigint NOT NULL, - PRIMARY KEY ("id") -) COMMENT '分类表'; - --- 将该删表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/clean.sql 文件里 -DELETE FROM "infra_category"; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/sql/sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/sql/sql deleted file mode 100644 index 8140948..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/sql/sql +++ /dev/null @@ -1,55 +0,0 @@ --- èœå• SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status, component_name -) -VALUES ( - '分类管ç†', '', 2, 0, 888, - 'category', '', 'infra/demo/index', 0, 'InfraCategory' -); - --- 按钮父èœå•ID --- æš‚æ—¶åªæ”¯æŒ MySQL。如果你是 Oracleã€PostgreSQLã€SQLServer çš„è¯ï¼Œéœ€è¦æ‰‹åŠ¨ä¿®æ”¹ @parentId çš„éƒ¨åˆ†çš„ä»£ç  -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '分类查询', 'infra:category:query', 3, 1, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '分类创建', 'infra:category:create', 3, 2, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '分类更新', 'infra:category:update', 3, 3, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '分类删除', 'infra:category:delete', 3, 4, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '分类导出', 'infra:category:export', 3, 5, @parentId, - '', '', '', 0 -); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/vue/CategoryForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/vue/CategoryForm deleted file mode 100644 index 7fa06e8..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/vue/CategoryForm +++ /dev/null @@ -1,130 +0,0 @@ - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/vue/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/vue/index deleted file mode 100644 index 88da682..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/vue/index +++ /dev/null @@ -1,161 +0,0 @@ - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/xml/InfraCategoryMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/xml/InfraCategoryMapper deleted file mode 100644 index 025ac85..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue2_tree/xml/InfraCategoryMapper +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/assert.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/assert.json deleted file mode 100644 index 0937ba9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/assert.json +++ /dev/null @@ -1,73 +0,0 @@ -[ { - "contentPath" : "java/InfraStudentPageReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentPageReqVO.java" -}, { - "contentPath" : "java/InfraStudentRespVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentRespVO.java" -}, { - "contentPath" : "java/InfraStudentSaveReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentSaveReqVO.java" -}, { - "contentPath" : "java/InfraStudentController", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/InfraStudentController.java" -}, { - "contentPath" : "java/InfraStudentDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentDO.java" -}, { - "contentPath" : "java/InfraStudentContactDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentContactDO.java" -}, { - "contentPath" : "java/InfraStudentTeacherDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentTeacherDO.java" -}, { - "contentPath" : "java/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentMapper.java" -}, { - "contentPath" : "java/InfraStudentContactMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentContactMapper.java" -}, { - "contentPath" : "java/InfraStudentTeacherMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentTeacherMapper.java" -}, { - "contentPath" : "xml/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/resources/mapper/demo/InfraStudentMapper.xml" -}, { - "contentPath" : "java/InfraStudentServiceImpl", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImpl.java" -}, { - "contentPath" : "java/InfraStudentService", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentService.java" -}, { - "contentPath" : "java/InfraStudentServiceImplTest", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImplTest.java" -}, { - "contentPath" : "java/ErrorCodeConstants_手动æ“作", - "filePath" : "yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants_手动æ“作.java" -}, { - "contentPath" : "sql/sql", - "filePath" : "sql/sql.sql" -}, { - "contentPath" : "sql/h2", - "filePath" : "sql/h2.sql" -}, { - "contentPath" : "vue/index", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/index.vue" -}, { - "contentPath" : "vue/StudentForm", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/StudentForm.vue" -}, { - "contentPath" : "vue/StudentContactForm", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/components/StudentContactForm.vue" -}, { - "contentPath" : "vue/StudentTeacherForm", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/components/StudentTeacherForm.vue" -}, { - "contentPath" : "vue/StudentContactList", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/components/StudentContactList.vue" -}, { - "contentPath" : "vue/StudentTeacherList", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/components/StudentTeacherList.vue" -}, { - "contentPath" : "ts/index", - "filePath" : "yudao-ui-admin-vue3/src/api/infra/demo/index.ts" -} ] \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/ErrorCodeConstants_手动æ“作 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/ErrorCodeConstants_手动æ“作 deleted file mode 100644 index d3201de..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/ErrorCodeConstants_手动æ“作 +++ /dev/null @@ -1,6 +0,0 @@ -// TODO 待办:请将下é¢çš„错误ç å¤åˆ¶åˆ° yudao-module-infra-api 模å—çš„ ErrorCodeConstants 类中。注æ„,请给“TODO 补充编å·â€è®¾ç½®ä¸€ä¸ªé”™è¯¯ç ç¼–å·ï¼ï¼ï¼ -// ========== 学生 TODO è¡¥å……ç¼–å· ========== -ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生ä¸å­˜åœ¨"); -ErrorCode STUDENT_CONTACT_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生è”系人ä¸å­˜åœ¨"); -ErrorCode STUDENT_TEACHER_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生ç­ä¸»ä»»ä¸å­˜åœ¨"); -ErrorCode STUDENT_TEACHER_EXISTS = new ErrorCode(TODO 补充编å·, "学生ç­ä¸»ä»»å·²å­˜åœ¨"); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentContactDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentContactDO deleted file mode 100644 index 17c668e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentContactDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生è”系人 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_contact") -@KeySequence("infra_student_contact_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentContactDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentContactMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentContactMapper deleted file mode 100644 index ca662d1..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentContactMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生è”系人 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentContactMapper extends BaseMapperX { - - default PageResult selectPage(PageParam reqVO, Long studentId) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eq(InfraStudentContactDO::getStudentId, studentId) - .orderByDesc(InfraStudentContactDO::getId)); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentContactDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentController b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentController deleted file mode 100644 index d6f2018..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentController +++ /dev/null @@ -1,183 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.module.infra.service.demo.InfraStudentService; - -@Tag(name = "管ç†åŽå° - 学生") -@RestController -@RequestMapping("/infra/student") -@Validated -public class InfraStudentController { - - @Resource - private InfraStudentService studentService; - - @PostMapping("/create") - @Operation(summary = "创建学生") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudent(@Valid @RequestBody InfraStudentSaveReqVO createReqVO) { - return success(studentService.createStudent(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新学生") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudent(@Valid @RequestBody InfraStudentSaveReqVO updateReqVO) { - studentService.updateStudent(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除学生") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudent(@RequestParam("id") Long id) { - studentService.deleteStudent(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得学生") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudent(@RequestParam("id") Long id) { - InfraStudentDO student = studentService.getStudent(id); - return success(BeanUtils.toBean(student, InfraStudentRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得学生分页") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentPage(@Valid InfraStudentPageReqVO pageReqVO) { - PageResult pageResult = studentService.getStudentPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, InfraStudentRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出学生 Excel") - @PreAuthorize("@ss.hasPermission('infra:student:export')") - @OperateLog(type = EXPORT) - public void exportStudentExcel(@Valid InfraStudentPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = studentService.getStudentPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "学生.xls", "æ•°æ®", InfraStudentRespVO.class, - BeanUtils.toBean(list, InfraStudentRespVO.class)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @GetMapping("/student-contact/page") - @Operation(summary = "获得学生è”系人分页") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentContactPage(PageParam pageReqVO, - @RequestParam("studentId") Long studentId) { - return success(studentService.getStudentContactPage(pageReqVO, studentId)); - } - - @PostMapping("/student-contact/create") - @Operation(summary = "创建学生è”系人") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudentContact(@Valid @RequestBody InfraStudentContactDO studentContact) { - return success(studentService.createStudentContact(studentContact)); - } - - @PutMapping("/student-contact/update") - @Operation(summary = "更新学生è”系人") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudentContact(@Valid @RequestBody InfraStudentContactDO studentContact) { - studentService.updateStudentContact(studentContact); - return success(true); - } - - @DeleteMapping("/student-contact/delete") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @Operation(summary = "删除学生è”系人") - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudentContact(@RequestParam("id") Long id) { - studentService.deleteStudentContact(id); - return success(true); - } - - @GetMapping("/student-contact/get") - @Operation(summary = "获得学生è”系人") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudentContact(@RequestParam("id") Long id) { - return success(studentService.getStudentContact(id)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @GetMapping("/student-teacher/page") - @Operation(summary = "获得学生ç­ä¸»ä»»åˆ†é¡µ") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentTeacherPage(PageParam pageReqVO, - @RequestParam("studentId") Long studentId) { - return success(studentService.getStudentTeacherPage(pageReqVO, studentId)); - } - - @PostMapping("/student-teacher/create") - @Operation(summary = "创建学生ç­ä¸»ä»»") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudentTeacher(@Valid @RequestBody InfraStudentTeacherDO studentTeacher) { - return success(studentService.createStudentTeacher(studentTeacher)); - } - - @PutMapping("/student-teacher/update") - @Operation(summary = "更新学生ç­ä¸»ä»»") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudentTeacher(@Valid @RequestBody InfraStudentTeacherDO studentTeacher) { - studentService.updateStudentTeacher(studentTeacher); - return success(true); - } - - @DeleteMapping("/student-teacher/delete") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @Operation(summary = "删除学生ç­ä¸»ä»»") - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudentTeacher(@RequestParam("id") Long id) { - studentService.deleteStudentTeacher(id); - return success(true); - } - - @GetMapping("/student-teacher/get") - @Operation(summary = "获得学生ç­ä¸»ä»»") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudentTeacher(@RequestParam("id") Long id) { - return success(studentService.getStudentTeacher(id)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentDO deleted file mode 100644 index b0d4bd2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentDO +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student") -@KeySequence("infra_student_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentMapper deleted file mode 100644 index 34e70a0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; - -/** - * 学生 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentMapper extends BaseMapperX { - - default PageResult selectPage(InfraStudentPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(InfraStudentDO::getName, reqVO.getName()) - .eqIfPresent(InfraStudentDO::getBirthday, reqVO.getBirthday()) - .eqIfPresent(InfraStudentDO::getSex, reqVO.getSex()) - .eqIfPresent(InfraStudentDO::getEnabled, reqVO.getEnabled()) - .betweenIfPresent(InfraStudentDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(InfraStudentDO::getId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentPageReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentPageReqVO deleted file mode 100644 index 41a3730..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentPageReqVO +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 学生分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class InfraStudentPageReqVO extends PageParam { - - @Schema(description = "åå­—", example = "芋头") - private String name; - - @Schema(description = "出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", example = "1") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", example = "true") - private Boolean enabled; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentRespVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentRespVO deleted file mode 100644 index c41a550..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentRespVO +++ /dev/null @@ -1,60 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; -import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; -import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; - -@Schema(description = "管ç†åŽå° - 学生 Response VO") -@Data -@ExcelIgnoreUnannotated -public class InfraStudentRespVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("ç¼–å·") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @ExcelProperty("åå­—") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @ExcelProperty("简介") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "性别", converter = DictConvert.class) - @DictFormat("system_user_sex") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @ExcelProperty(value = "æ˜¯å¦æœ‰æ•ˆ", converter = DictConvert.class) - @DictFormat("infra_boolean_string") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @ExcelProperty("头åƒ") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @ExcelProperty("附件") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @ExcelProperty("备注") - private String memo; - - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentSaveReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentSaveReqVO deleted file mode 100644 index eaadf74..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentSaveReqVO +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; - -@Schema(description = "管ç†åŽå° - 学生新增/修改 Request VO") -@Data -public class InfraStudentSaveReqVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @NotEmpty(message = "åå­—ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @NotEmpty(message = "简介ä¸èƒ½ä¸ºç©º") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "出生日期ä¸èƒ½ä¸ºç©º") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "性别ä¸èƒ½ä¸ºç©º") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @NotNull(message = "æ˜¯å¦æœ‰æ•ˆä¸èƒ½ä¸ºç©º") - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @NotEmpty(message = "头åƒä¸èƒ½ä¸ºç©º") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @NotEmpty(message = "附件ä¸èƒ½ä¸ºç©º") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @NotEmpty(message = "备注ä¸èƒ½ä¸ºç©º") - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentService b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentService deleted file mode 100644 index 7df090d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentService +++ /dev/null @@ -1,139 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -/** - * 学生 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfraStudentService { - - /** - * 创建学生 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudent(@Valid InfraStudentSaveReqVO createReqVO); - - /** - * 更新学生 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateStudent(@Valid InfraStudentSaveReqVO updateReqVO); - - /** - * 删除学生 - * - * @param id ç¼–å· - */ - void deleteStudent(Long id); - - /** - * 获得学生 - * - * @param id ç¼–å· - * @return 学生 - */ - InfraStudentDO getStudent(Long id); - - /** - * 获得学生分页 - * - * @param pageReqVO 分页查询 - * @return 学生分页 - */ - PageResult getStudentPage(InfraStudentPageReqVO pageReqVO); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - /** - * 获得学生è”系人分页 - * - * @param pageReqVO 分页查询 - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生è”系人分页 - */ - PageResult getStudentContactPage(PageParam pageReqVO, Long studentId); - - /** - * 创建学生è”系人 - * - * @param studentContact åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudentContact(@Valid InfraStudentContactDO studentContact); - - /** - * 更新学生è”系人 - * - * @param studentContact æ›´æ–°ä¿¡æ¯ - */ - void updateStudentContact(@Valid InfraStudentContactDO studentContact); - - /** - * 删除学生è”系人 - * - * @param id ç¼–å· - */ - void deleteStudentContact(Long id); - - /** - * 获得学生è”系人 - * - * @param id ç¼–å· - * @return 学生è”系人 - */ - InfraStudentContactDO getStudentContact(Long id); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - /** - * 获得学生ç­ä¸»ä»»åˆ†é¡µ - * - * @param pageReqVO 分页查询 - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生ç­ä¸»ä»»åˆ†é¡µ - */ - PageResult getStudentTeacherPage(PageParam pageReqVO, Long studentId); - - /** - * 创建学生ç­ä¸»ä»» - * - * @param studentTeacher åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudentTeacher(@Valid InfraStudentTeacherDO studentTeacher); - - /** - * 更新学生ç­ä¸»ä»» - * - * @param studentTeacher æ›´æ–°ä¿¡æ¯ - */ - void updateStudentTeacher(@Valid InfraStudentTeacherDO studentTeacher); - - /** - * 删除学生ç­ä¸»ä»» - * - * @param id ç¼–å· - */ - void deleteStudentTeacher(Long id); - - /** - * 获得学生ç­ä¸»ä»» - * - * @param id ç¼–å· - * @return 学生ç­ä¸»ä»» - */ - InfraStudentTeacherDO getStudentTeacher(Long id); - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentServiceImpl b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentServiceImpl deleted file mode 100644 index 793b2dd..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentServiceImpl +++ /dev/null @@ -1,180 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentContactMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentTeacherMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; - -/** - * 学生 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfraStudentServiceImpl implements InfraStudentService { - - @Resource - private InfraStudentMapper studentMapper; - @Resource - private InfraStudentContactMapper studentContactMapper; - @Resource - private InfraStudentTeacherMapper studentTeacherMapper; - - @Override - public Long createStudent(InfraStudentSaveReqVO createReqVO) { - // æ’å…¥ - InfraStudentDO student = BeanUtils.toBean(createReqVO, InfraStudentDO.class); - studentMapper.insert(student); - // 返回 - return student.getId(); - } - - @Override - public void updateStudent(InfraStudentSaveReqVO updateReqVO) { - // 校验存在 - validateStudentExists(updateReqVO.getId()); - // æ›´æ–° - InfraStudentDO updateObj = BeanUtils.toBean(updateReqVO, InfraStudentDO.class); - studentMapper.updateById(updateObj); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteStudent(Long id) { - // 校验存在 - validateStudentExists(id); - // 删除 - studentMapper.deleteById(id); - - // 删除å­è¡¨ - deleteStudentContactByStudentId(id); - deleteStudentTeacherByStudentId(id); - } - - private void validateStudentExists(Long id) { - if (studentMapper.selectById(id) == null) { - throw exception(STUDENT_NOT_EXISTS); - } - } - - @Override - public InfraStudentDO getStudent(Long id) { - return studentMapper.selectById(id); - } - - @Override - public PageResult getStudentPage(InfraStudentPageReqVO pageReqVO) { - return studentMapper.selectPage(pageReqVO); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @Override - public PageResult getStudentContactPage(PageParam pageReqVO, Long studentId) { - return studentContactMapper.selectPage(pageReqVO, studentId); - } - - @Override - public Long createStudentContact(InfraStudentContactDO studentContact) { - studentContactMapper.insert(studentContact); - return studentContact.getId(); - } - - @Override - public void updateStudentContact(InfraStudentContactDO studentContact) { - // 校验存在 - validateStudentContactExists(studentContact.getId()); - // æ›´æ–° - studentContactMapper.updateById(studentContact); - } - - @Override - public void deleteStudentContact(Long id) { - // 校验存在 - validateStudentContactExists(id); - // 删除 - studentContactMapper.deleteById(id); - } - - @Override - public InfraStudentContactDO getStudentContact(Long id) { - return studentContactMapper.selectById(id); - } - - private void validateStudentContactExists(Long id) { - if (studentContactMapper.selectById(id) == null) { - throw exception(STUDENT_CONTACT_NOT_EXISTS); - } - } - - private void deleteStudentContactByStudentId(Long studentId) { - studentContactMapper.deleteByStudentId(studentId); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @Override - public PageResult getStudentTeacherPage(PageParam pageReqVO, Long studentId) { - return studentTeacherMapper.selectPage(pageReqVO, studentId); - } - - @Override - public Long createStudentTeacher(InfraStudentTeacherDO studentTeacher) { - // 校验是å¦å·²ç»å­˜åœ¨ - if (studentTeacherMapper.selectByStudentId(studentTeacher.getStudentId()) != null) { - throw exception(STUDENT_TEACHER_EXISTS); - } - // æ’å…¥ - studentTeacherMapper.insert(studentTeacher); - return studentTeacher.getId(); - } - - @Override - public void updateStudentTeacher(InfraStudentTeacherDO studentTeacher) { - // 校验存在 - validateStudentTeacherExists(studentTeacher.getId()); - // æ›´æ–° - studentTeacherMapper.updateById(studentTeacher); - } - - @Override - public void deleteStudentTeacher(Long id) { - // 校验存在 - validateStudentTeacherExists(id); - // 删除 - studentTeacherMapper.deleteById(id); - } - - @Override - public InfraStudentTeacherDO getStudentTeacher(Long id) { - return studentTeacherMapper.selectById(id); - } - - private void validateStudentTeacherExists(Long id) { - if (studentTeacherMapper.selectById(id) == null) { - throw exception(STUDENT_TEACHER_NOT_EXISTS); - } - } - - private void deleteStudentTeacherByStudentId(Long studentId) { - studentTeacherMapper.deleteByStudentId(studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentServiceImplTest b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentServiceImplTest deleted file mode 100644 index b5f4bf0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentServiceImplTest +++ /dev/null @@ -1,146 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -/** - * {@link InfraStudentServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(InfraStudentServiceImpl.class) -public class InfraStudentServiceImplTest extends BaseDbUnitTest { - - @Resource - private InfraStudentServiceImpl studentService; - - @Resource - private InfraStudentMapper studentMapper; - - @Test - public void testCreateStudent_success() { - // 准备傿•° - InfraStudentSaveReqVO createReqVO = randomPojo(InfraStudentSaveReqVO.class).setId(null); - - // 调用 - Long studentId = studentService.createStudent(createReqVO); - // 断言 - assertNotNull(studentId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(studentId); - assertPojoEquals(createReqVO, student, "id"); - } - - @Test - public void testUpdateStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class, o -> { - o.setId(dbStudent.getId()); // 设置更新的 ID - }); - - // 调用 - studentService.updateStudent(updateReqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(updateReqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(updateReqVO, student); - } - - @Test - public void testUpdateStudent_notExists() { - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.updateStudent(updateReqVO), STUDENT_NOT_EXISTS); - } - - @Test - public void testDeleteStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbStudent.getId(); - - // 调用 - studentService.deleteStudent(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(studentMapper.selectById(id)); - } - - @Test - public void testDeleteStudent_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.deleteStudent(id), STUDENT_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需è¦çš„值,然åŽåˆ é™¤ @Disabled 注解 - public void testGetStudentPage() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class, o -> { // 等会查询到 - o.setName(null); - o.setBirthday(null); - o.setSex(null); - o.setEnabled(null); - o.setCreateTime(null); - }); - studentMapper.insert(dbStudent); - // 测试 name ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setName(null))); - // 测试 birthday ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setBirthday(null))); - // 测试 sex ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setSex(null))); - // 测试 enabled ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setEnabled(null))); - // 测试 createTime ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setCreateTime(null))); - // 准备傿•° - InfraStudentPageReqVO reqVO = new InfraStudentPageReqVO(); - reqVO.setName(null); - reqVO.setBirthday(null); - reqVO.setSex(null); - reqVO.setEnabled(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = studentService.getStudentPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbStudent, pageResult.getList().get(0)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentTeacherDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentTeacherDO deleted file mode 100644 index c19cf9f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentTeacherDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生ç­ä¸»ä»» DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_teacher") -@KeySequence("infra_student_teacher_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentTeacherDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentTeacherMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentTeacherMapper deleted file mode 100644 index 994212d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/java/InfraStudentTeacherMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生ç­ä¸»ä»» Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentTeacherMapper extends BaseMapperX { - - default PageResult selectPage(PageParam reqVO, Long studentId) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eq(InfraStudentTeacherDO::getStudentId, studentId) - .orderByDesc(InfraStudentTeacherDO::getId)); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentTeacherDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/sql/h2 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/sql/h2 deleted file mode 100644 index 6c1875f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/sql/h2 +++ /dev/null @@ -1,17 +0,0 @@ --- 将该建表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "infra_student" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "description" varchar NOT NULL, - "birthday" varchar NOT NULL, - "sex" int NOT NULL, - "enabled" bit NOT NULL, - "avatar" varchar NOT NULL, - "video" varchar NOT NULL, - "memo" varchar NOT NULL, - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY ("id") -) COMMENT '学生表'; - --- 将该删表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/clean.sql 文件里 -DELETE FROM "infra_student"; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/sql/sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/sql/sql deleted file mode 100644 index 83df279..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/sql/sql +++ /dev/null @@ -1,55 +0,0 @@ --- èœå• SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status, component_name -) -VALUES ( - '学生管ç†', '', 2, 0, 888, - 'student', '', 'infra/demo/index', 0, 'InfraStudent' -); - --- 按钮父èœå•ID --- æš‚æ—¶åªæ”¯æŒ MySQL。如果你是 Oracleã€PostgreSQLã€SQLServer çš„è¯ï¼Œéœ€è¦æ‰‹åŠ¨ä¿®æ”¹ @parentId çš„éƒ¨åˆ†çš„ä»£ç  -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生查询', 'infra:student:query', 3, 1, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生创建', 'infra:student:create', 3, 2, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生更新', 'infra:student:update', 3, 3, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生删除', 'infra:student:delete', 3, 4, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生导出', 'infra:student:export', 3, 5, @parentId, - '', '', '', 0 -); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/ts/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/ts/index deleted file mode 100644 index 2fe87b7..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/ts/index +++ /dev/null @@ -1,95 +0,0 @@ -import request from '@/config/axios' - -export interface StudentVO { - id: number - name: string - description: string - birthday: Date - sex: number - enabled: boolean - avatar: string - video: string - memo: string -} - -// 查询学生分页 -export const getStudentPage = async (params) => { - return await request.get({ url: `/infra/student/page`, params }) -} - -// 查询学生详情 -export const getStudent = async (id: number) => { - return await request.get({ url: `/infra/student/get?id=` + id }) -} - -// 新增学生 -export const createStudent = async (data: StudentVO) => { - return await request.post({ url: `/infra/student/create`, data }) -} - -// 修改学生 -export const updateStudent = async (data: StudentVO) => { - return await request.put({ url: `/infra/student/update`, data }) -} - -// 删除学生 -export const deleteStudent = async (id: number) => { - return await request.delete({ url: `/infra/student/delete?id=` + id }) -} - -// 导出学生 Excel -export const exportStudent = async (params) => { - return await request.download({ url: `/infra/student/export-excel`, params }) -} - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - -// 获得学生è”系人分页 -export const getStudentContactPage = async (params) => { - return await request.get({ url: `/infra/student/student-contact/page`, params }) -} -// 新增学生è”系人 -export const createStudentContact = async (data) => { - return await request.post({ url: `/infra/student/student-contact/create`, data }) -} - -// 修改学生è”系人 -export const updateStudentContact = async (data) => { - return await request.put({ url: `/infra/student/student-contact/update`, data }) -} - -// 删除学生è”系人 -export const deleteStudentContact = async (id: number) => { - return await request.delete({ url: `/infra/student/student-contact/delete?id=` + id }) -} - -// 获得学生è”系人 -export const getStudentContact = async (id: number) => { - return await request.get({ url: `/infra/student/student-contact/get?id=` + id }) -} - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - -// 获得学生ç­ä¸»ä»»åˆ†é¡µ -export const getStudentTeacherPage = async (params) => { - return await request.get({ url: `/infra/student/student-teacher/page`, params }) -} -// 新增学生ç­ä¸»ä»» -export const createStudentTeacher = async (data) => { - return await request.post({ url: `/infra/student/student-teacher/create`, data }) -} - -// 修改学生ç­ä¸»ä»» -export const updateStudentTeacher = async (data) => { - return await request.put({ url: `/infra/student/student-teacher/update`, data }) -} - -// 删除学生ç­ä¸»ä»» -export const deleteStudentTeacher = async (id: number) => { - return await request.delete({ url: `/infra/student/student-teacher/delete?id=` + id }) -} - -// 获得学生ç­ä¸»ä»» -export const getStudentTeacher = async (id: number) => { - return await request.get({ url: `/infra/student/student-teacher/get?id=` + id }) -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentContactForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentContactForm deleted file mode 100644 index 4a13935..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentContactForm +++ /dev/null @@ -1,155 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentContactList b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentContactList deleted file mode 100644 index eada66a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentContactList +++ /dev/null @@ -1,146 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentForm deleted file mode 100644 index 0dabcb5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentForm +++ /dev/null @@ -1,152 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentTeacherForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentTeacherForm deleted file mode 100644 index f93c21c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentTeacherForm +++ /dev/null @@ -1,155 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentTeacherList b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentTeacherList deleted file mode 100644 index 1eba0a3..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/StudentTeacherList +++ /dev/null @@ -1,146 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/index deleted file mode 100644 index 9d15146..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/vue/index +++ /dev/null @@ -1,278 +0,0 @@ - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/xml/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/xml/InfraStudentMapper deleted file mode 100644 index 155aa5c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_erp/xml/InfraStudentMapper +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/assert.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/assert.json deleted file mode 100644 index 0937ba9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/assert.json +++ /dev/null @@ -1,73 +0,0 @@ -[ { - "contentPath" : "java/InfraStudentPageReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentPageReqVO.java" -}, { - "contentPath" : "java/InfraStudentRespVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentRespVO.java" -}, { - "contentPath" : "java/InfraStudentSaveReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentSaveReqVO.java" -}, { - "contentPath" : "java/InfraStudentController", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/InfraStudentController.java" -}, { - "contentPath" : "java/InfraStudentDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentDO.java" -}, { - "contentPath" : "java/InfraStudentContactDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentContactDO.java" -}, { - "contentPath" : "java/InfraStudentTeacherDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentTeacherDO.java" -}, { - "contentPath" : "java/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentMapper.java" -}, { - "contentPath" : "java/InfraStudentContactMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentContactMapper.java" -}, { - "contentPath" : "java/InfraStudentTeacherMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentTeacherMapper.java" -}, { - "contentPath" : "xml/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/resources/mapper/demo/InfraStudentMapper.xml" -}, { - "contentPath" : "java/InfraStudentServiceImpl", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImpl.java" -}, { - "contentPath" : "java/InfraStudentService", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentService.java" -}, { - "contentPath" : "java/InfraStudentServiceImplTest", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImplTest.java" -}, { - "contentPath" : "java/ErrorCodeConstants_手动æ“作", - "filePath" : "yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants_手动æ“作.java" -}, { - "contentPath" : "sql/sql", - "filePath" : "sql/sql.sql" -}, { - "contentPath" : "sql/h2", - "filePath" : "sql/h2.sql" -}, { - "contentPath" : "vue/index", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/index.vue" -}, { - "contentPath" : "vue/StudentForm", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/StudentForm.vue" -}, { - "contentPath" : "vue/StudentContactForm", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/components/StudentContactForm.vue" -}, { - "contentPath" : "vue/StudentTeacherForm", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/components/StudentTeacherForm.vue" -}, { - "contentPath" : "vue/StudentContactList", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/components/StudentContactList.vue" -}, { - "contentPath" : "vue/StudentTeacherList", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/components/StudentTeacherList.vue" -}, { - "contentPath" : "ts/index", - "filePath" : "yudao-ui-admin-vue3/src/api/infra/demo/index.ts" -} ] \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/ErrorCodeConstants_手动æ“作 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/ErrorCodeConstants_手动æ“作 deleted file mode 100644 index f8be662..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/ErrorCodeConstants_手动æ“作 +++ /dev/null @@ -1,3 +0,0 @@ -// TODO 待办:请将下é¢çš„错误ç å¤åˆ¶åˆ° yudao-module-infra-api 模å—çš„ ErrorCodeConstants 类中。注æ„,请给“TODO 补充编å·â€è®¾ç½®ä¸€ä¸ªé”™è¯¯ç ç¼–å·ï¼ï¼ï¼ -// ========== 学生 TODO è¡¥å……ç¼–å· ========== -ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生ä¸å­˜åœ¨"); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentContactDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentContactDO deleted file mode 100644 index 17c668e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentContactDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生è”系人 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_contact") -@KeySequence("infra_student_contact_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentContactDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentContactMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentContactMapper deleted file mode 100644 index 35bbd53..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentContactMapper +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生è”系人 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentContactMapper extends BaseMapperX { - - default List selectListByStudentId(Long studentId) { - return selectList(InfraStudentContactDO::getStudentId, studentId); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentContactDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentController b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentController deleted file mode 100644 index b9a587b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentController +++ /dev/null @@ -1,117 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.module.infra.service.demo.InfraStudentService; - -@Tag(name = "管ç†åŽå° - 学生") -@RestController -@RequestMapping("/infra/student") -@Validated -public class InfraStudentController { - - @Resource - private InfraStudentService studentService; - - @PostMapping("/create") - @Operation(summary = "创建学生") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudent(@Valid @RequestBody InfraStudentSaveReqVO createReqVO) { - return success(studentService.createStudent(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新学生") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudent(@Valid @RequestBody InfraStudentSaveReqVO updateReqVO) { - studentService.updateStudent(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除学生") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudent(@RequestParam("id") Long id) { - studentService.deleteStudent(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得学生") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudent(@RequestParam("id") Long id) { - InfraStudentDO student = studentService.getStudent(id); - return success(BeanUtils.toBean(student, InfraStudentRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得学生分页") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentPage(@Valid InfraStudentPageReqVO pageReqVO) { - PageResult pageResult = studentService.getStudentPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, InfraStudentRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出学生 Excel") - @PreAuthorize("@ss.hasPermission('infra:student:export')") - @OperateLog(type = EXPORT) - public void exportStudentExcel(@Valid InfraStudentPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = studentService.getStudentPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "学生.xls", "æ•°æ®", InfraStudentRespVO.class, - BeanUtils.toBean(list, InfraStudentRespVO.class)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @GetMapping("/student-contact/list-by-student-id") - @Operation(summary = "获得学生è”系人列表") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentContactListByStudentId(@RequestParam("studentId") Long studentId) { - return success(studentService.getStudentContactListByStudentId(studentId)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @GetMapping("/student-teacher/get-by-student-id") - @Operation(summary = "获得学生ç­ä¸»ä»»") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudentTeacherByStudentId(@RequestParam("studentId") Long studentId) { - return success(studentService.getStudentTeacherByStudentId(studentId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentDO deleted file mode 100644 index b0d4bd2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentDO +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student") -@KeySequence("infra_student_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentMapper deleted file mode 100644 index 34e70a0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; - -/** - * 学生 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentMapper extends BaseMapperX { - - default PageResult selectPage(InfraStudentPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(InfraStudentDO::getName, reqVO.getName()) - .eqIfPresent(InfraStudentDO::getBirthday, reqVO.getBirthday()) - .eqIfPresent(InfraStudentDO::getSex, reqVO.getSex()) - .eqIfPresent(InfraStudentDO::getEnabled, reqVO.getEnabled()) - .betweenIfPresent(InfraStudentDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(InfraStudentDO::getId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentPageReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentPageReqVO deleted file mode 100644 index 41a3730..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentPageReqVO +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 学生分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class InfraStudentPageReqVO extends PageParam { - - @Schema(description = "åå­—", example = "芋头") - private String name; - - @Schema(description = "出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", example = "1") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", example = "true") - private Boolean enabled; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentRespVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentRespVO deleted file mode 100644 index c41a550..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentRespVO +++ /dev/null @@ -1,60 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; -import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; -import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; - -@Schema(description = "管ç†åŽå° - 学生 Response VO") -@Data -@ExcelIgnoreUnannotated -public class InfraStudentRespVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("ç¼–å·") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @ExcelProperty("åå­—") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @ExcelProperty("简介") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "性别", converter = DictConvert.class) - @DictFormat("system_user_sex") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @ExcelProperty(value = "æ˜¯å¦æœ‰æ•ˆ", converter = DictConvert.class) - @DictFormat("infra_boolean_string") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @ExcelProperty("头åƒ") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @ExcelProperty("附件") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @ExcelProperty("备注") - private String memo; - - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentSaveReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentSaveReqVO deleted file mode 100644 index faa491d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentSaveReqVO +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; - -@Schema(description = "管ç†åŽå° - 学生新增/修改 Request VO") -@Data -public class InfraStudentSaveReqVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @NotEmpty(message = "åå­—ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @NotEmpty(message = "简介ä¸èƒ½ä¸ºç©º") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "出生日期ä¸èƒ½ä¸ºç©º") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "性别ä¸èƒ½ä¸ºç©º") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @NotNull(message = "æ˜¯å¦æœ‰æ•ˆä¸èƒ½ä¸ºç©º") - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @NotEmpty(message = "头åƒä¸èƒ½ä¸ºç©º") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @NotEmpty(message = "附件ä¸èƒ½ä¸ºç©º") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @NotEmpty(message = "备注ä¸èƒ½ä¸ºç©º") - private String memo; - - @Schema(description = "学生è”系人列表") - private List studentContacts; - - @Schema(description = "学生ç­ä¸»ä»»") - private InfraStudentTeacherDO studentTeacher; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentService b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentService deleted file mode 100644 index afa7d22..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentService +++ /dev/null @@ -1,77 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -/** - * 学生 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfraStudentService { - - /** - * 创建学生 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudent(@Valid InfraStudentSaveReqVO createReqVO); - - /** - * 更新学生 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateStudent(@Valid InfraStudentSaveReqVO updateReqVO); - - /** - * 删除学生 - * - * @param id ç¼–å· - */ - void deleteStudent(Long id); - - /** - * 获得学生 - * - * @param id ç¼–å· - * @return 学生 - */ - InfraStudentDO getStudent(Long id); - - /** - * 获得学生分页 - * - * @param pageReqVO 分页查询 - * @return 学生分页 - */ - PageResult getStudentPage(InfraStudentPageReqVO pageReqVO); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - /** - * 获得学生è”系人列表 - * - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生è”系人列表 - */ - List getStudentContactListByStudentId(Long studentId); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - /** - * 获得学生ç­ä¸»ä»» - * - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生ç­ä¸»ä»» - */ - InfraStudentTeacherDO getStudentTeacherByStudentId(Long studentId); - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentServiceImpl b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentServiceImpl deleted file mode 100644 index c57cba6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentServiceImpl +++ /dev/null @@ -1,147 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentContactMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentTeacherMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; - -/** - * 学生 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfraStudentServiceImpl implements InfraStudentService { - - @Resource - private InfraStudentMapper studentMapper; - @Resource - private InfraStudentContactMapper studentContactMapper; - @Resource - private InfraStudentTeacherMapper studentTeacherMapper; - - @Override - @Transactional(rollbackFor = Exception.class) - public Long createStudent(InfraStudentSaveReqVO createReqVO) { - // æ’å…¥ - InfraStudentDO student = BeanUtils.toBean(createReqVO, InfraStudentDO.class); - studentMapper.insert(student); - - // æ’å…¥å­è¡¨ - createStudentContactList(student.getId(), createReqVO.getStudentContacts()); - createStudentTeacher(student.getId(), createReqVO.getStudentTeacher()); - // 返回 - return student.getId(); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateStudent(InfraStudentSaveReqVO updateReqVO) { - // 校验存在 - validateStudentExists(updateReqVO.getId()); - // æ›´æ–° - InfraStudentDO updateObj = BeanUtils.toBean(updateReqVO, InfraStudentDO.class); - studentMapper.updateById(updateObj); - - // æ›´æ–°å­è¡¨ - updateStudentContactList(updateReqVO.getId(), updateReqVO.getStudentContacts()); - updateStudentTeacher(updateReqVO.getId(), updateReqVO.getStudentTeacher()); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteStudent(Long id) { - // 校验存在 - validateStudentExists(id); - // 删除 - studentMapper.deleteById(id); - - // 删除å­è¡¨ - deleteStudentContactByStudentId(id); - deleteStudentTeacherByStudentId(id); - } - - private void validateStudentExists(Long id) { - if (studentMapper.selectById(id) == null) { - throw exception(STUDENT_NOT_EXISTS); - } - } - - @Override - public InfraStudentDO getStudent(Long id) { - return studentMapper.selectById(id); - } - - @Override - public PageResult getStudentPage(InfraStudentPageReqVO pageReqVO) { - return studentMapper.selectPage(pageReqVO); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @Override - public List getStudentContactListByStudentId(Long studentId) { - return studentContactMapper.selectListByStudentId(studentId); - } - - private void createStudentContactList(Long studentId, List list) { - list.forEach(o -> o.setStudentId(studentId)); - studentContactMapper.insertBatch(list); - } - - private void updateStudentContactList(Long studentId, List list) { - deleteStudentContactByStudentId(studentId); - list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲çªï¼›2)updateTime 䏿›´æ–° - createStudentContactList(studentId, list); - } - - private void deleteStudentContactByStudentId(Long studentId) { - studentContactMapper.deleteByStudentId(studentId); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @Override - public InfraStudentTeacherDO getStudentTeacherByStudentId(Long studentId) { - return studentTeacherMapper.selectByStudentId(studentId); - } - - private void createStudentTeacher(Long studentId, InfraStudentTeacherDO studentTeacher) { - if (studentTeacher == null) { - return; - } - studentTeacher.setStudentId(studentId); - studentTeacherMapper.insert(studentTeacher); - } - - private void updateStudentTeacher(Long studentId, InfraStudentTeacherDO studentTeacher) { - if (studentTeacher == null) { - return; - } - studentTeacher.setStudentId(studentId); - studentTeacher.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 䏿›´æ–° - studentTeacherMapper.insertOrUpdate(studentTeacher); - } - - private void deleteStudentTeacherByStudentId(Long studentId) { - studentTeacherMapper.deleteByStudentId(studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentServiceImplTest b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentServiceImplTest deleted file mode 100644 index b5f4bf0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentServiceImplTest +++ /dev/null @@ -1,146 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -/** - * {@link InfraStudentServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(InfraStudentServiceImpl.class) -public class InfraStudentServiceImplTest extends BaseDbUnitTest { - - @Resource - private InfraStudentServiceImpl studentService; - - @Resource - private InfraStudentMapper studentMapper; - - @Test - public void testCreateStudent_success() { - // 准备傿•° - InfraStudentSaveReqVO createReqVO = randomPojo(InfraStudentSaveReqVO.class).setId(null); - - // 调用 - Long studentId = studentService.createStudent(createReqVO); - // 断言 - assertNotNull(studentId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(studentId); - assertPojoEquals(createReqVO, student, "id"); - } - - @Test - public void testUpdateStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class, o -> { - o.setId(dbStudent.getId()); // 设置更新的 ID - }); - - // 调用 - studentService.updateStudent(updateReqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(updateReqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(updateReqVO, student); - } - - @Test - public void testUpdateStudent_notExists() { - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.updateStudent(updateReqVO), STUDENT_NOT_EXISTS); - } - - @Test - public void testDeleteStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbStudent.getId(); - - // 调用 - studentService.deleteStudent(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(studentMapper.selectById(id)); - } - - @Test - public void testDeleteStudent_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.deleteStudent(id), STUDENT_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需è¦çš„值,然åŽåˆ é™¤ @Disabled 注解 - public void testGetStudentPage() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class, o -> { // 等会查询到 - o.setName(null); - o.setBirthday(null); - o.setSex(null); - o.setEnabled(null); - o.setCreateTime(null); - }); - studentMapper.insert(dbStudent); - // 测试 name ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setName(null))); - // 测试 birthday ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setBirthday(null))); - // 测试 sex ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setSex(null))); - // 测试 enabled ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setEnabled(null))); - // 测试 createTime ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setCreateTime(null))); - // 准备傿•° - InfraStudentPageReqVO reqVO = new InfraStudentPageReqVO(); - reqVO.setName(null); - reqVO.setBirthday(null); - reqVO.setSex(null); - reqVO.setEnabled(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = studentService.getStudentPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbStudent, pageResult.getList().get(0)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentTeacherDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentTeacherDO deleted file mode 100644 index c19cf9f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentTeacherDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生ç­ä¸»ä»» DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_teacher") -@KeySequence("infra_student_teacher_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentTeacherDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentTeacherMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentTeacherMapper deleted file mode 100644 index 0521bba..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/java/InfraStudentTeacherMapper +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生ç­ä¸»ä»» Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentTeacherMapper extends BaseMapperX { - - default InfraStudentTeacherDO selectByStudentId(Long studentId) { - return selectOne(InfraStudentTeacherDO::getStudentId, studentId); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentTeacherDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/sql/h2 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/sql/h2 deleted file mode 100644 index 6c1875f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/sql/h2 +++ /dev/null @@ -1,17 +0,0 @@ --- 将该建表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "infra_student" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "description" varchar NOT NULL, - "birthday" varchar NOT NULL, - "sex" int NOT NULL, - "enabled" bit NOT NULL, - "avatar" varchar NOT NULL, - "video" varchar NOT NULL, - "memo" varchar NOT NULL, - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY ("id") -) COMMENT '学生表'; - --- 将该删表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/clean.sql 文件里 -DELETE FROM "infra_student"; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/sql/sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/sql/sql deleted file mode 100644 index 83df279..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/sql/sql +++ /dev/null @@ -1,55 +0,0 @@ --- èœå• SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status, component_name -) -VALUES ( - '学生管ç†', '', 2, 0, 888, - 'student', '', 'infra/demo/index', 0, 'InfraStudent' -); - --- 按钮父èœå•ID --- æš‚æ—¶åªæ”¯æŒ MySQL。如果你是 Oracleã€PostgreSQLã€SQLServer çš„è¯ï¼Œéœ€è¦æ‰‹åŠ¨ä¿®æ”¹ @parentId çš„éƒ¨åˆ†çš„ä»£ç  -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生查询', 'infra:student:query', 3, 1, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生创建', 'infra:student:create', 3, 2, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生更新', 'infra:student:update', 3, 3, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生删除', 'infra:student:delete', 3, 4, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生导出', 'infra:student:export', 3, 5, @parentId, - '', '', '', 0 -); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/ts/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/ts/index deleted file mode 100644 index 6112800..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/ts/index +++ /dev/null @@ -1,57 +0,0 @@ -import request from '@/config/axios' - -export interface StudentVO { - id: number - name: string - description: string - birthday: Date - sex: number - enabled: boolean - avatar: string - video: string - memo: string -} - -// 查询学生分页 -export const getStudentPage = async (params) => { - return await request.get({ url: `/infra/student/page`, params }) -} - -// 查询学生详情 -export const getStudent = async (id: number) => { - return await request.get({ url: `/infra/student/get?id=` + id }) -} - -// 新增学生 -export const createStudent = async (data: StudentVO) => { - return await request.post({ url: `/infra/student/create`, data }) -} - -// 修改学生 -export const updateStudent = async (data: StudentVO) => { - return await request.put({ url: `/infra/student/update`, data }) -} - -// 删除学生 -export const deleteStudent = async (id: number) => { - return await request.delete({ url: `/infra/student/delete?id=` + id }) -} - -// 导出学生 Excel -export const exportStudent = async (params) => { - return await request.download({ url: `/infra/student/export-excel`, params }) -} - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - -// 获得学生è”系人列表 -export const getStudentContactListByStudentId = async (studentId) => { - return await request.get({ url: `/infra/student/student-contact/list-by-student-id?studentId=` + studentId }) -} - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - -// 获得学生ç­ä¸»ä»» -export const getStudentTeacherByStudentId = async (studentId) => { - return await request.get({ url: `/infra/student/student-teacher/get-by-student-id?studentId=` + studentId }) -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentContactForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentContactForm deleted file mode 100644 index 55ca994..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentContactForm +++ /dev/null @@ -1,174 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentContactList b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentContactList deleted file mode 100644 index d0e89da..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentContactList +++ /dev/null @@ -1,72 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentForm deleted file mode 100644 index d8e7bc3..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentForm +++ /dev/null @@ -1,184 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentTeacherForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentTeacherForm deleted file mode 100644 index b22a480..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentTeacherForm +++ /dev/null @@ -1,122 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentTeacherList b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentTeacherList deleted file mode 100644 index e510adc..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/StudentTeacherList +++ /dev/null @@ -1,76 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/index deleted file mode 100644 index ee7c05f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/vue/index +++ /dev/null @@ -1,267 +0,0 @@ - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/xml/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/xml/InfraStudentMapper deleted file mode 100644 index 155aa5c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_inner/xml/InfraStudentMapper +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/assert.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/assert.json deleted file mode 100644 index 60e7f47..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/assert.json +++ /dev/null @@ -1,67 +0,0 @@ -[ { - "contentPath" : "java/InfraStudentPageReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentPageReqVO.java" -}, { - "contentPath" : "java/InfraStudentRespVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentRespVO.java" -}, { - "contentPath" : "java/InfraStudentSaveReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentSaveReqVO.java" -}, { - "contentPath" : "java/InfraStudentController", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/InfraStudentController.java" -}, { - "contentPath" : "java/InfraStudentDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentDO.java" -}, { - "contentPath" : "java/InfraStudentContactDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentContactDO.java" -}, { - "contentPath" : "java/InfraStudentTeacherDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentTeacherDO.java" -}, { - "contentPath" : "java/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentMapper.java" -}, { - "contentPath" : "java/InfraStudentContactMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentContactMapper.java" -}, { - "contentPath" : "java/InfraStudentTeacherMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentTeacherMapper.java" -}, { - "contentPath" : "xml/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/resources/mapper/demo/InfraStudentMapper.xml" -}, { - "contentPath" : "java/InfraStudentServiceImpl", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImpl.java" -}, { - "contentPath" : "java/InfraStudentService", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentService.java" -}, { - "contentPath" : "java/InfraStudentServiceImplTest", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImplTest.java" -}, { - "contentPath" : "java/ErrorCodeConstants_手动æ“作", - "filePath" : "yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants_手动æ“作.java" -}, { - "contentPath" : "sql/sql", - "filePath" : "sql/sql.sql" -}, { - "contentPath" : "sql/h2", - "filePath" : "sql/h2.sql" -}, { - "contentPath" : "vue/index", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/index.vue" -}, { - "contentPath" : "vue/StudentForm", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/StudentForm.vue" -}, { - "contentPath" : "vue/StudentContactForm", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/components/StudentContactForm.vue" -}, { - "contentPath" : "vue/StudentTeacherForm", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/components/StudentTeacherForm.vue" -}, { - "contentPath" : "ts/index", - "filePath" : "yudao-ui-admin-vue3/src/api/infra/demo/index.ts" -} ] \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/ErrorCodeConstants_手动æ“作 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/ErrorCodeConstants_手动æ“作 deleted file mode 100644 index f8be662..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/ErrorCodeConstants_手动æ“作 +++ /dev/null @@ -1,3 +0,0 @@ -// TODO 待办:请将下é¢çš„错误ç å¤åˆ¶åˆ° yudao-module-infra-api 模å—çš„ ErrorCodeConstants 类中。注æ„,请给“TODO 补充编å·â€è®¾ç½®ä¸€ä¸ªé”™è¯¯ç ç¼–å·ï¼ï¼ï¼ -// ========== 学生 TODO è¡¥å……ç¼–å· ========== -ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生ä¸å­˜åœ¨"); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentContactDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentContactDO deleted file mode 100644 index 17c668e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentContactDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生è”系人 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_contact") -@KeySequence("infra_student_contact_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentContactDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentContactMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentContactMapper deleted file mode 100644 index 35bbd53..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentContactMapper +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生è”系人 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentContactMapper extends BaseMapperX { - - default List selectListByStudentId(Long studentId) { - return selectList(InfraStudentContactDO::getStudentId, studentId); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentContactDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentController b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentController deleted file mode 100644 index b9a587b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentController +++ /dev/null @@ -1,117 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.module.infra.service.demo.InfraStudentService; - -@Tag(name = "管ç†åŽå° - 学生") -@RestController -@RequestMapping("/infra/student") -@Validated -public class InfraStudentController { - - @Resource - private InfraStudentService studentService; - - @PostMapping("/create") - @Operation(summary = "创建学生") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudent(@Valid @RequestBody InfraStudentSaveReqVO createReqVO) { - return success(studentService.createStudent(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新学生") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudent(@Valid @RequestBody InfraStudentSaveReqVO updateReqVO) { - studentService.updateStudent(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除学生") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudent(@RequestParam("id") Long id) { - studentService.deleteStudent(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得学生") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudent(@RequestParam("id") Long id) { - InfraStudentDO student = studentService.getStudent(id); - return success(BeanUtils.toBean(student, InfraStudentRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得学生分页") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentPage(@Valid InfraStudentPageReqVO pageReqVO) { - PageResult pageResult = studentService.getStudentPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, InfraStudentRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出学生 Excel") - @PreAuthorize("@ss.hasPermission('infra:student:export')") - @OperateLog(type = EXPORT) - public void exportStudentExcel(@Valid InfraStudentPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = studentService.getStudentPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "学生.xls", "æ•°æ®", InfraStudentRespVO.class, - BeanUtils.toBean(list, InfraStudentRespVO.class)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @GetMapping("/student-contact/list-by-student-id") - @Operation(summary = "获得学生è”系人列表") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentContactListByStudentId(@RequestParam("studentId") Long studentId) { - return success(studentService.getStudentContactListByStudentId(studentId)); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @GetMapping("/student-teacher/get-by-student-id") - @Operation(summary = "获得学生ç­ä¸»ä»»") - @Parameter(name = "studentId", description = "学生编å·") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudentTeacherByStudentId(@RequestParam("studentId") Long studentId) { - return success(studentService.getStudentTeacherByStudentId(studentId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentDO deleted file mode 100644 index b0d4bd2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentDO +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student") -@KeySequence("infra_student_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentMapper deleted file mode 100644 index 34e70a0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; - -/** - * 学生 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentMapper extends BaseMapperX { - - default PageResult selectPage(InfraStudentPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(InfraStudentDO::getName, reqVO.getName()) - .eqIfPresent(InfraStudentDO::getBirthday, reqVO.getBirthday()) - .eqIfPresent(InfraStudentDO::getSex, reqVO.getSex()) - .eqIfPresent(InfraStudentDO::getEnabled, reqVO.getEnabled()) - .betweenIfPresent(InfraStudentDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(InfraStudentDO::getId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentPageReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentPageReqVO deleted file mode 100644 index 41a3730..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentPageReqVO +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 学生分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class InfraStudentPageReqVO extends PageParam { - - @Schema(description = "åå­—", example = "芋头") - private String name; - - @Schema(description = "出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", example = "1") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", example = "true") - private Boolean enabled; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentRespVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentRespVO deleted file mode 100644 index c41a550..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentRespVO +++ /dev/null @@ -1,60 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; -import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; -import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; - -@Schema(description = "管ç†åŽå° - 学生 Response VO") -@Data -@ExcelIgnoreUnannotated -public class InfraStudentRespVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("ç¼–å·") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @ExcelProperty("åå­—") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @ExcelProperty("简介") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "性别", converter = DictConvert.class) - @DictFormat("system_user_sex") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @ExcelProperty(value = "æ˜¯å¦æœ‰æ•ˆ", converter = DictConvert.class) - @DictFormat("infra_boolean_string") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @ExcelProperty("头åƒ") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @ExcelProperty("附件") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @ExcelProperty("备注") - private String memo; - - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentSaveReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentSaveReqVO deleted file mode 100644 index faa491d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentSaveReqVO +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; - -@Schema(description = "管ç†åŽå° - 学生新增/修改 Request VO") -@Data -public class InfraStudentSaveReqVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @NotEmpty(message = "åå­—ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @NotEmpty(message = "简介ä¸èƒ½ä¸ºç©º") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "出生日期ä¸èƒ½ä¸ºç©º") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "性别ä¸èƒ½ä¸ºç©º") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @NotNull(message = "æ˜¯å¦æœ‰æ•ˆä¸èƒ½ä¸ºç©º") - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @NotEmpty(message = "头åƒä¸èƒ½ä¸ºç©º") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @NotEmpty(message = "附件ä¸èƒ½ä¸ºç©º") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @NotEmpty(message = "备注ä¸èƒ½ä¸ºç©º") - private String memo; - - @Schema(description = "学生è”系人列表") - private List studentContacts; - - @Schema(description = "学生ç­ä¸»ä»»") - private InfraStudentTeacherDO studentTeacher; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentService b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentService deleted file mode 100644 index afa7d22..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentService +++ /dev/null @@ -1,77 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -/** - * 学生 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfraStudentService { - - /** - * 创建学生 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudent(@Valid InfraStudentSaveReqVO createReqVO); - - /** - * 更新学生 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateStudent(@Valid InfraStudentSaveReqVO updateReqVO); - - /** - * 删除学生 - * - * @param id ç¼–å· - */ - void deleteStudent(Long id); - - /** - * 获得学生 - * - * @param id ç¼–å· - * @return 学生 - */ - InfraStudentDO getStudent(Long id); - - /** - * 获得学生分页 - * - * @param pageReqVO 分页查询 - * @return 学生分页 - */ - PageResult getStudentPage(InfraStudentPageReqVO pageReqVO); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - /** - * 获得学生è”系人列表 - * - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生è”系人列表 - */ - List getStudentContactListByStudentId(Long studentId); - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - /** - * 获得学生ç­ä¸»ä»» - * - * @param studentId å­¦ç”Ÿç¼–å· - * @return 学生ç­ä¸»ä»» - */ - InfraStudentTeacherDO getStudentTeacherByStudentId(Long studentId); - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentServiceImpl b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentServiceImpl deleted file mode 100644 index c57cba6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentServiceImpl +++ /dev/null @@ -1,147 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentContactMapper; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentTeacherMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; - -/** - * 学生 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfraStudentServiceImpl implements InfraStudentService { - - @Resource - private InfraStudentMapper studentMapper; - @Resource - private InfraStudentContactMapper studentContactMapper; - @Resource - private InfraStudentTeacherMapper studentTeacherMapper; - - @Override - @Transactional(rollbackFor = Exception.class) - public Long createStudent(InfraStudentSaveReqVO createReqVO) { - // æ’å…¥ - InfraStudentDO student = BeanUtils.toBean(createReqVO, InfraStudentDO.class); - studentMapper.insert(student); - - // æ’å…¥å­è¡¨ - createStudentContactList(student.getId(), createReqVO.getStudentContacts()); - createStudentTeacher(student.getId(), createReqVO.getStudentTeacher()); - // 返回 - return student.getId(); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateStudent(InfraStudentSaveReqVO updateReqVO) { - // 校验存在 - validateStudentExists(updateReqVO.getId()); - // æ›´æ–° - InfraStudentDO updateObj = BeanUtils.toBean(updateReqVO, InfraStudentDO.class); - studentMapper.updateById(updateObj); - - // æ›´æ–°å­è¡¨ - updateStudentContactList(updateReqVO.getId(), updateReqVO.getStudentContacts()); - updateStudentTeacher(updateReqVO.getId(), updateReqVO.getStudentTeacher()); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteStudent(Long id) { - // 校验存在 - validateStudentExists(id); - // 删除 - studentMapper.deleteById(id); - - // 删除å­è¡¨ - deleteStudentContactByStudentId(id); - deleteStudentTeacherByStudentId(id); - } - - private void validateStudentExists(Long id) { - if (studentMapper.selectById(id) == null) { - throw exception(STUDENT_NOT_EXISTS); - } - } - - @Override - public InfraStudentDO getStudent(Long id) { - return studentMapper.selectById(id); - } - - @Override - public PageResult getStudentPage(InfraStudentPageReqVO pageReqVO) { - return studentMapper.selectPage(pageReqVO); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - - @Override - public List getStudentContactListByStudentId(Long studentId) { - return studentContactMapper.selectListByStudentId(studentId); - } - - private void createStudentContactList(Long studentId, List list) { - list.forEach(o -> o.setStudentId(studentId)); - studentContactMapper.insertBatch(list); - } - - private void updateStudentContactList(Long studentId, List list) { - deleteStudentContactByStudentId(studentId); - list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲çªï¼›2)updateTime 䏿›´æ–° - createStudentContactList(studentId, list); - } - - private void deleteStudentContactByStudentId(Long studentId) { - studentContactMapper.deleteByStudentId(studentId); - } - - // ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - - @Override - public InfraStudentTeacherDO getStudentTeacherByStudentId(Long studentId) { - return studentTeacherMapper.selectByStudentId(studentId); - } - - private void createStudentTeacher(Long studentId, InfraStudentTeacherDO studentTeacher) { - if (studentTeacher == null) { - return; - } - studentTeacher.setStudentId(studentId); - studentTeacherMapper.insert(studentTeacher); - } - - private void updateStudentTeacher(Long studentId, InfraStudentTeacherDO studentTeacher) { - if (studentTeacher == null) { - return; - } - studentTeacher.setStudentId(studentId); - studentTeacher.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 䏿›´æ–° - studentTeacherMapper.insertOrUpdate(studentTeacher); - } - - private void deleteStudentTeacherByStudentId(Long studentId) { - studentTeacherMapper.deleteByStudentId(studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentServiceImplTest b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentServiceImplTest deleted file mode 100644 index b5f4bf0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentServiceImplTest +++ /dev/null @@ -1,146 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -/** - * {@link InfraStudentServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(InfraStudentServiceImpl.class) -public class InfraStudentServiceImplTest extends BaseDbUnitTest { - - @Resource - private InfraStudentServiceImpl studentService; - - @Resource - private InfraStudentMapper studentMapper; - - @Test - public void testCreateStudent_success() { - // 准备傿•° - InfraStudentSaveReqVO createReqVO = randomPojo(InfraStudentSaveReqVO.class).setId(null); - - // 调用 - Long studentId = studentService.createStudent(createReqVO); - // 断言 - assertNotNull(studentId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(studentId); - assertPojoEquals(createReqVO, student, "id"); - } - - @Test - public void testUpdateStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class, o -> { - o.setId(dbStudent.getId()); // 设置更新的 ID - }); - - // 调用 - studentService.updateStudent(updateReqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(updateReqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(updateReqVO, student); - } - - @Test - public void testUpdateStudent_notExists() { - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.updateStudent(updateReqVO), STUDENT_NOT_EXISTS); - } - - @Test - public void testDeleteStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbStudent.getId(); - - // 调用 - studentService.deleteStudent(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(studentMapper.selectById(id)); - } - - @Test - public void testDeleteStudent_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.deleteStudent(id), STUDENT_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需è¦çš„值,然åŽåˆ é™¤ @Disabled 注解 - public void testGetStudentPage() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class, o -> { // 等会查询到 - o.setName(null); - o.setBirthday(null); - o.setSex(null); - o.setEnabled(null); - o.setCreateTime(null); - }); - studentMapper.insert(dbStudent); - // 测试 name ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setName(null))); - // 测试 birthday ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setBirthday(null))); - // 测试 sex ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setSex(null))); - // 测试 enabled ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setEnabled(null))); - // 测试 createTime ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setCreateTime(null))); - // 准备傿•° - InfraStudentPageReqVO reqVO = new InfraStudentPageReqVO(); - reqVO.setName(null); - reqVO.setBirthday(null); - reqVO.setSex(null); - reqVO.setEnabled(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = studentService.getStudentPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbStudent, pageResult.getList().get(0)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentTeacherDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentTeacherDO deleted file mode 100644 index c19cf9f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentTeacherDO +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生ç­ä¸»ä»» DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student_teacher") -@KeySequence("infra_student_teacher_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentTeacherDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å­¦ç”Ÿç¼–å· - */ - private Long studentId; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentTeacherMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentTeacherMapper deleted file mode 100644 index 0521bba..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/java/InfraStudentTeacherMapper +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentTeacherDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 学生ç­ä¸»ä»» Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentTeacherMapper extends BaseMapperX { - - default InfraStudentTeacherDO selectByStudentId(Long studentId) { - return selectOne(InfraStudentTeacherDO::getStudentId, studentId); - } - - default int deleteByStudentId(Long studentId) { - return delete(InfraStudentTeacherDO::getStudentId, studentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/sql/h2 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/sql/h2 deleted file mode 100644 index 6c1875f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/sql/h2 +++ /dev/null @@ -1,17 +0,0 @@ --- 将该建表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "infra_student" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "description" varchar NOT NULL, - "birthday" varchar NOT NULL, - "sex" int NOT NULL, - "enabled" bit NOT NULL, - "avatar" varchar NOT NULL, - "video" varchar NOT NULL, - "memo" varchar NOT NULL, - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY ("id") -) COMMENT '学生表'; - --- 将该删表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/clean.sql 文件里 -DELETE FROM "infra_student"; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/sql/sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/sql/sql deleted file mode 100644 index 83df279..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/sql/sql +++ /dev/null @@ -1,55 +0,0 @@ --- èœå• SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status, component_name -) -VALUES ( - '学生管ç†', '', 2, 0, 888, - 'student', '', 'infra/demo/index', 0, 'InfraStudent' -); - --- 按钮父èœå•ID --- æš‚æ—¶åªæ”¯æŒ MySQL。如果你是 Oracleã€PostgreSQLã€SQLServer çš„è¯ï¼Œéœ€è¦æ‰‹åŠ¨ä¿®æ”¹ @parentId çš„éƒ¨åˆ†çš„ä»£ç  -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生查询', 'infra:student:query', 3, 1, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生创建', 'infra:student:create', 3, 2, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生更新', 'infra:student:update', 3, 3, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生删除', 'infra:student:delete', 3, 4, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生导出', 'infra:student:export', 3, 5, @parentId, - '', '', '', 0 -); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/ts/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/ts/index deleted file mode 100644 index 6112800..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/ts/index +++ /dev/null @@ -1,57 +0,0 @@ -import request from '@/config/axios' - -export interface StudentVO { - id: number - name: string - description: string - birthday: Date - sex: number - enabled: boolean - avatar: string - video: string - memo: string -} - -// 查询学生分页 -export const getStudentPage = async (params) => { - return await request.get({ url: `/infra/student/page`, params }) -} - -// 查询学生详情 -export const getStudent = async (id: number) => { - return await request.get({ url: `/infra/student/get?id=` + id }) -} - -// 新增学生 -export const createStudent = async (data: StudentVO) => { - return await request.post({ url: `/infra/student/create`, data }) -} - -// 修改学生 -export const updateStudent = async (data: StudentVO) => { - return await request.put({ url: `/infra/student/update`, data }) -} - -// 删除学生 -export const deleteStudent = async (id: number) => { - return await request.delete({ url: `/infra/student/delete?id=` + id }) -} - -// 导出学生 Excel -export const exportStudent = async (params) => { - return await request.download({ url: `/infra/student/export-excel`, params }) -} - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿè”系人) ==================== - -// 获得学生è”系人列表 -export const getStudentContactListByStudentId = async (studentId) => { - return await request.get({ url: `/infra/student/student-contact/list-by-student-id?studentId=` + studentId }) -} - -// ==================== å­è¡¨ï¼ˆå­¦ç”Ÿç­ä¸»ä»»ï¼‰ ==================== - -// 获得学生ç­ä¸»ä»» -export const getStudentTeacherByStudentId = async (studentId) => { - return await request.get({ url: `/infra/student/student-teacher/get-by-student-id?studentId=` + studentId }) -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentContactForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentContactForm deleted file mode 100644 index 55ca994..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentContactForm +++ /dev/null @@ -1,174 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentForm deleted file mode 100644 index d8e7bc3..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentForm +++ /dev/null @@ -1,184 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentTeacherForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentTeacherForm deleted file mode 100644 index b22a480..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/StudentTeacherForm +++ /dev/null @@ -1,122 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/index deleted file mode 100644 index b115b13..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/vue/index +++ /dev/null @@ -1,252 +0,0 @@ - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/xml/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/xml/InfraStudentMapper deleted file mode 100644 index 155aa5c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_master_normal/xml/InfraStudentMapper +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/assert.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/assert.json deleted file mode 100644 index 5a0eebd..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/assert.json +++ /dev/null @@ -1,49 +0,0 @@ -[ { - "contentPath" : "java/InfraStudentPageReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentPageReqVO.java" -}, { - "contentPath" : "java/InfraStudentRespVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentRespVO.java" -}, { - "contentPath" : "java/InfraStudentSaveReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraStudentSaveReqVO.java" -}, { - "contentPath" : "java/InfraStudentController", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/InfraStudentController.java" -}, { - "contentPath" : "java/InfraStudentDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraStudentDO.java" -}, { - "contentPath" : "java/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraStudentMapper.java" -}, { - "contentPath" : "xml/InfraStudentMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/resources/mapper/demo/InfraStudentMapper.xml" -}, { - "contentPath" : "java/InfraStudentServiceImpl", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImpl.java" -}, { - "contentPath" : "java/InfraStudentService", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentService.java" -}, { - "contentPath" : "java/InfraStudentServiceImplTest", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/demo/InfraStudentServiceImplTest.java" -}, { - "contentPath" : "java/ErrorCodeConstants_手动æ“作", - "filePath" : "yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants_手动æ“作.java" -}, { - "contentPath" : "sql/sql", - "filePath" : "sql/sql.sql" -}, { - "contentPath" : "sql/h2", - "filePath" : "sql/h2.sql" -}, { - "contentPath" : "vue/index", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/index.vue" -}, { - "contentPath" : "vue/StudentForm", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/StudentForm.vue" -}, { - "contentPath" : "ts/index", - "filePath" : "yudao-ui-admin-vue3/src/api/infra/demo/index.ts" -} ] \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/ErrorCodeConstants_手动æ“作 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/ErrorCodeConstants_手动æ“作 deleted file mode 100644 index f8be662..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/ErrorCodeConstants_手动æ“作 +++ /dev/null @@ -1,3 +0,0 @@ -// TODO 待办:请将下é¢çš„错误ç å¤åˆ¶åˆ° yudao-module-infra-api 模å—çš„ ErrorCodeConstants 类中。注æ„,请给“TODO 补充编å·â€è®¾ç½®ä¸€ä¸ªé”™è¯¯ç ç¼–å·ï¼ï¼ï¼ -// ========== 学生 TODO è¡¥å……ç¼–å· ========== -ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "学生ä¸å­˜åœ¨"); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentController b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentController deleted file mode 100644 index 3796982..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentController +++ /dev/null @@ -1,95 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.service.demo.InfraStudentService; - -@Tag(name = "管ç†åŽå° - 学生") -@RestController -@RequestMapping("/infra/student") -@Validated -public class InfraStudentController { - - @Resource - private InfraStudentService studentService; - - @PostMapping("/create") - @Operation(summary = "创建学生") - @PreAuthorize("@ss.hasPermission('infra:student:create')") - public CommonResult createStudent(@Valid @RequestBody InfraStudentSaveReqVO createReqVO) { - return success(studentService.createStudent(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新学生") - @PreAuthorize("@ss.hasPermission('infra:student:update')") - public CommonResult updateStudent(@Valid @RequestBody InfraStudentSaveReqVO updateReqVO) { - studentService.updateStudent(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除学生") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:student:delete')") - public CommonResult deleteStudent(@RequestParam("id") Long id) { - studentService.deleteStudent(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得学生") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult getStudent(@RequestParam("id") Long id) { - InfraStudentDO student = studentService.getStudent(id); - return success(BeanUtils.toBean(student, InfraStudentRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得学生分页") - @PreAuthorize("@ss.hasPermission('infra:student:query')") - public CommonResult> getStudentPage(@Valid InfraStudentPageReqVO pageReqVO) { - PageResult pageResult = studentService.getStudentPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, InfraStudentRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出学生 Excel") - @PreAuthorize("@ss.hasPermission('infra:student:export')") - @OperateLog(type = EXPORT) - public void exportStudentExcel(@Valid InfraStudentPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = studentService.getStudentPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "学生.xls", "æ•°æ®", InfraStudentRespVO.class, - BeanUtils.toBean(list, InfraStudentRespVO.class)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentDO deleted file mode 100644 index b0d4bd2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentDO +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 学生 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_student") -@KeySequence("infra_student_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraStudentDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * åå­— - */ - private String name; - /** - * 简介 - */ - private String description; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 性别 - * - * 枚举 {@link TODO system_user_sex 对应的类} - */ - private Integer sex; - /** - * æ˜¯å¦æœ‰æ•ˆ - * - * 枚举 {@link TODO infra_boolean_string 对应的类} - */ - private Boolean enabled; - /** - * å¤´åƒ - */ - private String avatar; - /** - * 附件 - */ - private String video; - /** - * 备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentMapper deleted file mode 100644 index 34e70a0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentMapper +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; - -/** - * 学生 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraStudentMapper extends BaseMapperX { - - default PageResult selectPage(InfraStudentPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(InfraStudentDO::getName, reqVO.getName()) - .eqIfPresent(InfraStudentDO::getBirthday, reqVO.getBirthday()) - .eqIfPresent(InfraStudentDO::getSex, reqVO.getSex()) - .eqIfPresent(InfraStudentDO::getEnabled, reqVO.getEnabled()) - .betweenIfPresent(InfraStudentDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(InfraStudentDO::getId)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentPageReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentPageReqVO deleted file mode 100644 index 41a3730..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentPageReqVO +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 学生分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class InfraStudentPageReqVO extends PageParam { - - @Schema(description = "åå­—", example = "芋头") - private String name; - - @Schema(description = "出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", example = "1") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", example = "true") - private Boolean enabled; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentRespVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentRespVO deleted file mode 100644 index c41a550..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentRespVO +++ /dev/null @@ -1,60 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; -import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; -import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; - -@Schema(description = "管ç†åŽå° - 学生 Response VO") -@Data -@ExcelIgnoreUnannotated -public class InfraStudentRespVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("ç¼–å·") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @ExcelProperty("åå­—") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @ExcelProperty("简介") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("出生日期") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "性别", converter = DictConvert.class) - @DictFormat("system_user_sex") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @ExcelProperty(value = "æ˜¯å¦æœ‰æ•ˆ", converter = DictConvert.class) - @DictFormat("infra_boolean_string") // TODO 代ç ä¼˜åŒ–:建议设置到对应的 DictTypeConstants 枚举类中 - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @ExcelProperty("头åƒ") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @ExcelProperty("附件") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @ExcelProperty("备注") - private String memo; - - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createTime; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentSaveReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentSaveReqVO deleted file mode 100644 index 43e7f14..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentSaveReqVO +++ /dev/null @@ -1,50 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 学生新增/修改 Request VO") -@Data -public class InfraStudentSaveReqVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @NotEmpty(message = "åå­—ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是介ç»") - @NotEmpty(message = "简介ä¸èƒ½ä¸ºç©º") - private String description; - - @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "出生日期ä¸èƒ½ä¸ºç©º") - private LocalDateTime birthday; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "性别ä¸èƒ½ä¸ºç©º") - private Integer sex; - - @Schema(description = "æ˜¯å¦æœ‰æ•ˆ", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @NotNull(message = "æ˜¯å¦æœ‰æ•ˆä¸èƒ½ä¸ºç©º") - private Boolean enabled; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - @NotEmpty(message = "头åƒä¸èƒ½ä¸ºç©º") - private String avatar; - - @Schema(description = "附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.mp4") - @NotEmpty(message = "附件ä¸èƒ½ä¸ºç©º") - private String video; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是备注") - @NotEmpty(message = "备注ä¸èƒ½ä¸ºç©º") - private String memo; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentService b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentService deleted file mode 100644 index c4a0e17..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentService +++ /dev/null @@ -1,55 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -/** - * 学生 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfraStudentService { - - /** - * 创建学生 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createStudent(@Valid InfraStudentSaveReqVO createReqVO); - - /** - * 更新学生 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateStudent(@Valid InfraStudentSaveReqVO updateReqVO); - - /** - * 删除学生 - * - * @param id ç¼–å· - */ - void deleteStudent(Long id); - - /** - * 获得学生 - * - * @param id ç¼–å· - * @return 学生 - */ - InfraStudentDO getStudent(Long id); - - /** - * 获得学生分页 - * - * @param pageReqVO 分页查询 - * @return 学生分页 - */ - PageResult getStudentPage(InfraStudentPageReqVO pageReqVO); - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentServiceImpl b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentServiceImpl deleted file mode 100644 index 2292a66..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentServiceImpl +++ /dev/null @@ -1,74 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; - -/** - * 学生 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfraStudentServiceImpl implements InfraStudentService { - - @Resource - private InfraStudentMapper studentMapper; - - @Override - public Long createStudent(InfraStudentSaveReqVO createReqVO) { - // æ’å…¥ - InfraStudentDO student = BeanUtils.toBean(createReqVO, InfraStudentDO.class); - studentMapper.insert(student); - // 返回 - return student.getId(); - } - - @Override - public void updateStudent(InfraStudentSaveReqVO updateReqVO) { - // 校验存在 - validateStudentExists(updateReqVO.getId()); - // æ›´æ–° - InfraStudentDO updateObj = BeanUtils.toBean(updateReqVO, InfraStudentDO.class); - studentMapper.updateById(updateObj); - } - - @Override - public void deleteStudent(Long id) { - // 校验存在 - validateStudentExists(id); - // 删除 - studentMapper.deleteById(id); - } - - private void validateStudentExists(Long id) { - if (studentMapper.selectById(id) == null) { - throw exception(STUDENT_NOT_EXISTS); - } - } - - @Override - public InfraStudentDO getStudent(Long id) { - return studentMapper.selectById(id); - } - - @Override - public PageResult getStudentPage(InfraStudentPageReqVO pageReqVO) { - return studentMapper.selectPage(pageReqVO); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentServiceImplTest b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentServiceImplTest deleted file mode 100644 index b5f4bf0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/java/InfraStudentServiceImplTest +++ /dev/null @@ -1,146 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -/** - * {@link InfraStudentServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(InfraStudentServiceImpl.class) -public class InfraStudentServiceImplTest extends BaseDbUnitTest { - - @Resource - private InfraStudentServiceImpl studentService; - - @Resource - private InfraStudentMapper studentMapper; - - @Test - public void testCreateStudent_success() { - // 准备傿•° - InfraStudentSaveReqVO createReqVO = randomPojo(InfraStudentSaveReqVO.class).setId(null); - - // 调用 - Long studentId = studentService.createStudent(createReqVO); - // 断言 - assertNotNull(studentId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(studentId); - assertPojoEquals(createReqVO, student, "id"); - } - - @Test - public void testUpdateStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class, o -> { - o.setId(dbStudent.getId()); // 设置更新的 ID - }); - - // 调用 - studentService.updateStudent(updateReqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - InfraStudentDO student = studentMapper.selectById(updateReqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(updateReqVO, student); - } - - @Test - public void testUpdateStudent_notExists() { - // 准备傿•° - InfraStudentSaveReqVO updateReqVO = randomPojo(InfraStudentSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.updateStudent(updateReqVO), STUDENT_NOT_EXISTS); - } - - @Test - public void testDeleteStudent_success() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class); - studentMapper.insert(dbStudent);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbStudent.getId(); - - // 调用 - studentService.deleteStudent(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(studentMapper.selectById(id)); - } - - @Test - public void testDeleteStudent_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> studentService.deleteStudent(id), STUDENT_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需è¦çš„值,然åŽåˆ é™¤ @Disabled 注解 - public void testGetStudentPage() { - // mock æ•°æ® - InfraStudentDO dbStudent = randomPojo(InfraStudentDO.class, o -> { // 等会查询到 - o.setName(null); - o.setBirthday(null); - o.setSex(null); - o.setEnabled(null); - o.setCreateTime(null); - }); - studentMapper.insert(dbStudent); - // 测试 name ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setName(null))); - // 测试 birthday ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setBirthday(null))); - // 测试 sex ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setSex(null))); - // 测试 enabled ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setEnabled(null))); - // 测试 createTime ä¸åŒ¹é… - studentMapper.insert(cloneIgnoreId(dbStudent, o -> o.setCreateTime(null))); - // 准备傿•° - InfraStudentPageReqVO reqVO = new InfraStudentPageReqVO(); - reqVO.setName(null); - reqVO.setBirthday(null); - reqVO.setSex(null); - reqVO.setEnabled(null); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = studentService.getStudentPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbStudent, pageResult.getList().get(0)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/sql/h2 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/sql/h2 deleted file mode 100644 index 6c1875f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/sql/h2 +++ /dev/null @@ -1,17 +0,0 @@ --- 将该建表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "infra_student" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "description" varchar NOT NULL, - "birthday" varchar NOT NULL, - "sex" int NOT NULL, - "enabled" bit NOT NULL, - "avatar" varchar NOT NULL, - "video" varchar NOT NULL, - "memo" varchar NOT NULL, - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY ("id") -) COMMENT '学生表'; - --- 将该删表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/clean.sql 文件里 -DELETE FROM "infra_student"; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/sql/sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/sql/sql deleted file mode 100644 index 83df279..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/sql/sql +++ /dev/null @@ -1,55 +0,0 @@ --- èœå• SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status, component_name -) -VALUES ( - '学生管ç†', '', 2, 0, 888, - 'student', '', 'infra/demo/index', 0, 'InfraStudent' -); - --- 按钮父èœå•ID --- æš‚æ—¶åªæ”¯æŒ MySQL。如果你是 Oracleã€PostgreSQLã€SQLServer çš„è¯ï¼Œéœ€è¦æ‰‹åŠ¨ä¿®æ”¹ @parentId çš„éƒ¨åˆ†çš„ä»£ç  -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生查询', 'infra:student:query', 3, 1, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生创建', 'infra:student:create', 3, 2, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生更新', 'infra:student:update', 3, 3, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生删除', 'infra:student:delete', 3, 4, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '学生导出', 'infra:student:export', 3, 5, @parentId, - '', '', '', 0 -); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/ts/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/ts/index deleted file mode 100644 index 8cdf254..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/ts/index +++ /dev/null @@ -1,43 +0,0 @@ -import request from '@/config/axios' - -export interface StudentVO { - id: number - name: string - description: string - birthday: Date - sex: number - enabled: boolean - avatar: string - video: string - memo: string -} - -// 查询学生分页 -export const getStudentPage = async (params) => { - return await request.get({ url: `/infra/student/page`, params }) -} - -// 查询学生详情 -export const getStudent = async (id: number) => { - return await request.get({ url: `/infra/student/get?id=` + id }) -} - -// 新增学生 -export const createStudent = async (data: StudentVO) => { - return await request.post({ url: `/infra/student/create`, data }) -} - -// 修改学生 -export const updateStudent = async (data: StudentVO) => { - return await request.put({ url: `/infra/student/update`, data }) -} - -// 删除学生 -export const deleteStudent = async (id: number) => { - return await request.delete({ url: `/infra/student/delete?id=` + id }) -} - -// 导出学生 Excel -export const exportStudent = async (params) => { - return await request.download({ url: `/infra/student/export-excel`, params }) -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/vue/StudentForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/vue/StudentForm deleted file mode 100644 index 0dabcb5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/vue/StudentForm +++ /dev/null @@ -1,152 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/vue/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/vue/index deleted file mode 100644 index b115b13..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/vue/index +++ /dev/null @@ -1,252 +0,0 @@ - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/xml/InfraStudentMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/xml/InfraStudentMapper deleted file mode 100644 index 155aa5c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_one/xml/InfraStudentMapper +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/assert.json b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/assert.json deleted file mode 100644 index 357df00..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/assert.json +++ /dev/null @@ -1,49 +0,0 @@ -[ { - "contentPath" : "java/InfraCategoryListReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraCategoryListReqVO.java" -}, { - "contentPath" : "java/InfraCategoryRespVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraCategoryRespVO.java" -}, { - "contentPath" : "java/InfraCategorySaveReqVO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/vo/InfraCategorySaveReqVO.java" -}, { - "contentPath" : "java/InfraCategoryController", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/InfraCategoryController.java" -}, { - "contentPath" : "java/InfraCategoryDO", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/demo/InfraCategoryDO.java" -}, { - "contentPath" : "java/InfraCategoryMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/InfraCategoryMapper.java" -}, { - "contentPath" : "xml/InfraCategoryMapper", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/resources/mapper/demo/InfraCategoryMapper.xml" -}, { - "contentPath" : "java/InfraCategoryServiceImpl", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraCategoryServiceImpl.java" -}, { - "contentPath" : "java/InfraCategoryService", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/InfraCategoryService.java" -}, { - "contentPath" : "java/InfraCategoryServiceImplTest", - "filePath" : "yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/demo/InfraCategoryServiceImplTest.java" -}, { - "contentPath" : "java/ErrorCodeConstants_手动æ“作", - "filePath" : "yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants_手动æ“作.java" -}, { - "contentPath" : "sql/sql", - "filePath" : "sql/sql.sql" -}, { - "contentPath" : "sql/h2", - "filePath" : "sql/h2.sql" -}, { - "contentPath" : "vue/index", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/index.vue" -}, { - "contentPath" : "vue/CategoryForm", - "filePath" : "yudao-ui-admin-vue3/src/views/infra/demo/CategoryForm.vue" -}, { - "contentPath" : "ts/index", - "filePath" : "yudao-ui-admin-vue3/src/api/infra/demo/index.ts" -} ] \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/ErrorCodeConstants_手动æ“作 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/ErrorCodeConstants_手动æ“作 deleted file mode 100644 index 36df675..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/ErrorCodeConstants_手动æ“作 +++ /dev/null @@ -1,8 +0,0 @@ -// TODO 待办:请将下é¢çš„错误ç å¤åˆ¶åˆ° yudao-module-infra-api 模å—çš„ ErrorCodeConstants 类中。注æ„,请给“TODO 补充编å·â€è®¾ç½®ä¸€ä¸ªé”™è¯¯ç ç¼–å·ï¼ï¼ï¼ -// ========== 分类 TODO è¡¥å……ç¼–å· ========== -ErrorCode CATEGORY_NOT_EXISTS = new ErrorCode(TODO 补充编å·, "分类ä¸å­˜åœ¨"); -ErrorCode CATEGORY_EXITS_CHILDREN = new ErrorCode(TODO 补充编å·, "存在存在å­åˆ†ç±»ï¼Œæ— æ³•删除"); -ErrorCode CATEGORY_PARENT_NOT_EXITS = new ErrorCode(TODO 补充编å·,"父级分类ä¸å­˜åœ¨"); -ErrorCode CATEGORY_PARENT_ERROR = new ErrorCode(TODO 补充编å·, "ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶åˆ†ç±»"); -ErrorCode CATEGORY_NAME_DUPLICATE = new ErrorCode(TODO 补充编å·, "å·²ç»å­˜åœ¨è¯¥å字的分类"); -ErrorCode CATEGORY_PARENT_IS_CHILD = new ErrorCode(TODO 补充编å·, "ä¸èƒ½è®¾ç½®è‡ªå·±çš„å­InfraCategory为父InfraCategory"); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryController b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryController deleted file mode 100644 index a7b2f81..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryController +++ /dev/null @@ -1,94 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; -import cn.iocoder.yudao.module.infra.service.demo.InfraCategoryService; - -@Tag(name = "管ç†åŽå° - 分类") -@RestController -@RequestMapping("/infra/category") -@Validated -public class InfraCategoryController { - - @Resource - private InfraCategoryService categoryService; - - @PostMapping("/create") - @Operation(summary = "创建分类") - @PreAuthorize("@ss.hasPermission('infra:category:create')") - public CommonResult createCategory(@Valid @RequestBody InfraCategorySaveReqVO createReqVO) { - return success(categoryService.createCategory(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新分类") - @PreAuthorize("@ss.hasPermission('infra:category:update')") - public CommonResult updateCategory(@Valid @RequestBody InfraCategorySaveReqVO updateReqVO) { - categoryService.updateCategory(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除分类") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('infra:category:delete')") - public CommonResult deleteCategory(@RequestParam("id") Long id) { - categoryService.deleteCategory(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得分类") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('infra:category:query')") - public CommonResult getCategory(@RequestParam("id") Long id) { - InfraCategoryDO category = categoryService.getCategory(id); - return success(BeanUtils.toBean(category, InfraCategoryRespVO.class)); - } - - @GetMapping("/list") - @Operation(summary = "获得分类列表") - @PreAuthorize("@ss.hasPermission('infra:category:query')") - public CommonResult> getCategoryList(@Valid InfraCategoryListReqVO listReqVO) { - List list = categoryService.getCategoryList(listReqVO); - return success(BeanUtils.toBean(list, InfraCategoryRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出分类 Excel") - @PreAuthorize("@ss.hasPermission('infra:category:export')") - @OperateLog(type = EXPORT) - public void exportCategoryExcel(@Valid InfraCategoryListReqVO listReqVO, - HttpServletResponse response) throws IOException { - List list = categoryService.getCategoryList(listReqVO); - // 导出 Excel - ExcelUtils.write(response, "分类.xls", "æ•°æ®", InfraCategoryRespVO.class, - BeanUtils.toBean(list, InfraCategoryRespVO.class)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryDO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryDO deleted file mode 100644 index 9bf21c0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryDO +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.dataobject.demo; - -import lombok.*; -import java.util.*; -import com.baomidou.mybatisplus.annotation.*; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; - -/** - * 分类 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("infra_category") -@KeySequence("infra_category_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class InfraCategoryDO extends BaseDO { - - public static final Long PARENT_ID_ROOT = 0L; - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * åå­— - */ - private String name; - /** - * çˆ¶ç¼–å· - */ - private Long parentId; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryListReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryListReqVO deleted file mode 100644 index e5c6f18..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryListReqVO +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -@Schema(description = "管ç†åŽå° - 分类列表 Request VO") -@Data -public class InfraCategoryListReqVO { - - @Schema(description = "åå­—", example = "芋头") - private String name; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryMapper deleted file mode 100644 index 9dadbf1..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryMapper +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.infra.dal.mysql.demo; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; - -/** - * 分类 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface InfraCategoryMapper extends BaseMapperX { - - default List selectList(InfraCategoryListReqVO reqVO) { - return selectList(new LambdaQueryWrapperX() - .likeIfPresent(InfraCategoryDO::getName, reqVO.getName()) - .orderByDesc(InfraCategoryDO::getId)); - } - - default InfraCategoryDO selectByParentIdAndName(Long parentId, String name) { - return selectOne(InfraCategoryDO::getParentId, parentId, InfraCategoryDO::getName, name); - } - - default Long selectCountByParentId(Long parentId) { - return selectCount(InfraCategoryDO::getParentId, parentId); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryRespVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryRespVO deleted file mode 100644 index 6325d86..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryRespVO +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import com.alibaba.excel.annotation.*; - -@Schema(description = "管ç†åŽå° - 分类 Response VO") -@Data -@ExcelIgnoreUnannotated -public class InfraCategoryRespVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("ç¼–å·") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @ExcelProperty("åå­—") - private String name; - - @Schema(description = "父编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") - @ExcelProperty("父编å·") - private Long parentId; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategorySaveReqVO b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategorySaveReqVO deleted file mode 100644 index 3c03b97..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategorySaveReqVO +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; - -@Schema(description = "管ç†åŽå° - 分类新增/修改 Request VO") -@Data -public class InfraCategorySaveReqVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋头") - @NotEmpty(message = "åå­—ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "父编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") - @NotNull(message = "父编å·ä¸èƒ½ä¸ºç©º") - private Long parentId; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryService b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryService deleted file mode 100644 index 9d0ae1a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryService +++ /dev/null @@ -1,55 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; - -/** - * 分类 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface InfraCategoryService { - - /** - * 创建分类 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createCategory(@Valid InfraCategorySaveReqVO createReqVO); - - /** - * 更新分类 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateCategory(@Valid InfraCategorySaveReqVO updateReqVO); - - /** - * 删除分类 - * - * @param id ç¼–å· - */ - void deleteCategory(Long id); - - /** - * 获得分类 - * - * @param id ç¼–å· - * @return 分类 - */ - InfraCategoryDO getCategory(Long id); - - /** - * 获得分类列表 - * - * @param listReqVO 查询æ¡ä»¶ - * @return 分类列表 - */ - List getCategoryList(InfraCategoryListReqVO listReqVO); - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryServiceImpl b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryServiceImpl deleted file mode 100644 index 351568b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryServiceImpl +++ /dev/null @@ -1,136 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraCategoryMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; - -/** - * 分类 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class InfraCategoryServiceImpl implements InfraCategoryService { - - @Resource - private InfraCategoryMapper categoryMapper; - - @Override - public Long createCategory(InfraCategorySaveReqVO createReqVO) { - // 校验父编å·çš„æœ‰æ•ˆæ€§ - validateParentCategory(null, createReqVO.getParentId()); - // 校验å字的唯一性 - validateCategoryNameUnique(null, createReqVO.getParentId(), createReqVO.getName()); - - // æ’å…¥ - InfraCategoryDO category = BeanUtils.toBean(createReqVO, InfraCategoryDO.class); - categoryMapper.insert(category); - // 返回 - return category.getId(); - } - - @Override - public void updateCategory(InfraCategorySaveReqVO updateReqVO) { - // 校验存在 - validateCategoryExists(updateReqVO.getId()); - // 校验父编å·çš„æœ‰æ•ˆæ€§ - validateParentCategory(updateReqVO.getId(), updateReqVO.getParentId()); - // 校验å字的唯一性 - validateCategoryNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName()); - - // æ›´æ–° - InfraCategoryDO updateObj = BeanUtils.toBean(updateReqVO, InfraCategoryDO.class); - categoryMapper.updateById(updateObj); - } - - @Override - public void deleteCategory(Long id) { - // 校验存在 - validateCategoryExists(id); - // æ ¡éªŒæ˜¯å¦æœ‰å­åˆ†ç±» - if (categoryMapper.selectCountByParentId(id) > 0) { - throw exception(CATEGORY_EXITS_CHILDREN); - } - // 删除 - categoryMapper.deleteById(id); - } - - private void validateCategoryExists(Long id) { - if (categoryMapper.selectById(id) == null) { - throw exception(CATEGORY_NOT_EXISTS); - } - } - - private void validateParentCategory(Long id, Long parentId) { - if (parentId == null || CategoryDO.PARENT_ID_ROOT.equals(parentId)) { - return; - } - // 1. ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶åˆ†ç±» - if (Objects.equals(id, parentId)) { - throw exception(CATEGORY_PARENT_ERROR); - } - // 2. 父分类ä¸å­˜åœ¨ - CategoryDO parentCategory = categoryMapper.selectById(parentId); - if (parentCategory == null) { - throw exception(CATEGORY_PARENT_NOT_EXITS); - } - // 3. 递归校验父分类,如果父分类是自己的å­åˆ†ç±»ï¼Œåˆ™æŠ¥é”™ï¼Œé¿å…å½¢æˆçŽ¯è·¯ - if (id == null) { // id 为空,说明新增,ä¸éœ€è¦è€ƒè™‘环路 - return; - } - for (int i = 0; i < Short.MAX_VALUE; i++) { - // 3.1 校验环路 - parentId = parentCategory.getParentId(); - if (Objects.equals(id, parentId)) { - throw exception(CATEGORY_PARENT_IS_CHILD); - } - // 3.2 继续递归下一级父分类 - if (parentId == null || CategoryDO.PARENT_ID_ROOT.equals(parentId)) { - break; - } - parentCategory = categoryMapper.selectById(parentId); - if (parentCategory == null) { - break; - } - } - } - - private void validateCategoryNameUnique(Long id, Long parentId, String name) { - CategoryDO category = categoryMapper.selectByParentIdAndName(parentId, name); - if (category == null) { - return; - } - // 如果 id 为空,说明ä¸ç”¨æ¯”较是å¦ä¸ºç›¸åŒ id 的分类 - if (id == null) { - throw exception(CATEGORY_NAME_DUPLICATE); - } - if (!Objects.equals(category.getId(), id)) { - throw exception(CATEGORY_NAME_DUPLICATE); - } - } - - @Override - public InfraCategoryDO getCategory(Long id) { - return categoryMapper.selectById(id); - } - - @Override - public List getCategoryList(InfraCategoryListReqVO listReqVO) { - return categoryMapper.selectList(listReqVO); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryServiceImplTest b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryServiceImplTest deleted file mode 100644 index efb70fd..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryServiceImplTest +++ /dev/null @@ -1,129 +0,0 @@ -package cn.iocoder.yudao.module.infra.service.demo; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; - -import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; -import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraCategoryMapper; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -/** - * {@link InfraCategoryServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(InfraCategoryServiceImpl.class) -public class InfraCategoryServiceImplTest extends BaseDbUnitTest { - - @Resource - private InfraCategoryServiceImpl categoryService; - - @Resource - private InfraCategoryMapper categoryMapper; - - @Test - public void testCreateCategory_success() { - // 准备傿•° - InfraCategorySaveReqVO createReqVO = randomPojo(InfraCategorySaveReqVO.class).setId(null); - - // 调用 - Long categoryId = categoryService.createCategory(createReqVO); - // 断言 - assertNotNull(categoryId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - InfraCategoryDO category = categoryMapper.selectById(categoryId); - assertPojoEquals(createReqVO, category, "id"); - } - - @Test - public void testUpdateCategory_success() { - // mock æ•°æ® - InfraCategoryDO dbCategory = randomPojo(InfraCategoryDO.class); - categoryMapper.insert(dbCategory);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - InfraCategorySaveReqVO updateReqVO = randomPojo(InfraCategorySaveReqVO.class, o -> { - o.setId(dbCategory.getId()); // 设置更新的 ID - }); - - // 调用 - categoryService.updateCategory(updateReqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - InfraCategoryDO category = categoryMapper.selectById(updateReqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(updateReqVO, category); - } - - @Test - public void testUpdateCategory_notExists() { - // 准备傿•° - InfraCategorySaveReqVO updateReqVO = randomPojo(InfraCategorySaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> categoryService.updateCategory(updateReqVO), CATEGORY_NOT_EXISTS); - } - - @Test - public void testDeleteCategory_success() { - // mock æ•°æ® - InfraCategoryDO dbCategory = randomPojo(InfraCategoryDO.class); - categoryMapper.insert(dbCategory);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbCategory.getId(); - - // 调用 - categoryService.deleteCategory(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(categoryMapper.selectById(id)); - } - - @Test - public void testDeleteCategory_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> categoryService.deleteCategory(id), CATEGORY_NOT_EXISTS); - } - - @Test - @Disabled // TODO 请修改 null 为需è¦çš„值,然åŽåˆ é™¤ @Disabled 注解 - public void testGetCategoryList() { - // mock æ•°æ® - InfraCategoryDO dbCategory = randomPojo(InfraCategoryDO.class, o -> { // 等会查询到 - o.setName(null); - }); - categoryMapper.insert(dbCategory); - // 测试 name ä¸åŒ¹é… - categoryMapper.insert(cloneIgnoreId(dbCategory, o -> o.setName(null))); - // 准备傿•° - InfraCategoryListReqVO reqVO = new InfraCategoryListReqVO(); - reqVO.setName(null); - - // 调用 - List list = categoryService.getCategoryList(reqVO); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(dbCategory, list.get(0)); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/sql/h2 b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/sql/h2 deleted file mode 100644 index 4141766..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/sql/h2 +++ /dev/null @@ -1,10 +0,0 @@ --- 将该建表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "infra_category" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "description" bigint NOT NULL, - PRIMARY KEY ("id") -) COMMENT '分类表'; - --- 将该删表 SQL 语å¥ï¼Œæ·»åŠ åˆ° yudao-module-infra-biz 模å—çš„ test/resources/sql/clean.sql 文件里 -DELETE FROM "infra_category"; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/sql/sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/sql/sql deleted file mode 100644 index 8140948..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/sql/sql +++ /dev/null @@ -1,55 +0,0 @@ --- èœå• SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status, component_name -) -VALUES ( - '分类管ç†', '', 2, 0, 888, - 'category', '', 'infra/demo/index', 0, 'InfraCategory' -); - --- 按钮父èœå•ID --- æš‚æ—¶åªæ”¯æŒ MySQL。如果你是 Oracleã€PostgreSQLã€SQLServer çš„è¯ï¼Œéœ€è¦æ‰‹åŠ¨ä¿®æ”¹ @parentId çš„éƒ¨åˆ†çš„ä»£ç  -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '分类查询', 'infra:category:query', 3, 1, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '分类创建', 'infra:category:create', 3, 2, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '分类更新', 'infra:category:update', 3, 3, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '分类删除', 'infra:category:delete', 3, 4, @parentId, - '', '', '', 0 -); -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '分类导出', 'infra:category:export', 3, 5, @parentId, - '', '', '', 0 -); \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/ts/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/ts/index deleted file mode 100644 index 453c885..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/ts/index +++ /dev/null @@ -1,37 +0,0 @@ -import request from '@/config/axios' - -export interface CategoryVO { - id: number - name: string - parentId: number -} - -// 查询分类列表 -export const getCategoryList = async (params) => { - return await request.get({ url: `/infra/category/list`, params }) -} - -// 查询分类详情 -export const getCategory = async (id: number) => { - return await request.get({ url: `/infra/category/get?id=` + id }) -} - -// 新增分类 -export const createCategory = async (data: CategoryVO) => { - return await request.post({ url: `/infra/category/create`, data }) -} - -// 修改分类 -export const updateCategory = async (data: CategoryVO) => { - return await request.put({ url: `/infra/category/update`, data }) -} - -// 删除分类 -export const deleteCategory = async (id: number) => { - return await request.delete({ url: `/infra/category/delete?id=` + id }) -} - -// 导出分类 Excel -export const exportCategory = async (params) => { - return await request.download({ url: `/infra/category/export-excel`, params }) -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/vue/CategoryForm b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/vue/CategoryForm deleted file mode 100644 index 8e139fb..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/vue/CategoryForm +++ /dev/null @@ -1,114 +0,0 @@ - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/vue/index b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/vue/index deleted file mode 100644 index 46902e7..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/vue/index +++ /dev/null @@ -1,185 +0,0 @@ - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/xml/InfraCategoryMapper b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/xml/InfraCategoryMapper deleted file mode 100644 index 025ac85..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/codegen/windows10/vue3_tree/xml/InfraCategoryMapper +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/logback.xml b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/logback.xml deleted file mode 100644 index daf756b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/logback.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/sql/clean.sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/sql/clean.sql deleted file mode 100644 index 58345ed..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/sql/clean.sql +++ /dev/null @@ -1,11 +0,0 @@ -DELETE FROM "infra_config"; -DELETE FROM "infra_file_config"; -DELETE FROM "infra_file"; -DELETE FROM "infra_job"; -DELETE FROM "infra_job_log"; -DELETE FROM "infra_api_access_log"; -DELETE FROM "infra_api_error_log"; -DELETE FROM "infra_file_config"; -DELETE FROM "infra_data_source_config"; -DELETE FROM "infra_codegen_table"; -DELETE FROM "infra_codegen_column"; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/sql/create_tables.sql b/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/sql/create_tables.sql deleted file mode 100644 index d4b19c9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-infra/src/test/resources/sql/create_tables.sql +++ /dev/null @@ -1,216 +0,0 @@ - -CREATE TABLE IF NOT EXISTS "infra_config" ( - "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT 'ç¼–å·', - "category" varchar(50) NOT NULL, - "type" tinyint NOT NULL, - "name" varchar(100) NOT NULL DEFAULT '' COMMENT 'åå­—', - "config_key" varchar(100) NOT NULL DEFAULT '', - "value" varchar(500) NOT NULL DEFAULT '', - "visible" bit NOT NULL, - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '傿•°é…置表'; - -CREATE TABLE IF NOT EXISTS "infra_file_config" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(63) NOT NULL, - "storage" tinyint NOT NULL, - "remark" varchar(255), - "master" bit(1) NOT NULL, - "config" varchar(4096) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '文件é…置表'; - -CREATE TABLE IF NOT EXISTS "infra_file" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "config_id" bigint NOT NULL, - "name" varchar(256), - "path" varchar(512), - "url" varchar(1024), - "type" varchar(63) DEFAULT NULL, - "size" bigint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '文件表'; - -CREATE TABLE IF NOT EXISTS "infra_job" ( - "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '任务编å·', - "name" varchar(32) NOT NULL COMMENT '任务åç§°', - "status" tinyint(4) NOT NULL COMMENT '任务状æ€', - "handler_name" varchar(64) NOT NULL COMMENT '处ç†å™¨çš„åå­—', - "handler_param" varchar(255) DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', - "cron_expression" varchar(32) NOT NULL COMMENT 'CRON 表达å¼', - "retry_count" int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•次数', - "retry_interval" int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•é—´éš”', - "monitor_timeout" int(11) NOT NULL DEFAULT '0' COMMENT '监控超时时间', - "creator" varchar(64) DEFAULT '' COMMENT '创建者', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - "updater" varchar(64) DEFAULT '' COMMENT '更新者', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', - "deleted" bit NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', - PRIMARY KEY ("id") -) COMMENT='定时任务表'; - -CREATE TABLE IF NOT EXISTS "infra_job_log" ( - "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '日志编å·', - "job_id" bigint(20) NOT NULL COMMENT '任务编å·', - "handler_name" varchar(64) NOT NULL COMMENT '处ç†å™¨çš„åå­—', - "handler_param" varchar(255) DEFAULT NULL COMMENT '处ç†å™¨çš„傿•°', - "execute_index" tinyint(4) NOT NULL DEFAULT '1' COMMENT '第几次执行', - "begin_time" datetime NOT NULL COMMENT '开始执行时间', - "end_time" datetime DEFAULT NULL COMMENT 'ç»“æŸæ‰§è¡Œæ—¶é—´', - "duration" int(11) DEFAULT NULL COMMENT '执行时长', - "status" tinyint(4) NOT NULL COMMENT '任务状æ€', - "result" varchar(4000) DEFAULT '' COMMENT '结果数æ®', - "creator" varchar(64) DEFAULT '' COMMENT '创建者', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - "updater" varchar(64) DEFAULT '' COMMENT '更新者', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', - "deleted" bit(1) NOT NULL DEFAULT FALSE COMMENT '是å¦åˆ é™¤', - PRIMARY KEY ("id") -)COMMENT='定时任务日志表'; - -CREATE TABLE IF NOT EXISTS "infra_api_access_log" ( - "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, - "trace_id" varchar(64) not null default '', - "user_id" bigint not null default '0', - "user_type" tinyint not null default '0', - "application_name" varchar(50) not null, - "request_method" varchar(16) not null default '', - "request_url" varchar(255) not null default '', - "request_params" varchar(8000) not null default '', - "response_body" varchar(8000) not null default '', - "user_ip" varchar(50) not null, - "user_agent" varchar(512) not null, - `operate_module` varchar(50) NOT NULL, - `operate_name` varchar(50) NOT NULL, - `operate_type` bigint(4) NOT NULL DEFAULT '0', - "begin_time" timestamp not null, - "end_time" timestamp not null, - "duration" integer not null, - "result_code" integer not null default '0', - "result_msg" varchar(512) default '', - "creator" varchar(64) default '', - "create_time" timestamp not null default current_timestamp, - "updater" varchar(64) default '', - "update_time" timestamp not null default current_timestamp, - "deleted" bit not null default false, - "tenant_id" bigint not null default '0', - primary key ("id") -) COMMENT 'API 访问日志表'; - -CREATE TABLE IF NOT EXISTS "infra_api_error_log" ( - "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, - "trace_id" varchar(64) not null, - "user_id" bigint not null default '0', - "user_type" tinyint not null default '0', - "application_name" varchar(50) not null, - "request_method" varchar(16) not null, - "request_url" varchar(255) not null, - "request_params" varchar(8000) not null, - "user_ip" varchar(50) not null, - "user_agent" varchar(512) not null, - "exception_time" timestamp not null, - "exception_name" varchar(128) not null default '', - "exception_message" clob not null, - "exception_root_cause_message" clob not null, - "exception_stack_trace" clob not null, - "exception_class_name" varchar(512) not null, - "exception_file_name" varchar(512) not null, - "exception_method_name" varchar(512) not null, - "exception_line_number" integer not null, - "process_status" tinyint not null, - "process_time" timestamp default null, - "process_user_id" bigint default '0', - "creator" varchar(64) default '', - "create_time" timestamp not null default current_timestamp, - "updater" varchar(64) default '', - "update_time" timestamp not null default current_timestamp, - "deleted" bit not null default false, - "tenant_id" bigint not null default '0', - primary key ("id") -) COMMENT '系统异常日志'; - -CREATE TABLE IF NOT EXISTS "infra_data_source_config" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(100) NOT NULL, - "url" varchar(1024) NOT NULL, - "username" varchar(255) NOT NULL, - "password" varchar(255) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT 'æ•°æ®æºé…置表'; - -CREATE TABLE IF NOT EXISTS "infra_codegen_table" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "data_source_config_id" bigint not null, - "scene" tinyint not null DEFAULT 1, - "table_name" varchar(200) NOT NULL, - "table_comment" varchar(500) NOT NULL, - "remark" varchar(500) NOT NULL, - "module_name" varchar(30) NOT NULL, - "business_name" varchar(30) NOT NULL, - "class_name" varchar(100) NOT NULL, - "class_comment" varchar(50) NOT NULL, - "author" varchar(50) NOT NULL, - "template_type" tinyint not null DEFAULT 1, - "front_type" tinyint not null, - "parent_menu_id" bigint not null, - "master_table_id" bigint not null, - "sub_join_column_id" bigint not null, - "sub_join_many" bit not null, - "tree_parent_column_id" bigint not null, - "tree_name_column_id" bigint not null, - "creator" varchar(64) DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '代ç ç”Ÿæˆè¡¨å®šä¹‰è¡¨'; - -CREATE TABLE IF NOT EXISTS "infra_codegen_column" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "table_id" bigint not null, - "column_name" varchar(200) NOT NULL, - "data_type" varchar(100) NOT NULL, - "column_comment" varchar(500) NOT NULL, - "nullable" tinyint not null, - "primary_key" tinyint not null, - "ordinal_position" int not null, - "java_type" varchar(32) NOT NULL, - "java_field" varchar(64) NOT NULL, - "dict_type" varchar(200) NOT NULL, - "example" varchar(64) NOT NULL, - "create_operation" bit not null, - "update_operation" bit not null, - "list_operation" bit not null, - "list_operation_condition" varchar(32) not null, - "list_operation_result" bit not null, - "html_type" varchar(32) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '代ç ç”Ÿæˆè¡¨å­—段定义表'; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-iot/yudao-module-iot-biz/pom.xml b/ruoyi-vue-pro-master-jdk17/yudao-module-iot/yudao-module-iot-biz/pom.xml index ba92a0e..a97e951 100644 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-iot/yudao-module-iot-biz/pom.xml +++ b/ruoyi-vue-pro-master-jdk17/yudao-module-iot/yudao-module-iot-biz/pom.xml @@ -105,7 +105,7 @@ - + diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/pom.xml b/ruoyi-vue-pro-master-jdk17/yudao-module-member/pom.xml deleted file mode 100644 index 87bef00..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/pom.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - cn.iocoder.boot - yudao - ${revision} - - 4.0.0 - yudao-module-member - jar - - ${project.artifactId} - - member 模å—,我们放会员业务。 - 例如说:会员中心等等 - - - - - cn.iocoder.boot - yudao-module-system - ${revision} - - - cn.iocoder.boot - yudao-module-infra - ${revision} - - - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-tenant - - - - - cn.iocoder.boot - yudao-spring-boot-starter-security - - - - org.springframework.boot - spring-boot-starter-validation - - - - - cn.iocoder.boot - yudao-spring-boot-starter-mybatis - - - - cn.iocoder.boot - yudao-spring-boot-starter-redis - - - - - cn.iocoder.boot - yudao-spring-boot-starter-mq - - - - - cn.iocoder.boot - yudao-spring-boot-starter-test - test - - - - - cn.iocoder.boot - yudao-spring-boot-starter-excel - - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-ip - - - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/MemberAddressApi.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/MemberAddressApi.java deleted file mode 100644 index 913316f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/MemberAddressApi.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.member.api.address; - -import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO; - -/** - * ç”¨æˆ·æ”¶ä»¶åœ°å€ API æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface MemberAddressApi { - - /** - * èŽ·å¾—ç”¨æˆ·æ”¶ä»¶åœ°å€ - * - * @param id 收件地å€ç¼–å· - * @param userId ç”¨æˆ·ç¼–å· - * @return ç”¨æˆ·æ”¶ä»¶åœ°å€ - */ - MemberAddressRespDTO getAddress(Long id, Long userId); - - /** - * èŽ·å¾—ç”¨æˆ·é»˜è®¤æ”¶ä»¶åœ°å€ - * - * @param userId ç”¨æˆ·ç¼–å· - * @return ç”¨æˆ·æ”¶ä»¶åœ°å€ - */ - MemberAddressRespDTO getDefaultAddress(Long userId); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/MemberAddressApiImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/MemberAddressApiImpl.java deleted file mode 100644 index 0793c09..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/MemberAddressApiImpl.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.yudao.module.member.api.address; - -import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO; -import cn.iocoder.yudao.module.member.convert.address.AddressConvert; -import cn.iocoder.yudao.module.member.service.address.AddressService; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; - -/** - * ç”¨æˆ·æ”¶ä»¶åœ°å€ API 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class MemberAddressApiImpl implements MemberAddressApi { - - @Resource - private AddressService addressService; - - @Override - public MemberAddressRespDTO getAddress(Long id, Long userId) { - return AddressConvert.INSTANCE.convert02(addressService.getAddress(userId, id)); - } - - @Override - public MemberAddressRespDTO getDefaultAddress(Long userId) { - return AddressConvert.INSTANCE.convert02(addressService.getDefaultUserAddress(userId)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/dto/MemberAddressRespDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/dto/MemberAddressRespDTO.java deleted file mode 100644 index 969e868..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/address/dto/MemberAddressRespDTO.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.yudao.module.member.api.address.dto; - -import lombok.Data; - -/** - * ç”¨æˆ·æ”¶ä»¶åœ°å€ Response DTO - * - * @author èŠ‹é“æºç  - */ -@Data -public class MemberAddressRespDTO { - - /** - * ç¼–å· - */ - private Long id; - /** - * ç”¨æˆ·ç¼–å· - */ - private Long userId; - /** - * 收件人åç§° - */ - private String name; - /** - * æ‰‹æœºå· - */ - private String mobile; - /** - * åœ°åŒºç¼–å· - */ - private Integer areaId; - /** - * æ”¶ä»¶è¯¦ç»†åœ°å€ - */ - private String detailAddress; - /** - * 是å¦é»˜è®¤ - */ - private Boolean defaultStatus; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/MemberConfigApi.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/MemberConfigApi.java deleted file mode 100644 index dab7f68..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/MemberConfigApi.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.member.api.config; - -import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO; - -/** - * 用户é…ç½® API æŽ¥å£ - * - * @author owen - */ -public interface MemberConfigApi { - - /** - * 获得积分é…ç½® - * - * @return 积分é…ç½® - */ - MemberConfigRespDTO getConfig(); -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/MemberConfigApiImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/MemberConfigApiImpl.java deleted file mode 100644 index 8e07e0b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/MemberConfigApiImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.member.api.config; - -import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO; -import cn.iocoder.yudao.module.member.convert.config.MemberConfigConvert; -import cn.iocoder.yudao.module.member.service.config.MemberConfigService; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; - -/** - * 用户é…ç½® API 实现类 - * - * @author owen - */ -@Service -@Validated -public class MemberConfigApiImpl implements MemberConfigApi { - - @Resource - private MemberConfigService memberConfigService; - - @Override - public MemberConfigRespDTO getConfig() { - return MemberConfigConvert.INSTANCE.convert01(memberConfigService.getConfig()); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/dto/MemberConfigRespDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/dto/MemberConfigRespDTO.java deleted file mode 100644 index 59aab53..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/config/dto/MemberConfigRespDTO.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.iocoder.yudao.module.member.api.config.dto; - -import lombok.Data; - -/** - * ç”¨æˆ·ä¿¡æ¯ Response DTO - * - * @author èŠ‹é“æºç  - */ -@Data -public class MemberConfigRespDTO { - - /** - * 积分抵扣开关 - */ - private Boolean pointTradeDeductEnable; - /** - * 积分抵扣,å•ä½ï¼šåˆ† - *

- * 1 积分抵扣多少分 - */ - private Integer pointTradeDeductUnitPrice; - /** - * 积分抵扣最大值 - */ - private Integer pointTradeDeductMaxPrice; - /** - * 1 元赠é€å¤šå°‘分 - */ - private Integer pointTradeGivePoint; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApi.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApi.java deleted file mode 100644 index 5876837..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApi.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.yudao.module.member.api.level; - -import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; -import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; - -/** - * 会员等级 API æŽ¥å£ - * - * @author owen - */ -public interface MemberLevelApi { - - /** - * 获得会员等级 - * - * @param id ä¼šå‘˜ç­‰çº§ç¼–å· - * @return 会员等级 - */ - MemberLevelRespDTO getMemberLevel(Long id); - - /** - * 增加会员ç»éªŒ - * - * @param userId 会员ID - * @param experience ç»éªŒ - * @param bizType 业务类型 {@link MemberExperienceBizTypeEnum} - * @param bizId ä¸šåŠ¡ç¼–å· - */ - void addExperience(Long userId, Integer experience, Integer bizType, String bizId); - - /** - * 扣å‡ä¼šå‘˜ç»éªŒ - * - * @param userId 会员ID - * @param experience ç»éªŒ - * @param bizType 业务类型 {@link MemberExperienceBizTypeEnum} - * @param bizId ä¸šåŠ¡ç¼–å· - */ - void reduceExperience(Long userId, Integer experience, Integer bizType, String bizId); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApiImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApiImpl.java deleted file mode 100644 index b98560c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApiImpl.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.iocoder.yudao.module.member.api.level; - -import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; -import cn.iocoder.yudao.module.member.convert.level.MemberLevelConvert; -import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; -import cn.iocoder.yudao.module.member.service.level.MemberLevelService; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.EXPERIENCE_BIZ_NOT_SUPPORT; - -/** - * 会员等级 API 实现类 - * - * @author owen - */ -@Slf4j -@Service -@Validated -public class MemberLevelApiImpl implements MemberLevelApi { - - @Resource - private MemberLevelService memberLevelService; - - @Override - public MemberLevelRespDTO getMemberLevel(Long id) { - return MemberLevelConvert.INSTANCE.convert02(memberLevelService.getLevel(id)); - } - - @Override - public void addExperience(Long userId, Integer experience, Integer bizType, String bizId) { - MemberExperienceBizTypeEnum bizTypeEnum = MemberExperienceBizTypeEnum.getByType(bizType); - if (bizTypeEnum == null) { - throw exception(EXPERIENCE_BIZ_NOT_SUPPORT); - } - memberLevelService.addExperience(userId, experience, bizTypeEnum, bizId); - } - - @Override - public void reduceExperience(Long userId, Integer experience, Integer bizType, String bizId) { - addExperience(userId, -experience, bizType, bizId); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/dto/MemberLevelRespDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/dto/MemberLevelRespDTO.java deleted file mode 100644 index a72d65f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/level/dto/MemberLevelRespDTO.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.yudao.module.member.api.level.dto; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import lombok.Data; - -/** - * 会员等级 Resp DTO - * - * @author èŠ‹é“æºç  - */ -@Data -public class MemberLevelRespDTO { - - /** - * ç¼–å· - */ - private Long id; - /** - * 等级åç§° - */ - private String name; - /** - * 等级 - */ - private Integer level; - /** - * å‡çº§ç»éªŒ - */ - private Integer experience; - /** - * äº«å—æŠ˜æ‰£ - */ - private Integer discountPercent; - /** - * çŠ¶æ€ - * - * 枚举 {@link CommonStatusEnum} - */ - private Integer status; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/message/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/message/package-info.java deleted file mode 100644 index 084525b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/message/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 消æ¯é˜Ÿåˆ—çš„æ¶ˆæ¯ - */ -package cn.iocoder.yudao.module.member.api.message; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/message/user/MemberUserCreateMessage.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/message/user/MemberUserCreateMessage.java deleted file mode 100644 index 4449180..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/message/user/MemberUserCreateMessage.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.yudao.module.member.api.message.user; - -import lombok.Data; - -import jakarta.validation.constraints.NotNull; - -/** - * ä¼šå‘˜ç”¨æˆ·åˆ›å»ºæ¶ˆæ¯ - * - * @author owen - */ -@Data -public class MemberUserCreateMessage { - - /** - * ç”¨æˆ·ç¼–å· - */ - @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") - private Long userId; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java deleted file mode 100644 index 8f74d80..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * member API 包,定义并实现æä¾›ç»™å…¶å®ƒæ¨¡å—çš„ API - */ -package cn.iocoder.yudao.module.member.api; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/point/MemberPointApi.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/point/MemberPointApi.java deleted file mode 100644 index e9120a3..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/point/MemberPointApi.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.yudao.module.member.api.point; - -import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; - -import jakarta.validation.constraints.Min; - -/** - * 用户积分的 API æŽ¥å£ - * - * @author owen - */ -public interface MemberPointApi { - - /** - * 增加用户积分 - * - * @param userId ç”¨æˆ·ç¼–å· - * @param point 积分 - * @param bizType 业务类型 {@link MemberPointBizTypeEnum} - * @param bizId ä¸šåŠ¡ç¼–å· - */ - void addPoint(Long userId, @Min(value = 1L, message = "积分必须是正数") Integer point, - Integer bizType, String bizId); - - /** - * å‡å°‘用户积分 - * - * @param userId ç”¨æˆ·ç¼–å· - * @param point 积分 - * @param bizType 业务类型 {@link MemberPointBizTypeEnum} - * @param bizId ä¸šåŠ¡ç¼–å· - */ - void reducePoint(Long userId, @Min(value = 1L, message = "积分必须是正数") Integer point, - Integer bizType, String bizId); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/point/MemberPointApiImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/point/MemberPointApiImpl.java deleted file mode 100644 index 8346b33..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/point/MemberPointApiImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.iocoder.yudao.module.member.api.point; - -import cn.hutool.core.lang.Assert; -import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; -import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.POINT_RECORD_BIZ_NOT_SUPPORT; - -/** - * 用户积分的 API 实现类 - * - * @author owen - */ -@Slf4j -@Service -@Validated -public class MemberPointApiImpl implements MemberPointApi { - - @Resource - private MemberPointRecordService memberPointRecordService; - - @Override - public void addPoint(Long userId, Integer point, Integer bizType, String bizId) { - Assert.isTrue(point > 0); - MemberPointBizTypeEnum bizTypeEnum = MemberPointBizTypeEnum.getByType(bizType); - if (bizTypeEnum == null) { - log.error("[addPoint][userId({}) point({}) bizType({}) bizId({}) {}]", userId, point, bizType, bizId, - POINT_RECORD_BIZ_NOT_SUPPORT); - return; - } - memberPointRecordService.createPointRecord(userId, point, bizTypeEnum, bizId); - } - - @Override - public void reducePoint(Long userId, Integer point, Integer bizType, String bizId) { - Assert.isTrue(point > 0); - MemberPointBizTypeEnum bizTypeEnum = MemberPointBizTypeEnum.getByType(bizType); - if (bizTypeEnum == null) { - throw exception(POINT_RECORD_BIZ_NOT_SUPPORT); - } - memberPointRecordService.createPointRecord(userId, -point, bizTypeEnum, bizId); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java deleted file mode 100644 index da74aaa..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.iocoder.yudao.module.member.api.user; - -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; - -/** - * 会员用户的 API æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface MemberUserApi { - - /** - * èŽ·å¾—ä¼šå‘˜ç”¨æˆ·ä¿¡æ¯ - * - * @param id ç”¨æˆ·ç¼–å· - * @return ç”¨æˆ·ä¿¡æ¯ - */ - MemberUserRespDTO getUser(Long id); - - /** - * 获得会员用户信æ¯ä»¬ - * - * @param ids 用户编å·çš„æ•°ç»„ - * @return 用户信æ¯ä»¬ - */ - List getUserList(Collection ids); - - /** - * 获得会员用户 Map - * - * @param ids 用户编å·çš„æ•°ç»„ - * @return 会员用户 Map - */ - default Map getUserMap(Collection ids) { - List list = getUserList(ids); - return convertMap(list, MemberUserRespDTO::getId); - } - - /** - * 基于用户昵称,模糊匹é…用户列表 - * - * @param nickname ç”¨æˆ·æ˜µç§°ï¼Œæ¨¡ç³ŠåŒ¹é… - * @return 用户信æ¯çš„列表 - */ - List getUserListByNickname(String nickname); - - /** - * 基于手机å·ï¼Œç²¾å‡†åŒ¹é…用户 - * - * @param mobile æ‰‹æœºå· - * @return ç”¨æˆ·ä¿¡æ¯ - */ - MemberUserRespDTO getUserByMobile(String mobile); - - /** - * 校验用户是å¦å­˜åœ¨ - * - * @param id ç”¨æˆ·ç¼–å· - */ - void validateUser(Long id); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApiImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApiImpl.java deleted file mode 100644 index 960930d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApiImpl.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.yudao.module.member.api.user; - -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; -import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; -import java.util.Collection; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.USER_MOBILE_NOT_EXISTS; - -/** - * 会员用户的 API 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class MemberUserApiImpl implements MemberUserApi { - - @Resource - private MemberUserService userService; - - @Override - public MemberUserRespDTO getUser(Long id) { - MemberUserDO user = userService.getUser(id); - return MemberUserConvert.INSTANCE.convert2(user); - } - - @Override - public List getUserList(Collection ids) { - return MemberUserConvert.INSTANCE.convertList2(userService.getUserList(ids)); - } - - @Override - public List getUserListByNickname(String nickname) { - return MemberUserConvert.INSTANCE.convertList2(userService.getUserListByNickname(nickname)); - } - - @Override - public MemberUserRespDTO getUserByMobile(String mobile) { - return MemberUserConvert.INSTANCE.convert2(userService.getUserByMobile(mobile)); - } - - @Override - public void validateUser(Long id) { - MemberUserDO user = userService.getUser(id); - if (user == null) { - throw exception(USER_MOBILE_NOT_EXISTS); - } - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java deleted file mode 100644 index 50548f9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.iocoder.yudao.module.member.api.user.dto; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import lombok.Data; - -import java.time.LocalDateTime; - -/** - * ç”¨æˆ·ä¿¡æ¯ Response DTO - * - * @author èŠ‹é“æºç  - */ -@Data -public class MemberUserRespDTO { - - /** - * 用户ID - */ - private Long id; - /** - * 用户昵称 - */ - private String nickname; - /** - * å¸å·çŠ¶æ€ - * - * 枚举 {@link CommonStatusEnum} - */ - private Integer status; - /** - * ç”¨æˆ·å¤´åƒ - */ - private String avatar; - /** - * 手机 - */ - private String mobile; - /** - * 创建时间(注册时间) - */ - private LocalDateTime createTime; - - // ========== å…¶å®ƒä¿¡æ¯ ========== - - /** - * ä¼šå‘˜çº§åˆ«ç¼–å· - */ - private Long levelId; - - /** - * 积分 - */ - private Integer point; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/AddressController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/AddressController.java deleted file mode 100644 index 273d82f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/AddressController.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.address; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.member.controller.admin.address.vo.AddressRespVO; -import cn.iocoder.yudao.module.member.convert.address.AddressConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.address.MemberAddressDO; -import cn.iocoder.yudao.module.member.service.address.AddressService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import jakarta.annotation.Resource; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -@Tag(name = "管ç†åŽå° - 用户收件地å€") -@RestController -@RequestMapping("/member/address") -@Validated -public class AddressController { - - @Resource - private AddressService addressService; - - @GetMapping("/list") - @Operation(summary = "获得用户收件地å€åˆ—表") - @Parameter(name = "userId", description = "用户编å·", required = true) - @PreAuthorize("@ss.hasPermission('member:user:query')") - public CommonResult> getAddressList(@RequestParam("userId") Long userId) { - List list = addressService.getAddressList(userId); - return success(AddressConvert.INSTANCE.convertList2(list)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/package-info.java deleted file mode 100644 index 652bbb6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.address; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/vo/AddressBaseVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/vo/AddressBaseVO.java deleted file mode 100644 index e19609a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/vo/AddressBaseVO.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.address.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; - -import java.time.LocalDateTime; -import java.util.*; -import jakarta.validation.constraints.*; - -/** - * ç”¨æˆ·æ”¶ä»¶åœ°å€ Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 - * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ - */ -@Data -public class AddressBaseVO { - - @Schema(description = "收件人åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") - @NotNull(message = "收件人åç§°ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "手机å·", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "手机å·ä¸èƒ½ä¸ºç©º") - private String mobile; - - @Schema(description = "地区编ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "15716") - @NotNull(message = "地区编ç ä¸èƒ½ä¸ºç©º") - private Long areaId; - - @Schema(description = "收件详细地å€", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "收件详细地å€ä¸èƒ½ä¸ºç©º") - private String detailAddress; - - @Schema(description = "是å¦é»˜è®¤", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - @NotNull(message = "是å¦é»˜è®¤ä¸èƒ½ä¸ºç©º") - private Boolean defaultStatus; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/vo/AddressRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/vo/AddressRespVO.java deleted file mode 100644 index 26a4988..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/vo/AddressRespVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.address.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - ç”¨æˆ·æ”¶ä»¶åœ°å€ Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class AddressRespVO extends AddressBaseVO { - - @Schema(description = "收件地å€ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "7380") - private Long id; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/MemberConfigController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/MemberConfigController.java deleted file mode 100644 index cad9884..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/MemberConfigController.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.config; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.member.controller.admin.config.vo.MemberConfigRespVO; -import cn.iocoder.yudao.module.member.controller.admin.config.vo.MemberConfigSaveReqVO; -import cn.iocoder.yudao.module.member.convert.config.MemberConfigConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.config.MemberConfigDO; -import cn.iocoder.yudao.module.member.service.config.MemberConfigService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import jakarta.annotation.Resource; -import jakarta.validation.Valid; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -@Tag(name = "管ç†åŽå° - 会员设置") -@RestController -@RequestMapping("/member/config") -@Validated -public class MemberConfigController { - - @Resource - private MemberConfigService memberConfigService; - - @PutMapping("/save") - @Operation(summary = "ä¿å­˜ä¼šå‘˜é…ç½®") - @PreAuthorize("@ss.hasPermission('member:config:save')") - public CommonResult saveConfig(@Valid @RequestBody MemberConfigSaveReqVO saveReqVO) { - memberConfigService.saveConfig(saveReqVO); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得会员é…ç½®") - @PreAuthorize("@ss.hasPermission('member:config:query')") - public CommonResult getConfig() { - MemberConfigDO config = memberConfigService.getConfig(); - return success(MemberConfigConvert.INSTANCE.convert(config)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java deleted file mode 100644 index 2be07e5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.config.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import jakarta.validation.constraints.NotNull; - -/** - * 会员é…ç½® Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 - * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ - */ -@Data -public class MemberConfigBaseVO { - - @Schema(description = "积分抵扣开关", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @NotNull(message = "积分抵扣开å‘ä¸èƒ½ä¸ºç©º") - private Boolean pointTradeDeductEnable; - - @Schema(description = "积分抵扣,å•ä½ï¼šåˆ†", requiredMode = Schema.RequiredMode.REQUIRED, example = "13506") - @NotNull(message = "积分抵扣ä¸èƒ½ä¸ºç©º") - private Integer pointTradeDeductUnitPrice; - - @Schema(description = "积分抵扣最大值", requiredMode = Schema.RequiredMode.REQUIRED, example = "32428") - @NotNull(message = "积分抵扣最大值ä¸èƒ½ä¸ºç©º") - private Integer pointTradeDeductMaxPrice; - - @Schema(description = "1 元赠é€å¤šå°‘分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") - @NotNull(message = "1 元赠é€ç§¯åˆ†ä¸èƒ½ä¸ºç©º") - private Integer pointTradeGivePoint; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigRespVO.java deleted file mode 100644 index 04f14f3..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigRespVO.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.config.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -@Schema(description = "管ç†åŽå° - 会员é…ç½® Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberConfigRespVO extends MemberConfigBaseVO { - - @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigSaveReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigSaveReqVO.java deleted file mode 100644 index 8348f1f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigSaveReqVO.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.config.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -@Schema(description = "管ç†åŽå° - 会员é…ç½®ä¿å­˜ Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberConfigSaveReqVO extends MemberConfigBaseVO { -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/MemberGroupController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/MemberGroupController.java deleted file mode 100644 index cebfebe..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/MemberGroupController.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.group; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.*; -import cn.iocoder.yudao.module.member.convert.group.MemberGroupConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; -import cn.iocoder.yudao.module.member.service.group.MemberGroupService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - - -@Tag(name = "管ç†åŽå° - 用户分组") -@RestController -@RequestMapping("/member/group") -@Validated -public class MemberGroupController { - - @Resource - private MemberGroupService groupService; - - @PostMapping("/create") - @Operation(summary = "创建用户分组") - @PreAuthorize("@ss.hasPermission('member:group:create')") - public CommonResult createGroup(@Valid @RequestBody MemberGroupCreateReqVO createReqVO) { - return success(groupService.createGroup(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新用户分组") - @PreAuthorize("@ss.hasPermission('member:group:update')") - public CommonResult updateGroup(@Valid @RequestBody MemberGroupUpdateReqVO updateReqVO) { - groupService.updateGroup(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除用户分组") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('member:group:delete')") - public CommonResult deleteGroup(@RequestParam("id") Long id) { - groupService.deleteGroup(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得用户分组") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('member:group:query')") - public CommonResult getGroup(@RequestParam("id") Long id) { - MemberGroupDO group = groupService.getGroup(id); - return success(MemberGroupConvert.INSTANCE.convert(group)); - } - - @GetMapping("/list-all-simple") - @Operation(summary = "获å–会员分组精简信æ¯åˆ—表", description = "åªåŒ…å«è¢«å¼€å¯çš„会员分组,主è¦ç”¨äºŽå‰ç«¯çš„下拉选项") - public CommonResult> getSimpleGroupList() { - // 获用户列表,åªè¦å¼€å¯çжæ€çš„ - List list = groupService.getEnableGroupList(); - return success(MemberGroupConvert.INSTANCE.convertSimpleList(list)); - } - - @GetMapping("/page") - @Operation(summary = "获得用户分组分页") - @PreAuthorize("@ss.hasPermission('member:group:query')") - public CommonResult> getGroupPage(@Valid MemberGroupPageReqVO pageVO) { - PageResult pageResult = groupService.getGroupPage(pageVO); - return success(MemberGroupConvert.INSTANCE.convertPage(pageResult)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupBaseVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupBaseVO.java deleted file mode 100644 index 281abe8..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupBaseVO.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.group.vo; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.validation.InEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import jakarta.validation.constraints.NotNull; - -/** - * 用户分组 Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 - * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ - */ -@Data -public class MemberGroupBaseVO { - - @Schema(description = "åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "购物达人") - @NotNull(message = "åç§°ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜") - private String remark; - - @Schema(description = "状æ€", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "状æ€ä¸èƒ½ä¸ºç©º") - @InEnum(CommonStatusEnum.class) - private Integer status; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupCreateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupCreateReqVO.java deleted file mode 100644 index ef3f833..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupCreateReqVO.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.group.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -@Schema(description = "管ç†åŽå° - 用户分组创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberGroupCreateReqVO extends MemberGroupBaseVO { - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupPageReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupPageReqVO.java deleted file mode 100644 index ae67d5f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupPageReqVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.group.vo; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 用户分组分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberGroupPageReqVO extends PageParam { - - @Schema(description = "åç§°", example = "购物达人") - private String name; - - @Schema(description = "状æ€", example = "1") - private Integer status; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupRespVO.java deleted file mode 100644 index 9736538..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupRespVO.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.group.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 用户分组 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberGroupRespVO extends MemberGroupBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "20357") - private Long id; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupSimpleRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupSimpleRespVO.java deleted file mode 100644 index ee7d905..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupSimpleRespVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.group.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.ToString; - -@Schema(description = "管ç†åŽå° - 用户分组 Response VO") -@Data -@ToString(callSuper = true) -public class MemberGroupSimpleRespVO { - - @Schema(description = "ç¼–å·", example = "6103") - private Long id; - - @Schema(description = "等级åç§°", example = "芋艿") - private String name; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupUpdateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupUpdateReqVO.java deleted file mode 100644 index f808808..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupUpdateReqVO.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.group.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import jakarta.validation.constraints.NotNull; - -@Schema(description = "管ç†åŽå° - 用户分组更新 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberGroupUpdateReqVO extends MemberGroupBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "20357") - @NotNull(message = "ç¼–å·ä¸èƒ½ä¸ºç©º") - private Long id; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberExperienceRecordController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberExperienceRecordController.java deleted file mode 100644 index c0766da..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberExperienceRecordController.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.experience.MemberExperienceRecordPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.experience.MemberExperienceRecordRespVO; -import cn.iocoder.yudao.module.member.convert.level.MemberExperienceRecordConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberExperienceRecordDO; -import cn.iocoder.yudao.module.member.service.level.MemberExperienceRecordService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import jakarta.annotation.Resource; -import jakarta.validation.Valid; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -@Tag(name = "管ç†åŽå° - 会员ç»éªŒè®°å½•") -@RestController -@RequestMapping("/member/experience-record") -@Validated -public class MemberExperienceRecordController { - - @Resource - private MemberExperienceRecordService experienceLogService; - - @GetMapping("/get") - @Operation(summary = "获得会员ç»éªŒè®°å½•") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('member:experience-record:query')") - public CommonResult getExperienceRecord(@RequestParam("id") Long id) { - MemberExperienceRecordDO experienceLog = experienceLogService.getExperienceRecord(id); - return success(MemberExperienceRecordConvert.INSTANCE.convert(experienceLog)); - } - - @GetMapping("/page") - @Operation(summary = "获得会员ç»éªŒè®°å½•分页") - @PreAuthorize("@ss.hasPermission('member:experience-record:query')") - public CommonResult> getExperienceRecordPage( - @Valid MemberExperienceRecordPageReqVO pageVO) { - PageResult pageResult = experienceLogService.getExperienceRecordPage(pageVO); - return success(MemberExperienceRecordConvert.INSTANCE.convertPage(pageResult)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberLevelController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberLevelController.java deleted file mode 100644 index 3384112..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberLevelController.java +++ /dev/null @@ -1,80 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.*; -import cn.iocoder.yudao.module.member.convert.level.MemberLevelConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import cn.iocoder.yudao.module.member.service.level.MemberLevelService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -@Tag(name = "管ç†åŽå° - 会员等级") -@RestController -@RequestMapping("/member/level") -@Validated -public class MemberLevelController { - - @Resource - private MemberLevelService levelService; - - @PostMapping("/create") - @Operation(summary = "创建会员等级") - @PreAuthorize("@ss.hasPermission('member:level:create')") - public CommonResult createLevel(@Valid @RequestBody MemberLevelCreateReqVO createReqVO) { - return success(levelService.createLevel(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新会员等级") - @PreAuthorize("@ss.hasPermission('member:level:update')") - public CommonResult updateLevel(@Valid @RequestBody MemberLevelUpdateReqVO updateReqVO) { - levelService.updateLevel(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除会员等级") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('member:level:delete')") - public CommonResult deleteLevel(@RequestParam("id") Long id) { - levelService.deleteLevel(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得会员等级") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('member:level:query')") - public CommonResult getLevel(@RequestParam("id") Long id) { - MemberLevelDO level = levelService.getLevel(id); - return success(MemberLevelConvert.INSTANCE.convert(level)); - } - - @GetMapping("/list-all-simple") - @Operation(summary = "获å–会员等级精简信æ¯åˆ—表", description = "åªåŒ…å«è¢«å¼€å¯çš„会员等级,主è¦ç”¨äºŽå‰ç«¯çš„下拉选项") - public CommonResult> getSimpleLevelList() { - // 获用户列表,åªè¦å¼€å¯çжæ€çš„ - List list = levelService.getEnableLevelList(); - // 排åºåŽï¼Œè¿”回给å‰ç«¯ - return success(MemberLevelConvert.INSTANCE.convertSimpleList(list)); - } - - @GetMapping("/list") - @Operation(summary = "获得会员等级列表") - @PreAuthorize("@ss.hasPermission('member:level:query')") - public CommonResult> getLevelList(@Valid MemberLevelListReqVO listReqVO) { - List result = levelService.getLevelList(listReqVO); - return success(MemberLevelConvert.INSTANCE.convertList(result)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberLevelRecordController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberLevelRecordController.java deleted file mode 100644 index a837261..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberLevelRecordController.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.record.MemberLevelRecordPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.record.MemberLevelRecordRespVO; -import cn.iocoder.yudao.module.member.convert.level.MemberLevelRecordConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelRecordDO; -import cn.iocoder.yudao.module.member.service.level.MemberLevelRecordService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import jakarta.annotation.Resource; -import jakarta.validation.Valid; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -@Tag(name = "管ç†åŽå° - 会员等级记录") -@RestController -@RequestMapping("/member/level-record") -@Validated -public class MemberLevelRecordController { - - @Resource - private MemberLevelRecordService levelLogService; - - @GetMapping("/get") - @Operation(summary = "获得会员等级记录") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('member:level-record:query')") - public CommonResult getLevelRecord(@RequestParam("id") Long id) { - MemberLevelRecordDO levelLog = levelLogService.getLevelRecord(id); - return success(MemberLevelRecordConvert.INSTANCE.convert(levelLog)); - } - - @GetMapping("/page") - @Operation(summary = "获得会员等级记录分页") - @PreAuthorize("@ss.hasPermission('member:level-record:query')") - public CommonResult> getLevelRecordPage( - @Valid MemberLevelRecordPageReqVO pageVO) { - PageResult pageResult = levelLogService.getLevelRecordPage(pageVO); - return success(MemberLevelRecordConvert.INSTANCE.convertPage(pageResult)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordBaseVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordBaseVO.java deleted file mode 100644 index 82f84ea..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordBaseVO.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.experience; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import jakarta.validation.constraints.NotNull; - -/** - * 会员ç»éªŒè®°å½• Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 - * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ - */ -@Data -public class MemberExperienceRecordBaseVO { - - @Schema(description = "用户编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "3638") - @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") - private Long userId; - - @Schema(description = "业务编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "12164") - @NotNull(message = "业务编å·ä¸èƒ½ä¸ºç©º") - private String bizId; - - @Schema(description = "业务类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "业务类型ä¸èƒ½ä¸ºç©º") - private Integer bizType; - - @Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "增加ç»éªŒ") - @NotNull(message = "标题ä¸èƒ½ä¸ºç©º") - private String title; - - @Schema(description = "ç»éªŒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") - @NotNull(message = "ç»éªŒä¸èƒ½ä¸ºç©º") - private Integer experience; - - @Schema(description = "å˜æ›´åŽçš„ç»éªŒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") - @NotNull(message = "å˜æ›´åŽçš„ç»éªŒä¸èƒ½ä¸ºç©º") - private Integer totalExperience; - - @Schema(description = "æè¿°", requiredMode = Schema.RequiredMode.REQUIRED, example = "下å•增加 100 ç»éªŒ") - @NotNull(message = "æè¿°ä¸èƒ½ä¸ºç©º") - private String description; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordPageReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordPageReqVO.java deleted file mode 100644 index d18201d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordPageReqVO.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.experience; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 会员ç»éªŒè®°å½•分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberExperienceRecordPageReqVO extends PageParam { - - @Schema(description = "用户编å·", example = "3638") - private Long userId; - - @Schema(description = "业务编å·", example = "12164") - private String bizId; - - @Schema(description = "业务类型", example = "1") - private Integer bizType; - - @Schema(description = "标题", example = "增加ç»éªŒ") - private String title; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordRespVO.java deleted file mode 100644 index 5e652fc..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceRecordRespVO.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.experience; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 会员ç»éªŒè®°å½• Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberExperienceRecordRespVO extends MemberExperienceRecordBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "19610") - private Long id; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelBaseVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelBaseVO.java deleted file mode 100644 index 9f3083e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelBaseVO.java +++ /dev/null @@ -1,53 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.level; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.validation.InEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import org.hibernate.validator.constraints.Range; -import org.hibernate.validator.constraints.URL; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Positive; - -/** - * 会员等级 Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 - * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ - */ -@Data -public class MemberLevelBaseVO { - - @Schema(description = "等级åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") - @NotBlank(message = "等级åç§°ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "å‡çº§ç»éªŒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") - @NotNull(message = "å‡çº§ç»éªŒä¸èƒ½ä¸ºç©º") - @Positive(message = "å‡çº§ç»éªŒå¿…须大于 0") - private Integer experience; - - @Schema(description = "等级", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "等级ä¸èƒ½ä¸ºç©º") - @Positive(message = "等级必须大于 0") - private Integer level; - - @Schema(description = "äº«å—æŠ˜æ‰£", requiredMode = Schema.RequiredMode.REQUIRED, example = "98") - @NotNull(message = "äº«å—æŠ˜æ‰£ä¸èƒ½ä¸ºç©º") - @Range(min = 0, max = 100, message = "äº«å—æŠ˜æ‰£çš„èŒƒå›´ä¸º 0-100") - private Integer discountPercent; - - @Schema(description = "等级图标", example = "https://www.iocoder.cn/yudao.jpg") - @URL(message = "等级图标必须是 URL æ ¼å¼") - private String icon; - - @Schema(description = "等级背景图", example = "https://www.iocoder.cn/yudao.jpg") - @URL(message = "等级背景图必须是 URL æ ¼å¼") - private String backgroundUrl; - - @Schema(description = "状æ€", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "状æ€ä¸èƒ½ä¸ºç©º") - @InEnum(CommonStatusEnum.class) - private Integer status; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelCreateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelCreateReqVO.java deleted file mode 100644 index f51a7d9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelCreateReqVO.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.level; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -@Schema(description = "管ç†åŽå° - 会员等级创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberLevelCreateReqVO extends MemberLevelBaseVO { - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelListReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelListReqVO.java deleted file mode 100644 index 348e78e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelListReqVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.level; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.ToString; - -@Schema(description = "管ç†åŽå° - 会员等级列表筛选 Request VO") -@Data -@ToString(callSuper = true) -public class MemberLevelListReqVO { - - @Schema(description = "等级åç§°", example = "芋艿") - private String name; - - @Schema(description = "状æ€", example = "1") - private Integer status; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelRespVO.java deleted file mode 100644 index df91a81..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelRespVO.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.level; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 会员等级 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberLevelRespVO extends MemberLevelBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "6103") - private Long id; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelSimpleRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelSimpleRespVO.java deleted file mode 100644 index 96c515c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelSimpleRespVO.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.level; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.ToString; - -@Schema(description = "管ç†åŽå° - 会员等级 Response VO") -@Data -@ToString(callSuper = true) -public class MemberLevelSimpleRespVO { - - @Schema(description = "ç¼–å·", example = "6103") - private Long id; - - @Schema(description = "等级åç§°", example = "芋艿") - private String name; - - @Schema(description = "等级图标", example = "https://www.iocoder.cn/yudao.jpg") - private String icon; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelUpdateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelUpdateReqVO.java deleted file mode 100644 index dad6c97..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelUpdateReqVO.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.level; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import jakarta.validation.constraints.NotNull; - -@Schema(description = "管ç†åŽå° - 会员等级更新 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberLevelUpdateReqVO extends MemberLevelBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "6103") - @NotNull(message = "ç¼–å·ä¸èƒ½ä¸ºç©º") - private Long id; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordBaseVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordBaseVO.java deleted file mode 100644 index 7537178..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordBaseVO.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.record; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import jakarta.validation.constraints.NotNull; - -/** - * 会员等级记录 Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 - * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ - */ -@Data -public class MemberLevelRecordBaseVO { - - @Schema(description = "用户编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "25923") - @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") - private Long userId; - - @Schema(description = "等级编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "25985") - @NotNull(message = "等级编å·ä¸èƒ½ä¸ºç©º") - private Long levelId; - - @Schema(description = "会员等级", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "会员等级ä¸èƒ½ä¸ºç©º") - private Integer level; - - @Schema(description = "äº«å—æŠ˜æ‰£", requiredMode = Schema.RequiredMode.REQUIRED, example = "13319") - @NotNull(message = "äº«å—æŠ˜æ‰£ä¸èƒ½ä¸ºç©º") - private Integer discountPercent; - - @Schema(description = "å‡çº§ç»éªŒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "13319") - @NotNull(message = "å‡çº§ç»éªŒä¸èƒ½ä¸ºç©º") - private Integer experience; - - @Schema(description = "会员此时的ç»éªŒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "13319") - @NotNull(message = "会员此时的ç»éªŒä¸èƒ½ä¸ºç©º") - private Integer userExperience; - - @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "推广需è¦") - @NotNull(message = "备注ä¸èƒ½ä¸ºç©º") - private String remark; - - @Schema(description = "æè¿°", requiredMode = Schema.RequiredMode.REQUIRED, example = "å‡çº§ä¸ºé‡‘牌会员") - @NotNull(message = "æè¿°ä¸èƒ½ä¸ºç©º") - private String description; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordPageReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordPageReqVO.java deleted file mode 100644 index 2590cfb..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordPageReqVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.record; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 会员等级记录分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberLevelRecordPageReqVO extends PageParam { - - @Schema(description = "用户编å·", example = "25923") - private Long userId; - - @Schema(description = "等级编å·", example = "25985") - private Long levelId; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordRespVO.java deleted file mode 100644 index caf98ea..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/record/MemberLevelRecordRespVO.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.level.vo.record; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 会员等级记录 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberLevelRecordRespVO extends MemberLevelRecordBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "8741") - private Long id; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/MemberPointRecordController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/MemberPointRecordController.java deleted file mode 100644 index 7b63d79..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/MemberPointRecordController.java +++ /dev/null @@ -1,56 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.point; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordRespVO; -import cn.iocoder.yudao.module.member.convert.point.MemberPointRecordConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.point.MemberPointRecordDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.util.CollectionUtils; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; - -@Tag(name = "管ç†åŽå° - 签到记录") -@RestController -@RequestMapping("/member/point/record") -@Validated -public class MemberPointRecordController { - - @Resource - private MemberPointRecordService pointRecordService; - - @Resource - private MemberUserService memberUserService; - - @GetMapping("/page") - @Operation(summary = "获得用户积分记录分页") - @PreAuthorize("@ss.hasPermission('point:record:query')") - public CommonResult> getPointRecordPage(@Valid MemberPointRecordPageReqVO pageVO) { - // 执行分页查询 - PageResult pageResult = pointRecordService.getPointRecordPage(pageVO); - if (CollectionUtils.isEmpty(pageResult.getList())) { - return success(PageResult.empty(pageResult.getTotal())); - } - - // 拼接结果返回 - List users = memberUserService.getUserList( - convertSet(pageResult.getList(), MemberPointRecordDO::getUserId)); - return success(MemberPointRecordConvert.INSTANCE.convertPage(pageResult, users)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/vo/recrod/MemberPointRecordPageReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/vo/recrod/MemberPointRecordPageReqVO.java deleted file mode 100644 index 63cc800..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/vo/recrod/MemberPointRecordPageReqVO.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -@Schema(description = "管ç†åŽå° - 用户积分记录分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberPointRecordPageReqVO extends PageParam { - - @Schema(description = "用户昵称", example = "张三") - private String nickname; - - @Schema(description = "用户编å·", example = "123") - private Long userId; - - @Schema(description = "业务类型", example = "1") - private Integer bizType; - - @Schema(description = "积分标题", example = "呵呵") - private String title; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/vo/recrod/MemberPointRecordRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/vo/recrod/MemberPointRecordRespVO.java deleted file mode 100644 index 6714aa8..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/vo/recrod/MemberPointRecordRespVO.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 用户积分记录 Response VO") -@Data -public class MemberPointRecordRespVO { - - @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "31457") - private Long id; - - @Schema(description = "用户编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long userId; - - @Schema(description = "昵称", example = "张三") - private String nickname; - - @Schema(description = "业务编ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "22706") - private String bizId; - - @Schema(description = "业务类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Integer bizType; - - @Schema(description = "积分标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜") - private String title; - - @Schema(description = "积分æè¿°", example = "你猜") - private String description; - - @Schema(description = "积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") - private Integer point; - - @Schema(description = "å˜åЍåŽçš„积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") - private Integer totalPoint; - - @Schema(description = "å‘生时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/MemberSignInConfigController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/MemberSignInConfigController.java deleted file mode 100644 index f6776f6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/MemberSignInConfigController.java +++ /dev/null @@ -1,74 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.signin; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.config.MemberSignInConfigCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.config.MemberSignInConfigRespVO; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.config.MemberSignInConfigUpdateReqVO; -import cn.iocoder.yudao.module.member.convert.signin.MemberSignInConfigConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO; -import cn.iocoder.yudao.module.member.service.signin.MemberSignInConfigService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -// TODO 芋艿:url -@Tag(name = "管ç†åŽå° - 签到规则") -@RestController -@RequestMapping("/member/sign-in/config") -@Validated -public class MemberSignInConfigController { - - @Resource - private MemberSignInConfigService signInConfigService; - - @PostMapping("/create") - @Operation(summary = "创建签到规则") - @PreAuthorize("@ss.hasPermission('point:sign-in-config:create')") - public CommonResult createSignInConfig(@Valid @RequestBody MemberSignInConfigCreateReqVO createReqVO) { - return success(signInConfigService.createSignInConfig(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新签到规则") - @PreAuthorize("@ss.hasPermission('point:sign-in-config:update')") - public CommonResult updateSignInConfig(@Valid @RequestBody MemberSignInConfigUpdateReqVO updateReqVO) { - signInConfigService.updateSignInConfig(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除签到规则") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('point:sign-in-config:delete')") - public CommonResult deleteSignInConfig(@RequestParam("id") Long id) { - signInConfigService.deleteSignInConfig(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得签到规则") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('point:sign-in-config:query')") - public CommonResult getSignInConfig(@RequestParam("id") Long id) { - MemberSignInConfigDO signInConfig = signInConfigService.getSignInConfig(id); - return success(MemberSignInConfigConvert.INSTANCE.convert(signInConfig)); - } - - @GetMapping("/list") - @Operation(summary = "获得签到规则列表") - @PreAuthorize("@ss.hasPermission('point:sign-in-config:query')") - public CommonResult> getSignInConfigList() { - List list = signInConfigService.getSignInConfigList(); - return success(MemberSignInConfigConvert.INSTANCE.convertList(list)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/MemberSignInRecordController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/MemberSignInRecordController.java deleted file mode 100644 index 48a83b0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/MemberSignInRecordController.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.signin; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.record.MemberSignInRecordPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.record.MemberSignInRecordRespVO; -import cn.iocoder.yudao.module.member.convert.signin.MemberSignInRecordConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.service.signin.MemberSignInRecordService; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.util.CollectionUtils; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; - -@Tag(name = "管ç†åŽå° - 签到记录") -@RestController -@RequestMapping("/member/sign-in/record") -@Validated -public class MemberSignInRecordController { - - @Resource - private MemberSignInRecordService signInRecordService; - - @Resource - private MemberUserService memberUserService; - - @GetMapping("/page") - @Operation(summary = "获得签到记录分页") - @PreAuthorize("@ss.hasPermission('point:sign-in-record:query')") - public CommonResult> getSignInRecordPage(@Valid MemberSignInRecordPageReqVO pageVO) { - // 执行分页查询 - PageResult pageResult = signInRecordService.getSignInRecordPage(pageVO); - if (CollectionUtils.isEmpty(pageResult.getList())) { - return success(PageResult.empty(pageResult.getTotal())); - } - - // 拼接结果返回 - List users = memberUserService.getUserList( - convertSet(pageResult.getList(), MemberSignInRecordDO::getUserId)); - return success(MemberSignInRecordConvert.INSTANCE.convertPage(pageResult, users)); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigBaseVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigBaseVO.java deleted file mode 100644 index 0169ba6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigBaseVO.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.signin.vo.config; - -import cn.hutool.core.util.ObjUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.validation.InEnum; -import com.fasterxml.jackson.annotation.JsonIgnore; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import jakarta.validation.constraints.AssertTrue; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.PositiveOrZero; - -/** - * 签到规则 Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 - * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ - */ -@Data -public class MemberSignInConfigBaseVO { - - @Schema(description = "签到第 x 天", requiredMode = Schema.RequiredMode.REQUIRED, example = "7") - @NotNull(message = "签到天数ä¸èƒ½ä¸ºç©º") - private Integer day; - - @Schema(description = "奖励积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - @NotNull(message = "奖励积分ä¸èƒ½ä¸ºç©º") - @PositiveOrZero(message = "奖励积分ä¸èƒ½å°äºŽ 0") - private Integer point; - - @Schema(description = "奖励ç»éªŒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - @NotNull(message = "奖励ç»éªŒä¸èƒ½ä¸ºç©º") - @PositiveOrZero(message = "奖励ç»éªŒä¸èƒ½å°äºŽ 0") - private Integer experience; - - @Schema(description = "状æ€", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "状æ€ä¸èƒ½ä¸ºç©º") - @InEnum(CommonStatusEnum.class) - private Integer status; - - @AssertTrue(message = "签到奖励积分和ç»éªŒä¸èƒ½åŒæ—¶ä¸ºç©º") - @JsonIgnore - public boolean isConfigAward() { - return ObjUtil.notEqual(point, 0) || ObjUtil.notEqual(experience, 0); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigCreateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigCreateReqVO.java deleted file mode 100644 index 7ca03fa..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigCreateReqVO.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.signin.vo.config; - -import lombok.*; -import io.swagger.v3.oas.annotations.media.Schema; - -@Schema(description = "管ç†åŽå° - 签到规则创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberSignInConfigCreateReqVO extends MemberSignInConfigBaseVO { - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigRespVO.java deleted file mode 100644 index 8d423b2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigRespVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.signin.vo.config; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 签到规则 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberSignInConfigRespVO extends MemberSignInConfigBaseVO { - - @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "20937") - private Integer id; - - @Schema(description = "创建时间") - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigUpdateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigUpdateReqVO.java deleted file mode 100644 index 69daba9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigUpdateReqVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.signin.vo.config; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; - -import jakarta.validation.constraints.*; - -@Schema(description = "管ç†åŽå° - 签到规则更新 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberSignInConfigUpdateReqVO extends MemberSignInConfigBaseVO { - - @Schema(description = "规则自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "13653") - @NotNull(message = "规则自增主键ä¸èƒ½ä¸ºç©º") - private Long id; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/record/MemberSignInRecordPageReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/record/MemberSignInRecordPageReqVO.java deleted file mode 100644 index b46712b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/record/MemberSignInRecordPageReqVO.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.signin.vo.record; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 签到记录分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberSignInRecordPageReqVO extends PageParam { - - @Schema(description = "签到用户", example = "土豆") - private String nickname; - - @Schema(description = "第几天签到", example = "10") - private Integer day; - - @Schema(description = "用户编å·", example = "123") - private Long userId; - - @Schema(description = "签到时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/record/MemberSignInRecordRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/record/MemberSignInRecordRespVO.java deleted file mode 100644 index b5755ba..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/record/MemberSignInRecordRespVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.signin.vo.record; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 签到记录 Response VO") -@Data -public class MemberSignInRecordRespVO { - - @Schema(description = "签到自增 id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11903") - private Long id; - - @Schema(description = "签到用户", requiredMode = Schema.RequiredMode.REQUIRED, example = "6507") - private Long userId; - - @Schema(description = "昵称", example = "张三") - private String nickname; - - @Schema(description = "第几天签到", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Integer day; - - @Schema(description = "签到的积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - private Integer point; - - @Schema(description = "签到时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/MemberTagController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/MemberTagController.java deleted file mode 100644 index e477295..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/MemberTagController.java +++ /dev/null @@ -1,94 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.tag; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagRespVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagUpdateReqVO; -import cn.iocoder.yudao.module.member.convert.tag.MemberTagConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; -import cn.iocoder.yudao.module.member.service.tag.MemberTagService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import java.util.Collection; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -@Tag(name = "管ç†åŽå° - 会员标签") -@RestController -@RequestMapping("/member/tag") -@Validated -public class MemberTagController { - - @Resource - private MemberTagService tagService; - - @PostMapping("/create") - @Operation(summary = "创建会员标签") - @PreAuthorize("@ss.hasPermission('member:tag:create')") - public CommonResult createTag(@Valid @RequestBody MemberTagCreateReqVO createReqVO) { - return success(tagService.createTag(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新会员标签") - @PreAuthorize("@ss.hasPermission('member:tag:update')") - public CommonResult updateTag(@Valid @RequestBody MemberTagUpdateReqVO updateReqVO) { - tagService.updateTag(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除会员标签") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('member:tag:delete')") - public CommonResult deleteTag(@RequestParam("id") Long id) { - tagService.deleteTag(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得会员标签") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('member:tag:query')") - public CommonResult getMemberTag(@RequestParam("id") Long id) { - MemberTagDO tag = tagService.getTag(id); - return success(MemberTagConvert.INSTANCE.convert(tag)); - } - - @GetMapping("/list-all-simple") - @Operation(summary = "获å–会员标签精简信æ¯åˆ—表", description = "åªåŒ…å«è¢«å¼€å¯çš„会员标签,主è¦ç”¨äºŽå‰ç«¯çš„下拉选项") - public CommonResult> getSimpleTagList() { - // 获用户列表,åªè¦å¼€å¯çжæ€çš„ - List list = tagService.getTagList(); - // 排åºåŽï¼Œè¿”回给å‰ç«¯ - return success(MemberTagConvert.INSTANCE.convertList(list)); - } - - @GetMapping("/list") - @Operation(summary = "获得会员标签列表") - @Parameter(name = "ids", description = "ç¼–å·åˆ—表", required = true, example = "1024,2048") - @PreAuthorize("@ss.hasPermission('member:tag:query')") - public CommonResult> getMemberTagList(@RequestParam("ids") Collection ids) { - List list = tagService.getTagList(ids); - return success(MemberTagConvert.INSTANCE.convertList(list)); - } - - @GetMapping("/page") - @Operation(summary = "获得会员标签分页") - @PreAuthorize("@ss.hasPermission('member:tag:query')") - public CommonResult> getTagPage(@Valid MemberTagPageReqVO pageVO) { - PageResult pageResult = tagService.getTagPage(pageVO); - return success(MemberTagConvert.INSTANCE.convertPage(pageResult)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagBaseVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagBaseVO.java deleted file mode 100644 index 3f2277a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagBaseVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.tag.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import jakarta.validation.constraints.NotNull; - -/** - * 会员标签 Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 - * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ - */ -@Data -public class MemberTagBaseVO { - - @Schema(description = "标签åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "æŽå››") - @NotNull(message = "标签åç§°ä¸èƒ½ä¸ºç©º") - private String name; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagCreateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagCreateReqVO.java deleted file mode 100644 index b61f26b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagCreateReqVO.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.tag.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -@Schema(description = "管ç†åŽå° - 会员标签创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberTagCreateReqVO extends MemberTagBaseVO { - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagPageReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagPageReqVO.java deleted file mode 100644 index 99f59b0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagPageReqVO.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.tag.vo; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 会员标签分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberTagPageReqVO extends PageParam { - - @Schema(description = "标签åç§°", example = "æŽå››") - private String name; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagRespVO.java deleted file mode 100644 index 2c21f53..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagRespVO.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.tag.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 会员标签 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberTagRespVO extends MemberTagBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "907") - private Long id; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagUpdateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagUpdateReqVO.java deleted file mode 100644 index 58c58c8..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagUpdateReqVO.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.tag.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import jakarta.validation.constraints.NotNull; - -@Schema(description = "管ç†åŽå° - 会员标签更新 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberTagUpdateReqVO extends MemberTagBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "907") - @NotNull(message = "ç¼–å·ä¸èƒ½ä¸ºç©º") - private Long id; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java deleted file mode 100644 index 6a642bb..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java +++ /dev/null @@ -1,113 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.user; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; -import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; -import cn.iocoder.yudao.module.member.service.group.MemberGroupService; -import cn.iocoder.yudao.module.member.service.level.MemberLevelService; -import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService; -import cn.iocoder.yudao.module.member.service.tag.MemberTagService; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Collectors; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; -import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId; - -@Tag(name = "管ç†åŽå° - 会员用户") -@RestController -@RequestMapping("/member/user") -@Validated -public class MemberUserController { - - @Resource - private MemberUserService memberUserService; - @Resource - private MemberTagService memberTagService; - @Resource - private MemberLevelService memberLevelService; - @Resource - private MemberGroupService memberGroupService; - @Resource - private MemberPointRecordService memberPointRecordService; - - @PutMapping("/update") - @Operation(summary = "更新会员用户") - @PreAuthorize("@ss.hasPermission('member:user:update')") - public CommonResult updateUser(@Valid @RequestBody MemberUserUpdateReqVO updateReqVO) { - memberUserService.updateUser(updateReqVO); - return success(true); - } - - @PutMapping("/update-level") - @Operation(summary = "更新会员用户等级") - @PreAuthorize("@ss.hasPermission('member:user:update-level')") - public CommonResult updateUserLevel(@Valid @RequestBody MemberUserUpdateLevelReqVO updateReqVO) { - memberLevelService.updateUserLevel(updateReqVO); - return success(true); - } - - @PutMapping("/update-point") - @Operation(summary = "更新会员用户积分") - @PreAuthorize("@ss.hasPermission('member:user:update-point')") - public CommonResult updateUserPoint(@Valid @RequestBody MemberUserUpdatePointReqVO updateReqVO) { - memberPointRecordService.createPointRecord(updateReqVO.getId(), updateReqVO.getPoint(), - MemberPointBizTypeEnum.ADMIN, String.valueOf(getLoginUserId())); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得会员用户") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('member:user:query')") - public CommonResult getUser(@RequestParam("id") Long id) { - MemberUserDO user = memberUserService.getUser(id); - return success(MemberUserConvert.INSTANCE.convert03(user)); - } - - @GetMapping("/page") - @Operation(summary = "获得会员用户分页") - @PreAuthorize("@ss.hasPermission('member:user:query')") - public CommonResult> getUserPage(@Valid MemberUserPageReqVO pageVO) { - PageResult pageResult = memberUserService.getUserPage(pageVO); - if (CollUtil.isEmpty(pageResult.getList())) { - return success(PageResult.empty()); - } - - // 处ç†ç”¨æˆ·æ ‡ç­¾è¿”显 - Set tagIds = pageResult.getList().stream() - .map(MemberUserDO::getTagIds) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .collect(Collectors.toSet()); - List tags = memberTagService.getTagList(tagIds); - // 处ç†ç”¨æˆ·çº§åˆ«è¿”显 - List levels = memberLevelService.getLevelList( - convertSet(pageResult.getList(), MemberUserDO::getLevelId)); - // 处ç†ç”¨æˆ·åˆ†ç»„返显 - List groups = memberGroupService.getGroupList( - convertSet(pageResult.getList(), MemberUserDO::getGroupId)); - return success(MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels, groups)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java deleted file mode 100644 index b240602..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java +++ /dev/null @@ -1,65 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.user.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import org.hibernate.validator.constraints.URL; -import org.springframework.format.annotation.DateTimeFormat; - -import jakarta.validation.constraints.NotNull; -import java.time.LocalDateTime; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; - -/** - * 会员用户 Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 - * å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ - */ -@Data -public class MemberUserBaseVO { - - @Schema(description = "手机å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") - @NotNull(message = "手机å·ä¸èƒ½ä¸ºç©º") - private String mobile; - - @Schema(description = "状æ€", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - @NotNull(message = "状æ€ä¸èƒ½ä¸ºç©º") - private Byte status; - - @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "æŽå››") - @NotNull(message = "用户昵称ä¸èƒ½ä¸ºç©º") - private String nickname; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/x.png") - @URL(message = "头åƒå¿…须是 URL æ ¼å¼") - private String avatar; - - @Schema(description = "用户昵称", example = "æŽå››") - private String name; - - @Schema(description = "用户性别", example = "1") - private Integer sex; - - @Schema(description = "所在地编å·", example = "4371") - private Long areaId; - - @Schema(description = "所在地全程", example = "上海上海市普陀区") - private String areaName; - - @Schema(description = "出生日期", example = "2023-03-12") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) - private LocalDateTime birthday; - - @Schema(description = "会员备注", example = "我是å°å¤‡æ³¨") - private String mark; - - @Schema(description = "会员标签", example = "[1, 2]") - private List tagIds; - - @Schema(description = "会员等级编å·", example = "1") - private Long levelId; - - @Schema(description = "用户分组编å·", example = "1") - private Long groupId; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserPageReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserPageReqVO.java deleted file mode 100644 index abb9428..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserPageReqVO.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.user.vo; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDateTime; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 会员用户分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberUserPageReqVO extends PageParam { - - @Schema(description = "手机å·", example = "15601691300") - private String mobile; - - @Schema(description = "用户昵称", example = "æŽå››") - private String nickname; - - @Schema(description = "最åŽç™»å½•æ—¶é—´") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] loginDate; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - - @Schema(description = "会员标签编å·åˆ—表", example = "[1, 2]") - private List tagIds; - - @Schema(description = "会员等级编å·", example = "1") - private Long levelId; - - @Schema(description = "用户分组编å·", example = "1") - private Long groupId; - - // TODO 芋艿:注册用户类型; - - // TODO 芋艿:登录用户类型; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java deleted file mode 100644 index 1cd2283..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.user.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import java.time.LocalDateTime; -import java.util.List; - -@Schema(description = "管ç†åŽå° - 会员用户 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberUserRespVO extends MemberUserBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "23788") - private Long id; - - @Schema(description = "注册 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") - private String registerIp; - - @Schema(description = "最åŽç™»å½•IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") - private String loginIp; - - @Schema(description = "最åŽç™»å½•æ—¶é—´", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime loginDate; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - - // ========== å…¶å®ƒä¿¡æ¯ ========== - - @Schema(description = "积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") - private Integer point; - - @Schema(description = "总积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "2000") - private Integer totalPoint; - - @Schema(description = "会员标签", example = "[红色, å¿«ä¹]") - private List tagNames; - - @Schema(description = "会员等级", example = "黄金会员") - private String levelName; - - @Schema(description = "用户分组", example = "购物达人") - private String groupName; - - @Schema(description = "用户ç»éªŒå€¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") - private Integer experience; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdateLevelReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdateLevelReqVO.java deleted file mode 100644 index f69dfa7..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdateLevelReqVO.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.user.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.ToString; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; - -@Schema(description = "管ç†åŽå° - 用户修改等级 Request VO") -@Data -@ToString(callSuper = true) -public class MemberUserUpdateLevelReqVO { - - @Schema(description = "用户编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "23788") - @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") - private Long id; - - /** - * å–æ¶ˆç”¨æˆ·ç­‰çº§æ—¶ï¼Œå€¼ä¸ºç©º - */ - @Schema(description = "用户等级编å·", example = "1") - private Long levelId; - - @Schema(description = "修改原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "推广需è¦") - @NotBlank(message = "修改原因ä¸èƒ½ä¸ºç©º") - private String reason; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdatePointReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdatePointReqVO.java deleted file mode 100644 index 66ac7f2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdatePointReqVO.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.user.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.ToString; - -import jakarta.validation.constraints.NotNull; - -@Schema(description = "管ç†åŽå° - 用户修改积分 Request VO") -@Data -@ToString(callSuper = true) -public class MemberUserUpdatePointReqVO { - - @Schema(description = "用户编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "23788") - @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") - private Long id; - - @Schema(description = "å˜åŠ¨ç§¯åˆ†ï¼Œæ­£æ•°ä¸ºå¢žåŠ ï¼Œè´Ÿæ•°ä¸ºå‡å°‘", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") - @NotNull(message = "å˜åŠ¨ç§¯åˆ†ä¸èƒ½ä¸ºç©º") - private Integer point; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdateReqVO.java deleted file mode 100644 index f956a19..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdateReqVO.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.admin.user.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import jakarta.validation.constraints.NotNull; - -@Schema(description = "管ç†åŽå° - 会员用户更新 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MemberUserUpdateReqVO extends MemberUserBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "23788") - @NotNull(message = "ç¼–å·ä¸èƒ½ä¸ºç©º") - private Long id; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.http b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.http deleted file mode 100644 index a0582e6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.http +++ /dev/null @@ -1,54 +0,0 @@ -### 请求 /create æŽ¥å£ => æˆåŠŸ -POST {{appApi}}//member/address/create -Content-Type: application/json -tenant-id: {{appTenantId}} -Authorization: Bearer {{appToken}} - -{ - "name": "yunai", - "mobile": "15601691300", - "areaId": "610632", - "postCode": "200000", - "detailAddress": "èŠ‹é“æºç  233 å· 666 室", - "defaulted": true -} - -### 请求 /update æŽ¥å£ => æˆåŠŸ -PUT {{appApi}}//member/address/update -Content-Type: application/json -tenant-id: {{appTenantId}} -Authorization: Bearer {{appToken}} - -{ - "id": "1", - "name": "yunai888", - "mobile": "15601691300", - "areaId": "610632", - "postCode": "200000", - "detailAddress": "èŠ‹é“æºç  233 å· 666 室", - "defaulted": false -} - -### 请求 /delete æŽ¥å£ => æˆåŠŸ -DELETE {{appApi}}//member/address/delete?id=2 -Content-Type: application/json -tenant-id: {{appTenantId}} -Authorization: Bearer {{appToken}} - -### 请求 /get æŽ¥å£ => æˆåŠŸ -GET {{appApi}}//member/address/get?id=1 -Content-Type: application/json -tenant-id: {{appTenantId}} -Authorization: Bearer {{appToken}} - -### 请求 /get-default æŽ¥å£ => æˆåŠŸ -GET {{appApi}}//member/address/get-default -Content-Type: application/json -tenant-id: {{appTenantId}} -Authorization: Bearer {{appToken}} - -### 请求 /list æŽ¥å£ => æˆåŠŸ -GET {{appApi}}//member/address/list -Content-Type: application/json -tenant-id: {{appTenantId}} -Authorization: Bearer {{appToken}} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.java deleted file mode 100644 index cce2d99..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.java +++ /dev/null @@ -1,75 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.address; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressCreateReqVO; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressRespVO; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressUpdateReqVO; -import cn.iocoder.yudao.module.member.convert.address.AddressConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.address.MemberAddressDO; -import cn.iocoder.yudao.module.member.service.address.AddressService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; - -@Tag(name = "用户 APP - 用户收件地å€") -@RestController -@RequestMapping("/member/address") -@Validated -public class AppAddressController { - - @Resource - private AddressService addressService; - - @PostMapping("/create") - @Operation(summary = "创建用户收件地å€") - public CommonResult createAddress(@Valid @RequestBody AppAddressCreateReqVO createReqVO) { - return success(addressService.createAddress(getLoginUserId(), createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新用户收件地å€") - public CommonResult updateAddress(@Valid @RequestBody AppAddressUpdateReqVO updateReqVO) { - addressService.updateAddress(getLoginUserId(), updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除用户收件地å€") - @Parameter(name = "id", description = "ç¼–å·", required = true) - public CommonResult deleteAddress(@RequestParam("id") Long id) { - addressService.deleteAddress(getLoginUserId(), id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得用户收件地å€") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - public CommonResult getAddress(@RequestParam("id") Long id) { - MemberAddressDO address = addressService.getAddress(getLoginUserId(), id); - return success(AddressConvert.INSTANCE.convert(address)); - } - - @GetMapping("/get-default") - @Operation(summary = "获得默认的用户收件地å€") - public CommonResult getDefaultUserAddress() { - MemberAddressDO address = addressService.getDefaultUserAddress(getLoginUserId()); - return success(AddressConvert.INSTANCE.convert(address)); - } - - @GetMapping("/list") - @Operation(summary = "获得用户收件地å€åˆ—表") - public CommonResult> getAddressList() { - List list = addressService.getAddressList(getLoginUserId()); - return success(AddressConvert.INSTANCE.convertList(list)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressBaseVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressBaseVO.java deleted file mode 100644 index b3f8744..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressBaseVO.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.address.vo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import jakarta.validation.constraints.NotNull; - -// TODO 芋艿:example 缺失 -/** -* ç”¨æˆ·æ”¶ä»¶åœ°å€ Base VO,æä¾›ç»™æ·»åŠ ã€ä¿®æ”¹ã€è¯¦ç»†çš„å­ VO 使用 -* å¦‚æžœå­ VO 存在差异的字段,请ä¸è¦æ·»åŠ åˆ°è¿™é‡Œï¼Œå½±å“ Swagger æ–‡æ¡£ç”Ÿæˆ -*/ -@Data -public class AppAddressBaseVO { - - @Schema(description = "收件人åç§°", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "收件人åç§°ä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "手机å·", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "手机å·ä¸èƒ½ä¸ºç©º") - private String mobile; - - @Schema(description = "地区编å·", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "地区编å·ä¸èƒ½ä¸ºç©º") - private Long areaId; - - @Schema(description = "收件详细地å€", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "收件详细地å€ä¸èƒ½ä¸ºç©º") - private String detailAddress; - - @Schema(description = "是å¦é»˜è®¤åœ°å€", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "是å¦é»˜è®¤åœ°å€ä¸èƒ½ä¸ºç©º") - private Boolean defaultStatus; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressCreateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressCreateReqVO.java deleted file mode 100644 index c92687f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressCreateReqVO.java +++ /dev/null @@ -1,11 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.address.vo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; - -@Schema(description = "用户 APP - 用户收件地å€åˆ›å»º Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class AppAddressCreateReqVO extends AppAddressBaseVO { - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressRespVO.java deleted file mode 100644 index d3e2f9f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressRespVO.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.address.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -@Schema(description = "用户 APP - ç”¨æˆ·æ”¶ä»¶åœ°å€ Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class AppAddressRespVO extends AppAddressBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "地区åå­—", requiredMode = Schema.RequiredMode.REQUIRED, example = "上海上海市普陀区") - private String areaName; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressUpdateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressUpdateReqVO.java deleted file mode 100644 index 30b2feb..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressUpdateReqVO.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.address.vo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import jakarta.validation.constraints.*; - -@Schema(description = "用户 APP - ç”¨æˆ·æ”¶ä»¶åœ°å€æ›´æ–° Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class AppAddressUpdateReqVO extends AppAddressBaseVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotNull(message = "ç¼–å·ä¸èƒ½ä¸ºç©º") - private Long id; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http deleted file mode 100644 index 391aa92..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http +++ /dev/null @@ -1,67 +0,0 @@ -### 请求 /login æŽ¥å£ => æˆåŠŸ -POST {{appApi}}/member/auth/login -Content-Type: application/json -tenant-id: {{appTenantId}} - -{ - "mobile": "15601691388", - "password": "admin123" -} - -### 请求 /send-sms-code æŽ¥å£ => æˆåŠŸ -POST {{appApi}}/member/auth/send-sms-code -Content-Type: application/json -tenant-id: {{appTenantId}} - -{ - "mobile": "15601691388", - "scene": 1 -} - -### 请求 /sms-login æŽ¥å£ => æˆåŠŸ -POST {{appApi}}/member/auth/sms-login -Content-Type: application/json -tenant-id: {{appTenantId}} -terminal: 30 - -{ - "mobile": "15601691388", - "code": 9999 -} - -### 请求 /social-login æŽ¥å£ => æˆåŠŸ -POST {{appApi}}/member/auth/social-login -Content-Type: application/json -tenant-id: {{appTenantId}} - -{ - "type": 34, - "code": "0e1oc9000CTjFQ1oim200bhtb61oc90g", - "state": "default" -} - -### 请求 /weixin-mini-app-login æŽ¥å£ => æˆåŠŸ -POST {{appApi}}/member/auth/weixin-mini-app-login -Content-Type: application/json -tenant-id: {{appTenantId}} - -{ - "phoneCode": "618e6412e0c728f5b8fc7164497463d0158a923c9e7fd86af8bba393b9decbc5", - "loginCode": "001frTkl21JUf94VGxol2hSlff1frTkR" -} - -### 请求 /logout æŽ¥å£ => æˆåŠŸ -POST {{appApi}}/member/auth/logout -Content-Type: application/json -Authorization: Bearer c1b76bdaf2c146c581caa4d7fd81ee66 -tenant-id: {{appTenantId}} - -### 请求 /auth/refresh-token æŽ¥å£ => æˆåŠŸ -POST {{appApi}}/member/auth/refresh-token?refreshToken=bc43d929094849a28b3a69f6e6940d70 -Content-Type: application/json -tenant-id: {{appTenantId}} - -### 请求 /auth/create-weixin-jsapi-signature æŽ¥å£ => æˆåŠŸ -POST {{appApi}}/member/auth/create-weixin-jsapi-signature?url=http://www.iocoder.cn -Authorization: Bearer {{appToken}} -tenant-id: {{appTenantId}} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java deleted file mode 100644 index 0693f02..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java +++ /dev/null @@ -1,135 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.auth; - -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.security.config.SecurityProperties; -import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; -import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; -import cn.iocoder.yudao.module.member.convert.auth.AuthConvert; -import cn.iocoder.yudao.module.member.service.auth.MemberAuthService; -import cn.iocoder.yudao.module.system.api.social.SocialClientApi; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxJsapiSignatureRespDTO; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Parameters; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.extern.slf4j.Slf4j; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import jakarta.annotation.Resource; -import jakarta.annotation.security.PermitAll; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; - -@Tag(name = "用户 APP - 认è¯") -@RestController -@RequestMapping("/member/auth") -@Validated -@Slf4j -public class AppAuthController { - - @Resource - private MemberAuthService authService; - - @Resource - private SocialClientApi socialClientApi; - - @Resource - private SecurityProperties securityProperties; - - @PostMapping("/login") - @Operation(summary = "使用手机 + 密ç ç™»å½•") - @PermitAll - public CommonResult login(@RequestBody @Valid AppAuthLoginReqVO reqVO) { - return success(authService.login(reqVO)); - } - - @PostMapping("/logout") - @Operation(summary = "登出系统") - @PermitAll - public CommonResult logout(HttpServletRequest request) { - String token = SecurityFrameworkUtils.obtainAuthorization(request, - securityProperties.getTokenHeader(), securityProperties.getTokenParameter()); - if (StrUtil.isNotBlank(token)) { - authService.logout(token); - } - return success(true); - } - - @PostMapping("/refresh-token") - @Operation(summary = "刷新令牌") - @Parameter(name = "refreshToken", description = "刷新令牌", required = true) - @PermitAll - public CommonResult refreshToken(@RequestParam("refreshToken") String refreshToken) { - return success(authService.refreshToken(refreshToken)); - } - - // ========== 短信登录相关 ========== - - @PostMapping("/sms-login") - @Operation(summary = "使用手机 + 验è¯ç ç™»å½•") - @PermitAll - public CommonResult smsLogin(@RequestBody @Valid AppAuthSmsLoginReqVO reqVO) { - return success(authService.smsLogin(reqVO)); - } - - @PostMapping("/send-sms-code") - @Operation(summary = "å‘逿‰‹æœºéªŒè¯ç ") - @PermitAll - public CommonResult sendSmsCode(@RequestBody @Valid AppAuthSmsSendReqVO reqVO) { - authService.sendSmsCode(getLoginUserId(), reqVO); - return success(true); - } - - @PostMapping("/validate-sms-code") - @Operation(summary = "校验手机验è¯ç ") - @PermitAll - public CommonResult validateSmsCode(@RequestBody @Valid AppAuthSmsValidateReqVO reqVO) { - authService.validateSmsCode(getLoginUserId(), reqVO); - return success(true); - } - - // ========== 社交登录相关 ========== - - @GetMapping("/social-auth-redirect") - @Operation(summary = "社交授æƒçš„跳转") - @Parameters({ - @Parameter(name = "type", description = "社交类型", required = true), - @Parameter(name = "redirectUri", description = "回调路径") - }) - @PermitAll - public CommonResult socialAuthRedirect(@RequestParam("type") Integer type, - @RequestParam("redirectUri") String redirectUri) { - return CommonResult.success(authService.getSocialAuthorizeUrl(type, redirectUri)); - } - - @PostMapping("/social-login") - @Operation(summary = "社交快æ·ç™»å½•,使用 code 授æƒç ", description = "é€‚åˆæœªç™»å½•的用户,但是社交账å·å·²ç»‘定用户") - @PermitAll - public CommonResult socialLogin(@RequestBody @Valid AppAuthSocialLoginReqVO reqVO) { - return success(authService.socialLogin(reqVO)); - } - - @PostMapping("/weixin-mini-app-login") - @Operation(summary = "微信å°ç¨‹åºçš„一键登录") - @PermitAll - public CommonResult weixinMiniAppLogin(@RequestBody @Valid AppAuthWeixinMiniAppLoginReqVO reqVO) { - return success(authService.weixinMiniAppLogin(reqVO)); - } - - @PostMapping("/create-weixin-jsapi-signature") - @Operation(summary = "创建微信 JS SDK åˆå§‹åŒ–所需的签å", - description = "å‚考 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 文档") - @PermitAll - public CommonResult createWeixinMpJsapiSignature(@RequestParam("url") String url) { - SocialWxJsapiSignatureRespDTO signature = socialClientApi.createWxMpJsapiSignature( - UserTypeEnum.MEMBER.getValue(), url); - return success(AuthConvert.INSTANCE.convert(signature)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java deleted file mode 100644 index e32968e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.auth.vo; - -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Pattern; - -// TODO 芋艿:code review 相关逻辑 -@Schema(description = "用户 APP - 校验验è¯ç  Request VO") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class AppAuthCheckCodeReqVO { - - @Schema(description = "手机å·", example = "15601691234") - @NotBlank(message = "手机å·ä¸èƒ½ä¸ºç©º") - @Mobile - private String mobile; - - @Schema(description = "手机验è¯ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotBlank(message = "手机验è¯ç ä¸èƒ½ä¸ºç©º") - @Length(min = 4, max = 6, message = "手机验è¯ç é•¿åº¦ä¸º 4-6 ä½") - @Pattern(regexp = "^[0-9]+$", message = "手机验è¯ç å¿…须都是数字") - private String code; - - @Schema(description = "å‘é€åœºæ™¯,对应 SmsSceneEnum 枚举", example = "1") - @NotNull(message = "å‘é€åœºæ™¯ä¸èƒ½ä¸ºç©º") - @InEnum(SmsSceneEnum.class) - private Integer scene; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java deleted file mode 100644 index 463f3bb..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java +++ /dev/null @@ -1,56 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.auth.vo; - -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; - -import jakarta.validation.constraints.AssertTrue; -import jakarta.validation.constraints.NotEmpty; - -@Schema(description = "用户 APP - 手机 + 密ç ç™»å½• Request VO,如果登录并绑定社交用户,需è¦ä¼ é€’ social å¼€å¤´çš„å‚æ•°") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class AppAuthLoginReqVO { - - @Schema(description = "手机å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") - @NotEmpty(message = "手机å·ä¸èƒ½ä¸ºç©º") - @Mobile - private String mobile; - - @Schema(description = "密ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "buzhidao") - @NotEmpty(message = "密ç ä¸èƒ½ä¸ºç©º") - @Length(min = 4, max = 16, message = "密ç é•¿åº¦ä¸º 4-16 ä½") - private String password; - - // ========== 绑定社交登录时,需è¦ä¼ é€’如䏋傿•° ========== - - @Schema(description = "社交平å°çš„类型,å‚è§ SocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - @InEnum(SocialTypeEnum.class) - private Integer socialType; - - @Schema(description = "授æƒç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private String socialCode; - - @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62") - private String socialState; - - @AssertTrue(message = "授æƒç ä¸èƒ½ä¸ºç©º") - public boolean isSocialCodeValid() { - return socialType == null || StrUtil.isNotEmpty(socialCode); - } - - @AssertTrue(message = "æŽˆæƒ state ä¸èƒ½ä¸ºç©º") - public boolean isSocialState() { - return socialType == null || StrUtil.isNotEmpty(socialState); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java deleted file mode 100644 index 072ec9e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthLoginRespVO.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.auth.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.time.LocalDateTime; - -@Schema(description = "用户 APP - 登录 Response VO") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class AppAuthLoginRespVO { - - @Schema(description = "用户编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long userId; - - @Schema(description = "访问令牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "happy") - private String accessToken; - - @Schema(description = "刷新令牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "nice") - private String refreshToken; - - @Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime expiresTime; - - /** - * 仅社交登录ã€ç¤¾äº¤ç»‘定时会返回 - * - * 为什么需è¦è¿”回?微信公众å·ã€å¾®ä¿¡å°ç¨‹åºæ”¯ä»˜éœ€è¦ä¼ é€’ openid ç»™æ”¯ä»˜æŽ¥å£ - */ - @Schema(description = "社交用户 openid", example = "qq768") - private String openid; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java deleted file mode 100644 index c4948c4..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.auth.vo; - -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; - -import jakarta.validation.constraints.AssertTrue; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.Pattern; - -@Schema(description = "用户 APP - 手机 + 验è¯ç ç™»å½• Request VO,如果登录并绑定社交用户,需è¦ä¼ é€’ social å¼€å¤´çš„å‚æ•°") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class AppAuthSmsLoginReqVO { - - @Schema(description = "手机å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") - @NotEmpty(message = "手机å·ä¸èƒ½ä¸ºç©º") - @Mobile - private String mobile; - - @Schema(description = "手机验è¯ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotEmpty(message = "手机验è¯ç ä¸èƒ½ä¸ºç©º") - @Length(min = 4, max = 6, message = "手机验è¯ç é•¿åº¦ä¸º 4-6 ä½") - @Pattern(regexp = "^[0-9]+$", message = "手机验è¯ç å¿…须都是数字") - private String code; - - // ========== 绑定社交登录时,需è¦ä¼ é€’如䏋傿•° ========== - - @Schema(description = "社交平å°çš„类型,å‚è§ SocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - @InEnum(SocialTypeEnum.class) - private Integer socialType; - - @Schema(description = "授æƒç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private String socialCode; - - @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62") - private String socialState; - - @AssertTrue(message = "授æƒç ä¸èƒ½ä¸ºç©º") - public boolean isSocialCodeValid() { - return socialType == null || StrUtil.isNotEmpty(socialCode); - } - - @AssertTrue(message = "æŽˆæƒ state ä¸èƒ½ä¸ºç©º") - public boolean isSocialState() { - return socialType == null || StrUtil.isNotEmpty(socialState); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsSendReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsSendReqVO.java deleted file mode 100644 index 318a189..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsSendReqVO.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.auth.vo; - -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import jakarta.validation.constraints.NotNull; - -@Schema(description = "用户 APP - å‘逿‰‹æœºéªŒè¯ç  Request VO") -@Data -@Accessors(chain = true) -public class AppAuthSmsSendReqVO { - - @Schema(description = "手机å·", example = "15601691234") - @Mobile - private String mobile; - - @Schema(description = "å‘é€åœºæ™¯,对应 SmsSceneEnum 枚举", example = "1") - @NotNull(message = "å‘é€åœºæ™¯ä¸èƒ½ä¸ºç©º") - @InEnum(SmsSceneEnum.class) - private Integer scene; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsValidateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsValidateReqVO.java deleted file mode 100644 index bf9a683..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSmsValidateReqVO.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.auth.vo; - -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; -import org.hibernate.validator.constraints.Length; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Pattern; - -@Schema(description = "用户 APP - 校验手机验è¯ç  Request VO") -@Data -@Accessors(chain = true) -public class AppAuthSmsValidateReqVO { - - @Schema(description = "手机å·", example = "15601691234") - @Mobile - private String mobile; - - @Schema(description = "å‘é€åœºæ™¯,对应 SmsSceneEnum 枚举", example = "1") - @NotNull(message = "å‘é€åœºæ™¯ä¸èƒ½ä¸ºç©º") - @InEnum(SmsSceneEnum.class) - private Integer scene; - - @Schema(description = "手机验è¯ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotEmpty(message = "手机验è¯ç ä¸èƒ½ä¸ºç©º") - @Length(min = 4, max = 6, message = "手机验è¯ç é•¿åº¦ä¸º 4-6 ä½") - @Pattern(regexp = "^[0-9]+$", message = "手机验è¯ç å¿…须都是数字") - private String code; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java deleted file mode 100644 index 8fd06e4..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.auth.vo; - -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; - -@Schema(description = "用户 APP - 社交快æ·ç™»å½• Request VO,使用 code 授æƒç ") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class AppAuthSocialLoginReqVO { - - @Schema(description = "社交平å°çš„类型,å‚è§ SocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - @InEnum(SocialTypeEnum.class) - @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") - private Integer type; - - @Schema(description = "授æƒç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotEmpty(message = "授æƒç ä¸èƒ½ä¸ºç©º") - private String code; - - @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62") - @NotEmpty(message = "state ä¸èƒ½ä¸ºç©º") - private String state; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthWeixinMiniAppLoginReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthWeixinMiniAppLoginReqVO.java deleted file mode 100644 index 15adaa8..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthWeixinMiniAppLoginReqVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.auth.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import jakarta.validation.constraints.NotEmpty; - -@Schema(description = "用户 APP - 微信å°ç¨‹åºæ‰‹æœºç™»å½• Request VO") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class AppAuthWeixinMiniAppLoginReqVO { - - @Schema(description = "手机 code,å°ç¨‹åºé€šè¿‡ wx.getPhoneNumber 方法获得", requiredMode = Schema.RequiredMode.REQUIRED, example = "hello") - @NotEmpty(message = "手机 code ä¸èƒ½ä¸ºç©º") - private String phoneCode; - - @Schema(description = "登录 code,å°ç¨‹åºé€šè¿‡ wx.login 方法获得", requiredMode = Schema.RequiredMode.REQUIRED, example = "word") - @NotEmpty(message = "登录 code ä¸èƒ½ä¸ºç©º") - private String loginCode; - - @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62") - @NotEmpty(message = "state ä¸èƒ½ä¸ºç©º") - private String state; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AuthWeixinJsapiSignatureRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AuthWeixinJsapiSignatureRespVO.java deleted file mode 100644 index 37e6365..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AuthWeixinJsapiSignatureRespVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.auth.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Schema(description = "用户 APP - å¾®ä¿¡å…¬ä¼—å· JSAPI ç­¾å Response VO") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class AuthWeixinJsapiSignatureRespVO { - - @Schema(description = "微信公众å·çš„ appId", requiredMode = Schema.RequiredMode.REQUIRED, example = "hello") - private String appId; - - @Schema(description = "匿å串", requiredMode = Schema.RequiredMode.REQUIRED, example = "world") - private String nonceStr; - - @Schema(description = "时间戳", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long timestamp; - - @Schema(description = "URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn") - private String url; - - @Schema(description = "ç­¾å", requiredMode = Schema.RequiredMode.REQUIRED, example = "阿巴阿巴") - private String signature; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberExperienceRecordController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberExperienceRecordController.java deleted file mode 100644 index 113f96c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberExperienceRecordController.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.level; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.app.level.vo.experience.AppMemberExperienceRecordRespVO; -import cn.iocoder.yudao.module.member.convert.level.MemberExperienceRecordConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberExperienceRecordDO; -import cn.iocoder.yudao.module.member.service.level.MemberExperienceRecordService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import jakarta.annotation.Resource; -import jakarta.validation.Valid; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; - -@Tag(name = "用户 App - 会员ç»éªŒè®°å½•") -@RestController -@RequestMapping("/member/experience-record") -@Validated -public class AppMemberExperienceRecordController { - - @Resource - private MemberExperienceRecordService experienceLogService; - - @GetMapping("/page") - @Operation(summary = "获得会员ç»éªŒè®°å½•分页") - public CommonResult> getExperienceRecordPage( - @Valid PageParam pageParam) { - PageResult pageResult = experienceLogService.getExperienceRecordPage( - getLoginUserId(), pageParam); - return success(MemberExperienceRecordConvert.INSTANCE.convertPage02(pageResult)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberLevelController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberLevelController.java deleted file mode 100644 index 3bc4a6e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberLevelController.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.level; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.member.controller.app.level.vo.level.AppMemberLevelRespVO; -import cn.iocoder.yudao.module.member.convert.level.MemberLevelConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import cn.iocoder.yudao.module.member.service.level.MemberLevelService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.security.PermitAll; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import jakarta.annotation.Resource; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -@Tag(name = "用户 App - 会员等级") -@RestController -@RequestMapping("/member/level") -@Validated -public class AppMemberLevelController { - - @Resource - private MemberLevelService levelService; - - @GetMapping("/list") - @Operation(summary = "获得会员等级列表") - @PermitAll - public CommonResult> getLevelList() { - List result = levelService.getEnableLevelList(); - return success(MemberLevelConvert.INSTANCE.convertList02(result)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/vo/experience/AppMemberExperienceRecordRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/vo/experience/AppMemberExperienceRecordRespVO.java deleted file mode 100644 index e2d7bb0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/vo/experience/AppMemberExperienceRecordRespVO.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.level.vo.experience; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.time.LocalDateTime; - -@Schema(description = "用户 App - 会员ç»éªŒè®°å½• Response VO") -@Data -public class AppMemberExperienceRecordRespVO { - - @Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "增加ç»éªŒ") - private String title; - - @Schema(description = "ç»éªŒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") - private Integer experience; - - @Schema(description = "æè¿°", requiredMode = Schema.RequiredMode.REQUIRED, example = "下å•增加 100 ç»éªŒ") - private String description; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/vo/level/AppMemberLevelRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/vo/level/AppMemberLevelRespVO.java deleted file mode 100644 index fdade17..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/vo/level/AppMemberLevelRespVO.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.level.vo.level; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -@Schema(description = "用户 App - 会员等级 Response VO") -@Data -public class AppMemberLevelRespVO { - - @Schema(description = "等级åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") - private String name; - - @Schema(description = "等级", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Integer level; - - @Schema(description = "å‡çº§ç»éªŒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") - private Integer experience; - - @Schema(description = "äº«å—æŠ˜æ‰£", requiredMode = Schema.RequiredMode.REQUIRED, example = "98") - private Integer discountPercent; - - @Schema(description = "等级图标", example = "https://www.iocoder.cn/yudao.jpg") - private String icon; - - @Schema(description = "等级背景图", example = "https://www.iocoder.cn/yudao.jpg") - private String backgroundUrl; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java deleted file mode 100644 index b1b79e4..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.point; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.member.controller.app.point.vo.AppMemberPointRecordPageReqVO; -import cn.iocoder.yudao.module.member.controller.app.point.vo.AppMemberPointRecordRespVO; -import cn.iocoder.yudao.module.member.dal.dataobject.point.MemberPointRecordDO; -import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; - -@Tag(name = "用户 App - 签到记录") -@RestController -@RequestMapping("/member/point/record") -@Validated -public class AppMemberPointRecordController { - - @Resource - private MemberPointRecordService pointRecordService; - - @GetMapping("/page") - @Operation(summary = "获得用户积分记录分页") - public CommonResult> getPointRecordPage( - @Valid AppMemberPointRecordPageReqVO pageReqVO) { - PageResult pageResult = pointRecordService.getPointRecordPage(getLoginUserId(), pageReqVO); - return success(BeanUtils.toBean(pageResult, AppMemberPointRecordRespVO.class)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/vo/AppMemberPointRecordPageReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/vo/AppMemberPointRecordPageReqVO.java deleted file mode 100644 index 5e51ce6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/vo/AppMemberPointRecordPageReqVO.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.point.vo; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "用户 App - 用户积分记录分页 Request VO") -@Data -public class AppMemberPointRecordPageReqVO extends PageParam { - - @Schema(description = "是å¦å¢žåŠ ç§¯åˆ†", example = "true") - private Boolean addStatus; // true - 增加;false - å‡å°‘ï¼›null - ä¸ç­›é€‰ - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @Schema(description = "创建时间") - private LocalDateTime[] createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/vo/AppMemberPointRecordRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/vo/AppMemberPointRecordRespVO.java deleted file mode 100644 index 51bbe7b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/vo/AppMemberPointRecordRespVO.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.point.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.time.LocalDateTime; - -@Schema(description = "用户 App - 用户积分记录 Response VO") -@Data -public class AppMemberPointRecordRespVO { - - @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "31457") - private Long id; - - @Schema(description = "积分标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜") - private String title; - - @Schema(description = "积分æè¿°", example = "你猜") - private String description; - - @Schema(description = "积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") - private Integer point; - - @Schema(description = "å‘生时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInConfigController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInConfigController.java deleted file mode 100644 index 9b6ba01..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInConfigController.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.signin; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.member.controller.app.signin.vo.config.AppMemberSignInConfigRespVO; -import cn.iocoder.yudao.module.member.convert.signin.MemberSignInConfigConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO; -import cn.iocoder.yudao.module.member.service.signin.MemberSignInConfigService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.security.PermitAll; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import jakarta.annotation.Resource; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -@Tag(name = "用户 App - 签到规则") -@RestController -@RequestMapping("/member/sign-in/config") -@Validated -public class AppMemberSignInConfigController { - - @Resource - private MemberSignInConfigService signInConfigService; - - @GetMapping("/list") - @Operation(summary = "获得签到规则列表") - @PermitAll - public CommonResult> getSignInConfigList() { - List pageResult = signInConfigService.getSignInConfigList(CommonStatusEnum.ENABLE.getStatus()); - return success(MemberSignInConfigConvert.INSTANCE.convertList02(pageResult)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInRecordController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInRecordController.java deleted file mode 100644 index a0b04eb..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInRecordController.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.signin; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.app.signin.vo.record.AppMemberSignInRecordRespVO; -import cn.iocoder.yudao.module.member.controller.app.signin.vo.record.AppMemberSignInRecordSummaryRespVO; -import cn.iocoder.yudao.module.member.convert.signin.MemberSignInRecordConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO; -import cn.iocoder.yudao.module.member.service.signin.MemberSignInRecordService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; - -@Tag(name = "用户 App - 签到记录") -@RestController -@RequestMapping("/member/sign-in/record") -@Validated -public class AppMemberSignInRecordController { - - @Resource - private MemberSignInRecordService signInRecordService; - - @GetMapping("/get-summary") - @Operation(summary = "获得个人签到统计") - public CommonResult getSignInRecordSummary() { - return success(signInRecordService.getSignInRecordSummary(getLoginUserId())); - } - - @PostMapping("/create") - @Operation(summary = "签到") - public CommonResult createSignInRecord() { - MemberSignInRecordDO recordDO = signInRecordService.createSignRecord(getLoginUserId()); - return success(MemberSignInRecordConvert.INSTANCE.coverRecordToAppRecordVo(recordDO)); - } - - @GetMapping("/page") - @Operation(summary = "获得签到记录分页") - public CommonResult> getSignRecordPage(PageParam pageParam) { - PageResult pageResult = signInRecordService.getSignRecordPage(getLoginUserId(), pageParam); - return success(MemberSignInRecordConvert.INSTANCE.convertPage02(pageResult)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/config/AppMemberSignInConfigRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/config/AppMemberSignInConfigRespVO.java deleted file mode 100644 index a18d3a2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/config/AppMemberSignInConfigRespVO.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.signin.vo.config; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -@Schema(description = "用户 App - 签到规则 Response VO") -@Data -public class AppMemberSignInConfigRespVO { - - @Schema(description = "签到第 x 天", requiredMode = Schema.RequiredMode.REQUIRED, example = "7") - private Integer day; - - @Schema(description = "奖励积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - private Integer point; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/record/AppMemberSignInRecordRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/record/AppMemberSignInRecordRespVO.java deleted file mode 100644 index 2d910d0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/record/AppMemberSignInRecordRespVO.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.signin.vo.record; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.time.LocalDateTime; - -@Schema(description = "用户 App - 签到记录 Response VO") -@Data -public class AppMemberSignInRecordRespVO { - - @Schema(description = "第几天签到", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Integer day; - - @Schema(description = "签到的分数", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - private Integer point; - - @Schema(description = "签到的ç»éªŒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - private Integer experience; - - @Schema(description = "签到时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/record/AppMemberSignInRecordSummaryRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/record/AppMemberSignInRecordSummaryRespVO.java deleted file mode 100644 index 30fb66a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/vo/record/AppMemberSignInRecordSummaryRespVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.signin.vo.record; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -@Schema(description = "用户 App - 个人签到统计 Response VO") -@Data -public class AppMemberSignInRecordSummaryRespVO { - - @Schema(description = "总签到天数", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - private Integer totalDay; - - @Schema(description = "连续签到第 x 天", requiredMode = Schema.RequiredMode.REQUIRED, example = "3") - private Integer continuousDay; - - @Schema(description = "今天是å¦å·²ç­¾åˆ°", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - private Boolean todaySignIn; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/AppSocialUserController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/AppSocialUserController.java deleted file mode 100644 index 5795e8f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/AppSocialUserController.java +++ /dev/null @@ -1,79 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.social; - -import cn.hutool.core.codec.Base64; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.member.controller.app.social.vo.*; -import cn.iocoder.yudao.module.system.api.social.SocialClientApi; -import cn.iocoder.yudao.module.system.api.social.SocialUserApi; -import cn.iocoder.yudao.module.system.api.social.dto.*; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.annotation.security.PermitAll; -import jakarta.validation.Valid; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; - -@Tag(name = "用户 App - 社交用户") -@RestController -@RequestMapping("/member/social-user") -@Validated -public class AppSocialUserController { - - @Resource - private SocialUserApi socialUserApi; - @Resource - private SocialClientApi socialClientApi; - - @PostMapping("/bind") - @Operation(summary = "社交绑定,使用 code 授æƒç ") - @PermitAll - public CommonResult socialBind(@RequestBody @Valid AppSocialUserBindReqVO reqVO) { - SocialUserBindReqDTO reqDTO = new SocialUserBindReqDTO(getLoginUserId(), UserTypeEnum.MEMBER.getValue(), - reqVO.getType(), reqVO.getCode(), reqVO.getState()); - String openid = socialUserApi.bindSocialUser(reqDTO); - return success(openid); - } - - @DeleteMapping("/unbind") - @Operation(summary = "å–æ¶ˆç¤¾äº¤ç»‘定") - public CommonResult socialUnbind(@RequestBody AppSocialUserUnbindReqVO reqVO) { - SocialUserUnbindReqDTO reqDTO = new SocialUserUnbindReqDTO(getLoginUserId(), UserTypeEnum.MEMBER.getValue(), - reqVO.getType(), reqVO.getOpenid()); - socialUserApi.unbindSocialUser(reqDTO); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得社交用户") - @Parameter(name = "type", description = "社交平å°çš„类型,å‚è§ SocialTypeEnum 枚举值", required = true, example = "10") - public CommonResult getSocialUser(@RequestParam("type") Integer type) { - SocialUserRespDTO socialUser = socialUserApi.getSocialUserByUserId(UserTypeEnum.MEMBER.getValue(), getLoginUserId(), type); - return success(BeanUtils.toBean(socialUser, AppSocialUserRespVO.class)); - } - - @PostMapping("/wxa-qrcode") - @Operation(summary = "获得微信å°ç¨‹åºç (base64 image)") - @PermitAll - public CommonResult getWxaQrcode(@RequestBody @Valid AppSocialWxaQrcodeReqVO reqVO) { - byte[] wxQrcode = socialClientApi.getWxaQrcode(BeanUtils.toBean(reqVO, SocialWxQrcodeReqDTO.class)); - return success(Base64.encode(wxQrcode)); - } - - @GetMapping("/get-subscribe-template-list") - @Operation(summary = "获得微信å°ç¨‹è®¢é˜…模æ¿åˆ—表") - @PermitAll - public CommonResult> getSubscribeTemplateList() { - List template = socialClientApi.getWxaSubscribeTemplateList(UserTypeEnum.MEMBER.getValue()); - return success(BeanUtils.toBean(template, AppSocialWxaSubscribeTemplateRespVO.class)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserBindReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserBindReqVO.java deleted file mode 100644 index 0b45596..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserBindReqVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.social.vo; - -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; - -@Schema(description = "用户 APP - 社交绑定 Request VO,使用 code 授æƒç ") -@Data -public class AppSocialUserBindReqVO { - - @Schema(description = "社交平å°çš„类型,å‚è§ SocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - @InEnum(SocialTypeEnum.class) - @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") - private Integer type; - - @Schema(description = "授æƒç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotEmpty(message = "授æƒç ä¸èƒ½ä¸ºç©º") - private String code; - - @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62") - @NotEmpty(message = "state ä¸èƒ½ä¸ºç©º") - private String state; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserRespVO.java deleted file mode 100644 index f37ced8..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserRespVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.social.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -@Schema(description = "用户 APP - 社交用户 Response VO") -@Data -public class AppSocialUserRespVO { - - @Schema(description = "社交用户的 openid", requiredMode = Schema.RequiredMode.REQUIRED, example = "IPRmJ0wvBptiPIlGEZiPewGwiEiE") - private String openid; - - @Schema(description = "社交用户的昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "èŠ‹é“æºç ") - private String nickname; - - @Schema(description = "社交用户的头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") - private String avatar; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserUnbindReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserUnbindReqVO.java deleted file mode 100644 index 5b3cd88..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialUserUnbindReqVO.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.social.vo; - -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; - -@Schema(description = "用户 APP - å–æ¶ˆç¤¾äº¤ç»‘定 Request VO") -@Data -public class AppSocialUserUnbindReqVO { - - @Schema(description = "社交平å°çš„类型,å‚è§ SocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - @InEnum(SocialTypeEnum.class) - @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") - private Integer type; - - @Schema(description = "社交用户的 openid", requiredMode = Schema.RequiredMode.REQUIRED, example = "IPRmJ0wvBptiPIlGEZiPewGwiEiE") - @NotEmpty(message = "社交用户的 openid ä¸èƒ½ä¸ºç©º") - private String openid; - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialWxaQrcodeReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialWxaQrcodeReqVO.java deleted file mode 100644 index c12bfd7..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialWxaQrcodeReqVO.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.social.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotEmpty; -import lombok.Data; - - -@Schema(description = "用户 APP - 获得获å–å°ç¨‹åºç  Request VO") -@Data -public class AppSocialWxaQrcodeReqVO { - - /** - * 页é¢è·¯å¾„ä¸èƒ½æºå¸¦å‚æ•°ï¼ˆå‚æ•°è¯·æ”¾åœ¨scene字段里) - */ - @Schema(description = "场景值", requiredMode = Schema.RequiredMode.REQUIRED, example = "1001") - private String scene; - - /** - * é»˜è®¤æ˜¯ä¸»é¡µï¼Œé¡µé¢ page,例如 pages/index/index,根路径å‰ä¸è¦å¡«åŠ  /,ä¸èƒ½æºå¸¦å‚æ•°ï¼ˆå‚æ•°è¯·æ”¾åœ¨scene字段里), - * 如果ä¸å¡«å†™è¿™ä¸ªå­—段,默认跳主页é¢ã€‚scancode_time为系统ä¿ç•™å‚数,ä¸å…许é…ç½® - */ - @Schema(description = "页é¢è·¯å¾„", requiredMode = Schema.RequiredMode.REQUIRED, example = "pages/goods/index") - @NotEmpty(message = "页é¢è·¯å¾„ä¸èƒ½ä¸ºç©º") - private String path; - - @Schema(description = "二维ç å®½åº¦", requiredMode = Schema.RequiredMode.REQUIRED, example = "430") - private Integer width; - - @Schema(description = "是/å¦è‡ªåЍé…置线æ¡é¢œè‰²", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - private Boolean autoColor; - - @Schema(description = "是/妿£€æŸ¥ page 是å¦å­˜åœ¨", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - private Boolean checkPath; - - @Schema(description = "是/å¦éœ€è¦é€æ˜Žåº•色", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - private Boolean hyaline; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialWxaSubscribeTemplateRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialWxaSubscribeTemplateRespVO.java deleted file mode 100644 index 445122d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialWxaSubscribeTemplateRespVO.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.social.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -@Schema(description = "用户 APP - 获得å°ç¨‹åºè®¢é˜…模版 Response VO") -@Data -public class AppSocialWxaSubscribeTemplateRespVO { - - @Schema(description = "模版编å·", requiredMode = Schema.RequiredMode.REQUIRED, - example = "9Aw5ZV1j9xdWTFEkqCpZ7mIBbSC34khK55OtzUPl0rU") - private String id; - - @Schema(description = "模版标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "è®¢å•æ”¯ä»˜é€šçŸ¥") - private String title; - - @Schema(description = "模版内容", requiredMode = Schema.RequiredMode.REQUIRED, - example = "{ {result.DATA} }\\n\\n领奖金é¢:{ {withdrawMoney.DATA} }\\n领奖时间: { {withdrawTime.DATA} }") - private String content; - - @Schema(description = "模æ¿å†…容示例", requiredMode = Schema.RequiredMode.REQUIRED, example = "䏋啿—¶é—´:2016å¹´8月8æ—¥") - private String example; - - @Schema(description = "模版类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - private Integer type; // 2 为一次性订阅,3 为长期订阅 - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.http b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.http deleted file mode 100644 index 8ffb70c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.http +++ /dev/null @@ -1,4 +0,0 @@ -### 请求 /member/user/profile/get æŽ¥å£ => 没有æƒé™ -GET {{appApi}}/member/user/get -Authorization: Bearer test245 -tenant-id: {{appTenantId}} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java deleted file mode 100644 index ddeb439..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java +++ /dev/null @@ -1,78 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.user; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.member.controller.app.user.vo.*; -import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.service.level.MemberLevelService; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.annotation.security.PermitAll; -import jakarta.validation.Valid; -import lombok.extern.slf4j.Slf4j; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; - -@Tag(name = "用户 APP - 用户个人中心") -@RestController -@RequestMapping("/member/user") -@Validated -@Slf4j -public class AppMemberUserController { - - @Resource - private MemberUserService userService; - @Resource - private MemberLevelService levelService; - - @GetMapping("/get") - @Operation(summary = "获得基本信æ¯") - public CommonResult getUserInfo() { - MemberUserDO user = userService.getUser(getLoginUserId()); - MemberLevelDO level = levelService.getLevel(user.getLevelId()); - return success(MemberUserConvert.INSTANCE.convert(user, level)); - } - - @PutMapping("/update") - @Operation(summary = "修改基本信æ¯") - public CommonResult updateUser(@RequestBody @Valid AppMemberUserUpdateReqVO reqVO) { - userService.updateUser(getLoginUserId(), reqVO); - return success(true); - } - - @PutMapping("/update-mobile") - @Operation(summary = "修改用户手机") - public CommonResult updateUserMobile(@RequestBody @Valid AppMemberUserUpdateMobileReqVO reqVO) { - userService.updateUserMobile(getLoginUserId(), reqVO); - return success(true); - } - - @PutMapping("/update-mobile-by-weixin") - @Operation(summary = "基于微信å°ç¨‹åºçš„æŽˆæƒç ï¼Œä¿®æ”¹ç”¨æˆ·æ‰‹æœº") - public CommonResult updateUserMobileByWeixin(@RequestBody @Valid AppMemberUserUpdateMobileByWeixinReqVO reqVO) { - userService.updateUserMobileByWeixin(getLoginUserId(), reqVO); - return success(true); - } - - @PutMapping("/update-password") - @Operation(summary = "修改用户密ç ", description = "ç”¨æˆ·ä¿®æ”¹å¯†ç æ—¶ä½¿ç”¨") - public CommonResult updateUserPassword(@RequestBody @Valid AppMemberUserUpdatePasswordReqVO reqVO) { - userService.updateUserPassword(getLoginUserId(), reqVO); - return success(true); - } - - @PutMapping("/reset-password") - @Operation(summary = "é‡ç½®å¯†ç ", description = "ç”¨æˆ·å¿˜è®°å¯†ç æ—¶ä½¿ç”¨") - @PermitAll - public CommonResult resetUserPassword(@RequestBody @Valid AppMemberUserResetPasswordReqVO reqVO) { - userService.resetUserPassword(reqVO); - return success(true); - } - -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java deleted file mode 100644 index 72e4fa3..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java +++ /dev/null @@ -1,59 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.user.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Schema(description = "用户 APP - ç”¨æˆ·ä¸ªäººä¿¡æ¯ Response VO") -@Data -@NoArgsConstructor -@AllArgsConstructor -public class AppMemberUserInfoRespVO { - - @Schema(description = "用户编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Long id; - - @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") - private String nickname; - - @Schema(description = "用户头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xxx.png") - private String avatar; - - @Schema(description = "用户手机å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") - private String mobile; - - @Schema(description = "用户性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Integer sex; - - @Schema(description = "积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - private Integer point; - - @Schema(description = "ç»éªŒå€¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Integer experience; - - @Schema(description = "用户等级") - private Level level; - - @Schema(description = "æ˜¯å¦æˆä¸ºæŽ¨å¹¿å‘˜", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - private Boolean brokerageEnabled; - - @Schema(description = "用户 App - 会员等级") - @Data - public static class Level { - - @Schema(description = "等级编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Long id; - - @Schema(description = "等级åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") - private String name; - - @Schema(description = "等级", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Integer level; - - @Schema(description = "等级图标", example = "https://www.iocoder.cn/yudao.jpg") - private String icon; - - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserResetPasswordReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserResetPasswordReqVO.java deleted file mode 100644 index 043c881..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserResetPasswordReqVO.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.user.vo; - -import cn.iocoder.yudao.framework.common.validation.Mobile; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.Pattern; - -@Schema(description = "用户 APP - é‡ç½®å¯†ç  Request VO") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class AppMemberUserResetPasswordReqVO { - - @Schema(description = "新密ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "buzhidao") - @NotEmpty(message = "新密ç ä¸èƒ½ä¸ºç©º") - @Length(min = 4, max = 16, message = "密ç é•¿åº¦ä¸º 4-16 ä½") - private String password; - - @Schema(description = "手机验è¯ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotEmpty(message = "手机验è¯ç ä¸èƒ½ä¸ºç©º") - @Length(min = 4, max = 6, message = "手机验è¯ç é•¿åº¦ä¸º 4-6 ä½") - @Pattern(regexp = "^[0-9]+$", message = "手机验è¯ç å¿…须都是数字") - private String code; - - @Schema(description = "手机å·",requiredMode = Schema.RequiredMode.REQUIRED,example = "15878962356") - @NotBlank(message = "手机å·ä¸èƒ½ä¸ºç©º") - @Mobile - private String mobile; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateMobileByWeixinReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateMobileByWeixinReqVO.java deleted file mode 100644 index 88d546a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateMobileByWeixinReqVO.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.user.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotEmpty; -import lombok.Data; - -@Schema(description = "用户 APP - 基于微信å°ç¨‹åºçš„æŽˆæƒç ï¼Œä¿®æ”¹æ‰‹æœº Request VO") -@Data -public class AppMemberUserUpdateMobileByWeixinReqVO { - - @Schema(description = "手机 code,å°ç¨‹åºé€šè¿‡ wx.getPhoneNumber 方法获得", - requiredMode = Schema.RequiredMode.REQUIRED, example = "hello") - @NotEmpty(message = "手机 code ä¸èƒ½ä¸ºç©º") - private String code; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateMobileReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateMobileReqVO.java deleted file mode 100644 index 8f4d8b6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateMobileReqVO.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.user.vo; - -import cn.iocoder.yudao.framework.common.validation.Mobile; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.Pattern; - -@Schema(description = "用户 APP - 修改手机 Request VO") -@Data -public class AppMemberUserUpdateMobileReqVO { - - @Schema(description = "手机验è¯ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotEmpty(message = "手机验è¯ç ä¸èƒ½ä¸ºç©º") - @Length(min = 4, max = 6, message = "手机验è¯ç é•¿åº¦ä¸º 4-6 ä½") - @Pattern(regexp = "^[0-9]+$", message = "手机验è¯ç å¿…须都是数字") - private String code; - - @Schema(description = "手机å·",requiredMode = Schema.RequiredMode.REQUIRED, example = "15823654487") - @NotBlank(message = "手机å·ä¸èƒ½ä¸ºç©º") - @Length(min = 8, max = 11, message = "手机å·ç é•¿åº¦ä¸º 8-11 ä½") - @Mobile - private String mobile; - - @Schema(description = "原手机验è¯ç ", example = "1024") - @Length(min = 4, max = 6, message = "手机验è¯ç é•¿åº¦ä¸º 4-6 ä½") - @Pattern(regexp = "^[0-9]+$", message = "手机验è¯ç å¿…须都是数字") - private String oldCode; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdatePasswordReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdatePasswordReqVO.java deleted file mode 100644 index 5319d72..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdatePasswordReqVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.user.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.Pattern; - -@Schema(description = "用户 APP - ä¿®æ”¹å¯†ç  Request VO") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class AppMemberUserUpdatePasswordReqVO { - - @Schema(description = "新密ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "buzhidao") - @NotEmpty(message = "新密ç ä¸èƒ½ä¸ºç©º") - @Length(min = 4, max = 16, message = "密ç é•¿åº¦ä¸º 4-16 ä½") - private String password; - - @Schema(description = "手机验è¯ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotEmpty(message = "手机验è¯ç ä¸èƒ½ä¸ºç©º") - @Length(min = 4, max = 6, message = "手机验è¯ç é•¿åº¦ä¸º 4-6 ä½") - @Pattern(regexp = "^[0-9]+$", message = "手机验è¯ç å¿…须都是数字") - private String code; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateReqVO.java deleted file mode 100644 index cca08e9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateReqVO.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.module.member.controller.app.user.vo; - -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.module.system.enums.common.SexEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import org.hibernate.validator.constraints.URL; - -@Schema(description = "用户 App - 会员用户更新 Request VO") -@Data -public class AppMemberUserUpdateReqVO { - - @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "æŽå››") - private String nickname; - - @Schema(description = "头åƒ", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/x.png") - @URL(message = "头åƒå¿…须是 URL æ ¼å¼") - private String avatar; - - @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Integer sex; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java deleted file mode 100644 index 9e2888c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * æä¾› RESTful API ç»™å‰ç«¯ï¼š - * 1. admin 包:æä¾›ç»™ç®¡ç†åŽå° yudao-ui-admin å‰ç«¯é¡¹ç›® - * 2. app 包:æä¾›ç»™ç”¨æˆ· APP yudao-ui-app å‰ç«¯é¡¹ç›®ï¼Œå®ƒçš„ Controller å’Œ VO éƒ½è¦æ·»åŠ  App å‰ç¼€ï¼Œç”¨äºŽå’Œç®¡ç†åŽå°è¿›è¡ŒåŒºåˆ† - */ -package cn.iocoder.yudao.module.member.controller; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/address/AddressConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/address/AddressConvert.java deleted file mode 100644 index 39dc9fa..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/address/AddressConvert.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.address; - -import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils; -import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO; -import cn.iocoder.yudao.module.member.controller.admin.address.vo.AddressRespVO; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressCreateReqVO; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressRespVO; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.address.MemberAddressDO; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Named; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * ç”¨æˆ·æ”¶ä»¶åœ°å€ Convert - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface AddressConvert { - - AddressConvert INSTANCE = Mappers.getMapper(AddressConvert.class); - - MemberAddressDO convert(AppAddressCreateReqVO bean); - - MemberAddressDO convert(AppAddressUpdateReqVO bean); - - @Mapping(source = "areaId", target = "areaName", qualifiedByName = "convertAreaIdToAreaName") - AppAddressRespVO convert(MemberAddressDO bean); - - List convertList(List list); - - MemberAddressRespDTO convert02(MemberAddressDO bean); - - @Named("convertAreaIdToAreaName") - default String convertAreaIdToAreaName(Integer areaId) { - return AreaUtils.format(areaId); - } - - List convertList2(List list); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java deleted file mode 100644 index 88f00c8..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.auth; - -import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; -import cn.iocoder.yudao.module.member.controller.app.social.vo.AppSocialUserUnbindReqVO; -import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO; -import cn.iocoder.yudao.framework.common.biz.system.oauth2.dto.OAuth2AccessTokenRespDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeValidateReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxJsapiSignatureRespDTO; -import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface AuthConvert { - - AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); - - SocialUserBindReqDTO convert(Long userId, Integer userType, AppAuthSocialLoginReqVO reqVO); - SocialUserUnbindReqDTO convert(Long userId, Integer userType, AppSocialUserUnbindReqVO reqVO); - - SmsCodeSendReqDTO convert(AppAuthSmsSendReqVO reqVO); - SmsCodeUseReqDTO convert(AppMemberUserResetPasswordReqVO reqVO, SmsSceneEnum scene, String usedIp); - SmsCodeUseReqDTO convert(AppAuthSmsLoginReqVO reqVO, Integer scene, String usedIp); - - AppAuthLoginRespVO convert(OAuth2AccessTokenRespDTO bean, String openid); - - SmsCodeValidateReqDTO convert(AppAuthSmsValidateReqVO bean); - - SocialWxJsapiSignatureRespDTO convert(SocialWxJsapiSignatureRespDTO bean); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/config/MemberConfigConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/config/MemberConfigConvert.java deleted file mode 100644 index 9847645..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/config/MemberConfigConvert.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.config; - -import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO; -import cn.iocoder.yudao.module.member.controller.admin.config.vo.MemberConfigRespVO; -import cn.iocoder.yudao.module.member.controller.admin.config.vo.MemberConfigSaveReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.config.MemberConfigDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 会员é…ç½® Convert - * - * @author QingX - */ -@Mapper -public interface MemberConfigConvert { - - MemberConfigConvert INSTANCE = Mappers.getMapper(MemberConfigConvert.class); - - MemberConfigRespVO convert(MemberConfigDO bean); - - MemberConfigDO convert(MemberConfigSaveReqVO bean); - - MemberConfigRespDTO convert01(MemberConfigDO config); -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/group/MemberGroupConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/group/MemberGroupConvert.java deleted file mode 100644 index 06f49d6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/group/MemberGroupConvert.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.group; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupRespVO; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupSimpleRespVO; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 用户分组 Convert - * - * @author owen - */ -@Mapper -public interface MemberGroupConvert { - - MemberGroupConvert INSTANCE = Mappers.getMapper(MemberGroupConvert.class); - - MemberGroupDO convert(MemberGroupCreateReqVO bean); - - MemberGroupDO convert(MemberGroupUpdateReqVO bean); - - MemberGroupRespVO convert(MemberGroupDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertSimpleList(List list); -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberExperienceRecordConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberExperienceRecordConvert.java deleted file mode 100644 index 93f864f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberExperienceRecordConvert.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.level; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.experience.MemberExperienceRecordRespVO; -import cn.iocoder.yudao.module.member.controller.app.level.vo.experience.AppMemberExperienceRecordRespVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberExperienceRecordDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 会员ç»éªŒè®°å½• Convert - * - * @author owen - */ -@Mapper -public interface MemberExperienceRecordConvert { - - MemberExperienceRecordConvert INSTANCE = Mappers.getMapper(MemberExperienceRecordConvert.class); - - MemberExperienceRecordRespVO convert(MemberExperienceRecordDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - MemberExperienceRecordDO convert(Long userId, Integer experience, Integer totalExperience, - String bizId, Integer bizType, - String title, String description); - - PageResult convertPage02(PageResult page); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberLevelConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberLevelConvert.java deleted file mode 100644 index f228281..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberLevelConvert.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.level; - -import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelRespVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelSimpleRespVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelUpdateReqVO; -import cn.iocoder.yudao.module.member.controller.app.level.vo.level.AppMemberLevelRespVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 会员等级 Convert - * - * @author owen - */ -@Mapper -public interface MemberLevelConvert { - - MemberLevelConvert INSTANCE = Mappers.getMapper(MemberLevelConvert.class); - - MemberLevelDO convert(MemberLevelCreateReqVO bean); - - MemberLevelDO convert(MemberLevelUpdateReqVO bean); - - MemberLevelRespVO convert(MemberLevelDO bean); - - List convertList(List list); - - List convertSimpleList(List list); - - List convertList02(List list); - - MemberLevelRespDTO convert02(MemberLevelDO bean); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberLevelRecordConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberLevelRecordConvert.java deleted file mode 100644 index d01f1b6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberLevelRecordConvert.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.level; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.record.MemberLevelRecordRespVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelRecordDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 会员等级记录 Convert - * - * @author owen - */ -@Mapper -public interface MemberLevelRecordConvert { - - MemberLevelRecordConvert INSTANCE = Mappers.getMapper(MemberLevelRecordConvert.class); - - MemberLevelRecordRespVO convert(MemberLevelRecordDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - default MemberLevelRecordDO copyTo(MemberLevelDO from, MemberLevelRecordDO to) { - if (from != null) { - to.setLevelId(from.getId()); - to.setLevel(from.getLevel()); - to.setDiscountPercent(from.getDiscountPercent()); - to.setExperience(from.getExperience()); - } - return to; - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/package-info.java deleted file mode 100644 index 6523a66..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * æä¾› POJO ç±»çš„å®žä½“è½¬æ¢ - * - * ç›®å‰ä½¿ç”¨ MapStruct 框架 - */ -package cn.iocoder.yudao.module.member.convert; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/point/MemberPointRecordConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/point/MemberPointRecordConvert.java deleted file mode 100644 index 896ae35..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/point/MemberPointRecordConvert.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.point; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.MapUtils; -import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordRespVO; -import cn.iocoder.yudao.module.member.controller.app.point.vo.AppMemberPointRecordRespVO; -import cn.iocoder.yudao.module.member.dal.dataobject.point.MemberPointRecordDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; -import java.util.Map; - -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; - -/** - * 用户积分记录 Convert - * - * @author QingX - */ -@Mapper -public interface MemberPointRecordConvert { - - MemberPointRecordConvert INSTANCE = Mappers.getMapper(MemberPointRecordConvert.class); - - default PageResult convertPage(PageResult pageResult, List users) { - PageResult voPageResult = convertPage(pageResult); - // user 拼接 - Map userMap = convertMap(users, MemberUserDO::getId); - voPageResult.getList().forEach(record -> MapUtils.findAndThen(userMap, record.getUserId(), - memberUserRespDTO -> record.setNickname(memberUserRespDTO.getNickname()))); - return voPageResult; - } - PageResult convertPage(PageResult pageResult); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/signin/MemberSignInConfigConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/signin/MemberSignInConfigConvert.java deleted file mode 100644 index 5acd871..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/signin/MemberSignInConfigConvert.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.signin; - -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.config.MemberSignInConfigCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.config.MemberSignInConfigRespVO; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.config.MemberSignInConfigUpdateReqVO; -import cn.iocoder.yudao.module.member.controller.app.signin.vo.config.AppMemberSignInConfigRespVO; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 签到规则 Convert - * - * @author QingX - */ -@Mapper -public interface MemberSignInConfigConvert { - - MemberSignInConfigConvert INSTANCE = Mappers.getMapper(MemberSignInConfigConvert.class); - - MemberSignInConfigDO convert(MemberSignInConfigCreateReqVO bean); - - MemberSignInConfigDO convert(MemberSignInConfigUpdateReqVO bean); - - MemberSignInConfigRespVO convert(MemberSignInConfigDO bean); - - List convertList(List list); - - List convertList02(List list); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/signin/MemberSignInRecordConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/signin/MemberSignInRecordConvert.java deleted file mode 100644 index 9da5927..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/signin/MemberSignInRecordConvert.java +++ /dev/null @@ -1,74 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.signin; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.MapUtils; -import cn.iocoder.yudao.framework.common.util.date.DateUtils; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.record.MemberSignInRecordRespVO; -import cn.iocoder.yudao.module.member.controller.app.signin.vo.record.AppMemberSignInRecordRespVO; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.Comparator; -import java.util.List; -import java.util.Map; - -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; - -/** - * 签到记录 Convert - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface MemberSignInRecordConvert { - - MemberSignInRecordConvert INSTANCE = Mappers.getMapper(MemberSignInRecordConvert.class); - - default PageResult convertPage(PageResult pageResult, List users) { - PageResult voPageResult = convertPage(pageResult); - // user 拼接 - Map userMap = convertMap(users, MemberUserDO::getId); - voPageResult.getList().forEach(record -> MapUtils.findAndThen(userMap, record.getUserId(), - memberUserRespDTO -> record.setNickname(memberUserRespDTO.getNickname()))); - return voPageResult; - } - - PageResult convertPage(PageResult pageResult); - - PageResult convertPage02(PageResult pageResult); - - AppMemberSignInRecordRespVO coverRecordToAppRecordVo(MemberSignInRecordDO memberSignInRecordDO); - - default MemberSignInRecordDO convert(Long userId, MemberSignInRecordDO lastRecord, List configs) { - // 1. 计算是第几天签到 - configs.sort(Comparator.comparing(MemberSignInConfigDO::getDay)); - MemberSignInConfigDO lastConfig = CollUtil.getLast(configs); // 最大签到天数é…ç½® - // 1.2. 计算今天是第几天签到 (åªæœ‰è¿žç»­ç­¾åˆ°æ‰åŠ å¦åˆ™é‡ç½®ä¸º 1) - int day = 1; - if (lastRecord != null && DateUtils.isYesterday(lastRecord.getCreateTime())) { - day = lastRecord.getDay() + 1; - } - // 1.3 判断是å¦è¶…出了最大签到é…ç½® - if (day > lastConfig.getDay()) { - day = 1; // 超过最大é…置的天数,é‡ç½®åˆ°ç¬¬ä¸€å¤©ã€‚(也就是说开å¯ä¸‹ä¸€è½®ç­¾åˆ°) - } - - // 2.1 åˆå§‹åŒ–ç­¾åˆ°ä¿¡æ¯ - MemberSignInRecordDO record = new MemberSignInRecordDO().setUserId(userId) - .setDay(day).setPoint(0).setExperience(0); - // 2.2 获å–签到对应的积分 - MemberSignInConfigDO config = CollUtil.findOne(configs, item -> ObjUtil.equal(item.getDay(), record.getDay())); - if (config == null) { - return record; - } - record.setPoint(config.getPoint()); - record.setExperience(config.getExperience()); - return record; - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/tag/MemberTagConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/tag/MemberTagConvert.java deleted file mode 100644 index 9d3a41f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/tag/MemberTagConvert.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.tag; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagRespVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 会员标签 Convert - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface MemberTagConvert { - - MemberTagConvert INSTANCE = Mappers.getMapper(MemberTagConvert.class); - - MemberTagDO convert(MemberTagCreateReqVO bean); - - MemberTagDO convert(MemberTagUpdateReqVO bean); - - MemberTagRespVO convert(MemberTagDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java deleted file mode 100644 index eaa5ab5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.iocoder.yudao.module.member.convert.user; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; -import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserRespVO; -import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; -import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserInfoRespVO; -import cn.iocoder.yudao.module.member.convert.address.AddressConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -import java.util.List; -import java.util.Map; - -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; - -@Mapper(uses = {AddressConvert.class}) -public interface MemberUserConvert { - - MemberUserConvert INSTANCE = Mappers.getMapper(MemberUserConvert.class); - - AppMemberUserInfoRespVO convert(MemberUserDO bean); - - - @Mappings({ - @Mapping(source = "level", target = "level"), - @Mapping(source = "bean.id", target = "id"), - @Mapping(source = "bean.experience", target = "experience") - }) - AppMemberUserInfoRespVO convert(MemberUserDO bean, MemberLevelDO level); - - MemberUserRespDTO convert2(MemberUserDO bean); - - List convertList2(List list); - - MemberUserDO convert(MemberUserUpdateReqVO bean); - - PageResult convertPage(PageResult page); - - @Mapping(source = "areaId", target = "areaName", qualifiedByName = "convertAreaIdToAreaName") - MemberUserRespVO convert03(MemberUserDO bean); - - default PageResult convertPage(PageResult pageResult, - List tags, - List levels, - List groups) { - PageResult result = convertPage(pageResult); - // 处ç†å…³è”æ•°æ® - Map tagMap = convertMap(tags, MemberTagDO::getId, MemberTagDO::getName); - Map levelMap = convertMap(levels, MemberLevelDO::getId, MemberLevelDO::getName); - Map groupMap = convertMap(groups, MemberGroupDO::getId, MemberGroupDO::getName); - // å¡«å……å…³è”æ•°æ® - result.getList().forEach(user -> { - user.setTagNames(convertList(user.getTagIds(), tagMap::get)); - user.setLevelName(levelMap.get(user.getLevelId())); - user.setGroupName(groupMap.get(user.getGroupId())); - }); - return result; - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md deleted file mode 100644 index 8153487..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/convert/ã€ŠèŠ‹é“ Spring Boot å¯¹è±¡è½¬æ¢ MapStruct 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/address/MemberAddressDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/address/MemberAddressDO.java deleted file mode 100644 index 0679a8c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/address/MemberAddressDO.java +++ /dev/null @@ -1,56 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.address; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * ç”¨æˆ·æ”¶ä»¶åœ°å€ DO - * - * @author èŠ‹é“æºç  - */ -@TableName("member_address") -@KeySequence("member_address_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MemberAddressDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * ç”¨æˆ·ç¼–å· - */ - private Long userId; - /** - * 收件人åç§° - */ - private String name; - /** - * æ‰‹æœºå· - */ - private String mobile; - /** - * åœ°åŒºç¼–å· - */ - private Long areaId; - /** - * æ”¶ä»¶è¯¦ç»†åœ°å€ - */ - private String detailAddress; - /** - * 是å¦é»˜è®¤ - * - * true - é»˜è®¤æ”¶ä»¶åœ°å€ - */ - private Boolean defaultStatus; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java deleted file mode 100644 index 6efb4a1..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.config; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 会员é…ç½® DO - * - * @author QingX - */ -@TableName(value = "member_config", autoResultMap = true) -@KeySequence("member_config_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MemberConfigDO extends BaseDO { - - /** - * 自增主键 - */ - @TableId - private Long id; - /** - * 积分抵扣开关 - */ - private Boolean pointTradeDeductEnable; - /** - * 积分抵扣,å•ä½ï¼šåˆ† - * - * 1 积分抵扣多少分 - */ - private Integer pointTradeDeductUnitPrice; - /** - * 积分抵扣最大值 - */ - private Integer pointTradeDeductMaxPrice; - /** - * 1 元赠é€å¤šå°‘分 - */ - private Integer pointTradeGivePoint; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/group/MemberGroupDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/group/MemberGroupDO.java deleted file mode 100644 index c9a82ab..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/group/MemberGroupDO.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.group; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 用户分组 DO - * - * @author owen - */ -@TableName("member_group") -@KeySequence("member_group_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MemberGroupDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * åç§° - */ - private String name; - /** - * 备注 - */ - private String remark; - /** - * çŠ¶æ€ - *

- * 枚举 {@link CommonStatusEnum} - */ - private Integer status; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberExperienceRecordDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberExperienceRecordDO.java deleted file mode 100644 index d7c06d4..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberExperienceRecordDO.java +++ /dev/null @@ -1,64 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.level; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 会员ç»éªŒè®°å½• DO - * - * @author owen - */ -@TableName("member_experience_record") -@KeySequence("member_experience_record_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MemberExperienceRecordDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * ç”¨æˆ·ç¼–å· - * - * å…³è” {@link MemberUserDO#getId()} 字段 - */ - private Long userId; - /** - * 业务类型 - *

- * 枚举 {@link MemberExperienceBizTypeEnum} - */ - private Integer bizType; - /** - * ä¸šåŠ¡ç¼–å· - */ - private String bizId; - /** - * 标题 - */ - private String title; - /** - * æè¿° - */ - private String description; - /** - * ç»éªŒ - */ - private Integer experience; - /** - * å˜æ›´åŽçš„ç»éªŒ - */ - private Integer totalExperience; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelDO.java deleted file mode 100644 index 05035ff..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelDO.java +++ /dev/null @@ -1,64 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.level; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 会员等级 DO - * - * é…ç½®æ¯ä¸ªç­‰çº§éœ€è¦çš„积分 - * - * @author owen - */ -@TableName("member_level") -@KeySequence("member_level_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MemberLevelDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * 等级åç§° - */ - private String name; - /** - * 等级 - */ - private Integer level; - /** - * å‡çº§ç»éªŒ - */ - private Integer experience; - /** - * äº«å—æŠ˜æ‰£ - */ - private Integer discountPercent; - - /** - * 等级图标 - */ - private String icon; - /** - * 等级背景图 - */ - private String backgroundUrl; - /** - * çŠ¶æ€ - *

- * 枚举 {@link CommonStatusEnum} - */ - private Integer status; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelRecordDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelRecordDO.java deleted file mode 100644 index 8b5451d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelRecordDO.java +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.level; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 会员等级记录 DO - * - * ç”¨æˆ·æ¯æ¬¡ç­‰çº§å‘ç”Ÿå˜æ›´æ—¶ï¼Œè®°å½•ä¸€æ¡æ—¥å¿— - * - * @author owen - */ -@TableName("member_level_record") -@KeySequence("member_level_record_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MemberLevelRecordDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * ç”¨æˆ·ç¼–å· - * - * å…³è” {@link MemberUserDO#getId()} 字段 - */ - private Long userId; - /** - * ç­‰çº§ç¼–å· - * - * å…³è” {@link MemberLevelDO#getId()} 字段 - */ - private Long levelId; - /** - * 会员等级 - * - * 冗余 {@link MemberLevelDO#getLevel()} 字段 - */ - private Integer level; - /** - * äº«å—æŠ˜æ‰£ - */ - private Integer discountPercent; - /** - * å‡çº§ç»éªŒ - */ - private Integer experience; - /** - * 会员此时的ç»éªŒ - */ - private Integer userExperience; - /** - * 备注 - */ - private String remark; - /** - * æè¿° - */ - private String description; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/point/MemberPointRecordDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/point/MemberPointRecordDO.java deleted file mode 100644 index f884f08..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/point/MemberPointRecordDO.java +++ /dev/null @@ -1,69 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.point; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 用户积分记录 DO - * - * @author QingX - */ -@TableName("member_point_record") -@KeySequence("member_point_record_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MemberPointRecordDO extends BaseDO { - - /** - * 自增主键 - */ - @TableId - private Long id; - /** - * ç”¨æˆ·ç¼–å· - * - * 对应 MemberUserDO çš„ id 属性 - */ - private Long userId; - - /** - * ä¸šåŠ¡ç¼–ç  - */ - private String bizId; - /** - * 业务类型 - * - * 枚举 {@link MemberPointBizTypeEnum} - */ - private Integer bizType; - - /** - * 积分标题 - */ - private String title; - /** - * 积分æè¿° - */ - private String description; - - /** - * å˜åŠ¨ç§¯åˆ† - * - * 1ã€æ­£æ•°è¡¨ç¤ºèŽ·å¾—ç§¯åˆ† - * 2ã€è´Ÿæ•°è¡¨ç¤ºæ¶ˆè€—积分 - */ - private Integer point; - /** - * å˜åЍåŽçš„积分 - */ - private Integer totalPoint; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/signin/MemberSignInConfigDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/signin/MemberSignInConfigDO.java deleted file mode 100644 index 76d55c9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/signin/MemberSignInConfigDO.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.signin; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 签到规则 DO - * - * @author QingX - */ -@TableName("member_sign_in_config") -@KeySequence("member_sign_in_config_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MemberSignInConfigDO extends BaseDO { - - /** - * 规则自增主键 - */ - @TableId - private Long id; - /** - * 签到第 x 天 - */ - private Integer day; - /** - * 奖励积分 - */ - private Integer point; - /** - * 奖励ç»éªŒ - */ - private Integer experience; - - /** - * çŠ¶æ€ - * - * 枚举 {@link CommonStatusEnum} - */ - private Integer status; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/signin/MemberSignInRecordDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/signin/MemberSignInRecordDO.java deleted file mode 100644 index b07b5ef..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/signin/MemberSignInRecordDO.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.signin; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 签到记录 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("member_sign_in_record") -@KeySequence("member_sign_in_record_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MemberSignInRecordDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * 签到用户 - */ - private Long userId; - /** - * 第几天签到 - */ - private Integer day; - /** - * 签到的积分 - */ - private Integer point; - /** - * 签到的ç»éªŒ - */ - private Integer experience; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/tag/MemberTagDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/tag/MemberTagDO.java deleted file mode 100644 index b984064..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/tag/MemberTagDO.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.tag; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 会员标签 DO - * - * @author èŠ‹é“æºç  - */ -@TableName("member_tag") -@KeySequence("member_tag_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MemberTagDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * 标签åç§° - */ - private String name; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java deleted file mode 100644 index 97ddc19..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java +++ /dev/null @@ -1,145 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.dataobject.user; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.enums.TerminalEnum; -import cn.iocoder.yudao.framework.ip.core.Area; -import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler; -import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; -import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import cn.iocoder.yudao.module.system.enums.common.SexEnum; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; - -import java.time.LocalDateTime; -import java.util.List; - -/** - * 会员用户 DO - * - * uk_mobile 索引:基于 {@link #mobile} 字段 - * - * @author èŠ‹é“æºç  - */ -@TableName(value = "member_user", autoResultMap = true) -@KeySequence("member_user_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MemberUserDO extends TenantBaseDO { - - // ========== è´¦å·ä¿¡æ¯ ========== - - /** - * 用户ID - */ - @TableId - private Long id; - /** - * 手机 - */ - private String mobile; - /** - * 加密åŽçš„å¯†ç  - * - * 因为目å‰ä½¿ç”¨ {@link BCryptPasswordEncoder} åŠ å¯†å™¨ï¼Œæ‰€ä»¥æ— éœ€è‡ªå·±å¤„ç† salt ç› - */ - private String password; - /** - * å¸å·çŠ¶æ€ - * - * 枚举 {@link CommonStatusEnum} - */ - private Integer status; - /** - * 注册 IP - */ - private String registerIp; - /** - * 注册终端 - * 枚举 {@link TerminalEnum} - */ - private Integer registerTerminal; - /** - * 最åŽç™»å½•IP - */ - private String loginIp; - /** - * 最åŽç™»å½•æ—¶é—´ - */ - private LocalDateTime loginDate; - - // ========== åŸºç¡€ä¿¡æ¯ ========== - - /** - * 用户昵称 - */ - private String nickname; - /** - * ç”¨æˆ·å¤´åƒ - */ - private String avatar; - - /** - * 真实åå­— - */ - private String name; - /** - * 性别 - * - * 枚举 {@link SexEnum} - */ - private Integer sex; - /** - * 出生日期 - */ - private LocalDateTime birthday; - /** - * 所在地 - * - * å…³è” {@link Area#getId()} 字段 - */ - private Integer areaId; - /** - * 用户备注 - */ - private String mark; - - // ========== å…¶å®ƒä¿¡æ¯ ========== - - /** - * 积分 - */ - private Integer point; - // TODO 疯狂:增加一个 totalPointï¼›ä¸ªäººä¿¡æ¯æŽ¥å£è¦è¿”回 - - /** - * 会员标签列表,以逗å·åˆ†éš” - */ - @TableField(typeHandler = LongListTypeHandler.class) - private List tagIds; - - /** - * ä¼šå‘˜çº§åˆ«ç¼–å· - * - * å…³è” {@link MemberLevelDO#getId()} 字段 - */ - private Long levelId; - /** - * 会员ç»éªŒ - */ - private Integer experience; - /** - * ç”¨æˆ·åˆ†ç»„ç¼–å· - * - * å…³è” {@link MemberGroupDO#getId()} 字段 - */ - private Long groupId; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/address/MemberAddressMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/address/MemberAddressMapper.java deleted file mode 100644 index 3df68c5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/address/MemberAddressMapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.address; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.member.dal.dataobject.address.MemberAddressDO; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -@Mapper -public interface MemberAddressMapper extends BaseMapperX { - - default MemberAddressDO selectByIdAndUserId(Long id, Long userId) { - return selectOne(MemberAddressDO::getId, id, MemberAddressDO::getUserId, userId); - } - - default List selectListByUserIdAndDefaulted(Long userId, Boolean defaulted) { - return selectList(new LambdaQueryWrapperX().eq(MemberAddressDO::getUserId, userId) - .eqIfPresent(MemberAddressDO::getDefaultStatus, defaulted)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/config/MemberConfigMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/config/MemberConfigMapper.java deleted file mode 100644 index e039383..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/config/MemberConfigMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.config; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.member.dal.dataobject.config.MemberConfigDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 积分设置 Mapper - * - * @author QingX - */ -@Mapper -public interface MemberConfigMapper extends BaseMapperX { -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java deleted file mode 100644 index da4f7b7..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.group; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -/** - * 用户分组 Mapper - * - * @author owen - */ -@Mapper -public interface MemberGroupMapper extends BaseMapperX { - - default PageResult selectPage(MemberGroupPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(MemberGroupDO::getName, reqVO.getName()) - .eqIfPresent(MemberGroupDO::getStatus, reqVO.getStatus()) - .betweenIfPresent(MemberGroupDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(MemberGroupDO::getId)); - } - - default List selectListByStatus(Integer status) { - return selectList(MemberGroupDO::getStatus, status); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberExperienceRecordMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberExperienceRecordMapper.java deleted file mode 100644 index 4e5f6f5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberExperienceRecordMapper.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.level; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.experience.MemberExperienceRecordPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberExperienceRecordDO; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 会员ç»éªŒè®°å½• Mapper - * - * @author owen - */ -@Mapper -public interface MemberExperienceRecordMapper extends BaseMapperX { - - default PageResult selectPage(MemberExperienceRecordPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(MemberExperienceRecordDO::getUserId, reqVO.getUserId()) - .eqIfPresent(MemberExperienceRecordDO::getBizId, reqVO.getBizId()) - .eqIfPresent(MemberExperienceRecordDO::getBizType, reqVO.getBizType()) - .eqIfPresent(MemberExperienceRecordDO::getTitle, reqVO.getTitle()) - .betweenIfPresent(MemberExperienceRecordDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(MemberExperienceRecordDO::getId)); - } - - default PageResult selectPage(Long userId, PageParam pageParam) { - return selectPage(pageParam, new LambdaQueryWrapper() - .eq(MemberExperienceRecordDO::getUserId, userId) - .orderByDesc(MemberExperienceRecordDO::getId)); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberLevelMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberLevelMapper.java deleted file mode 100644 index d2dcb6c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberLevelMapper.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.level; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelListReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -/** - * 会员等级 Mapper - * - * @author owen - */ -@Mapper -public interface MemberLevelMapper extends BaseMapperX { - - default List selectList(MemberLevelListReqVO reqVO) { - return selectList(new LambdaQueryWrapperX() - .likeIfPresent(MemberLevelDO::getName, reqVO.getName()) - .eqIfPresent(MemberLevelDO::getStatus, reqVO.getStatus()) - .orderByAsc(MemberLevelDO::getLevel)); - } - - - default List selectListByStatus(Integer status) { - return selectList(new LambdaQueryWrapperX() - .eq(MemberLevelDO::getStatus, status) - .orderByAsc(MemberLevelDO::getLevel)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberLevelRecordMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberLevelRecordMapper.java deleted file mode 100644 index 6808b95..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberLevelRecordMapper.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.level; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.record.MemberLevelRecordPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelRecordDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 会员等级记录 Mapper - * - * @author owen - */ -@Mapper -public interface MemberLevelRecordMapper extends BaseMapperX { - - default PageResult selectPage(MemberLevelRecordPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(MemberLevelRecordDO::getUserId, reqVO.getUserId()) - .eqIfPresent(MemberLevelRecordDO::getLevelId, reqVO.getLevelId()) - .betweenIfPresent(MemberLevelRecordDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(MemberLevelRecordDO::getId)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/point/MemberPointRecordMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/point/MemberPointRecordMapper.java deleted file mode 100644 index d0e2452..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/point/MemberPointRecordMapper.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.point; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordPageReqVO; -import cn.iocoder.yudao.module.member.controller.app.point.vo.AppMemberPointRecordPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.point.MemberPointRecordDO; -import org.apache.ibatis.annotations.Mapper; - -import java.util.Set; - -/** - * 用户积分记录 Mapper - * - * @author QingX - */ -@Mapper -public interface MemberPointRecordMapper extends BaseMapperX { - - default PageResult selectPage(MemberPointRecordPageReqVO reqVO, Set userIds) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .inIfPresent(MemberPointRecordDO::getUserId, userIds) - .eqIfPresent(MemberPointRecordDO::getUserId, reqVO.getUserId()) - .eqIfPresent(MemberPointRecordDO::getBizType, reqVO.getBizType()) - .likeIfPresent(MemberPointRecordDO::getTitle, reqVO.getTitle()) - .orderByDesc(MemberPointRecordDO::getId)); - } - - default PageResult selectPage(Long userId, AppMemberPointRecordPageReqVO pageReqVO) { - return selectPage(pageReqVO, new LambdaQueryWrapperX() - .eq(MemberPointRecordDO::getUserId, userId) - .betweenIfPresent(MemberPointRecordDO::getCreateTime, pageReqVO.getCreateTime()) - .gt(Boolean.TRUE.equals(pageReqVO.getAddStatus()), - MemberPointRecordDO::getPoint, 0) - .lt(Boolean.FALSE.equals(pageReqVO.getAddStatus()), - MemberPointRecordDO::getPoint, 0) - .orderByDesc(MemberPointRecordDO::getId)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/signin/MemberSignInConfigMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/signin/MemberSignInConfigMapper.java deleted file mode 100644 index 211ead3..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/signin/MemberSignInConfigMapper.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.signin; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -/** - * 签到规则 Mapper - * - * @author QingX - */ -@Mapper -public interface MemberSignInConfigMapper extends BaseMapperX { - - default MemberSignInConfigDO selectByDay(Integer day) { - return selectOne(MemberSignInConfigDO::getDay, day); - } - - default List selectListByStatus(Integer status) { - return selectList(MemberSignInConfigDO::getStatus, status); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/signin/MemberSignInRecordMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/signin/MemberSignInRecordMapper.java deleted file mode 100644 index 36400b8..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/signin/MemberSignInRecordMapper.java +++ /dev/null @@ -1,65 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.signin; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.record.MemberSignInRecordPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; -import java.util.Set; - -/** - * 签到记录 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface MemberSignInRecordMapper extends BaseMapperX { - - default PageResult selectPage(MemberSignInRecordPageReqVO reqVO, Set userIds) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .inIfPresent(MemberSignInRecordDO::getUserId, userIds) - .eqIfPresent(MemberSignInRecordDO::getUserId, reqVO.getUserId()) - .eqIfPresent(MemberSignInRecordDO::getDay, reqVO.getDay()) - .betweenIfPresent(MemberSignInRecordDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(MemberSignInRecordDO::getId)); - } - - default PageResult selectPage(Long userId, PageParam pageParam) { - return selectPage(pageParam, new LambdaQueryWrapperX() - .eq(MemberSignInRecordDO::getUserId, userId) - .orderByDesc(MemberSignInRecordDO::getId)); - } - - /** - * 获å–用户最近的签到记录信æ¯ï¼Œæ ¹æ®ç­¾åˆ°æ—¶é—´å€’åº - * - * @param userId ç”¨æˆ·ç¼–å· - * @return 签到记录列表 - */ - default MemberSignInRecordDO selectLastRecordByUserId(Long userId) { - return selectOne(new QueryWrapper() - .eq("user_id", userId) - .orderByDesc("create_time") - .last("limit 1")); - } - - default Long selectCountByUserId(Long userId) { - return selectCount(MemberSignInRecordDO::getUserId, userId); - } - - /** - * 获å–ç”¨æˆ·çš„ç­¾åˆ°è®°å½•åˆ—è¡¨ä¿¡æ¯ - * - * @param userId ç”¨æˆ·ç¼–å· - * @return ç­¾åˆ°è®°å½•ä¿¡æ¯ - */ - default List selectListByUserId(Long userId) { - return selectList(MemberSignInRecordDO::getUserId, userId); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/tag/MemberTagMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/tag/MemberTagMapper.java deleted file mode 100644 index f4723e2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/tag/MemberTagMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.tag; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * 会员标签 Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface MemberTagMapper extends BaseMapperX { - - default PageResult selectPage(MemberTagPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(MemberTagDO::getName, reqVO.getName()) - .betweenIfPresent(MemberTagDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(MemberTagDO::getId)); - } - - default MemberTagDO selelctByName(String name) { - return selectOne(MemberTagDO::getName, name); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java deleted file mode 100644 index 3f87102..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java +++ /dev/null @@ -1,96 +0,0 @@ -package cn.iocoder.yudao.module.member.dal.mysql.user; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * 会员 User Mapper - * - * @author èŠ‹é“æºç  - */ -@Mapper -public interface MemberUserMapper extends BaseMapperX { - - default MemberUserDO selectByMobile(String mobile) { - return selectOne(MemberUserDO::getMobile, mobile); - } - - default List selectListByNicknameLike(String nickname) { - return selectList(new LambdaQueryWrapperX() - .likeIfPresent(MemberUserDO::getNickname, nickname)); - } - - default PageResult selectPage(MemberUserPageReqVO reqVO) { - // å¤„ç† tagIds 过滤æ¡ä»¶ - String tagIdSql = ""; - if (CollUtil.isNotEmpty(reqVO.getTagIds())) { - tagIdSql = reqVO.getTagIds().stream() - .map(tagId -> "FIND_IN_SET(" + tagId + ", tag_ids)") - .collect(Collectors.joining(" OR ")); - } - // 分页查询 - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(MemberUserDO::getMobile, reqVO.getMobile()) - .betweenIfPresent(MemberUserDO::getLoginDate, reqVO.getLoginDate()) - .likeIfPresent(MemberUserDO::getNickname, reqVO.getNickname()) - .betweenIfPresent(MemberUserDO::getCreateTime, reqVO.getCreateTime()) - .eqIfPresent(MemberUserDO::getLevelId, reqVO.getLevelId()) - .eqIfPresent(MemberUserDO::getGroupId, reqVO.getGroupId()) - .apply(StrUtil.isNotEmpty(tagIdSql), tagIdSql) - .orderByDesc(MemberUserDO::getId)); - } - - default Long selectCountByGroupId(Long groupId) { - return selectCount(MemberUserDO::getGroupId, groupId); - } - - default Long selectCountByLevelId(Long levelId) { - return selectCount(MemberUserDO::getLevelId, levelId); - } - - default Long selectCountByTagId(Long tagId) { - return selectCount(new LambdaQueryWrapperX() - .apply("FIND_IN_SET({0}, tag_ids)", tagId)); - } - - /** - * 更新用户积分(增加) - * - * @param id ç”¨æˆ·ç¼–å· - * @param incrCount 增加积分(正数) - */ - default void updatePointIncr(Long id, Integer incrCount) { - Assert.isTrue(incrCount > 0); - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper() - .setSql(" point = point + " + incrCount) - .eq(MemberUserDO::getId, id); - update(null, lambdaUpdateWrapper); - } - - /** - * 更新用户积分(å‡å°‘) - * - * @param id ç”¨æˆ·ç¼–å· - * @param incrCount 增加积分(负数) - * @return 更新行数 - */ - default int updatePointDecr(Long id, Integer incrCount) { - Assert.isTrue(incrCount < 0); - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper() - .setSql(" point = point + " + incrCount) // 负数,所以使用 + å· - .eq(MemberUserDO::getId, id); - return update(null, lambdaUpdateWrapper); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java deleted file mode 100644 index a45c2a1..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -/** - * DAL = Data Access Layer æ•°æ®è®¿é—®å±‚ - * 1. data object:数æ®å¯¹è±¡ - * 2. redis:Redis çš„ CRUD æ“作 - * 3. mysql:MySQL çš„ CRUD æ“作 - * - * 其中,MySQL 的表以 member_ 作为å‰ç¼€ - */ -package cn.iocoder.yudao.module.member.dal; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java deleted file mode 100644 index 8dfa9fb..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * å ä½ï¼ŒåŽç»­æœ‰ç±»åŽï¼Œå¯ä»¥åˆ é™¤ï¼Œé¿å… package 无法æäº¤åˆ° Git 上 - */ -package cn.iocoder.yudao.module.member.dal.redis; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/DictTypeConstants.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/DictTypeConstants.java deleted file mode 100644 index c87cbb9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/DictTypeConstants.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.yudao.module.member.enums; - -/** - * Member 字典类型的枚举类 - * - * @author owen - */ -public interface DictTypeConstants { - - /** - * 会员ç»éªŒè®°å½• - 业务类型 - */ - String MEMBER_EXPERIENCE_BIZ_TYPE = "member_experience_biz_type"; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java deleted file mode 100644 index ee970a5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.yudao.module.member.enums; - -import cn.iocoder.yudao.framework.common.exception.ErrorCode; - -/** - * Member é”™è¯¯ç æžšä¸¾ç±» - *

- * member 系统,使用 1-004-000-000 段 - */ -public interface ErrorCodeConstants { - - // ========== 用户相关 1-004-001-000 ============ - ErrorCode USER_NOT_EXISTS = new ErrorCode(1_004_001_000, "用户ä¸å­˜åœ¨"); - ErrorCode USER_MOBILE_NOT_EXISTS = new ErrorCode(1_004_001_001, "æ‰‹æœºå·æœªæ³¨å†Œç”¨æˆ·"); - ErrorCode USER_MOBILE_USED = new ErrorCode(1_004_001_002, "修改手机失败,该手机å·({})å·²ç»è¢«ä½¿ç”¨"); - ErrorCode USER_POINT_NOT_ENOUGH = new ErrorCode(1_004_001_003, "用户积分余é¢ä¸è¶³"); - - // ========== AUTH æ¨¡å— 1-004-003-000 ========== - ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1_004_003_000, "登录失败,账å·å¯†ç ä¸æ­£ç¡®"); - ErrorCode AUTH_LOGIN_USER_DISABLED = new ErrorCode(1_004_003_001, "登录失败,账å·è¢«ç¦ç”¨"); - ErrorCode AUTH_SOCIAL_USER_NOT_FOUND = new ErrorCode(1_004_003_005, "登录失败,解æžä¸åˆ°ä¸‰æ–¹ç™»å½•ä¿¡æ¯"); - ErrorCode AUTH_MOBILE_USED = new ErrorCode(1_004_003_007, "手机å·å·²ç»è¢«ä½¿ç”¨"); - - // ========== ç”¨æˆ·æ”¶ä»¶åœ°å€ 1-004-004-000 ========== - ErrorCode ADDRESS_NOT_EXISTS = new ErrorCode(1_004_004_000, "用户收件地å€ä¸å­˜åœ¨"); - - //========== 用户标签 1-004-006-000 ========== - ErrorCode TAG_NOT_EXISTS = new ErrorCode(1_004_006_000, "用户标签ä¸å­˜åœ¨"); - ErrorCode TAG_NAME_EXISTS = new ErrorCode(1_004_006_001, "用户标签已ç»å­˜åœ¨"); - ErrorCode TAG_HAS_USER = new ErrorCode(1_004_006_002, "用户标签下存在用户,无法删除"); - - //========== 积分é…ç½® 1-004-007-000 ========== - - //========== 积分记录 1-004-008-000 ========== - ErrorCode POINT_RECORD_BIZ_NOT_SUPPORT = new ErrorCode(1_004_008_000, "ç”¨æˆ·ç§¯åˆ†è®°å½•ä¸šåŠ¡ç±»åž‹ä¸æ”¯æŒ"); - - //========== 签到é…ç½® 1-004-009-000 ========== - ErrorCode SIGN_IN_CONFIG_NOT_EXISTS = new ErrorCode(1_004_009_000, "签到天数规则ä¸å­˜åœ¨"); - ErrorCode SIGN_IN_CONFIG_EXISTS = new ErrorCode(1_004_009_001, "签到天数规则已存在"); - - //========== 签到é…ç½® 1-004-010-000 ========== - ErrorCode SIGN_IN_RECORD_TODAY_EXISTS = new ErrorCode(1_004_010_000, "今日已签到,请勿é‡å¤ç­¾åˆ°"); - - //========== 用户等级 1-004-011-000 ========== - ErrorCode LEVEL_NOT_EXISTS = new ErrorCode(1_004_011_000, "用户等级ä¸å­˜åœ¨"); - ErrorCode LEVEL_NAME_EXISTS = new ErrorCode(1_004_011_001, "用户等级åç§°[{}]已被使用"); - ErrorCode LEVEL_VALUE_EXISTS = new ErrorCode(1_004_011_002, "用户等级值[{}]已被[{}]使用"); - ErrorCode LEVEL_EXPERIENCE_MIN = new ErrorCode(1_004_011_003, "å‡çº§ç»éªŒå¿…须大于上一个等级[{}]设置的å‡çº§ç»éªŒ[{}]"); - ErrorCode LEVEL_EXPERIENCE_MAX = new ErrorCode(1_004_011_004, "å‡çº§ç»éªŒå¿…é¡»å°äºŽä¸‹ä¸€ä¸ªç­‰çº§[{}]设置的å‡çº§ç»éªŒ[{}]"); - ErrorCode LEVEL_HAS_USER = new ErrorCode(1_004_011_005, "用户等级下存在用户,无法删除"); - - ErrorCode EXPERIENCE_BIZ_NOT_SUPPORT = new ErrorCode(1_004_011_201, "用户ç»éªŒä¸šåŠ¡ç±»åž‹ä¸æ”¯æŒ"); - - //========== 用户分组 1-004-012-000 ========== - ErrorCode GROUP_NOT_EXISTS = new ErrorCode(1_004_012_000, "用户分组ä¸å­˜åœ¨"); - ErrorCode GROUP_HAS_USER = new ErrorCode(1_004_012_001, "用户分组下存在用户,无法删除"); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/MemberExperienceBizTypeEnum.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/MemberExperienceBizTypeEnum.java deleted file mode 100644 index 3038dba..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/MemberExperienceBizTypeEnum.java +++ /dev/null @@ -1,51 +0,0 @@ -package cn.iocoder.yudao.module.member.enums; - -import cn.hutool.core.util.EnumUtil; -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.util.Objects; - -/** - * 会员ç»éªŒ - 业务类型 - * - * @author owen - */ -@Getter -@AllArgsConstructor -public enum MemberExperienceBizTypeEnum { - - /** - * 管ç†å‘˜è°ƒæ•´ã€é‚€è¯·æ–°ç”¨æˆ·ã€ä¸‹å•ã€é€€å•ã€ç­¾åˆ°ã€æŠ½å¥– - */ - ADMIN(0, "管ç†å‘˜è°ƒæ•´", "管ç†å‘˜è°ƒæ•´èŽ·å¾— {} ç»éªŒ", true), - INVITE_REGISTER(1, "邀新奖励", "邀请好å‹èŽ·å¾— {} ç»éªŒ", true), - SIGN_IN(4, "签到奖励", "签到获得 {} ç»éªŒ", true), - LOTTERY(5, "抽奖奖励", "抽奖获得 {} ç»éªŒ", true), - ORDER_GIVE(11, "下å•奖励", "下å•获得 {} ç»éªŒ", true), - ORDER_GIVE_CANCEL(12, "下å•奖励(整å•å–æ¶ˆï¼‰", "å–æ¶ˆè®¢å•获得 {} ç»éªŒ", false), // ORDER_GIVE çš„å–æ¶ˆ - ORDER_GIVE_CANCEL_ITEM(13, "下å•奖励(å•个退款)", "退款订å•获得 {} ç»éªŒ", false), // ORDER_GIVE çš„å–æ¶ˆ - ; - - /** - * 业务类型 - */ - private final int type; - /** - * 标题 - */ - private final String title; - /** - * æè¿° - */ - private final String description; - /** - * 是å¦ä¸ºæ‰£å‡ç§¯åˆ† - */ - private final boolean add; - - public static MemberExperienceBizTypeEnum getByType(Integer type) { - return EnumUtil.getBy(MemberExperienceBizTypeEnum.class, - e -> Objects.equals(type, e.getType())); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/point/MemberPointBizTypeEnum.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/point/MemberPointBizTypeEnum.java deleted file mode 100644 index 794f230..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/enums/point/MemberPointBizTypeEnum.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.yudao.module.member.enums.point; - -import cn.hutool.core.util.EnumUtil; -import cn.iocoder.yudao.framework.common.core.ArrayValuable; -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.util.Objects; - -/** - * 会员积分的业务类型枚举 - * - * @author èŠ‹é“æºç  - */ -@AllArgsConstructor -@Getter -public enum MemberPointBizTypeEnum implements ArrayValuable { - - SIGN(1, "签到", "签到获得 {} 积分", true), - ADMIN(2, "管ç†å‘˜ä¿®æ”¹", "管ç†å‘˜ä¿®æ”¹ {} 积分", true), - - ORDER_USE(11, "订å•积分抵扣", "下å•使用 {} 积分", false), // 䏋啿—¶ï¼Œæ‰£å‡ç§¯åˆ† - ORDER_USE_CANCEL(12, "订å•积分抵扣(整å•å–æ¶ˆï¼‰", "订å•å–æ¶ˆï¼Œé€€è¿˜ {} 积分", true), // ORDER_USE çš„å–æ¶ˆ - ORDER_USE_CANCEL_ITEM(13, "订å•积分抵扣(å•个退款)", "订å•退款,退还 {} 积分", true), // ORDER_USE çš„å–æ¶ˆ - - ORDER_GIVE(21, "订å•积分奖励", "下å•获得 {} 积分", true), // æ”¯ä»˜è®¢å•æ—¶ï¼Œèµ é€ç§¯åˆ† - ORDER_GIVE_CANCEL(22, "订å•积分奖励(整å•å–æ¶ˆï¼‰", "订å•å–æ¶ˆï¼Œé€€è¿˜ {} 积分", false), // ORDER_GIVE çš„å–æ¶ˆ - ORDER_GIVE_CANCEL_ITEM(23, "订å•积分奖励(å•个退款)", "订å•退款,扣除赠é€çš„ {} 积分", false) // ORDER_GIVE çš„å–æ¶ˆ - ; - - /** - * 类型 - */ - private final Integer type; - /** - * åå­— - */ - private final String name; - /** - * æè¿° - */ - private final String description; - /** - * 是å¦ä¸ºæ‰£å‡ç§¯åˆ† - */ - private final boolean add; - - @Override - public Integer[] array() { - return new Integer[0]; - } - - public static MemberPointBizTypeEnum getByType(Integer type) { - return EnumUtil.getBy(MemberPointBizTypeEnum.class, - e -> Objects.equals(type, e.getType())); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/package-info.java deleted file mode 100644 index 7e9ca95..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * 属于 member 模å—çš„ framework å°è£… - * - * @author èŠ‹é“æºç  - */ -package cn.iocoder.yudao.module.member.framework; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/web/config/MemberWebConfiguration.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/web/config/MemberWebConfiguration.java deleted file mode 100644 index 5e3dc3f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/web/config/MemberWebConfiguration.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.yudao.module.member.framework.web.config; - -import cn.iocoder.yudao.framework.swagger.config.YudaoSwaggerAutoConfiguration; -import org.springdoc.core.models.GroupedOpenApi; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * member 模å—çš„ web 组件的 Configuration - * - * @author èŠ‹é“æºç  - */ -@Configuration(proxyBeanMethods = false) -public class MemberWebConfiguration { - - /** - * member 模å—çš„ API 分组 - */ - @Bean - public GroupedOpenApi memberGroupedOpenApi() { - return YudaoSwaggerAutoConfiguration.buildGroupedOpenApi("member"); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/web/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/web/package-info.java deleted file mode 100644 index 3a964cf..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/framework/web/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * member 模å—çš„ web é…ç½® - */ -package cn.iocoder.yudao.module.member.framework.web; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/consumer/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/consumer/package-info.java deleted file mode 100644 index 521f60b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/consumer/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 消æ¯é˜Ÿåˆ—的消费者 - */ -package cn.iocoder.yudao.module.member.mq.consumer; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/message/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/message/package-info.java deleted file mode 100644 index 6489394..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/message/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 消æ¯é˜Ÿåˆ—çš„æ¶ˆæ¯ - */ -package cn.iocoder.yudao.module.member.mq.message; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/producer/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/producer/package-info.java deleted file mode 100644 index dff4c99..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/producer/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 消æ¯é˜Ÿåˆ—的生产者 - */ -package cn.iocoder.yudao.module.member.mq.producer; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/producer/user/MemberUserProducer.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/producer/user/MemberUserProducer.java deleted file mode 100644 index 16f0380..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/mq/producer/user/MemberUserProducer.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.yudao.module.member.mq.producer.user; - -import cn.iocoder.yudao.module.member.api.message.user.MemberUserCreateMessage; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.ApplicationContext; -import org.springframework.stereotype.Component; - -import jakarta.annotation.Resource; - -/** - * 会员用户 Producer - * - * @author owen - */ -@Slf4j -@Component -public class MemberUserProducer { - - @Resource - private ApplicationContext applicationContext; - - /** - * å‘é€ {@link MemberUserCreateMessage} æ¶ˆæ¯ - * - * @param userId ç”¨æˆ·ç¼–å· - */ - public void sendUserCreateMessage(Long userId) { - applicationContext.publishEvent(new MemberUserCreateMessage().setUserId(userId)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/package-info.java deleted file mode 100644 index 405aa4c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -/** - * member 模å—,我们放会员业务。 - * 例如说:会员中心等等 - * - * 1. Controller URL:以 /member/ 开头,é¿å…和其它 Module å†²çª - * 2. DataObject 表å:以 member_ 开头,方便在数æ®åº“中区分 - */ -package cn.iocoder.yudao.module.member; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/address/AddressService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/address/AddressService.java deleted file mode 100644 index c429da0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/address/AddressService.java +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.yudao.module.member.service.address; - -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressCreateReqVO; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.address.MemberAddressDO; - -import jakarta.validation.Valid; -import java.util.List; - -/** - * ç”¨æˆ·æ”¶ä»¶åœ°å€ Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface AddressService { - - /** - * åˆ›å»ºç”¨æˆ·æ”¶ä»¶åœ°å€ - * - * - * @param userId ç”¨æˆ·ç¼–å· - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createAddress(Long userId, @Valid AppAddressCreateReqVO createReqVO); - - /** - * æ›´æ–°ç”¨æˆ·æ”¶ä»¶åœ°å€ - * - * @param userId ç”¨æˆ·ç¼–å· - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateAddress(Long userId, @Valid AppAddressUpdateReqVO updateReqVO); - - /** - * åˆ é™¤ç”¨æˆ·æ”¶ä»¶åœ°å€ - * - * @param userId ç”¨æˆ·ç¼–å· - * @param id ç¼–å· - */ - void deleteAddress(Long userId, Long id); - - /** - * èŽ·å¾—ç”¨æˆ·æ”¶ä»¶åœ°å€ - * - * @param id ç¼–å· - * @return ç”¨æˆ·æ”¶ä»¶åœ°å€ - */ - MemberAddressDO getAddress(Long userId, Long id); - - /** - * 获得用户收件地å€åˆ—表 - * - * @param userId ç”¨æˆ·ç¼–å· - * @return 用户收件地å€åˆ—表 - */ - List getAddressList(Long userId); - - /** - * èŽ·å¾—ç”¨æˆ·é»˜è®¤çš„æ”¶ä»¶åœ°å€ - * - * @param userId ç”¨æˆ·ç¼–å· - * @return ç”¨æˆ·æ”¶ä»¶åœ°å€ - */ - MemberAddressDO getDefaultUserAddress(Long userId); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/address/AddressServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/address/AddressServiceImpl.java deleted file mode 100644 index aae955c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/address/AddressServiceImpl.java +++ /dev/null @@ -1,97 +0,0 @@ -package cn.iocoder.yudao.module.member.service.address; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressCreateReqVO; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressUpdateReqVO; -import cn.iocoder.yudao.module.member.convert.address.AddressConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.address.MemberAddressDO; -import cn.iocoder.yudao.module.member.dal.mysql.address.MemberAddressMapper; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ADDRESS_NOT_EXISTS; - -/** - * ç”¨æˆ·æ”¶ä»¶åœ°å€ Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class AddressServiceImpl implements AddressService { - - @Resource - private MemberAddressMapper memberAddressMapper; - - @Override - @Transactional(rollbackFor = Exception.class) - public Long createAddress(Long userId, AppAddressCreateReqVO createReqVO) { - // 如果添加的是默认收件地å€ï¼Œåˆ™å°†åŽŸé»˜è®¤åœ°å€ä¿®æ”¹ä¸ºéžé»˜è®¤ - if (Boolean.TRUE.equals(createReqVO.getDefaultStatus())) { - List addresses = memberAddressMapper.selectListByUserIdAndDefaulted(userId, true); - addresses.forEach(address -> memberAddressMapper.updateById(new MemberAddressDO().setId(address.getId()).setDefaultStatus(false))); - } - - // æ’å…¥ - MemberAddressDO address = AddressConvert.INSTANCE.convert(createReqVO); - address.setUserId(userId); - memberAddressMapper.insert(address); - // 返回 - return address.getId(); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateAddress(Long userId, AppAddressUpdateReqVO updateReqVO) { - // 校验存在,校验是å¦èƒ½å¤Ÿæ“作 - validAddressExists(userId, updateReqVO.getId()); - - // 如果修改的是默认收件地å€ï¼Œåˆ™å°†åŽŸé»˜è®¤åœ°å€ä¿®æ”¹ä¸ºéžé»˜è®¤ - if (Boolean.TRUE.equals(updateReqVO.getDefaultStatus())) { - List addresses = memberAddressMapper.selectListByUserIdAndDefaulted(userId, true); - addresses.stream().filter(u -> !u.getId().equals(updateReqVO.getId())) // 排除自己 - .forEach(address -> memberAddressMapper.updateById(new MemberAddressDO().setId(address.getId()).setDefaultStatus(false))); - } - - // æ›´æ–° - MemberAddressDO updateObj = AddressConvert.INSTANCE.convert(updateReqVO); - memberAddressMapper.updateById(updateObj); - } - - @Override - public void deleteAddress(Long userId, Long id) { - // 校验存在,校验是å¦èƒ½å¤Ÿæ“作 - validAddressExists(userId, id); - // 删除 - memberAddressMapper.deleteById(id); - } - - private void validAddressExists(Long userId, Long id) { - MemberAddressDO addressDO = getAddress(userId, id); - if (addressDO == null) { - throw exception(ADDRESS_NOT_EXISTS); - } - } - - @Override - public MemberAddressDO getAddress(Long userId, Long id) { - return memberAddressMapper.selectByIdAndUserId(id, userId); - } - - @Override - public List getAddressList(Long userId) { - return memberAddressMapper.selectListByUserIdAndDefaulted(userId, null); - } - - @Override - public MemberAddressDO getDefaultUserAddress(Long userId) { - List addresses = memberAddressMapper.selectListByUserIdAndDefaulted(userId, true); - return CollUtil.getFirst(addresses); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java deleted file mode 100644 index 3fad6e2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java +++ /dev/null @@ -1,88 +0,0 @@ -package cn.iocoder.yudao.module.member.service.auth; - -import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; - -import jakarta.validation.Valid; - -/** - * ä¼šå‘˜çš„è®¤è¯ Service æŽ¥å£ - * - * æä¾›ç”¨æˆ·çš„è´¦å·å¯†ç ç™»å½•ã€token 的校验等认è¯ç›¸å…³çš„功能 - * - * @author èŠ‹é“æºç  - */ -public interface MemberAuthService { - - /** - * 手机 + 密ç ç™»å½• - * - * @param reqVO ç™»å½•ä¿¡æ¯ - * @return 登录结果 - */ - AppAuthLoginRespVO login(@Valid AppAuthLoginReqVO reqVO); - - /** - * 基于 token 退出登录 - * - * @param token token - */ - void logout(String token); - - /** - * 手机 + 验è¯ç ç™»é™† - * - * @param reqVO ç™»é™†ä¿¡æ¯ - * @return 登录结果 - */ - AppAuthLoginRespVO smsLogin(@Valid AppAuthSmsLoginReqVO reqVO); - - /** - * 社交登录,使用 code 授æƒç  - * - * @param reqVO ç™»å½•ä¿¡æ¯ - * @return 登录结果 - */ - AppAuthLoginRespVO socialLogin(@Valid AppAuthSocialLoginReqVO reqVO); - - /** - * 微信å°ç¨‹åºçš„一键登录 - * - * @param reqVO ç™»å½•ä¿¡æ¯ - * @return 登录结果 - */ - AppAuthLoginRespVO weixinMiniAppLogin(AppAuthWeixinMiniAppLoginReqVO reqVO); - - /** - * èŽ·å¾—ç¤¾äº¤è®¤è¯ URL - * - * @param type 社交平å°ç±»åž‹ - * @param redirectUri è·³è½¬åœ°å€ - * @return è®¤è¯ URL - */ - String getSocialAuthorizeUrl(Integer type, String redirectUri); - - /** - * 给用户å‘é€çŸ­ä¿¡éªŒè¯ç  - * - * @param userId ç”¨æˆ·ç¼–å· - * @param reqVO å‘é€ä¿¡æ¯ - */ - void sendSmsCode(Long userId, AppAuthSmsSendReqVO reqVO); - - /** - * 校验短信验è¯ç æ˜¯å¦æ­£ç¡® - * - * @param userId ç”¨æˆ·ç¼–å· - * @param reqVO æ ¡éªŒä¿¡æ¯ - */ - void validateSmsCode(Long userId, AppAuthSmsValidateReqVO reqVO); - - /** - * 刷新访问令牌 - * - * @param refreshToken 刷新令牌 - * @return 登录结果 - */ - AppAuthLoginRespVO refreshToken(String refreshToken); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java deleted file mode 100644 index d8c2377..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java +++ /dev/null @@ -1,285 +0,0 @@ -package cn.iocoder.yudao.module.member.service.auth; - -import cn.hutool.core.lang.Assert; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.enums.TerminalEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; -import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; -import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; -import cn.iocoder.yudao.module.member.convert.auth.AuthConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import cn.iocoder.yudao.module.system.api.logger.LoginLogApi; -import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; -import cn.iocoder.yudao.framework.common.biz.system.oauth2.OAuth2TokenCommonApi; -import cn.iocoder.yudao.framework.common.biz.system.oauth2.dto.OAuth2AccessTokenCreateReqDTO; -import cn.iocoder.yudao.framework.common.biz.system.oauth2.dto.OAuth2AccessTokenRespDTO; -import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; -import cn.iocoder.yudao.module.system.api.social.SocialClientApi; -import cn.iocoder.yudao.module.system.api.social.SocialUserApi; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxPhoneNumberInfoRespDTO; -import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; -import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; -import cn.iocoder.yudao.module.system.enums.oauth2.OAuth2ClientConstants; -import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Objects; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; -import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getTerminal; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; - -/** - * ä¼šå‘˜çš„è®¤è¯ Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -@Service -@Slf4j -public class MemberAuthServiceImpl implements MemberAuthService { - - @Resource - private MemberUserService userService; - @Resource - private SmsCodeApi smsCodeApi; - @Resource - private LoginLogApi loginLogApi; - @Resource - private SocialUserApi socialUserApi; - @Resource - private SocialClientApi socialClientApi; - @Resource - private OAuth2TokenCommonApi oauth2TokenApi; - - @Override - public AppAuthLoginRespVO login(AppAuthLoginReqVO reqVO) { - // 使用手机 + 密ç ï¼Œè¿›è¡Œç™»å½•。 - MemberUserDO user = login0(reqVO.getMobile(), reqVO.getPassword()); - - // 如果 socialType éžç©ºï¼Œè¯´æ˜Žéœ€è¦ç»‘定社交用户 - String openid = null; - if (reqVO.getSocialType() != null) { - openid = socialUserApi.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(), - reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState())); - } - - // 创建 Token 令牌,记录登录日志 - return createTokenAfterLoginSuccess(user, reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE, openid); - } - - @Override - @Transactional - public AppAuthLoginRespVO smsLogin(AppAuthSmsLoginReqVO reqVO) { - // 校验验è¯ç  - String userIp = getClientIP(); - smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_LOGIN.getScene(), userIp)); - - // 获得获得注册用户 - MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp, getTerminal()); - Assert.notNull(user, "获å–用户失败,结果为空"); - - // 校验是å¦ç¦ç”¨ - if (CommonStatusEnum.isDisable(user.getStatus())) { - createLoginLog(user.getId(), reqVO.getMobile(), LoginLogTypeEnum.LOGIN_SMS, LoginResultEnum.USER_DISABLED); - throw exception(AUTH_LOGIN_USER_DISABLED); - } - - // 如果 socialType éžç©ºï¼Œè¯´æ˜Žéœ€è¦ç»‘定社交用户 - String openid = null; - if (reqVO.getSocialType() != null) { - openid = socialUserApi.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(), - reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState())); - } - - // 创建 Token 令牌,记录登录日志 - return createTokenAfterLoginSuccess(user, reqVO.getMobile(), LoginLogTypeEnum.LOGIN_SMS, openid); - } - - @Override - @Transactional - public AppAuthLoginRespVO socialLogin(AppAuthSocialLoginReqVO reqVO) { - // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½•。然åŽï¼ŒèŽ·å¾—åˆ°ç»‘å®šçš„ç”¨æˆ·ç¼–å· - SocialUserRespDTO socialUser = socialUserApi.getSocialUserByCode(UserTypeEnum.MEMBER.getValue(), reqVO.getType(), - reqVO.getCode(), reqVO.getState()); - if (socialUser == null) { - throw exception(AUTH_SOCIAL_USER_NOT_FOUND); - } - - // 情况一:已绑定,直接读å–ç”¨æˆ·ä¿¡æ¯ - MemberUserDO user; - if (socialUser.getUserId() != null) { - user = userService.getUser(socialUser.getUserId()); - // 情况二:未绑定,注册用户 + 绑定用户 - } else { - user = userService.createUser(socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal()); - socialUserApi.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(), - reqVO.getType(), reqVO.getCode(), reqVO.getState())); - } - if (user == null) { - throw exception(USER_NOT_EXISTS); - } - - // 创建 Token 令牌,记录登录日志 - return createTokenAfterLoginSuccess(user, user.getMobile(), LoginLogTypeEnum.LOGIN_SOCIAL, socialUser.getOpenid()); - } - - @Override - public AppAuthLoginRespVO weixinMiniAppLogin(AppAuthWeixinMiniAppLoginReqVO reqVO) { - // 获得对应的手机å·ä¿¡æ¯ - SocialWxPhoneNumberInfoRespDTO phoneNumberInfo = socialClientApi.getWxMaPhoneNumberInfo( - UserTypeEnum.MEMBER.getValue(), reqVO.getPhoneCode()); - Assert.notNull(phoneNumberInfo, "获得手机信æ¯å¤±è´¥ï¼Œç»“果为空"); - - // 获得获得注册用户 - MemberUserDO user = userService.createUserIfAbsent(phoneNumberInfo.getPurePhoneNumber(), - getClientIP(), TerminalEnum.WECHAT_MINI_PROGRAM.getTerminal()); - Assert.notNull(user, "获å–用户失败,结果为空"); - - // 绑定社交用户 - String openid = socialUserApi.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(), - SocialTypeEnum.WECHAT_MINI_PROGRAM.getType(), reqVO.getLoginCode(), reqVO.getState())); - - // 创建 Token 令牌,记录登录日志 - return createTokenAfterLoginSuccess(user, user.getMobile(), LoginLogTypeEnum.LOGIN_SOCIAL, openid); - } - - private AppAuthLoginRespVO createTokenAfterLoginSuccess(MemberUserDO user, String mobile, - LoginLogTypeEnum logType, String openid) { - // æ’入登陆日志 - createLoginLog(user.getId(), mobile, logType, LoginResultEnum.SUCCESS); - // 创建 Token 令牌 - OAuth2AccessTokenRespDTO accessTokenRespDTO = oauth2TokenApi.createAccessToken(new OAuth2AccessTokenCreateReqDTO() - .setUserId(user.getId()).setUserType(getUserType().getValue()) - .setClientId(OAuth2ClientConstants.CLIENT_ID_DEFAULT)); - // 构建返回结果 - return AuthConvert.INSTANCE.convert(accessTokenRespDTO, openid); - } - - @Override - public String getSocialAuthorizeUrl(Integer type, String redirectUri) { - return socialClientApi.getAuthorizeUrl(type, UserTypeEnum.MEMBER.getValue(), redirectUri); - } - - private MemberUserDO login0(String mobile, String password) { - final LoginLogTypeEnum logTypeEnum = LoginLogTypeEnum.LOGIN_MOBILE; - // æ ¡éªŒè´¦å·æ˜¯å¦å­˜åœ¨ - MemberUserDO user = userService.getUserByMobile(mobile); - if (user == null) { - createLoginLog(null, mobile, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS); - throw exception(AUTH_LOGIN_BAD_CREDENTIALS); - } - if (!userService.isPasswordMatch(password, user.getPassword())) { - createLoginLog(user.getId(), mobile, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS); - throw exception(AUTH_LOGIN_BAD_CREDENTIALS); - } - // 校验是å¦ç¦ç”¨ - if (CommonStatusEnum.isDisable(user.getStatus())) { - createLoginLog(user.getId(), mobile, logTypeEnum, LoginResultEnum.USER_DISABLED); - throw exception(AUTH_LOGIN_USER_DISABLED); - } - return user; - } - - private void createLoginLog(Long userId, String mobile, LoginLogTypeEnum logType, LoginResultEnum loginResult) { - // æ’入登录日志 - LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); - reqDTO.setLogType(logType.getType()); - reqDTO.setTraceId(TracerUtils.getTraceId()); - reqDTO.setUserId(userId); - reqDTO.setUserType(getUserType().getValue()); - reqDTO.setUsername(mobile); - reqDTO.setUserAgent(ServletUtils.getUserAgent()); - reqDTO.setUserIp(getClientIP()); - reqDTO.setResult(loginResult.getResult()); - loginLogApi.createLoginLog(reqDTO); - // 更新最åŽç™»å½•æ—¶é—´ - if (userId != null && Objects.equals(LoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) { - userService.updateUserLogin(userId, getClientIP()); - } - } - - @Override - public void logout(String token) { - // 删除访问令牌 - OAuth2AccessTokenRespDTO accessTokenRespDTO = oauth2TokenApi.removeAccessToken(token); - if (accessTokenRespDTO == null) { - return; - } - // 删除æˆåŠŸï¼Œåˆ™è®°å½•ç™»å‡ºæ—¥å¿— - createLogoutLog(accessTokenRespDTO.getUserId()); - } - - @Override - public void sendSmsCode(Long userId, AppAuthSmsSendReqVO reqVO) { - // 情况 1ï¼šå¦‚æžœæ˜¯ä¿®æ”¹æ‰‹æœºåœºæ™¯ï¼Œéœ€è¦æ ¡éªŒæ–°æ‰‹æœºå·æ˜¯å¦å·²ç»æ³¨å†Œï¼Œè¯´æ˜Žä¸èƒ½ä½¿ç”¨è¯¥æ‰‹æœºäº† - if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene())) { - MemberUserDO user = userService.getUserByMobile(reqVO.getMobile()); - if (user != null && !Objects.equals(user.getId(), userId)) { - throw exception(AUTH_MOBILE_USED); - } - } - // 情况 2:如果是é‡ç½®å¯†ç åœºæ™¯ï¼Œéœ€è¦æ ¡éªŒæ‰‹æœºå·æ˜¯å­˜åœ¨çš„ - if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_RESET_PASSWORD.getScene())) { - MemberUserDO user = userService.getUserByMobile(reqVO.getMobile()); - if (user == null) { - throw exception(USER_MOBILE_NOT_EXISTS); - } - } - // 情况 3:如果是修改密ç åœºæ™¯ï¼Œéœ€è¦æŸ¥è¯¢æ‰‹æœºå·ï¼Œæ— éœ€å‰ç«¯ä¼ é€’ - if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_UPDATE_PASSWORD.getScene())) { - MemberUserDO user = userService.getUser(userId); - // TODO 芋艿:åŽç»­ member user 手机éžå¼ºç»‘定,这å—需è¦åšä¸‹è°ƒæ•´ï¼› - reqVO.setMobile(user.getMobile()); - } - - // 执行å‘é€ - smsCodeApi.sendSmsCode(AuthConvert.INSTANCE.convert(reqVO).setCreateIp(getClientIP())); - } - - @Override - public void validateSmsCode(Long userId, AppAuthSmsValidateReqVO reqVO) { - smsCodeApi.validateSmsCode(AuthConvert.INSTANCE.convert(reqVO)); - } - - @Override - public AppAuthLoginRespVO refreshToken(String refreshToken) { - OAuth2AccessTokenRespDTO accessTokenDO = oauth2TokenApi.refreshAccessToken(refreshToken, - OAuth2ClientConstants.CLIENT_ID_DEFAULT); - return AuthConvert.INSTANCE.convert(accessTokenDO, null); - } - - private void createLogoutLog(Long userId) { - LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); - reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_SELF.getType()); - reqDTO.setTraceId(TracerUtils.getTraceId()); - reqDTO.setUserId(userId); - reqDTO.setUserType(getUserType().getValue()); - reqDTO.setUsername(getMobile(userId)); - reqDTO.setUserAgent(ServletUtils.getUserAgent()); - reqDTO.setUserIp(getClientIP()); - reqDTO.setResult(LoginResultEnum.SUCCESS.getResult()); - loginLogApi.createLoginLog(reqDTO); - } - - private String getMobile(Long userId) { - if (userId == null) { - return null; - } - MemberUserDO user = userService.getUser(userId); - return user != null ? user.getMobile() : null; - } - - private UserTypeEnum getUserType() { - return UserTypeEnum.MEMBER; - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/config/MemberConfigService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/config/MemberConfigService.java deleted file mode 100644 index 84961bc..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/config/MemberConfigService.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.member.service.config; - -import cn.iocoder.yudao.module.member.controller.admin.config.vo.MemberConfigSaveReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.config.MemberConfigDO; - -import jakarta.validation.Valid; - -/** - * 会员é…ç½® Service æŽ¥å£ - * - * @author QingX - */ -public interface MemberConfigService { - - /** - * ä¿å­˜ä¼šå‘˜é…ç½® - * - * @param saveReqVO æ›´æ–°ä¿¡æ¯ - */ - void saveConfig(@Valid MemberConfigSaveReqVO saveReqVO); - - /** - * 获得会员é…ç½® - * - * @return 积分é…ç½® - */ - MemberConfigDO getConfig(); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/config/MemberConfigServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/config/MemberConfigServiceImpl.java deleted file mode 100644 index 16edd1f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/config/MemberConfigServiceImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.iocoder.yudao.module.member.service.config; - -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.module.member.controller.admin.config.vo.MemberConfigSaveReqVO; -import cn.iocoder.yudao.module.member.convert.config.MemberConfigConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.config.MemberConfigDO; -import cn.iocoder.yudao.module.member.dal.mysql.config.MemberConfigMapper; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; -import java.util.List; - -/** - * 会员é…ç½® Service 实现类 - * - * @author QingX - */ -@Service -@Validated -public class MemberConfigServiceImpl implements MemberConfigService { - - @Resource - private MemberConfigMapper memberConfigMapper; - - @Override - public void saveConfig(MemberConfigSaveReqVO saveReqVO) { - // 存在,则进行更新 - MemberConfigDO dbConfig = getConfig(); - if (dbConfig != null) { - memberConfigMapper.updateById(MemberConfigConvert.INSTANCE.convert(saveReqVO).setId(dbConfig.getId())); - return; - } - // ä¸å­˜åœ¨ï¼Œåˆ™è¿›è¡Œæ’å…¥ - memberConfigMapper.insert(MemberConfigConvert.INSTANCE.convert(saveReqVO)); - } - - @Override - public MemberConfigDO getConfig() { - List list = memberConfigMapper.selectList(); - return CollectionUtils.getFirst(list); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java deleted file mode 100644 index 54419bd..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java +++ /dev/null @@ -1,84 +0,0 @@ -package cn.iocoder.yudao.module.member.service.group; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; - -import jakarta.validation.Valid; -import java.util.Collection; -import java.util.List; - -/** - * 用户分组 Service æŽ¥å£ - * - * @author owen - */ -public interface MemberGroupService { - - /** - * 创建用户分组 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createGroup(@Valid MemberGroupCreateReqVO createReqVO); - - /** - * 更新用户分组 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateGroup(@Valid MemberGroupUpdateReqVO updateReqVO); - - /** - * 删除用户分组 - * - * @param id ç¼–å· - */ - void deleteGroup(Long id); - - /** - * 获得用户分组 - * - * @param id ç¼–å· - * @return 用户分组 - */ - MemberGroupDO getGroup(Long id); - - /** - * 获得用户分组列表 - * - * @param ids ç¼–å· - * @return 用户分组列表 - */ - List getGroupList(Collection ids); - - /** - * 获得用户分组分页 - * - * @param pageReqVO 分页查询 - * @return 用户分组分页 - */ - PageResult getGroupPage(MemberGroupPageReqVO pageReqVO); - - /** - * 获得指定状æ€çš„用户分组列表 - * - * @param status çŠ¶æ€ - * @return 用户分组列表 - */ - List getGroupListByStatus(Integer status); - - /** - * 获得开å¯çжæ€çš„用户分组列表 - * - * @return 用户分组列表 - */ - default List getEnableGroupList() { - return getGroupListByStatus(CommonStatusEnum.ENABLE.getStatus()); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java deleted file mode 100644 index f89cc44..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java +++ /dev/null @@ -1,103 +0,0 @@ -package cn.iocoder.yudao.module.member.service.group; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.ListUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO; -import cn.iocoder.yudao.module.member.convert.group.MemberGroupConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; -import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; -import java.util.Collection; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_HAS_USER; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_NOT_EXISTS; - -/** - * 用户分组 Service 实现类 - * - * @author owen - */ -@Service -@Validated -public class MemberGroupServiceImpl implements MemberGroupService { - - @Resource - private MemberGroupMapper memberGroupMapper; - - @Resource - private MemberUserService memberUserService; - - @Override - public Long createGroup(MemberGroupCreateReqVO createReqVO) { - // æ’å…¥ - MemberGroupDO group = MemberGroupConvert.INSTANCE.convert(createReqVO); - memberGroupMapper.insert(group); - // 返回 - return group.getId(); - } - - @Override - public void updateGroup(MemberGroupUpdateReqVO updateReqVO) { - // 校验存在 - validateGroupExists(updateReqVO.getId()); - // æ›´æ–° - MemberGroupDO updateObj = MemberGroupConvert.INSTANCE.convert(updateReqVO); - memberGroupMapper.updateById(updateObj); - } - - @Override - public void deleteGroup(Long id) { - // 校验存在 - validateGroupExists(id); - // æ ¡éªŒåˆ†ç»„ä¸‹æ˜¯å¦æœ‰ç”¨æˆ· - validateGroupHasUser(id); - // 删除 - memberGroupMapper.deleteById(id); - } - - void validateGroupExists(Long id) { - if (memberGroupMapper.selectById(id) == null) { - throw exception(GROUP_NOT_EXISTS); - } - } - - void validateGroupHasUser(Long id) { - Long count = memberUserService.getUserCountByGroupId(id); - if (count > 0) { - throw exception(GROUP_HAS_USER); - } - } - - @Override - public MemberGroupDO getGroup(Long id) { - return memberGroupMapper.selectById(id); - } - - @Override - public List getGroupList(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return ListUtil.empty(); - } - return memberGroupMapper.selectByIds(ids); - } - - @Override - public PageResult getGroupPage(MemberGroupPageReqVO pageReqVO) { - return memberGroupMapper.selectPage(pageReqVO); - } - - @Override - public List getGroupListByStatus(Integer status) { - return memberGroupMapper.selectListByStatus(status); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceRecordService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceRecordService.java deleted file mode 100644 index 76470f7..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceRecordService.java +++ /dev/null @@ -1,53 +0,0 @@ -package cn.iocoder.yudao.module.member.service.level; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.experience.MemberExperienceRecordPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberExperienceRecordDO; -import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; - -/** - * 会员ç»éªŒè®°å½• Service æŽ¥å£ - * - * @author owen - */ -public interface MemberExperienceRecordService { - - /** - * 获得会员ç»éªŒè®°å½• - * - * @param id ç¼–å· - * @return 会员ç»éªŒè®°å½• - */ - MemberExperienceRecordDO getExperienceRecord(Long id); - - /** - * ã€ç®¡ç†å‘˜ã€‘获得会员ç»éªŒè®°å½•分页 - * - * @param pageReqVO 分页查询 - * @return 会员ç»éªŒè®°å½•分页 - */ - PageResult getExperienceRecordPage(MemberExperienceRecordPageReqVO pageReqVO); - - /** - * ã€ä¼šå‘˜ã€‘获得会员ç»éªŒè®°å½•分页 - * - * @param userId ç”¨æˆ·ç¼–å· - * @param pageParam 分页查询 - * @return 会员ç»éªŒè®°å½•分页 - */ - PageResult getExperienceRecordPage(Long userId, PageParam pageParam); - - /** - * æ ¹æ®ä¸šåŠ¡ç±»åž‹, 创建 ç»éªŒå˜åŠ¨è®°å½• - * - * @param userId ä¼šå‘˜ç¼–å· - * @param experience å˜åЍç»éªŒå€¼ - * @param totalExperience 会员当å‰çš„ç»éªŒ - * @param bizType 业务类型 - * @param bizId 业务ID - */ - void createExperienceRecord(Long userId, Integer experience, Integer totalExperience, - MemberExperienceBizTypeEnum bizType, String bizId); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceRecordServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceRecordServiceImpl.java deleted file mode 100644 index 3760286..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceRecordServiceImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.iocoder.yudao.module.member.service.level; - -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.experience.MemberExperienceRecordPageReqVO; -import cn.iocoder.yudao.module.member.convert.level.MemberExperienceRecordConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberExperienceRecordDO; -import cn.iocoder.yudao.module.member.dal.mysql.level.MemberExperienceRecordMapper; -import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; -import java.util.Collection; -import java.util.List; - -/** - * 会员ç»éªŒè®°å½• Service 实现类 - * - * @author owen - */ -@Service -@Validated -public class MemberExperienceRecordServiceImpl implements MemberExperienceRecordService { - - @Resource - private MemberExperienceRecordMapper experienceLogMapper; - - @Override - public MemberExperienceRecordDO getExperienceRecord(Long id) { - return experienceLogMapper.selectById(id); - } - - @Override - public PageResult getExperienceRecordPage(MemberExperienceRecordPageReqVO pageReqVO) { - return experienceLogMapper.selectPage(pageReqVO); - } - - @Override - public PageResult getExperienceRecordPage(Long userId, PageParam pageParam) { - return experienceLogMapper.selectPage(userId, pageParam); - } - - @Override - public void createExperienceRecord(Long userId, Integer experience, Integer totalExperience, - MemberExperienceBizTypeEnum bizType, String bizId) { - String description = StrUtil.format(bizType.getDescription(), experience); - MemberExperienceRecordDO record = MemberExperienceRecordConvert.INSTANCE.convert( - userId, experience, totalExperience, - bizId, bizType.getType(), bizType.getTitle(), description); - experienceLogMapper.insert(record); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelRecordService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelRecordService.java deleted file mode 100644 index b5e4f66..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelRecordService.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.iocoder.yudao.module.member.service.level; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.record.MemberLevelRecordPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelRecordDO; - -/** - * 会员等级记录 Service æŽ¥å£ - * - * @author owen - */ -public interface MemberLevelRecordService { - - /** - * 获得会员等级记录 - * - * @param id ç¼–å· - * @return 会员等级记录 - */ - MemberLevelRecordDO getLevelRecord(Long id); - - /** - * 获得会员等级记录分页 - * - * @param pageReqVO 分页查询 - * @return 会员等级记录分页 - */ - PageResult getLevelRecordPage(MemberLevelRecordPageReqVO pageReqVO); - - /** - * 创建会员等级记录 - * - * @param levelRecord 会员等级记录 - */ - void createLevelRecord(MemberLevelRecordDO levelRecord); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelRecordServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelRecordServiceImpl.java deleted file mode 100644 index a8593b1..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelRecordServiceImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.module.member.service.level; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.record.MemberLevelRecordPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelRecordDO; -import cn.iocoder.yudao.module.member.dal.mysql.level.MemberLevelRecordMapper; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; - -/** - * 会员等级记录 Service 实现类 - * - * @author owen - */ -@Service -@Validated -public class MemberLevelRecordServiceImpl implements MemberLevelRecordService { - - @Resource - private MemberLevelRecordMapper levelLogMapper; - - @Override - public MemberLevelRecordDO getLevelRecord(Long id) { - return levelLogMapper.selectById(id); - } - - @Override - public PageResult getLevelRecordPage(MemberLevelRecordPageReqVO pageReqVO) { - return levelLogMapper.selectPage(pageReqVO); - } - - @Override - public void createLevelRecord(MemberLevelRecordDO levelRecord) { - levelLogMapper.insert(levelRecord); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelService.java deleted file mode 100644 index ef4de28..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelService.java +++ /dev/null @@ -1,102 +0,0 @@ -package cn.iocoder.yudao.module.member.service.level; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelListReqVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelUpdateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateLevelReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; - -import jakarta.validation.Valid; -import java.util.Collection; -import java.util.List; - -/** - * 会员等级 Service æŽ¥å£ - * - * @author owen - */ -public interface MemberLevelService { - - /** - * 创建会员等级 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createLevel(@Valid MemberLevelCreateReqVO createReqVO); - - /** - * 更新会员等级 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateLevel(@Valid MemberLevelUpdateReqVO updateReqVO); - - /** - * 删除会员等级 - * - * @param id ç¼–å· - */ - void deleteLevel(Long id); - - /** - * 获得会员等级 - * - * @param id ç¼–å· - * @return 会员等级 - */ - MemberLevelDO getLevel(Long id); - - /** - * 获得会员等级列表 - * - * @param ids ç¼–å· - * @return 会员等级列表 - */ - List getLevelList(Collection ids); - - /** - * 获得会员等级列表 - * - * @param listReqVO æŸ¥è¯¢å‚æ•° - * @return 会员等级列表 - */ - List getLevelList(MemberLevelListReqVO listReqVO); - - /** - * 获得指定状æ€çš„会员等级列表 - * - * @param status çŠ¶æ€ - * @return 会员等级列表 - */ - List getLevelListByStatus(Integer status); - - /** - * 获得开å¯çжæ€çš„会员等级列表 - * - * @return 会员等级列表 - */ - default List getEnableLevelList() { - return getLevelListByStatus(CommonStatusEnum.ENABLE.getStatus()); - } - - /** - * 修改会员的等级 - * - * @param updateReqVO ä¿®æ”¹å‚æ•° - */ - void updateUserLevel(MemberUserUpdateLevelReqVO updateReqVO); - - /** - * 增加会员ç»éªŒ - * - * @param userId 会员ID - * @param experience ç»éªŒ - * @param bizType 业务类型 - * @param bizId ä¸šåŠ¡ç¼–å· - */ - void addExperience(Long userId, Integer experience, MemberExperienceBizTypeEnum bizType, String bizId); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImpl.java deleted file mode 100644 index e197d0a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImpl.java +++ /dev/null @@ -1,298 +0,0 @@ -package cn.iocoder.yudao.module.member.service.level; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.NumberUtil; -import cn.hutool.core.util.ObjUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelListReqVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelUpdateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateLevelReqVO; -import cn.iocoder.yudao.module.member.convert.level.MemberLevelConvert; -import cn.iocoder.yudao.module.member.convert.level.MemberLevelRecordConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelRecordDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.dal.mysql.level.MemberLevelMapper; -import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import com.google.common.annotations.VisibleForTesting; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; - -/** - * 会员等级 Service 实现类 - * - * @author owen - */ -@Slf4j -@Service -@Validated -public class MemberLevelServiceImpl implements MemberLevelService { - - @Resource - private MemberLevelMapper memberLevelMapper; - - @Resource - private MemberLevelRecordService memberLevelRecordService; - @Resource - private MemberExperienceRecordService memberExperienceRecordService; - @Resource - private MemberUserService memberUserService; - - @Override - public Long createLevel(MemberLevelCreateReqVO createReqVO) { - // 校验é…ç½®æ˜¯å¦æœ‰æ•ˆ - validateConfigValid(null, createReqVO.getName(), createReqVO.getLevel(), createReqVO.getExperience()); - - // æ’å…¥ - MemberLevelDO level = MemberLevelConvert.INSTANCE.convert(createReqVO); - memberLevelMapper.insert(level); - // 返回 - return level.getId(); - } - - @Override - public void updateLevel(MemberLevelUpdateReqVO updateReqVO) { - // 校验存在 - validateLevelExists(updateReqVO.getId()); - // 校验é…ç½®æ˜¯å¦æœ‰æ•ˆ - validateConfigValid(updateReqVO.getId(), updateReqVO.getName(), updateReqVO.getLevel(), updateReqVO.getExperience()); - - // æ›´æ–° - MemberLevelDO updateObj = MemberLevelConvert.INSTANCE.convert(updateReqVO); - memberLevelMapper.updateById(updateObj); - } - - @Override - public void deleteLevel(Long id) { - // 校验存在 - validateLevelExists(id); - // æ ¡éªŒåˆ†ç»„ä¸‹æ˜¯å¦æœ‰ç”¨æˆ· - validateLevelHasUser(id); - // 删除 - memberLevelMapper.deleteById(id); - } - - @VisibleForTesting - MemberLevelDO validateLevelExists(Long id) { - MemberLevelDO levelDO = memberLevelMapper.selectById(id); - if (levelDO == null) { - throw exception(LEVEL_NOT_EXISTS); - } - return levelDO; - } - - @VisibleForTesting - void validateNameUnique(List list, Long id, String name) { - for (MemberLevelDO levelDO : list) { - if (ObjUtil.notEqual(levelDO.getName(), name)) { - continue; - } - if (id == null || !id.equals(levelDO.getId())) { - throw exception(LEVEL_NAME_EXISTS, levelDO.getName()); - } - } - } - - @VisibleForTesting - void validateLevelUnique(List list, Long id, Integer level) { - for (MemberLevelDO levelDO : list) { - if (ObjUtil.notEqual(levelDO.getLevel(), level)) { - continue; - } - - if (id == null || !id.equals(levelDO.getId())) { - throw exception(LEVEL_VALUE_EXISTS, levelDO.getLevel(), levelDO.getName()); - } - } - } - - @VisibleForTesting - void validateExperienceOutRange(List list, Long id, Integer level, Integer experience) { - for (MemberLevelDO levelDO : list) { - if (levelDO.getId().equals(id)) { - continue; - } - - if (levelDO.getLevel() < level) { - // ç»éªŒå¤§äºŽå‰ä¸€ä¸ªç­‰çº§ - if (experience <= levelDO.getExperience()) { - throw exception(LEVEL_EXPERIENCE_MIN, levelDO.getName(), levelDO.getExperience()); - } - } else if (levelDO.getLevel() > level) { - //å°äºŽä¸‹ä¸€ä¸ªçº§åˆ« - if (experience >= levelDO.getExperience()) { - throw exception(LEVEL_EXPERIENCE_MAX, levelDO.getName(), levelDO.getExperience()); - } - } - } - } - - @VisibleForTesting - void validateConfigValid(Long id, String name, Integer level, Integer experience) { - List list = memberLevelMapper.selectList(); - // 校验å称唯一 - validateNameUnique(list, id, name); - // 校验等级唯一 - validateLevelUnique(list, id, level); - // 校验å‡çº§æ‰€éœ€ç»éªŒæ˜¯å¦æœ‰æ•ˆ: 大于å‰ä¸€ä¸ªç­‰çº§ï¼Œå°äºŽä¸‹ä¸€ä¸ªçº§åˆ« - validateExperienceOutRange(list, id, level, experience); - } - - @VisibleForTesting - void validateLevelHasUser(Long id) { - Long count = memberUserService.getUserCountByLevelId(id); - if (count > 0) { - throw exception(LEVEL_HAS_USER); - } - } - - @Override - public MemberLevelDO getLevel(Long id) { - return id != null && id > 0 ? memberLevelMapper.selectById(id) : null; - } - - @Override - public List getLevelList(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return Collections.emptyList(); - } - return memberLevelMapper.selectByIds(ids); - } - - @Override - public List getLevelList(MemberLevelListReqVO listReqVO) { - return memberLevelMapper.selectList(listReqVO); - } - - @Override - public List getLevelListByStatus(Integer status) { - return memberLevelMapper.selectListByStatus(status); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateUserLevel(MemberUserUpdateLevelReqVO updateReqVO) { - MemberUserDO user = memberUserService.getUser(updateReqVO.getId()); - if (user == null) { - throw exception(USER_NOT_EXISTS); - } - // 等级未å‘生å˜åŒ– - if (ObjUtil.equal(user.getLevelId(), updateReqVO.getLevelId())) { - return; - } - - // 1. 记录等级å˜åЍ - MemberLevelRecordDO levelRecord = new MemberLevelRecordDO() - .setUserId(user.getId()).setRemark(updateReqVO.getReason()); - MemberLevelDO memberLevel = null; - if (updateReqVO.getLevelId() == null) { - // å–æ¶ˆç”¨æˆ·ç­‰çº§æ—¶ï¼Œéœ€è¦æ‰£å‡ç»éªŒ - levelRecord.setExperience(-user.getExperience()); - levelRecord.setUserExperience(0); - levelRecord.setDescription("管ç†å‘˜å–消了等级"); - } else { - // å¤åˆ¶ç­‰çº§é…ç½® - memberLevel = validateLevelExists(updateReqVO.getLevelId()); - MemberLevelRecordConvert.INSTANCE.copyTo(memberLevel, levelRecord); - // å˜åЍç»éªŒå€¼ = 等级的å‡çº§ç»éªŒ - 会员当å‰çš„ç»éªŒï¼›æ­£æ•°ä¸ºå¢žåŠ ç»éªŒï¼Œè´Ÿæ•°ä¸ºæ‰£å‡ç»éªŒ - levelRecord.setExperience(memberLevel.getExperience() - user.getExperience()); - levelRecord.setUserExperience(memberLevel.getExperience()); // 会员当å‰çš„ç»éªŒ = 等级的å‡çº§ç»éªŒ - levelRecord.setDescription("管ç†å‘˜è°ƒæ•´ä¸ºï¼š" + memberLevel.getName()); - } - memberLevelRecordService.createLevelRecord(levelRecord); - - // 2. 记录会员ç»éªŒå˜åЍ - memberExperienceRecordService.createExperienceRecord(user.getId(), - levelRecord.getExperience(), levelRecord.getUserExperience(), - MemberExperienceBizTypeEnum.ADMIN, String.valueOf(MemberExperienceBizTypeEnum.ADMIN.getType())); - - // 3. 更新会员表上的等级编å·ã€ç»éªŒå€¼ - memberUserService.updateUserLevel(user.getId(), updateReqVO.getLevelId(), - levelRecord.getUserExperience()); - - // 4. 给会员å‘é€ç­‰çº§å˜åŠ¨æ¶ˆæ¯ - notifyMemberLevelChange(user.getId(), memberLevel); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void addExperience(Long userId, Integer experience, MemberExperienceBizTypeEnum bizType, String bizId) { - if (experience == 0) { - return; - } - if (!bizType.isAdd() && experience > 0) { - experience = -experience; - } - - // 1. 创建ç»éªŒè®°å½• - MemberUserDO user = memberUserService.getUser(userId); - Integer userExperience = ObjUtil.defaultIfNull(user.getExperience(), 0); - userExperience = NumberUtil.max(userExperience + experience, 0); // 防止扣出负数 - MemberLevelRecordDO levelRecord = new MemberLevelRecordDO().setUserId(user.getId()) - .setExperience(experience).setUserExperience(userExperience).setLevelId(user.getLevelId()); - memberExperienceRecordService.createExperienceRecord(userId, experience, userExperience, - bizType, bizId); - - // 2.1 ä¿å­˜ç­‰çº§å˜æ›´è®°å½• - MemberLevelDO newLevel = calculateNewLevel(user, userExperience); - if (newLevel != null) { - MemberLevelRecordConvert.INSTANCE.copyTo(newLevel, levelRecord); - memberLevelRecordService.createLevelRecord(levelRecord); - - // 2.2 给会员å‘é€ç­‰çº§å˜åŠ¨æ¶ˆæ¯ - notifyMemberLevelChange(userId, newLevel); - } - - // 3. 更新会员表上的等级编å·ã€ç»éªŒå€¼ - memberUserService.updateUserLevel(user.getId(), levelRecord.getLevelId(), userExperience); - } - - /** - * 计算会员等级 - * - * @param user 会员 - * @param userExperience 会员当å‰çš„ç»éªŒå€¼ - * @return 会员新的等级,null表示无å˜åŒ– - */ - private MemberLevelDO calculateNewLevel(MemberUserDO user, int userExperience) { - List list = getEnableLevelList(); - if (CollUtil.isEmpty(list)) { - log.warn("计算会员等级失败:会员等级é…ç½®ä¸å­˜åœ¨"); - return null; - } - - MemberLevelDO matchLevel = list.stream() - .filter(level -> userExperience >= level.getExperience()) - .max(Comparator.nullsFirst(Comparator.comparing(MemberLevelDO::getLevel))) - .orElse(null); - if (matchLevel == null) { - log.warn("计算会员等级失败:未找到会员{}ç»éªŒ{}对应的等级é…ç½®", user.getId(), userExperience); - return null; - } - - // 等级没有å˜åŒ– - if (ObjectUtil.equal(matchLevel.getId(), user.getLevelId())) { - return null; - } - - return matchLevel; - } - - private void notifyMemberLevelChange(Long userId, MemberLevelDO level) { - //todo: ç»™ä¼šå‘˜å‘æ¶ˆæ¯ - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordService.java deleted file mode 100644 index 7e660d5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordService.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.yudao.module.member.service.point; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordPageReqVO; -import cn.iocoder.yudao.module.member.controller.app.point.vo.AppMemberPointRecordPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.point.MemberPointRecordDO; -import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; - -/** - * 用户积分记录 Service æŽ¥å£ - * - * @author QingX - */ -public interface MemberPointRecordService { - - /** - * ã€ç®¡ç†å‘˜ã€‘获得积分记录分页 - * - * @param pageReqVO 分页查询 - * @return 签到记录分页 - */ - PageResult getPointRecordPage(MemberPointRecordPageReqVO pageReqVO); - - /** - * ã€ä¼šå‘˜ã€‘获得积分记录分页 - * - * @param userId ç”¨æˆ·ç¼–å· - * @param pageReqVO 分页查询 - * @return 签到记录分页 - */ - PageResult getPointRecordPage(Long userId, AppMemberPointRecordPageReqVO pageReqVO); - - /** - * 创建用户积分记录 - * - * @param userId 用户ID - * @param point å˜åŠ¨ç§¯åˆ† - * @param bizType 业务类型 - * @param bizId ä¸šåŠ¡ç¼–å· - */ - void createPointRecord(Long userId, Integer point, MemberPointBizTypeEnum bizType, String bizId); -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordServiceImpl.java deleted file mode 100644 index 8ab559f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordServiceImpl.java +++ /dev/null @@ -1,96 +0,0 @@ -package cn.iocoder.yudao.module.member.service.point; - -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordPageReqVO; -import cn.iocoder.yudao.module.member.controller.app.point.vo.AppMemberPointRecordPageReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.point.MemberPointRecordDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.dal.mysql.point.MemberPointRecordMapper; -import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; -import org.springframework.validation.annotation.Validated; - -import java.util.List; -import java.util.Set; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.USER_POINT_NOT_ENOUGH; - - -/** - * 积分记录 Service 实现类 - * - * @author QingX - */ -@Slf4j -@Service -@Validated -public class MemberPointRecordServiceImpl implements MemberPointRecordService { - - @Resource - private MemberPointRecordMapper memberPointRecordMapper; - - @Resource - private MemberUserService memberUserService; - - @Override - public PageResult getPointRecordPage(MemberPointRecordPageReqVO pageReqVO) { - // æ ¹æ®ç”¨æˆ·æ˜µç§°æŸ¥è¯¢å‡ºç”¨æˆ· ids - Set userIds = null; - if (StringUtils.isNotBlank(pageReqVO.getNickname())) { - List users = memberUserService.getUserListByNickname(pageReqVO.getNickname()); - // 如果查询用户结果为空直接返回无需继续查询 - if (CollectionUtils.isEmpty(users)) { - return PageResult.empty(); - } - userIds = convertSet(users, MemberUserDO::getId); - } - // 执行查询 - return memberPointRecordMapper.selectPage(pageReqVO, userIds); - } - - @Override - public PageResult getPointRecordPage(Long userId, AppMemberPointRecordPageReqVO pageReqVO) { - return memberPointRecordMapper.selectPage(userId, pageReqVO); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void createPointRecord(Long userId, Integer point, MemberPointBizTypeEnum bizType, String bizId) { - if (point == 0) { - return; - } - // 1. æ ¡éªŒç”¨æˆ·ç§¯åˆ†ä½™é¢ - MemberUserDO user = memberUserService.getUser(userId); - Integer userPoint = ObjectUtil.defaultIfNull(user.getPoint(), 0); - int totalPoint = userPoint + point; // 用户å˜åЍåŽçš„积分 - if (totalPoint < 0) { - log.error("[createPointRecord][userId({}) point({}) bizType({}) bizId({}) {}]", userId, point, bizType, bizId, - USER_POINT_NOT_ENOUGH); - return; - } - - // 2. 更新用户积分 - boolean success = memberUserService.updateUserPoint(userId, point); - if (!success) { - throw exception(USER_POINT_NOT_ENOUGH); - } - - // 3. 增加积分记录 - MemberPointRecordDO record = new MemberPointRecordDO() - .setUserId(userId).setBizId(bizId).setBizType(bizType.getType()) - .setTitle(bizType.getName()).setDescription(StrUtil.format(bizType.getDescription(), point)) - .setPoint(point).setTotalPoint(totalPoint); - memberPointRecordMapper.insert(record); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInConfigService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInConfigService.java deleted file mode 100644 index bc1c771..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInConfigService.java +++ /dev/null @@ -1,62 +0,0 @@ -package cn.iocoder.yudao.module.member.service.signin; - -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.config.MemberSignInConfigCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.config.MemberSignInConfigUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO; - -import jakarta.validation.Valid; -import java.util.List; - -/** - * 签到规则 Service æŽ¥å£ - * - * @author QingX - */ -public interface MemberSignInConfigService { - - /** - * 创建签到规则 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createSignInConfig(@Valid MemberSignInConfigCreateReqVO createReqVO); - - /** - * 更新签到规则 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateSignInConfig(@Valid MemberSignInConfigUpdateReqVO updateReqVO); - - /** - * 删除签到规则 - * - * @param id ç¼–å· - */ - void deleteSignInConfig(Long id); - - /** - * 获得签到规则 - * - * @param id ç¼–å· - * @return 签到规则 - */ - MemberSignInConfigDO getSignInConfig(Long id); - - /** - * 获得签到规则列表 - * - * @return 签到规则分页 - */ - List getSignInConfigList(); - - /** - * 获得签到规则列表 - * - * @param status çŠ¶æ€ - * @return 签到规则分页 - */ - List getSignInConfigList(Integer status); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInConfigServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInConfigServiceImpl.java deleted file mode 100644 index 24d7422..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInConfigServiceImpl.java +++ /dev/null @@ -1,106 +0,0 @@ -package cn.iocoder.yudao.module.member.service.signin; - -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.config.MemberSignInConfigCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.config.MemberSignInConfigUpdateReqVO; -import cn.iocoder.yudao.module.member.convert.signin.MemberSignInConfigConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO; -import cn.iocoder.yudao.module.member.dal.mysql.signin.MemberSignInConfigMapper; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; -import java.util.Comparator; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.SIGN_IN_CONFIG_EXISTS; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.SIGN_IN_CONFIG_NOT_EXISTS; - -/** - * 签到规则 Service 实现类 - * - * @author QingX - */ -@Service -@Validated -public class MemberSignInConfigServiceImpl implements MemberSignInConfigService { - - @Resource - private MemberSignInConfigMapper memberSignInConfigMapper; - - @Override - public Long createSignInConfig(MemberSignInConfigCreateReqVO createReqVO) { - // 判断是å¦é‡å¤æ’入签到天数 - validateSignInConfigDayDuplicate(createReqVO.getDay(), null); - - // æ’å…¥ - MemberSignInConfigDO signInConfig = MemberSignInConfigConvert.INSTANCE.convert(createReqVO); - memberSignInConfigMapper.insert(signInConfig); - // 返回 - return signInConfig.getId(); - } - - @Override - public void updateSignInConfig(MemberSignInConfigUpdateReqVO updateReqVO) { - // 校验存在 - validateSignInConfigExists(updateReqVO.getId()); - // 判断是å¦é‡å¤æ’入签到天数 - validateSignInConfigDayDuplicate(updateReqVO.getDay(), updateReqVO.getId()); - - // 判断更新 - MemberSignInConfigDO updateObj = MemberSignInConfigConvert.INSTANCE.convert(updateReqVO); - memberSignInConfigMapper.updateById(updateObj); - } - - @Override - public void deleteSignInConfig(Long id) { - // 校验存在 - validateSignInConfigExists(id); - // 删除 - memberSignInConfigMapper.deleteById(id); - } - - private void validateSignInConfigExists(Long id) { - if (memberSignInConfigMapper.selectById(id) == null) { - throw exception(SIGN_IN_CONFIG_NOT_EXISTS); - } - } - - /** - * 校验 day 是å¦é‡å¤ - * - * @param day 天 - * @param id ç¼–å·ï¼Œåªæœ‰æ›´æ–°çš„æ—¶å€™ä¼šä¼ é€’ - */ - private void validateSignInConfigDayDuplicate(Integer day, Long id) { - MemberSignInConfigDO config = memberSignInConfigMapper.selectByDay(day); - // 1. 新增时,config éžç©ºï¼Œåˆ™è¯´æ˜Žé‡å¤ - if (id == null && config != null) { - throw exception(SIGN_IN_CONFIG_EXISTS); - } - // 2. 更新时,如果 config éžç©ºï¼Œä¸” id ä¸ç›¸ç­‰ï¼Œåˆ™è¯´æ˜Žé‡å¤ - if (id != null && config != null && !config.getId().equals(id)) { - throw exception(SIGN_IN_CONFIG_EXISTS); - } - } - - @Override - public MemberSignInConfigDO getSignInConfig(Long id) { - return memberSignInConfigMapper.selectById(id); - } - - @Override - public List getSignInConfigList() { - List list = memberSignInConfigMapper.selectList(); - list.sort(Comparator.comparing(MemberSignInConfigDO::getDay)); - return list; - } - - @Override - public List getSignInConfigList(Integer status) { - List list = memberSignInConfigMapper.selectListByStatus(status); - list.sort(Comparator.comparing(MemberSignInConfigDO::getDay)); - return list; - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInRecordService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInRecordService.java deleted file mode 100644 index b22ceed..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInRecordService.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.iocoder.yudao.module.member.service.signin; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.record.MemberSignInRecordPageReqVO; -import cn.iocoder.yudao.module.member.controller.app.signin.vo.record.AppMemberSignInRecordSummaryRespVO; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO; - -/** - * 签到记录 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface MemberSignInRecordService { - - /** - * ã€ç®¡ç†å‘˜ã€‘获得签到记录分页 - * - * @param pageReqVO 分页查询 - * @return 签到记录分页 - */ - PageResult getSignInRecordPage(MemberSignInRecordPageReqVO pageReqVO); - - /** - * ã€ä¼šå‘˜ã€‘获得签到记录分页 - * - * @param userId ç”¨æˆ·ç¼–å· - * @param pageParam 分页查询 - * @return 签到记录分页 - */ - PageResult getSignRecordPage(Long userId, PageParam pageParam); - - /** - * 创建签到记录 - * - * @param userId ç”¨æˆ·ç¼–å· - * @return 签到记录 - */ - MemberSignInRecordDO createSignRecord(Long userId); - - /** - * æ ¹æ®ç”¨æˆ·ç¼–å·ï¼ŒèŽ·å¾—ä¸ªäººç­¾åˆ°ç»Ÿè®¡ä¿¡æ¯ - * - * @param userId ç”¨æˆ·ç¼–å· - * @return ä¸ªäººç­¾åˆ°ç»Ÿè®¡ä¿¡æ¯ - */ - AppMemberSignInRecordSummaryRespVO getSignInRecordSummary(Long userId); - - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInRecordServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInRecordServiceImpl.java deleted file mode 100644 index d7c3b8e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/signin/MemberSignInRecordServiceImpl.java +++ /dev/null @@ -1,145 +0,0 @@ -package cn.iocoder.yudao.module.member.service.signin; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.date.DateUtils; -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import cn.iocoder.yudao.module.member.controller.admin.signin.vo.record.MemberSignInRecordPageReqVO; -import cn.iocoder.yudao.module.member.controller.app.signin.vo.record.AppMemberSignInRecordSummaryRespVO; -import cn.iocoder.yudao.module.member.convert.signin.MemberSignInRecordConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO; -import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.dal.mysql.signin.MemberSignInRecordMapper; -import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; -import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; -import cn.iocoder.yudao.module.member.service.level.MemberLevelService; -import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import jakarta.annotation.Resource; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; - -import java.util.List; -import java.util.Set; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.SIGN_IN_RECORD_TODAY_EXISTS; - -/** - * 签到记录 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class MemberSignInRecordServiceImpl implements MemberSignInRecordService { - - @Resource - private MemberSignInRecordMapper signInRecordMapper; - @Resource - private MemberSignInConfigService signInConfigService; - @Resource - private MemberPointRecordService pointRecordService; - @Resource - private MemberLevelService memberLevelService; - - @Resource - private MemberUserService memberUserService; - - @Override - public AppMemberSignInRecordSummaryRespVO getSignInRecordSummary(Long userId) { - // 1. åˆå§‹åŒ–é»˜è®¤è¿”å›žä¿¡æ¯ - AppMemberSignInRecordSummaryRespVO summary = new AppMemberSignInRecordSummaryRespVO(); - summary.setTotalDay(0); - summary.setContinuousDay(0); - summary.setTodaySignIn(false); - - // 2. 获å–用户签到的记录数 - Long signCount = signInRecordMapper.selectCountByUserId(userId); - if (ObjUtil.equal(signCount, 0L)) { - return summary; - } - summary.setTotalDay(signCount.intValue()); // 设置总签到天数 - - // 3. æ ¡éªŒå½“å¤©æ˜¯å¦æœ‰ç­¾åˆ° - MemberSignInRecordDO lastRecord = signInRecordMapper.selectLastRecordByUserId(userId); - if (lastRecord == null) { - return summary; - } - summary.setTodaySignIn(DateUtils.isToday(lastRecord.getCreateTime())); - - // 4.1 æ£€æŸ¥ä»Šå¤©æ˜¯å¦æœªç­¾åˆ°ä¸”è®°å½•ä¸æ˜¯æ˜¨å¤©åˆ›å»ºçš„,如果是则直接返回 - if (!summary.getTodaySignIn() && !DateUtils.isYesterday(lastRecord.getCreateTime())) { - return summary; - } - - // 4.2 è¦ä¹ˆæ˜¯ä»Šå¤©ç­¾åˆ°äº†ï¼Œè¦ä¹ˆæ˜¯æ˜¨å¤©çš„记录,设置连续签到天数 - summary.setContinuousDay(lastRecord.getDay()); - return summary; - } - - @Override - public PageResult getSignInRecordPage(MemberSignInRecordPageReqVO pageReqVO) { - // æ ¹æ®ç”¨æˆ·æ˜µç§°æŸ¥è¯¢å‡ºç”¨æˆ·ids - Set userIds = null; - if (StringUtils.isNotBlank(pageReqVO.getNickname())) { - List users = memberUserService.getUserListByNickname(pageReqVO.getNickname()); - // 如果查询用户结果为空直接返回无需继续查询 - if (CollUtil.isEmpty(users)) { - return PageResult.empty(); - } - userIds = convertSet(users, MemberUserDO::getId); - } - // 分页查询 - return signInRecordMapper.selectPage(pageReqVO, userIds); - } - - @Override - public PageResult getSignRecordPage(Long userId, PageParam pageParam) { - return signInRecordMapper.selectPage(userId, pageParam); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public MemberSignInRecordDO createSignRecord(Long userId) { - // 1. 获å–当å‰ç”¨æˆ·æœ€è¿‘的签到 - MemberSignInRecordDO lastRecord = signInRecordMapper.selectLastRecordByUserId(userId); - // 1.1. 判断是å¦é‡å¤ç­¾åˆ° - validateSigned(lastRecord); - - // 2.1. èŽ·å–æ‰€æœ‰çš„签到规则 - List signInConfigs = signInConfigService.getSignInConfigList(CommonStatusEnum.ENABLE.getStatus()); - // 2.2. ç»„åˆæ•°æ® - MemberSignInRecordDO record = MemberSignInRecordConvert.INSTANCE.convert(userId, lastRecord, signInConfigs); - - // 3. æ’入签到记录 - signInRecordMapper.insert(record); - - // 4. 增加积分 - if (!ObjectUtils.equalsAny(record.getPoint(), null, 0)) { - pointRecordService.createPointRecord(userId, record.getPoint(), MemberPointBizTypeEnum.SIGN, String.valueOf(record.getId())); - } - // 5. 增加ç»éªŒ - if (!ObjectUtils.equalsAny(record.getExperience(), null, 0)) { - memberLevelService.addExperience(userId, record.getExperience(), MemberExperienceBizTypeEnum.SIGN_IN, String.valueOf(record.getId())); - } - return record; - } - - private void validateSigned(MemberSignInRecordDO signInRecordDO) { - if (signInRecordDO == null) { - return; - } - if (DateUtils.isToday(signInRecordDO.getCreateTime())) { - throw exception(SIGN_IN_RECORD_TODAY_EXISTS); - } - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagService.java deleted file mode 100644 index f787353..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagService.java +++ /dev/null @@ -1,73 +0,0 @@ -package cn.iocoder.yudao.module.member.service.tag; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; - -import jakarta.validation.Valid; -import java.util.Collection; -import java.util.List; - -/** - * 会员标签 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface MemberTagService { - - /** - * 创建会员标签 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createTag(@Valid MemberTagCreateReqVO createReqVO); - - /** - * 更新会员标签 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateTag(@Valid MemberTagUpdateReqVO updateReqVO); - - /** - * 删除会员标签 - * - * @param id ç¼–å· - */ - void deleteTag(Long id); - - /** - * 获得会员标签 - * - * @param id ç¼–å· - * @return 会员标签 - */ - MemberTagDO getTag(Long id); - - /** - * 获得会员标签列表 - * - * @param ids ç¼–å· - * @return 会员标签列表 - */ - List getTagList(Collection ids); - - /** - * 获得会员标签分页 - * - * @param pageReqVO 分页查询 - * @return 会员标签分页 - */ - PageResult getTagPage(MemberTagPageReqVO pageReqVO); - - /** - * èŽ·å–æ ‡ç­¾åˆ—表 - * - * @return 标签列表 - */ - List getTagList(); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImpl.java deleted file mode 100644 index 598f27c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImpl.java +++ /dev/null @@ -1,125 +0,0 @@ -package cn.iocoder.yudao.module.member.service.tag; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagUpdateReqVO; -import cn.iocoder.yudao.module.member.convert.tag.MemberTagConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; -import cn.iocoder.yudao.module.member.dal.mysql.tag.MemberTagMapper; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; -import java.util.Collection; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; - -/** - * 会员标签 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class MemberTagServiceImpl implements MemberTagService { - - @Resource - private MemberTagMapper memberTagMapper; - - @Resource - private MemberUserService memberUserService; - - @Override - public Long createTag(MemberTagCreateReqVO createReqVO) { - // 校验å称唯一 - validateTagNameUnique(null, createReqVO.getName()); - // æ’å…¥ - MemberTagDO tag = MemberTagConvert.INSTANCE.convert(createReqVO); - memberTagMapper.insert(tag); - // 返回 - return tag.getId(); - } - - @Override - public void updateTag(MemberTagUpdateReqVO updateReqVO) { - // 校验存在 - validateTagExists(updateReqVO.getId()); - // 校验å称唯一 - validateTagNameUnique(updateReqVO.getId(), updateReqVO.getName()); - // æ›´æ–° - MemberTagDO updateObj = MemberTagConvert.INSTANCE.convert(updateReqVO); - memberTagMapper.updateById(updateObj); - } - - @Override - public void deleteTag(Long id) { - // 校验存在 - validateTagExists(id); - // æ ¡éªŒæ ‡ç­¾ä¸‹æ˜¯å¦æœ‰ç”¨æˆ· - validateTagHasUser(id); - // 删除 - memberTagMapper.deleteById(id); - } - - private void validateTagExists(Long id) { - if (memberTagMapper.selectById(id) == null) { - throw exception(TAG_NOT_EXISTS); - } - } - - private void validateTagNameUnique(Long id, String name) { - if (StrUtil.isBlank(name)) { - return; - } - MemberTagDO tag = memberTagMapper.selelctByName(name); - if (tag == null) { - return; - } - - // 如果 id 为空,说明ä¸ç”¨æ¯”较是å¦ä¸ºç›¸åŒ id 的标签 - if (id == null) { - throw exception(TAG_NAME_EXISTS); - } - if (!tag.getId().equals(id)) { - throw exception(TAG_NAME_EXISTS); - } - } - - void validateTagHasUser(Long id) { - Long count = memberUserService.getUserCountByTagId(id); - if (count > 0) { - throw exception(TAG_HAS_USER); - } - } - - @Override - public MemberTagDO getTag(Long id) { - return memberTagMapper.selectById(id); - } - - @Override - public List getTagList(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return ListUtil.empty(); - } - return memberTagMapper.selectByIds(ids); - } - - @Override - public PageResult getTagPage(MemberTagPageReqVO pageReqVO) { - return memberTagMapper.selectPage(pageReqVO); - } - - @Override - public List getTagList() { - return memberTagMapper.selectList(); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java deleted file mode 100644 index 2c07d4b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java +++ /dev/null @@ -1,190 +0,0 @@ -package cn.iocoder.yudao.module.member.service.user; - -import cn.iocoder.yudao.framework.common.enums.TerminalEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.validation.Mobile; -import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; -import cn.iocoder.yudao.module.member.controller.app.user.vo.*; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; - -import jakarta.validation.Valid; -import java.util.Collection; -import java.util.List; - -/** - * 会员用户 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface MemberUserService { - - /** - * 通过手机查询用户 - * - * @param mobile 手机 - * @return 用户对象 - */ - MemberUserDO getUserByMobile(String mobile); - - /** - * 基于用户昵称,模糊匹é…用户列表 - * - * @param nickname ç”¨æˆ·æ˜µç§°ï¼Œæ¨¡ç³ŠåŒ¹é… - * @return 用户信æ¯çš„列表 - */ - List getUserListByNickname(String nickname); - - /** - * 基于手机å·åˆ›å»ºç”¨æˆ·ã€‚ - * 如果用户已ç»å­˜åœ¨ï¼Œåˆ™ç›´æŽ¥è¿›è¡Œè¿”回 - * - * @param mobile æ‰‹æœºå· - * @param registerIp 注册 IP - * @param terminal 终端 {@link TerminalEnum} - * @return 用户对象 - */ - MemberUserDO createUserIfAbsent(@Mobile String mobile, String registerIp, Integer terminal); - - /** - * 创建用户 - * 目的:三方登录时,如果未绑定用户时,自动创建对应用户 - * - * @param nickname 昵称 - * @param avtar å¤´åƒ - * @param registerIp 注册 IP - * @param terminal 终端 {@link TerminalEnum} - * @return 用户对象 - */ - MemberUserDO createUser(String nickname, String avtar, String registerIp, Integer terminal); - - /** - * 更新用户的最åŽç™»é™†ä¿¡æ¯ - * - * @param id ç”¨æˆ·ç¼–å· - * @param loginIp 登陆 IP - */ - void updateUserLogin(Long id, String loginIp); - - /** - * 通过用户 ID 查询用户 - * - * @param id 用户ID - * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ - */ - MemberUserDO getUser(Long id); - - /** - * 通过用户 ID 查询用户们 - * - * @param ids 用户 ID - * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯æ•°ç»„ - */ - List getUserList(Collection ids); - - /** - * ã€ä¼šå‘˜ã€‘ä¿®æ”¹åŸºæœ¬ä¿¡æ¯ - * - * @param userId ç”¨æˆ·ç¼–å· - * @param reqVO åŸºæœ¬ä¿¡æ¯ - */ - void updateUser(Long userId, AppMemberUserUpdateReqVO reqVO); - - /** - * ã€ä¼šå‘˜ã€‘修改手机,基于手机验è¯ç  - * - * @param userId ç”¨æˆ·ç¼–å· - * @param reqVO è¯·æ±‚ä¿¡æ¯ - */ - void updateUserMobile(Long userId, AppMemberUserUpdateMobileReqVO reqVO); - - /** - * ã€ä¼šå‘˜ã€‘修改手机,基于微信å°ç¨‹åºçš„æŽˆæƒç  - * - * @param userId ç”¨æˆ·ç¼–å· - * @param reqVO è¯·æ±‚ä¿¡æ¯ - */ - void updateUserMobileByWeixin(Long userId, AppMemberUserUpdateMobileByWeixinReqVO reqVO); - - /** - * ã€ä¼šå‘˜ã€‘ä¿®æ”¹å¯†ç  - * - * @param userId ç”¨æˆ·ç¼–å· - * @param reqVO è¯·æ±‚ä¿¡æ¯ - */ - void updateUserPassword(Long userId, AppMemberUserUpdatePasswordReqVO reqVO); - - /** - * ã€ä¼šå‘˜ã€‘å¿˜è®°å¯†ç  - * - * @param reqVO è¯·æ±‚ä¿¡æ¯ - */ - void resetUserPassword(AppMemberUserResetPasswordReqVO reqVO); - - /** - * åˆ¤æ–­å¯†ç æ˜¯å¦åŒ¹é… - * - * @param rawPassword æœªåŠ å¯†çš„å¯†ç  - * @param encodedPassword 加密åŽçš„å¯†ç  - * @return 是å¦åŒ¹é… - */ - boolean isPasswordMatch(String rawPassword, String encodedPassword); - - /** - * ã€ç®¡ç†å‘˜ã€‘更新会员用户 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateUser(@Valid MemberUserUpdateReqVO updateReqVO); - - /** - * ã€ç®¡ç†å‘˜ã€‘获得会员用户分页 - * - * @param pageReqVO 分页查询 - * @return 会员用户分页 - */ - PageResult getUserPage(MemberUserPageReqVO pageReqVO); - - /** - * 更新用户的等级和ç»éªŒ - * - * @param id ç”¨æˆ·ç¼–å· - * @param levelId 用户等级 - * @param experience 用户ç»éªŒ - */ - void updateUserLevel(Long id, Long levelId, Integer experience); - - /** - * èŽ·å¾—æŒ‡å®šç”¨æˆ·åˆ†ç»„ä¸‹çš„ç”¨æˆ·æ•°é‡ - * - * @param groupId ç”¨æˆ·åˆ†ç»„ç¼–å· - * @return ç”¨æˆ·æ•°é‡ - */ - Long getUserCountByGroupId(Long groupId); - - /** - * èŽ·å¾—æŒ‡å®šç”¨æˆ·ç­‰çº§ä¸‹çš„ç”¨æˆ·æ•°é‡ - * - * @param levelId ç”¨æˆ·ç­‰çº§ç¼–å· - * @return ç”¨æˆ·æ•°é‡ - */ - Long getUserCountByLevelId(Long levelId); - - /** - * èŽ·å¾—æŒ‡å®šä¼šå‘˜æ ‡ç­¾ä¸‹çš„ç”¨æˆ·æ•°é‡ - * - * @param tagId ç”¨æˆ·æ ‡ç­¾ç¼–å· - * @return ç”¨æˆ·æ•°é‡ - */ - Long getUserCountByTagId(Long tagId); - - /** - * 更新用户的积分 - * - * @param userId ç”¨æˆ·ç¼–å· - * @param point ç§¯åˆ†æ•°é‡ - * @return 更新结果 - */ - boolean updateUserPoint(Long userId, Integer point); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java deleted file mode 100644 index d596ab6..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ /dev/null @@ -1,317 +0,0 @@ -package cn.iocoder.yudao.module.member.service.user; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.*; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; -import cn.iocoder.yudao.module.member.controller.app.user.vo.*; -import cn.iocoder.yudao.module.member.convert.auth.AuthConvert; -import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; -import cn.iocoder.yudao.module.member.mq.producer.user.MemberUserProducer; -import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; -import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; -import cn.iocoder.yudao.module.system.api.social.SocialClientApi; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxPhoneNumberInfoRespDTO; -import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; -import com.google.common.annotations.VisibleForTesting; -import lombok.extern.slf4j.Slf4j; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.support.TransactionSynchronization; -import org.springframework.transaction.support.TransactionSynchronizationManager; - -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import java.time.LocalDateTime; -import java.util.Collection; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; - -/** - * 会员 User Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Valid -@Slf4j -public class MemberUserServiceImpl implements MemberUserService { - - @Resource - private MemberUserMapper memberUserMapper; - - @Resource - private SmsCodeApi smsCodeApi; - - @Resource - private SocialClientApi socialClientApi; - - @Resource - private PasswordEncoder passwordEncoder; - - @Resource - private MemberUserProducer memberUserProducer; - - @Override - public MemberUserDO getUserByMobile(String mobile) { - return memberUserMapper.selectByMobile(mobile); - } - - @Override - public List getUserListByNickname(String nickname) { - return memberUserMapper.selectListByNicknameLike(nickname); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public MemberUserDO createUserIfAbsent(String mobile, String registerIp, Integer terminal) { - // 用户已ç»å­˜åœ¨ - MemberUserDO user = memberUserMapper.selectByMobile(mobile); - if (user != null) { - return user; - } - // 用户ä¸å­˜åœ¨ï¼Œåˆ™è¿›è¡Œåˆ›å»º - return createUser(mobile, null, null, registerIp, terminal); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public MemberUserDO createUser(String nickname, String avtar, String registerIp, Integer terminal) { - return createUser(null, nickname, avtar, registerIp, terminal); - } - - private MemberUserDO createUser(String mobile, String nickname, String avtar, - String registerIp, Integer terminal) { - // 生æˆå¯†ç  - String password = IdUtil.fastSimpleUUID(); - // æ’入用户 - MemberUserDO user = new MemberUserDO(); - user.setMobile(mobile); - user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // é»˜è®¤å¼€å¯ - user.setPassword(encodePassword(password)); // åŠ å¯†å¯†ç  - user.setRegisterIp(registerIp).setRegisterTerminal(terminal); - user.setNickname(nickname).setAvatar(avtar); // åŸºç¡€ä¿¡æ¯ - if (StrUtil.isEmpty(nickname)) { - // æ˜µç§°ä¸ºç©ºæ—¶ï¼Œéšæœºä¸€ä¸ªå字,é¿å…一些ä¾èµ– nickname 的逻辑报错,或者有点丑。例如说,短信å‘逿œ‰æ˜µç§°æ—¶~ - user.setNickname("用户" + RandomUtil.randomNumbers(6)); - } - memberUserMapper.insert(user); - - // å‘é€ MQ 消æ¯ï¼šç”¨æˆ·åˆ›å»º - TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { - - @Override - public void afterCommit() { - memberUserProducer.sendUserCreateMessage(user.getId()); - } - - }); - return user; - } - - @Override - public void updateUserLogin(Long id, String loginIp) { - memberUserMapper.updateById(new MemberUserDO().setId(id) - .setLoginIp(loginIp).setLoginDate(LocalDateTime.now())); - } - - @Override - public MemberUserDO getUser(Long id) { - return memberUserMapper.selectById(id); - } - - @Override - public List getUserList(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return ListUtil.empty(); - } - return memberUserMapper.selectByIds(ids); - } - - @Override - public void updateUser(Long userId, AppMemberUserUpdateReqVO reqVO) { - MemberUserDO updateObj = BeanUtils.toBean(reqVO, MemberUserDO.class).setId(userId); - memberUserMapper.updateById(updateObj); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateUserMobile(Long userId, AppMemberUserUpdateMobileReqVO reqVO) { - // 1.1 检测用户是å¦å­˜åœ¨ - MemberUserDO user = validateUserExists(userId); - // 1.2 校验新手机是å¦å·²ç»è¢«ç»‘定 - validateMobileUnique(null, reqVO.getMobile()); - - // 2.1 校验旧手机和旧验è¯ç  - // 补充说明:从安全性æ¥è¯´ï¼Œè€æ‰‹æœºä¹Ÿæ ¡éªŒ oldCode 验è¯ç ä¼šæ›´å®‰å…¨ã€‚但是由于 uni-app å•†åŸŽç•Œé¢æš‚æ—¶æ²¡åšï¼Œæ‰€ä»¥è¿™é‡Œä¸å¼ºåˆ¶æ ¡éªŒ - if (StrUtil.isNotEmpty(reqVO.getOldCode())) { - smsCodeApi.useSmsCode(new SmsCodeUseReqDTO().setMobile(user.getMobile()).setCode(reqVO.getOldCode()) - .setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()).setUsedIp(getClientIP())); - } - // 2.2 使用新验è¯ç  - smsCodeApi.useSmsCode(new SmsCodeUseReqDTO().setMobile(reqVO.getMobile()).setCode(reqVO.getCode()) - .setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()).setUsedIp(getClientIP())); - - // 3. 更新用户手机 - memberUserMapper.updateById(MemberUserDO.builder().id(userId).mobile(reqVO.getMobile()).build()); - } - - @Override - public void updateUserMobileByWeixin(Long userId, AppMemberUserUpdateMobileByWeixinReqVO reqVO) { - // 1.1 获得对应的手机å·ä¿¡æ¯ - SocialWxPhoneNumberInfoRespDTO phoneNumberInfo = socialClientApi.getWxMaPhoneNumberInfo( - UserTypeEnum.MEMBER.getValue(), reqVO.getCode()); - Assert.notNull(phoneNumberInfo, "获得手机信æ¯å¤±è´¥ï¼Œç»“果为空"); - // 1.2 校验新手机是å¦å·²ç»è¢«ç»‘定 - validateMobileUnique(userId, phoneNumberInfo.getPhoneNumber()); - - // 2. 更新用户手机 - memberUserMapper.updateById(MemberUserDO.builder().id(userId).mobile(phoneNumberInfo.getPhoneNumber()).build()); - } - - @Override - public void updateUserPassword(Long userId, AppMemberUserUpdatePasswordReqVO reqVO) { - // 检测用户是å¦å­˜åœ¨ - MemberUserDO user = validateUserExists(userId); - // 校验验è¯ç  - smsCodeApi.useSmsCode(new SmsCodeUseReqDTO().setMobile(user.getMobile()).setCode(reqVO.getCode()) - .setScene(SmsSceneEnum.MEMBER_UPDATE_PASSWORD.getScene()).setUsedIp(getClientIP())); - - // æ›´æ–°ç”¨æˆ·å¯†ç  - memberUserMapper.updateById(MemberUserDO.builder().id(userId) - .password(passwordEncoder.encode(reqVO.getPassword())).build()); - } - - @Override - public void resetUserPassword(AppMemberUserResetPasswordReqVO reqVO) { - // 检验用户是å¦å­˜åœ¨ - MemberUserDO user = validateUserExists(reqVO.getMobile()); - - // 使用验è¯ç  - smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_RESET_PASSWORD, - getClientIP())); - - // æ›´æ–°å¯†ç  - memberUserMapper.updateById(MemberUserDO.builder().id(user.getId()) - .password(passwordEncoder.encode(reqVO.getPassword())).build()); - } - - private MemberUserDO validateUserExists(String mobile) { - MemberUserDO user = memberUserMapper.selectByMobile(mobile); - if (user == null) { - throw exception(USER_MOBILE_NOT_EXISTS); - } - return user; - } - - @Override - public boolean isPasswordMatch(String rawPassword, String encodedPassword) { - return passwordEncoder.matches(rawPassword, encodedPassword); - } - - /** - * 对密ç è¿›è¡ŒåР坆 - * - * @param password å¯†ç  - * @return 加密åŽçš„å¯†ç  - */ - private String encodePassword(String password) { - return passwordEncoder.encode(password); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateUser(MemberUserUpdateReqVO updateReqVO) { - // 校验存在 - validateUserExists(updateReqVO.getId()); - // 校验手机唯一 - validateMobileUnique(updateReqVO.getId(), updateReqVO.getMobile()); - - // æ›´æ–° - MemberUserDO updateObj = MemberUserConvert.INSTANCE.convert(updateReqVO); - memberUserMapper.updateById(updateObj); - } - - @VisibleForTesting - MemberUserDO validateUserExists(Long id) { - if (id == null) { - return null; - } - MemberUserDO user = memberUserMapper.selectById(id); - if (user == null) { - throw exception(USER_NOT_EXISTS); - } - return user; - } - - @VisibleForTesting - void validateMobileUnique(Long id, String mobile) { - if (StrUtil.isBlank(mobile)) { - return; - } - MemberUserDO user = memberUserMapper.selectByMobile(mobile); - if (user == null) { - return; - } - // 如果 id 为空,说明ä¸ç”¨æ¯”较是å¦ä¸ºç›¸åŒ id 的用户 - if (id == null) { - throw exception(USER_MOBILE_USED, mobile); - } - if (!user.getId().equals(id)) { - throw exception(USER_MOBILE_USED, mobile); - } - } - - @Override - public PageResult getUserPage(MemberUserPageReqVO pageReqVO) { - return memberUserMapper.selectPage(pageReqVO); - } - - @Override - public void updateUserLevel(Long id, Long levelId, Integer experience) { - // 0 代表无等级:防止UpdateById时,会被过滤掉的问题 - levelId = ObjectUtil.defaultIfNull(levelId, 0L); - memberUserMapper.updateById(new MemberUserDO() - .setId(id) - .setLevelId(levelId).setExperience(experience) - ); - } - - @Override - public Long getUserCountByGroupId(Long groupId) { - return memberUserMapper.selectCountByGroupId(groupId); - } - - @Override - public Long getUserCountByLevelId(Long levelId) { - return memberUserMapper.selectCountByLevelId(levelId); - } - - @Override - public Long getUserCountByTagId(Long tagId) { - return memberUserMapper.selectCountByTagId(tagId); - } - - @Override - public boolean updateUserPoint(Long id, Integer point) { - if (point > 0) { - memberUserMapper.updatePointIncr(id, point); - } else if (point < 0) { - return memberUserMapper.updatePointDecr(id, point) > 0; - } - return true; - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/address/MemberAddressServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/address/MemberAddressServiceImplTest.java deleted file mode 100644 index 2af6408..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/address/MemberAddressServiceImplTest.java +++ /dev/null @@ -1,98 +0,0 @@ -package cn.iocoder.yudao.module.member.service.address; - -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressCreateReqVO; -import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.address.MemberAddressDO; -import cn.iocoder.yudao.module.member.dal.mysql.address.MemberAddressMapper; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; - -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ADDRESS_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; - -/** - * {@link AddressServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(AddressServiceImpl.class) -public class MemberAddressServiceImplTest extends BaseDbUnitTest { - - @Resource - private AddressServiceImpl addressService; - - @Resource - private MemberAddressMapper addressMapper; - - @Test - public void testCreateAddress_success() { - // 准备傿•° - AppAddressCreateReqVO reqVO = randomPojo(AppAddressCreateReqVO.class); - - // 调用 - Long addressId = addressService.createAddress(randomLongId(), reqVO); - // 断言 - assertNotNull(addressId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - MemberAddressDO address = addressMapper.selectById(addressId); - assertPojoEquals(reqVO, address); - } - - @Test - public void testUpdateAddress_success() { - // mock æ•°æ® - MemberAddressDO dbAddress = randomPojo(MemberAddressDO.class); - addressMapper.insert(dbAddress);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - AppAddressUpdateReqVO reqVO = randomPojo(AppAddressUpdateReqVO.class, o -> { - o.setId(dbAddress.getId()); // 设置更新的 ID - }); - - // 调用 - addressService.updateAddress(dbAddress.getUserId(), reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - MemberAddressDO address = addressMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, address); - } - - @Test - public void testUpdateAddress_notExists() { - // 准备傿•° - AppAddressUpdateReqVO reqVO = randomPojo(AppAddressUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> addressService.updateAddress(randomLongId(), reqVO), ADDRESS_NOT_EXISTS); - } - - @Test - public void testDeleteAddress_success() { - // mock æ•°æ® - MemberAddressDO dbAddress = randomPojo(MemberAddressDO.class); - addressMapper.insert(dbAddress);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbAddress.getId(); - - // 调用 - addressService.deleteAddress(dbAddress.getUserId(), id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(addressMapper.selectById(id)); - } - - @Test - public void testDeleteAddress_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> addressService.deleteAddress(randomLongId(), id), ADDRESS_NOT_EXISTS); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java deleted file mode 100644 index 6eed0f1..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package cn.iocoder.yudao.module.member.service.auth; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbAndRedisUnitTest; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import cn.iocoder.yudao.module.system.api.logger.LoginLogApi; -import cn.iocoder.yudao.framework.common.biz.system.oauth2.OAuth2TokenCommonApi; -import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; -import cn.iocoder.yudao.module.system.api.social.SocialUserApi; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; -import org.springframework.security.crypto.password.PasswordEncoder; - -import jakarta.annotation.Resource; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; - -// TODO @èŠ‹è‰¿ï¼šå•æµ‹çš„ review,等逻辑都达æˆä¸€è‡´åŽ -/** - * {@link MemberAuthService} çš„å•元测试类 - * - * @author 宋天 - */ -@Import({MemberAuthServiceImpl.class, YudaoRedisAutoConfiguration.class}) -public class MemberAuthServiceTest extends BaseDbAndRedisUnitTest { - - // TODO @èŠ‹è‰¿ï¼šç™»å½•ç›¸å…³çš„å•æµ‹ï¼Œå¾…补全 - - @Resource - private MemberAuthServiceImpl authService; - - @MockBean - private MemberUserService userService; - @MockBean - private SmsCodeApi smsCodeApi; - @MockBean - private LoginLogApi loginLogApi; - @MockBean - private OAuth2TokenCommonApi oauth2TokenApi; - @MockBean - private SocialUserApi socialUserApi; - @MockBean - private PasswordEncoder passwordEncoder; - - @Resource - private MemberUserMapper memberUserMapper; - - // TODO 芋艿:åŽç»­é‡æž„è¿™ä¸ªå•æµ‹ -// @Test -// public void testUpdatePassword_success(){ -// // 准备傿•° -// MemberUserDO userDO = randomUserDO(); -// memberUserMapper.insert(userDO); -// -// // æ–°å¯†ç  -// String newPassword = randomString(); -// -// // 请求实体 -// AppMemberUserUpdatePasswordReqVO reqVO = AppMemberUserUpdatePasswordReqVO.builder() -// .oldPassword(userDO.getPassword()) -// .password(newPassword) -// .build(); -// -// // 测试桩 -// // 这两个相等是为了返回ture这个结果 -// when(passwordEncoder.matches(reqVO.getOldPassword(),reqVO.getOldPassword())).thenReturn(true); -// when(passwordEncoder.encode(newPassword)).thenReturn(newPassword); -// -// // æ›´æ–°ç”¨æˆ·å¯†ç  -// authService.updatePassword(userDO.getId(), reqVO); -// assertEquals(memberUserMapper.selectById(userDO.getId()).getPassword(),newPassword); -// } - - // TODO 芋艿:åŽç»­é‡æž„è¿™ä¸ªå•æµ‹ -// @Test -// public void testResetPassword_success(){ -// // 准备傿•° -// MemberUserDO userDO = randomUserDO(); -// memberUserMapper.insert(userDO); -// -// // éšæœºå¯†ç  -// String password = randomNumbers(11); -// // éšæœºéªŒè¯ç  -// String code = randomNumbers(4); -// -// // mock -// when(passwordEncoder.encode(password)).thenReturn(password); -// -// // æ›´æ–°ç”¨æˆ·å¯†ç  -// AppMemberUserResetPasswordReqVO reqVO = new AppMemberUserResetPasswordReqVO(); -// reqVO.setMobile(userDO.getMobile()); -// reqVO.setPassword(password); -// reqVO.setCode(code); -// -// authService.resetPassword(reqVO); -// assertEquals(memberUserMapper.selectById(userDO.getId()).getPassword(),password); -// } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static MemberUserDO randomUserDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setPassword(randomString()); - }; - return randomPojo(MemberUserDO.class, ArrayUtils.append(consumer, consumers)); - } - - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImplTest.java deleted file mode 100644 index 3762b0f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImplTest.java +++ /dev/null @@ -1,160 +0,0 @@ -package cn.iocoder.yudao.module.member.service.group; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; -import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_HAS_USER; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -// TODO 芋艿:完全 review 完,在去 review 啿µ‹ -/** - * {@link MemberGroupServiceImpl} çš„å•元测试类 - * - * @author owen - */ -@Import(MemberGroupServiceImpl.class) -public class MemberGroupServiceImplTest extends BaseDbUnitTest { - - @Resource - private MemberGroupServiceImpl groupService; - - @Resource - private MemberGroupMapper groupMapper; - - @MockBean - private MemberUserService memberUserService; - - @Test - public void testCreateGroup_success() { - // 准备傿•° - MemberGroupCreateReqVO reqVO = randomPojo(MemberGroupCreateReqVO.class, - o -> o.setStatus(randomCommonStatus())); - - // 调用 - Long groupId = groupService.createGroup(reqVO); - // 断言 - assertNotNull(groupId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - MemberGroupDO group = groupMapper.selectById(groupId); - assertPojoEquals(reqVO, group); - } - - @Test - public void testUpdateGroup_success() { - // mock æ•°æ® - MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class); - groupMapper.insert(dbGroup);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - MemberGroupUpdateReqVO reqVO = randomPojo(MemberGroupUpdateReqVO.class, o -> { - o.setId(dbGroup.getId()); // 设置更新的 ID - o.setStatus(randomCommonStatus()); - }); - - // 调用 - groupService.updateGroup(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - MemberGroupDO group = groupMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, group); - } - - @Test - public void testUpdateGroup_notExists() { - // 准备傿•° - MemberGroupUpdateReqVO reqVO = randomPojo(MemberGroupUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> groupService.updateGroup(reqVO), GROUP_NOT_EXISTS); - } - - @Test - public void testDeleteGroup_success() { - // mock æ•°æ® - MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class); - groupMapper.insert(dbGroup);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbGroup.getId(); - - // 调用 - groupService.deleteGroup(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(groupMapper.selectById(id)); - } - - @Test - public void testDeleteGroup_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> groupService.deleteGroup(id), GROUP_NOT_EXISTS); - } - - @Test - public void testDeleteGroup_hasUser() { - // mock æ•°æ® - MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class); - groupMapper.insert(dbGroup);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbGroup.getId(); - - // mock ä¼šå‘˜æ•°æ® - when(memberUserService.getUserCountByGroupId(eq(id))).thenReturn(1L); - - // 调用, 并断言异常 - assertServiceException(() -> groupService.deleteGroup(id), GROUP_HAS_USER); - } - - @Test - public void testGetGroupPage() { - String name = randomString(); - int status = CommonStatusEnum.ENABLE.getStatus(); - - // mock æ•°æ® - MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class, o -> { // 等会查询到 - o.setName(name); - o.setStatus(status); - o.setCreateTime(buildTime(2023, 2, 18)); - }); - groupMapper.insert(dbGroup); - // 测试 name ä¸åŒ¹é… - groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setName(""))); - // 测试 status ä¸åŒ¹é… - groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 createTime ä¸åŒ¹é… - groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setCreateTime(null))); - // 准备傿•° - MemberGroupPageReqVO reqVO = new MemberGroupPageReqVO(); - reqVO.setName(name); - reqVO.setStatus(status); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = groupService.getGroupPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbGroup, pageResult.getList().get(0)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImplTest.java deleted file mode 100644 index 9986b4a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImplTest.java +++ /dev/null @@ -1,268 +0,0 @@ -package cn.iocoder.yudao.module.member.service.level; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelListReqVO; -import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; -import cn.iocoder.yudao.module.member.dal.mysql.level.MemberLevelMapper; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.List; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomInt; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.*; - -// TODO 芋艿:完全 review 完,在去 review 啿µ‹ -/** - * {@link MemberLevelServiceImpl} çš„å•元测试类 - * - * @author owen - */ -@Import(MemberLevelServiceImpl.class) -public class MemberLevelServiceImplTest extends BaseDbUnitTest { - - @Resource - private MemberLevelServiceImpl levelService; - - @Resource - private MemberLevelMapper memberlevelMapper; - - @MockBean - private MemberLevelRecordService memberLevelRecordService; - @MockBean - private MemberExperienceRecordService memberExperienceRecordService; - @MockBean - private MemberUserService memberUserService; - - @Test - public void testCreateLevel_success() { - // 准备傿•° - MemberLevelCreateReqVO reqVO = randomPojo(MemberLevelCreateReqVO.class, o -> { - o.setDiscountPercent(randomInt()); - o.setIcon(randomURL()); - o.setBackgroundUrl(randomURL()); - o.setStatus(randomCommonStatus()); - }); - - // 调用 - Long levelId = levelService.createLevel(reqVO); - // 断言 - assertNotNull(levelId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - MemberLevelDO level = memberlevelMapper.selectById(levelId); - assertPojoEquals(reqVO, level); - } - - @Test - public void testUpdateLevel_success() { - // mock æ•°æ® - MemberLevelDO dbLevel = randomPojo(MemberLevelDO.class); - memberlevelMapper.insert(dbLevel);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - MemberLevelUpdateReqVO reqVO = randomPojo(MemberLevelUpdateReqVO.class, o -> { - o.setId(dbLevel.getId()); // 设置更新的 ID - //以下è¦ä¿æŒä¸€è‡´ - o.setName(dbLevel.getName()); - o.setLevel(dbLevel.getLevel()); - o.setExperience(dbLevel.getExperience()); - //以下是è¦ä¿®æ”¹çš„字段 - o.setDiscountPercent(randomInt()); - o.setIcon(randomURL()); - o.setBackgroundUrl(randomURL()); - o.setStatus(randomCommonStatus()); - }); - - // 调用 - levelService.updateLevel(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - MemberLevelDO level = memberlevelMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, level); - } - - @Test - public void testUpdateLevel_notExists() { - // 准备傿•° - MemberLevelUpdateReqVO reqVO = randomPojo(MemberLevelUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> levelService.updateLevel(reqVO), LEVEL_NOT_EXISTS); - } - - @Test - public void testDeleteLevel_success() { - // mock æ•°æ® - MemberLevelDO dbLevel = randomPojo(MemberLevelDO.class); - memberlevelMapper.insert(dbLevel);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbLevel.getId(); - - // 调用 - levelService.deleteLevel(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(memberlevelMapper.selectById(id)); - } - - @Test - public void testDeleteLevel_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> levelService.deleteLevel(id), LEVEL_NOT_EXISTS); - } - - @Test - public void testGetLevelList() { - // mock æ•°æ® - MemberLevelDO dbLevel = randomPojo(MemberLevelDO.class, o -> { // 等会查询到 - o.setName("黄金会员"); - o.setStatus(1); - }); - memberlevelMapper.insert(dbLevel); - // 测试 name ä¸åŒ¹é… - memberlevelMapper.insert(cloneIgnoreId(dbLevel, o -> o.setName(""))); - // 测试 status ä¸åŒ¹é… - memberlevelMapper.insert(cloneIgnoreId(dbLevel, o -> o.setStatus(0))); - // 准备傿•° - MemberLevelListReqVO reqVO = new MemberLevelListReqVO(); - reqVO.setName("黄金会员"); - reqVO.setStatus(1); - - // 调用 - List list = levelService.getLevelList(reqVO); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(dbLevel, list.get(0)); - } - - @Test - public void testCreateLevel_nameUnique() { - // 准备傿•° - String name = randomString(); - - // mock æ•°æ® - memberlevelMapper.insert(randomLevelDO(o -> o.setName(name))); - - // 调用,校验异常 - List list = memberlevelMapper.selectList(); - assertServiceException(() -> levelService.validateNameUnique(list, null, name), LEVEL_NAME_EXISTS, name); - } - - @Test - public void testUpdateLevel_nameUnique() { - // 准备傿•° - Long id = randomLongId(); - String name = randomString(); - - // mock æ•°æ® - memberlevelMapper.insert(randomLevelDO(o -> o.setName(name))); - - // 调用,校验异常 - List list = memberlevelMapper.selectList(); - assertServiceException(() -> levelService.validateNameUnique(list, id, name), LEVEL_NAME_EXISTS, name); - } - - @Test - public void testCreateLevel_levelUnique() { - // 准备傿•° - Integer level = randomInteger(); - String name = randomString(); - - // mock æ•°æ® - memberlevelMapper.insert(randomLevelDO(o -> { - o.setLevel(level); - o.setName(name); - })); - - // 调用,校验异常 - List list = memberlevelMapper.selectList(); - assertServiceException(() -> levelService.validateLevelUnique(list, null, level), LEVEL_VALUE_EXISTS, level, name); - } - - @Test - public void testUpdateLevel_levelUnique() { - // 准备傿•° - Long id = randomLongId(); - Integer level = randomInteger(); - String name = randomString(); - - // mock æ•°æ® - memberlevelMapper.insert(randomLevelDO(o -> { - o.setLevel(level); - o.setName(name); - })); - - // 调用,校验异常 - List list = memberlevelMapper.selectList(); - assertServiceException(() -> levelService.validateLevelUnique(list, id, level), LEVEL_VALUE_EXISTS, level, name); - } - - @Test - public void testCreateLevel_experienceOutRange() { - // 准备傿•° - int level = 10; - int experience = 10; - String name = randomString(); - - // mock æ•°æ® - memberlevelMapper.insert(randomLevelDO(o -> { - o.setLevel(level); - o.setExperience(experience); - o.setName(name); - })); - List list = memberlevelMapper.selectList(); - - // 调用,校验异常 - assertServiceException(() -> levelService.validateExperienceOutRange(list, null, level + 1, experience - 1), LEVEL_EXPERIENCE_MIN, name, level); - // 调用,校验异常 - assertServiceException(() -> levelService.validateExperienceOutRange(list, null, level - 1, experience + 1), LEVEL_EXPERIENCE_MAX, name, level); - } - - @Test - public void testUpdateLevel_experienceOutRange() { - // 准备傿•° - int level = 10; - int experience = 10; - Long id = randomLongId(); - String name = randomString(); - - // mock æ•°æ® - memberlevelMapper.insert(randomLevelDO(o -> { - o.setLevel(level); - o.setExperience(experience); - o.setName(name); - })); - List list = memberlevelMapper.selectList(); - - // 调用,校验异常 - assertServiceException(() -> levelService.validateExperienceOutRange(list, id, level + 1, experience - 1), LEVEL_EXPERIENCE_MIN, name, level); - // 调用,校验异常 - assertServiceException(() -> levelService.validateExperienceOutRange(list, id, level - 1, experience + 1), LEVEL_EXPERIENCE_MAX, name, level); - } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static MemberLevelDO randomLevelDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setDiscountPercent(randomInt(0, 100)); - o.setIcon(randomURL()); - o.setBackgroundUrl(randomURL()); - }; - return randomPojo(MemberLevelDO.class, ArrayUtils.append(consumer, consumers)); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImplTest.java deleted file mode 100644 index 1bc361c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImplTest.java +++ /dev/null @@ -1,133 +0,0 @@ -package cn.iocoder.yudao.module.member.service.tag; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagCreateReqVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagUpdateReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; -import cn.iocoder.yudao.module.member.dal.mysql.tag.MemberTagMapper; -import cn.iocoder.yudao.module.member.service.user.MemberUserService; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.TAG_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -// TODO 芋艿:完全 review 完,在去 review 啿µ‹ -/** - * {@link MemberTagServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(MemberTagServiceImpl.class) -public class MemberTagServiceImplTest extends BaseDbUnitTest { - - @Resource - private MemberTagServiceImpl tagService; - - @Resource - private MemberTagMapper tagMapper; - - @MockBean - private MemberUserService memberUserService; - - @Test - public void testCreateTag_success() { - // 准备傿•° - MemberTagCreateReqVO reqVO = randomPojo(MemberTagCreateReqVO.class); - - // 调用 - Long tagId = tagService.createTag(reqVO); - // 断言 - assertNotNull(tagId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - MemberTagDO tag = tagMapper.selectById(tagId); - assertPojoEquals(reqVO, tag); - } - - @Test - public void testUpdateTag_success() { - // mock æ•°æ® - MemberTagDO dbTag = randomPojo(MemberTagDO.class); - tagMapper.insert(dbTag);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - MemberTagUpdateReqVO reqVO = randomPojo(MemberTagUpdateReqVO.class, o -> { - o.setId(dbTag.getId()); // 设置更新的 ID - }); - - // 调用 - tagService.updateTag(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - MemberTagDO tag = tagMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, tag); - } - - @Test - public void testUpdateTag_notExists() { - // 准备傿•° - MemberTagUpdateReqVO reqVO = randomPojo(MemberTagUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> tagService.updateTag(reqVO), TAG_NOT_EXISTS); - } - - @Test - public void testDeleteTag_success() { - // mock æ•°æ® - MemberTagDO dbTag = randomPojo(MemberTagDO.class); - tagMapper.insert(dbTag);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbTag.getId(); - - // 调用 - tagService.deleteTag(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(tagMapper.selectById(id)); - } - - @Test - public void testDeleteTag_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> tagService.deleteTag(id), TAG_NOT_EXISTS); - } - - @Test - public void testGetTagPage() { - // mock æ•°æ® - MemberTagDO dbTag = randomPojo(MemberTagDO.class, o -> { // 等会查询到 - o.setName("test"); - o.setCreateTime(buildTime(2023, 2, 18)); - }); - tagMapper.insert(dbTag); - // 测试 name ä¸åŒ¹é… - tagMapper.insert(cloneIgnoreId(dbTag, o -> o.setName("ne"))); - // 测试 createTime ä¸åŒ¹é… - tagMapper.insert(cloneIgnoreId(dbTag, o -> o.setCreateTime(null))); - // 准备傿•° - MemberTagPageReqVO reqVO = new MemberTagPageReqVO(); - reqVO.setName("test"); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - - // 调用 - PageResult pageResult = tagService.getTagPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbTag, pageResult.getList().get(0)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java deleted file mode 100644 index f0e4693..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package cn.iocoder.yudao.module.member.service.user; - -import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbAndRedisUnitTest; -import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; -import cn.iocoder.yudao.module.member.service.auth.MemberAuthServiceImpl; -import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; -import jakarta.annotation.Resource; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.security.crypto.password.PasswordEncoder; - -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.hutool.core.util.RandomUtil.randomNumbers; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static org.junit.jupiter.api.Assertions.assertEquals; - -// TODO @èŠ‹è‰¿ï¼šå•æµ‹çš„ review,等逻辑都达æˆä¸€è‡´åŽ -/** - * {@link MemberUserServiceImpl} çš„å•元测试类 - * - * @author 宋天 - */ -@Disabled -@Import({MemberUserServiceImpl.class, YudaoRedisAutoConfiguration.class}) -public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest { - - @Resource - private MemberUserServiceImpl memberUserService; - - @Resource - private StringRedisTemplate stringRedisTemplate; - - @Resource - private MemberUserMapper userMapper; - - @MockBean - private MemberAuthServiceImpl authService; - - @MockBean - private PasswordEncoder passwordEncoder; - - @MockBean - private SmsCodeApi smsCodeApi; - - // TODO 芋艿:åŽç»­é‡æž„è¿™ä¸ªå•æµ‹ -// @Test -// public void testUpdateNickName_success(){ -// // mock æ•°æ® -// MemberUserDO userDO = randomUserDO(); -// userMapper.insert(userDO); -// -// // éšæœºæ˜µç§° -// String newNickName = randomString(); -// -// // 调用接å£ä¿®æ”¹æ˜µç§° -// memberUserService.updateUser(userDO.getId(),newNickName); -// // 查询新修改åŽçš„æ˜µç§° -// String nickname = memberUserService.getUser(userDO.getId()).getNickname(); -// // 断言 -// assertEquals(newNickName,nickname); -// } - - @Test - @Disabled // TODO 芋艿:åŽç»­å†ä¿®å¤ - public void updateMobile_success(){ - // mockæ•°æ® - String oldMobile = randomNumbers(11); - MemberUserDO userDO = randomUserDO(); - userDO.setMobile(oldMobile); - userMapper.insert(userDO); - - // TODO 芋艿:需è¦ä¿®å¤è¯¥å•å…ƒæµ‹è¯•ï¼Œé‡æž„多模å—带æ¥çš„ - // 旧手机和旧验è¯ç  -// SmsCodeDO codeDO = new SmsCodeDO(); - String oldCode = RandomUtil.randomString(4); -// codeDO.setMobile(userDO.getMobile()); -// codeDO.setCode(oldCode); -// codeDO.setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()); -// codeDO.setUsed(Boolean.FALSE); -// when(smsCodeService.checkCodeIsExpired(codeDO.getMobile(),codeDO.getCode(),codeDO.getScene())).thenReturn(codeDO); - - // æ›´æ–°æ‰‹æœºå· - String newMobile = randomNumbers(11); - String newCode = randomNumbers(4); - AppMemberUserUpdateMobileReqVO reqVO = new AppMemberUserUpdateMobileReqVO(); - reqVO.setMobile(newMobile); - reqVO.setCode(newCode); - reqVO.setOldCode(oldCode); - memberUserService.updateUserMobile(userDO.getId(),reqVO); - - assertEquals(memberUserService.getUser(userDO.getId()).getMobile(),newMobile); - } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static MemberUserDO randomUserDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - }; - return randomPojo(MemberUserDO.class, ArrayUtils.append(consumer, consumers)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/application-unit-test.yaml b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/application-unit-test.yaml deleted file mode 100644 index f05f050..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/application-unit-test.yaml +++ /dev/null @@ -1,48 +0,0 @@ -spring: - main: - lazy-initialization: true # 开坿‡’加载,加快速度 - banner-mode: off # å•元测试,ç¦ç”¨ Banner - ---- #################### æ•°æ®åº“相关é…ç½® #################### - -spring: - # æ•°æ®æºé…置项 - datasource: - name: ruoyi-vue-pro - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模å¼ï¼›DATABASE_TO_UPPER é…置表和字段使用å°å†™ - driver-class-name: org.h2.Driver - username: sa - password: - druid: - async-init: true # å•元测试,异步åˆå§‹åŒ– Druid 连接池,æå‡å¯åŠ¨é€Ÿåº¦ - initial-size: 1 # å•元测试,é…置为 1,æå‡å¯åŠ¨é€Ÿåº¦ - sql: - init: - schema-locations: classpath:/sql/create_tables.sql - - # Redis é…置。Redisson 默认的é…置足够使用,一般ä¸éœ€è¦è¿›è¡Œè°ƒä¼˜ - data: - redis: - host: 127.0.0.1 # åœ°å€ - port: 16379 # 端å£ï¼ˆå•元测试,使用 16379 端å£ï¼‰ - database: 0 # æ•°æ®åº“索引 - -mybatis: - lazy-initialization: true # å•元测试,设置 MyBatis Mapper 延迟加载,加速æ¯ä¸ªå•元测试 - ---- #################### 定时任务相关é…ç½® #################### - ---- #################### é…置中心相关é…ç½® #################### - ---- #################### æœåŠ¡ä¿éšœç›¸å…³é…ç½® #################### - -# Lock4j é…置项(å•元测试,ç¦ç”¨ Lock4j) - ---- #################### 监控相关é…ç½® #################### - ---- #################### 芋é“相关é…ç½® #################### - -# 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® -yudao: - info: - base-package: cn.iocoder.yudao.module diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/logback.xml b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/logback.xml deleted file mode 100644 index daf756b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/logback.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/sql/clean.sql b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/sql/clean.sql deleted file mode 100644 index f972e04..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/sql/clean.sql +++ /dev/null @@ -1,5 +0,0 @@ -DELETE FROM "member_user"; -DELETE FROM "member_address"; -DELETE FROM "member_tag"; -DELETE FROM "member_level"; -DELETE FROM "member_group"; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/sql/create_tables.sql b/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/sql/create_tables.sql deleted file mode 100644 index 782a818..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-member/src/test/resources/sql/create_tables.sql +++ /dev/null @@ -1,113 +0,0 @@ -CREATE TABLE IF NOT EXISTS "member_user" -( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT 'ç¼–å·', - "nickname" varchar(30) NOT NULL DEFAULT '' COMMENT '用户昵称', - "name" varchar(30) NULL COMMENT '真实åå­—', - sex tinyint null comment '性别', - birthday datetime null comment '出生日期', - area_id int null comment '所在地', - mark varchar(255) null comment '用户备注', - point int default 0 null comment '积分', - "avatar" varchar(255) NOT NULL DEFAULT '' COMMENT '头åƒ', - "status" tinyint NOT NULL COMMENT '状æ€', - "mobile" varchar(11) NOT NULL COMMENT '手机å·', - "password" varchar(100) NOT NULL DEFAULT '' COMMENT '密ç ', - "register_ip" varchar(32) NOT NULL COMMENT '注册 IP', - "login_ip" varchar(50) NULL DEFAULT '' COMMENT '最åŽç™»å½•IP', - "login_date" datetime NULL DEFAULT NULL COMMENT '最åŽç™»å½•æ—¶é—´', - "tag_ids" varchar(255) NULL DEFAULT NULL COMMENT '用户标签编å·åˆ—表,以逗å·åˆ†éš”', - "level_id" bigint NULL DEFAULT NULL COMMENT '等级编å·', - "experience" bigint NULL DEFAULT NULL COMMENT 'ç»éªŒ', - "group_id" bigint NULL DEFAULT NULL COMMENT '用户分组编å·', - "creator" varchar(64) NULL DEFAULT '' COMMENT '创建者', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - "updater" varchar(64) NULL DEFAULT '' COMMENT '更新者', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', - "deleted" bit(1) NOT NULL DEFAULT '0' COMMENT '是å¦åˆ é™¤', - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '会员表'; - -CREATE TABLE IF NOT EXISTS "member_address" ( - "id" bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint(20) NOT NULL, - "name" varchar(10) NOT NULL, - "mobile" varchar(20) NOT NULL, - "area_id" bigint(20) NOT NULL, - "detail_address" varchar(250) NOT NULL, - "default_status" bit NOT NULL, - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "creator" varchar(64) DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "updater" varchar(64) DEFAULT '', - PRIMARY KEY ("id") -) COMMENT '用户收件地å€'; - -CREATE TABLE IF NOT EXISTS "member_tag" -( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint NOT NULL default '0', - PRIMARY KEY ("id") -) COMMENT '会员标签'; - -CREATE TABLE IF NOT EXISTS "member_level" -( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "experience" int NOT NULL, - "level" int NOT NULL, - "discount_percent" int NOT NULL, - "icon" varchar NOT NULL, - "background_url" varchar NOT NULL, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - "status" tinyint NOT NULL DEFAULT '0', - PRIMARY KEY ("id") -) COMMENT '会员等级'; - -CREATE TABLE IF NOT EXISTS "member_group" -( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "remark" varchar NOT NULL, - "status" tinyint NOT NULL DEFAULT '0', - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '用户分组'; -CREATE TABLE IF NOT EXISTS "member_brokerage_record" -( - "id" int NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "biz_id" varchar NOT NULL, - "biz_type" varchar NOT NULL, - "title" varchar NOT NULL, - "price" int NOT NULL, - "total_price" int NOT NULL, - "description" varchar NOT NULL, - "status" varchar NOT NULL, - "frozen_days" int NOT NULL, - "unfreeze_time" varchar, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '佣金记录'; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/pom.xml b/ruoyi-vue-pro-master-jdk17/yudao-module-system/pom.xml index 348133d..ecb589e 100644 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/pom.xml +++ b/ruoyi-vue-pro-master-jdk17/yudao-module-system/pom.xml @@ -91,23 +91,23 @@ - + - - + JustAuth <!– 社交登陆(例如说,个人微信ã€ä¼ä¸šå¾®ä¿¡ç­‰ç­‰ï¼‰ –> + --> + - + + wx-java-mp-spring-boot-starter <!– 微信登录(公众å·ï¼‰ –> com.github.binarywang - wx-java-miniapp-spring-boot-starter - + wx-java-miniapp-spring-boot-starter <!– 微信登录(å°ç¨‹åºï¼‰ –> + --> com.anji-plus diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApi.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApi.java deleted file mode 100644 index 7306310..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApi.java +++ /dev/null @@ -1,84 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social; - -import cn.iocoder.yudao.module.system.api.social.dto.*; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import jakarta.validation.Valid; - -import java.util.List; - -/** - * 社交应用的 API æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface SocialClientApi { - - /** - * 获得社交平å°çš„æŽˆæƒ URL - * - * @param socialType 社交平å°çš„类型 {@link SocialTypeEnum} - * @param userType 用户类型 - * @param redirectUri é‡å®šå‘ URL - * @return 社交平å°çš„æŽˆæƒ URL - */ - String getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri); - - /** - * åˆ›å»ºå¾®ä¿¡å…¬ä¼—å· JS SDK åˆå§‹åŒ–所需的签å - * - * @param userType 用户类型 - * @param url 访问的 URL åœ°å€ - * @return ç­¾å - */ - SocialWxJsapiSignatureRespDTO createWxMpJsapiSignature(Integer userType, String url); - - //======================= 微信å°ç¨‹åºç‹¬æœ‰ ======================= - - /** - * 获得微信å°ç¨‹åºçš„æ‰‹æœºä¿¡æ¯ - * - * @param userType 用户类型 - * @param phoneCode 手机授æƒç  - * @return æ‰‹æœºä¿¡æ¯ - */ - SocialWxPhoneNumberInfoRespDTO getWxMaPhoneNumberInfo(Integer userType, String phoneCode); - - /** - * 获得å°ç¨‹åºäºŒç»´ç  - * - * @param reqVO è¯·æ±‚ä¿¡æ¯ - * @return å°ç¨‹åºäºŒç»´ç  - */ - byte[] getWxaQrcode(@Valid SocialWxQrcodeReqDTO reqVO); - - /** - * 获得微信å°ç¨‹è®¢é˜…æ¨¡æ¿ - * - * @return å°ç¨‹åºè®¢é˜…æ¶ˆæ¯æ¨¡ç‰ˆ - */ - List getWxaSubscribeTemplateList(Integer userType); - - /** - * å‘é€å¾®ä¿¡å°ç¨‹åºè®¢é˜…æ¶ˆæ¯ - * - * @param reqDTO 请求 - */ - void sendWxaSubscribeMessage(SocialWxaSubscribeMessageSendReqDTO reqDTO); - - /** - * 上传订å•å‘货到微信å°ç¨‹åº - * - * @param userType 用户类型 - * @param reqDTO 请求 - */ - void uploadWxaOrderShippingInfo(Integer userType, SocialWxaOrderUploadShippingInfoReqDTO reqDTO); - - /** - * é€šçŸ¥è®¢å•æ”¶è´§åˆ°å¾®ä¿¡å°ç¨‹åº - * - * @param userType 用户类型 - * @param reqDTO 请求 - */ - void notifyWxaOrderConfirmReceive(Integer userType, SocialWxaOrderNotifyConfirmReceiveReqDTO reqDTO); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApiImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApiImpl.java deleted file mode 100644 index d2eb00d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApiImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social; - -import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjUtil; -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.system.api.social.dto.*; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import cn.iocoder.yudao.module.system.service.social.SocialClientService; -import cn.iocoder.yudao.module.system.service.social.SocialUserService; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.bean.WxJsapiSignature; -import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import java.util.List; - -import static cn.hutool.core.collection.CollUtil.findOne; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; - -/** - * 社交应用的 API 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -@Slf4j -public class SocialClientApiImpl implements SocialClientApi { - - @Resource - private SocialClientService socialClientService; - @Resource - private SocialUserService socialUserService; - - @Override - public String getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri) { - return socialClientService.getAuthorizeUrl(socialType, userType, redirectUri); - } - - @Override - public SocialWxJsapiSignatureRespDTO createWxMpJsapiSignature(Integer userType, String url) { - WxJsapiSignature signature = socialClientService.createWxMpJsapiSignature(userType, url); - return BeanUtils.toBean(signature, SocialWxJsapiSignatureRespDTO.class); - } - - //======================= 微信å°ç¨‹åºç‹¬æœ‰ ======================= - - @Override - public SocialWxPhoneNumberInfoRespDTO getWxMaPhoneNumberInfo(Integer userType, String phoneCode) { - WxMaPhoneNumberInfo info = socialClientService.getWxMaPhoneNumberInfo(userType, phoneCode); - return BeanUtils.toBean(info, SocialWxPhoneNumberInfoRespDTO.class); - } - - @Override - public byte[] getWxaQrcode(SocialWxQrcodeReqDTO reqVO) { - return socialClientService.getWxaQrcode(reqVO); - } - - @Override - public List getWxaSubscribeTemplateList(Integer userType) { - List list = socialClientService.getSubscribeTemplateList(userType); - return convertList(list, item -> BeanUtils.toBean(item, SocialWxaSubscribeTemplateRespDTO.class).setId(item.getPriTmplId())); - } - - @Override - public void sendWxaSubscribeMessage(SocialWxaSubscribeMessageSendReqDTO reqDTO) { - // 1.1 获得订阅模版列表 - List templateList = socialClientService.getSubscribeTemplateList(reqDTO.getUserType()); - if (CollUtil.isEmpty(templateList)) { - log.warn("[sendSubscribeMessage][reqDTO({}) å‘é€è®¢é˜…消æ¯å¤±è´¥ï¼ŒåŽŸå› ï¼šæ²¡æœ‰æ‰¾åˆ°è®¢é˜…æ¨¡æ¿]", reqDTO); - return; - } - // 1.2 获得需è¦ä½¿ç”¨çš„æ¨¡ç‰ˆ - TemplateInfo template = findOne(templateList, item -> - ObjUtil.equal(item.getTitle(), reqDTO.getTemplateTitle())); - if (template == null) { - log.warn("[sendWxaSubscribeMessage][reqDTO({}) å‘é€è®¢é˜…消æ¯å¤±è´¥ï¼ŒåŽŸå› ï¼šæ²¡æœ‰æ‰¾åˆ°è®¢é˜…æ¨¡æ¿]", reqDTO); - return; - } - - // 2. 获得社交用户 - SocialUserRespDTO socialUser = socialUserService.getSocialUserByUserId(reqDTO.getUserType(), reqDTO.getUserId(), - SocialTypeEnum.WECHAT_MINI_PROGRAM.getType()); - if (StrUtil.isBlankIfStr(socialUser.getOpenid())) { - log.warn("[sendWxaSubscribeMessage][reqDTO({}) å‘é€è®¢é˜…消æ¯å¤±è´¥ï¼ŒåŽŸå› ï¼šä¼šå‘˜ openid 缺失]", reqDTO); - return; - } - - // 3. å‘é€è®¢é˜…æ¶ˆæ¯ - socialClientService.sendSubscribeMessage(reqDTO, template.getPriTmplId(), socialUser.getOpenid()); - } - - @Override - public void uploadWxaOrderShippingInfo(Integer userType, SocialWxaOrderUploadShippingInfoReqDTO reqDTO) { - socialClientService.uploadWxaOrderShippingInfo(userType, reqDTO); - } - - @Override - public void notifyWxaOrderConfirmReceive(Integer userType, SocialWxaOrderNotifyConfirmReceiveReqDTO reqDTO) { - socialClientService.notifyWxaOrderConfirmReceive(userType, reqDTO); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java deleted file mode 100644 index 3ddeb05..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social; - -import cn.iocoder.yudao.framework.common.exception.ServiceException; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; -import jakarta.validation.Valid; - -/** - * 社交用户的 API æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface SocialUserApi { - - /** - * 绑定社交用户 - * - * @param reqDTO ç»‘å®šä¿¡æ¯ - * @return 社交用户 openid - */ - String bindSocialUser(@Valid SocialUserBindReqDTO reqDTO); - - /** - * å–æ¶ˆç»‘定社交用户 - * - * @param reqDTO 解绑 - */ - void unbindSocialUser(@Valid SocialUserUnbindReqDTO reqDTO); - - /** - * 获得社交用户,基于 userId - * - * @param userType 用户类型 - * @param userId ç”¨æˆ·ç¼–å· - * @param socialType 社交平å°çš„类型 - * @return 社交用户 - */ - SocialUserRespDTO getSocialUserByUserId(Integer userType, Long userId, Integer socialType); - - /** - * 获得社交用户 - * - * 在认è¯ä¿¡æ¯ä¸æ­£ç¡®çš„æƒ…况下,也会抛出 {@link ServiceException} 业务异常 - * - * @param userType 用户类型 - * @param socialType 社交平å°çš„类型 - * @param code 授æƒç  - * @param state state - * @return 社交用户 - */ - SocialUserRespDTO getSocialUserByCode(Integer userType, Integer socialType, String code, String state); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java deleted file mode 100644 index eb83316..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social; - -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; -import cn.iocoder.yudao.module.system.service.social.SocialUserService; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import jakarta.annotation.Resource; - -/** - * 社交用户的 API 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -public class SocialUserApiImpl implements SocialUserApi { - - @Resource - private SocialUserService socialUserService; - - @Override - public String bindSocialUser(SocialUserBindReqDTO reqDTO) { - return socialUserService.bindSocialUser(reqDTO); - } - - @Override - public void unbindSocialUser(SocialUserUnbindReqDTO reqDTO) { - socialUserService.unbindSocialUser(reqDTO.getUserId(), reqDTO.getUserType(), - reqDTO.getSocialType(), reqDTO.getOpenid()); - } - - @Override - public SocialUserRespDTO getSocialUserByUserId(Integer userType, Long userId, Integer socialType) { - return socialUserService.getSocialUserByUserId(userType, userId, socialType); - } - - @Override - public SocialUserRespDTO getSocialUserByCode(Integer userType, Integer socialType, String code, String state) { - return socialUserService.getSocialUserByCode(userType, socialType, code, state); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java deleted file mode 100644 index 0ad3952..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social.dto; - -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; - -/** - * å–æ¶ˆç»‘定社交用户 Request DTO - * - * @author èŠ‹é“æºç  - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class SocialUserBindReqDTO { - - /** - * ç”¨æˆ·ç¼–å· - */ - @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") - private Long userId; - /** - * 用户类型 - */ - @InEnum(UserTypeEnum.class) - @NotNull(message = "用户类型ä¸èƒ½ä¸ºç©º") - private Integer userType; - - /** - * 社交平å°çš„类型 - */ - @InEnum(SocialTypeEnum.class) - @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") - private Integer socialType; - /** - * 授æƒç  - */ - @NotEmpty(message = "授æƒç ä¸èƒ½ä¸ºç©º") - private String code; - /** - * state - */ - @NotNull(message = "state ä¸èƒ½ä¸ºç©º") - private String state; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserRespDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserRespDTO.java deleted file mode 100644 index 29fef01..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserRespDTO.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social.dto; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * 社交用户 Response DTO - * - * @author èŠ‹é“æºç  - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class SocialUserRespDTO { - - /** - * 社交用户的 openid - */ - private String openid; - /** - * 社交用户的昵称 - */ - private String nickname; - /** - * ç¤¾äº¤ç”¨æˆ·çš„å¤´åƒ - */ - private String avatar; - - /** - * å…³è”çš„ç”¨æˆ·ç¼–å· - */ - private Long userId; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java deleted file mode 100644 index 7e559d8..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social.dto; - -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import lombok.AllArgsConstructor; -import lombok.Data; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.NoArgsConstructor; - -/** - * 社交绑定 Request DTO,使用 code 授æƒç  - * - * @author èŠ‹é“æºç  - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public class SocialUserUnbindReqDTO { - - /** - * ç”¨æˆ·ç¼–å· - */ - @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") - private Long userId; - /** - * 用户类型 - */ - @InEnum(UserTypeEnum.class) - @NotNull(message = "用户类型ä¸èƒ½ä¸ºç©º") - private Integer userType; - - /** - * 社交平å°çš„类型 - */ - @InEnum(SocialTypeEnum.class) - @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") - private Integer socialType; - - /** - * 社交平å°çš„ openid - */ - @NotEmpty(message = "社交平å°çš„ openid ä¸èƒ½ä¸ºç©º") - private String openid; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxJsapiSignatureRespDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxJsapiSignatureRespDTO.java deleted file mode 100644 index 7d332e9..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxJsapiSignatureRespDTO.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social.dto; - -import lombok.Data; - -/** - * å¾®ä¿¡å…¬ä¼—å· JSAPI ç­¾å Response DTO - * - * @author èŠ‹é“æºç  - */ -@Data -public class SocialWxJsapiSignatureRespDTO { - - /** - * 微信公众å·çš„ appId - */ - private String appId; - /** - * 匿å串 - */ - private String nonceStr; - /** - * 时间戳 - */ - private Long timestamp; - /** - * URL - */ - private String url; - /** - * ç­¾å - */ - private String signature; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java deleted file mode 100644 index 9d404b3..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social.dto; - -import lombok.Data; - -/** - * 微信å°ç¨‹åºçš„æ‰‹æœºä¿¡æ¯ Response DTO - * - * @author èŠ‹é“æºç  - */ -@Data -public class SocialWxPhoneNumberInfoRespDTO { - - /** - * 用户绑定的手机å·ï¼ˆå›½å¤–手机å·ä¼šæœ‰åŒºå·ï¼‰ - */ - private String phoneNumber; - - /** - * 没有区å·çš„æ‰‹æœºå· - */ - private String purePhoneNumber; - /** - * åŒºå· - */ - private String countryCode; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxQrcodeReqDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxQrcodeReqDTO.java deleted file mode 100644 index 6f4b96f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxQrcodeReqDTO.java +++ /dev/null @@ -1,66 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social.dto; - -import jakarta.validation.constraints.NotEmpty; -import lombok.Data; - -/** - * 获å–å°ç¨‹åºç  Request DTO - * - * @author HUIHUI - * @see 获å–ä¸é™åˆ¶çš„å°ç¨‹åºç  - */ -@Data -public class SocialWxQrcodeReqDTO { - - /** - * 页é¢è·¯å¾„ä¸èƒ½æºå¸¦å‚æ•°ï¼ˆå‚æ•°è¯·æ”¾åœ¨scene字段里) - */ - public static final String SCENE = ""; - /** - * 二维ç å®½åº¦ - */ - public static final Integer WIDTH = 430; - /** - * 自动é…置线æ¡é¢œè‰²ï¼Œå¦‚果颜色ä¾ç„¶æ˜¯é»‘色,则说明ä¸å»ºè®®é…置主色调 - */ - public static final Boolean AUTO_COLOR = true; - /** - * 检查 page 是å¦å­˜åœ¨ - */ - public static final Boolean CHECK_PATH = true; - /** - * 是å¦éœ€è¦é€æ˜Žåº•色 - * - * hyaline 为 true 时,生æˆé€æ˜Žåº•色的å°ç¨‹åºç  - */ - public static final Boolean HYALINE = true; - - /** - * 场景 - */ - @NotEmpty(message = "场景ä¸èƒ½ä¸ºç©º") - private String scene; - /** - * 页é¢è·¯å¾„ - */ - @NotEmpty(message = "页é¢è·¯å¾„ä¸èƒ½ä¸ºç©º") - private String path; - /** - * 二维ç å®½åº¦ - */ - private Integer width; - - /** - * 是å¦éœ€è¦é€æ˜Žåº•色 - */ - private Boolean autoColor; - /** - * æ˜¯å¦æ£€æŸ¥ page 是å¦å­˜åœ¨ - */ - private Boolean checkPath; - /** - * 是å¦éœ€è¦é€æ˜Žåº•色 - */ - private Boolean hyaline; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaOrderNotifyConfirmReceiveReqDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaOrderNotifyConfirmReceiveReqDTO.java deleted file mode 100644 index d2bf62c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaOrderNotifyConfirmReceiveReqDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social.dto; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.Data; - -import java.time.LocalDateTime; - -/** - * å°ç¨‹åºè®¢å•上传购物详情 - * - * @see 上传购物详情 - * @author èŠ‹é“æºç  - */ -@Data -public class SocialWxaOrderNotifyConfirmReceiveReqDTO { - - /** - * 原支付交易对应的微信订å•å· - */ - @NotEmpty(message = "原支付交易对应的微信订å•å·ä¸èƒ½ä¸ºç©º") - private String transactionId; - - /** - * 快递签收时间 - */ - @NotNull(message = "快递签收时间ä¸èƒ½ä¸ºç©º") - private LocalDateTime receivedTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaOrderUploadShippingInfoReqDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaOrderUploadShippingInfoReqDTO.java deleted file mode 100644 index 555da62..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaOrderUploadShippingInfoReqDTO.java +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social.dto; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.Data; - -/** - * å°ç¨‹åºè®¢å•上传购物详情 - * - * @see 上传购物详情 - * @author èŠ‹é“æºç  - */ -@Data -public class SocialWxaOrderUploadShippingInfoReqDTO { - - /** - * ç‰©æµæ¨¡å¼ - 实体物æµé…é€é‡‡ç”¨å¿«é€’å…¬å¸è¿›è¡Œå®žä½“物æµé…é€å½¢å¼ - */ - public static final Integer LOGISTICS_TYPE_EXPRESS = 1; - /** - * ç‰©æµæ¨¡å¼ - 虚拟商å“,虚拟商å“,例如è¯è´¹å……值,点å¡ç­‰ï¼Œæ— å®žä½“é…é€å½¢å¼ - */ - public static final Integer LOGISTICS_TYPE_VIRTUAL = 3; - /** - * ç‰©æµæ¨¡å¼ - 用户自æ - */ - public static final Integer LOGISTICS_TYPE_PICK_UP = 4; - - /** - * 支付者,支付者信æ¯(openid) - */ - @NotEmpty(message = "支付者,支付者信æ¯(openid)ä¸èƒ½ä¸ºç©º") - private String openid; - - /** - * 原支付交易对应的微信订å•å· - */ - @NotEmpty(message = "原支付交易对应的微信订å•å·ä¸èƒ½ä¸ºç©º") - private String transactionId; - - /** - * ç‰©æµæ¨¡å¼ - */ - @NotNull(message = "ç‰©æµæ¨¡å¼ä¸èƒ½ä¸ºç©º") - private Integer logisticsType; - /** - * 物æµå‘è´§å•å· - */ - private String logisticsNo; - /** - * 物æµå…¬å¸ç¼–å· - * - * @see ç‰©æµæŸ¥è¯¢æ’件简介 - */ - private String expressCompany; - /** - * 商å“ä¿¡æ¯ - */ - @NotEmpty(message = "商å“ä¿¡æ¯ä¸èƒ½ä¸ºç©º") - private String itemDesc; - /** - * æ”¶ä»¶äººæ‰‹æœºå· - */ - @NotEmpty(message = "收件人手机å·") - private String receiverContact; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaSubscribeMessageSendReqDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaSubscribeMessageSendReqDTO.java deleted file mode 100644 index 2677a34..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaSubscribeMessageSendReqDTO.java +++ /dev/null @@ -1,61 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social.dto; - -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.Data; - -import java.util.HashMap; -import java.util.Map; - -/** - * 微信å°ç¨‹åºè®¢é˜…消æ¯å‘é€ Request DTO - * - * @author HUIHUI - */ -@Data -public class SocialWxaSubscribeMessageSendReqDTO { - - /** - * ç”¨æˆ·ç¼–å· - * - * å…³è” MemberUserDO çš„ id ç¼–å· - * å…³è” AdminUserDO çš„ id ç¼–å· - */ - @NotNull(message = "用户编å·ä¸èƒ½ä¸ºç©º") - private Long userId; - /** - * 用户类型 - * - * å…³è” {@link UserTypeEnum} - */ - @NotNull(message = "用户类型ä¸èƒ½ä¸ºç©º") - private Integer userType; - - /** - * æ¶ˆæ¯æ¨¡ç‰ˆæ ‡é¢˜ - */ - @NotEmpty(message = "æ¶ˆæ¯æ¨¡ç‰ˆæ ‡é¢˜ä¸èƒ½ä¸ºç©º") - private String templateTitle; - - /** - * 点击模æ¿å¡ç‰‡åŽçš„跳转页é¢ï¼Œä»…陿œ¬å°ç¨‹åºå†…çš„é¡µé¢ - * - * 支æŒå¸¦å‚数,(示例 index?foo=bar )。该字段ä¸å¡«åˆ™æ¨¡æ¿æ— è·³è½¬ã€‚ - */ - private String page; - - /** - * 模æ¿å†…å®¹çš„å‚æ•° - */ - private Map messages; - - public SocialWxaSubscribeMessageSendReqDTO addMessage(String key, String value) { - if (messages == null) { - messages = new HashMap<>(); - } - messages.put(key, value); - return this; - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaSubscribeTemplateRespDTO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaSubscribeTemplateRespDTO.java deleted file mode 100644 index ae14cc5..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxaSubscribeTemplateRespDTO.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.yudao.module.system.api.social.dto; - -import lombok.Data; - - -/** - * å°ç¨‹åºè®¢é˜…æ¶ˆæ¯æ¨¡ç‰ˆ Response DTO - * - * @author HUIHUI - */ -@Data -public class SocialWxaSubscribeTemplateRespDTO { - - /** - * æ¨¡ç‰ˆç¼–å· - */ - private String id; - - /** - * 模版标题 - */ - private String title; - - /** - * 模版内容 - */ - private String content; - - /** - * 模æ¿å†…容示例 - */ - private String example; - - /** - * 模版类型 - * - * 2:为一次性订阅 - * 3:为长期订阅 - */ - private Integer type; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java index e41aee5..c647a43 100644 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java +++ b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java @@ -17,7 +17,6 @@ import cn.iocoder.yudao.module.system.service.auth.AdminAuthService; import cn.iocoder.yudao.module.system.service.permission.MenuService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.permission.RoleService; -import cn.iocoder.yudao.module.system.service.social.SocialClientService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -56,8 +55,6 @@ public class AuthController { private MenuService menuService; @Resource private PermissionService permissionService; - @Resource - private SocialClientService socialClientService; @Resource private SecurityProperties securityProperties; @@ -149,26 +146,6 @@ public class AuthController { return success(true); } - // ========== 社交登录相关 ========== - - @GetMapping("/social-auth-redirect") - @PermitAll - @Operation(summary = "社交授æƒçš„跳转") - @Parameters({ - @Parameter(name = "type", description = "社交类型", required = true), - @Parameter(name = "redirectUri", description = "回调路径") - }) - public CommonResult socialLogin(@RequestParam("type") Integer type, - @RequestParam("redirectUri") String redirectUri) { - return success(socialClientService.getAuthorizeUrl( - type, UserTypeEnum.ADMIN.getValue(), redirectUri)); - } - @PostMapping("/social-login") - @PermitAll - @Operation(summary = "社交快æ·ç™»å½•,使用 code 授æƒç ", description = "é€‚åˆæœªç™»å½•的用户,但是社交账å·å·²ç»‘定用户") - public CommonResult socialQuickLogin(@RequestBody @Valid AuthSocialLoginReqVO reqVO) { - return success(authService.socialLogin(reqVO)); - } } diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.http b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.http deleted file mode 100644 index 9909b51..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.http +++ /dev/null @@ -1,20 +0,0 @@ -### 请求 /system/social-client/send-subscribe-message æŽ¥å£ => å‘逿µ‹è¯•è®¢é˜…æ¶ˆæ¯ -POST {{baseUrl}}/system/social-client/send-subscribe-message -Authorization: Bearer {{token}} -Content-Type: application/json -#Authorization: Bearer test100 -tenant-id: {{adminTenantId}} - -{ - "userId": 247, - "userType": 1, - "socialType": 34, - "templateTitle": "充值æˆåŠŸé€šçŸ¥", - "page": "", - "messages": { - "character_string1":"5616122165165", - "amount2":"1000.00", - "time3":"2024-01-01 10:10:10", - "phrase4": "充值æˆåŠŸ" - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.java deleted file mode 100644 index f33de40..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.java +++ /dev/null @@ -1,94 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.socail; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.system.api.social.SocialClientApi; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxaSubscribeMessageSendReqDTO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientRespVO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO; -import cn.iocoder.yudao.module.system.service.social.SocialClientService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -@Tag(name = "管ç†åŽå° - 社交客户端") -@RestController -@RequestMapping("/system/social-client") -@Validated -public class SocialClientController { - - @Resource - private SocialClientService socialClientService; - @Resource - private SocialClientApi socialClientApi; - - @PostMapping("/create") - @Operation(summary = "创建社交客户端") - @PreAuthorize("@ss.hasPermission('system:social-client:create')") - public CommonResult createSocialClient(@Valid @RequestBody SocialClientSaveReqVO createReqVO) { - return success(socialClientService.createSocialClient(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新社交客户端") - @PreAuthorize("@ss.hasPermission('system:social-client:update')") - public CommonResult updateSocialClient(@Valid @RequestBody SocialClientSaveReqVO updateReqVO) { - socialClientService.updateSocialClient(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除社交客户端") - @Parameter(name = "id", description = "ç¼–å·", required = true) - @PreAuthorize("@ss.hasPermission('system:social-client:delete')") - public CommonResult deleteSocialClient(@RequestParam("id") Long id) { - socialClientService.deleteSocialClient(id); - return success(true); - } - - @DeleteMapping("/delete-list") - @Parameter(name = "ids", description = "ç¼–å·åˆ—表", required = true) - @Operation(summary = "批é‡åˆ é™¤ç¤¾äº¤å®¢æˆ·ç«¯") - @PreAuthorize("@ss.hasPermission('system:social-client:delete')") - public CommonResult deleteSocialClientList(@RequestParam("ids") List ids) { - socialClientService.deleteSocialClientList(ids); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得社交客户端") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('system:social-client:query')") - public CommonResult getSocialClient(@RequestParam("id") Long id) { - SocialClientDO client = socialClientService.getSocialClient(id); - return success(BeanUtils.toBean(client, SocialClientRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得社交客户端分页") - @PreAuthorize("@ss.hasPermission('system:social-client:query')") - public CommonResult> getSocialClientPage(@Valid SocialClientPageReqVO pageVO) { - PageResult pageResult = socialClientService.getSocialClientPage(pageVO); - return success(BeanUtils.toBean(pageResult, SocialClientRespVO.class)); - } - - @PostMapping("/send-subscribe-message") - @Operation(summary = "å‘é€è®¢é˜…消æ¯") // 用于测试 - @PreAuthorize("@ss.hasPermission('system:social-client:query')") - public void sendSubscribeMessage(@RequestBody SocialWxaSubscribeMessageSendReqDTO reqDTO) { - socialClientApi.sendWxaSubscribeMessage(reqDTO); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialUserController.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialUserController.java deleted file mode 100644 index f26ca4d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialUserController.java +++ /dev/null @@ -1,82 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.socail; - -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserBindReqVO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserRespVO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserUnbindReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; -import cn.iocoder.yudao.module.system.service.social.SocialUserService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; - -@Tag(name = "管ç†åŽå° - 社交用户") -@RestController -@RequestMapping("/system/social-user") -@Validated -public class SocialUserController { - - @Resource - private SocialUserService socialUserService; - - @PostMapping("/bind") - @Operation(summary = "社交绑定,使用 code 授æƒç ") - public CommonResult socialBind(@RequestBody @Valid SocialUserBindReqVO reqVO) { - socialUserService.bindSocialUser(new SocialUserBindReqDTO().setSocialType(reqVO.getType()) - .setCode(reqVO.getCode()).setState(reqVO.getState()) - .setUserId(getLoginUserId()).setUserType(UserTypeEnum.ADMIN.getValue())); - return CommonResult.success(true); - } - - @DeleteMapping("/unbind") - @Operation(summary = "å–æ¶ˆç¤¾äº¤ç»‘定") - public CommonResult socialUnbind(@RequestBody SocialUserUnbindReqVO reqVO) { - socialUserService.unbindSocialUser(getLoginUserId(), UserTypeEnum.ADMIN.getValue(), reqVO.getType(), reqVO.getOpenid()); - return CommonResult.success(true); - } - - @GetMapping("/get-bind-list") - @Operation(summary = "获得绑定社交用户列表") - public CommonResult> getBindSocialUserList() { - List list = socialUserService.getSocialUserList(getLoginUserId(), UserTypeEnum.ADMIN.getValue()); - return success(convertList(list, socialUser -> new SocialUserRespVO() // è¿”å›žç²¾ç®€ä¿¡æ¯ - .setId(socialUser.getId()).setType(socialUser.getType()).setOpenid(socialUser.getOpenid()) - .setNickname(socialUser.getNickname()).setAvatar(socialUser.getNickname()))); - } - - // ==================== 社交用户 CRUD ==================== - - @GetMapping("/get") - @Operation(summary = "获得社交用户") - @Parameter(name = "id", description = "ç¼–å·", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('system:social-user:query')") - public CommonResult getSocialUser(@RequestParam("id") Long id) { - SocialUserDO socialUser = socialUserService.getSocialUser(id); - return success(BeanUtils.toBean(socialUser, SocialUserRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得社交用户分页") - @PreAuthorize("@ss.hasPermission('system:social-user:query')") - public CommonResult> getSocialUserPage(@Valid SocialUserPageReqVO pageVO) { - PageResult pageResult = socialUserService.getSocialUserPage(pageVO); - return success(BeanUtils.toBean(pageResult, SocialUserRespVO.class)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientPageReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientPageReqVO.java deleted file mode 100644 index a225530..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientPageReqVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.socail.vo.client; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -@Schema(description = "管ç†åŽå° - 社交客户端分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class SocialClientPageReqVO extends PageParam { - - @Schema(description = "应用å", example = "yudao商城") - private String name; - - @Schema(description = "社交平å°çš„类型", example = "31") - private Integer socialType; - - @Schema(description = "用户类型", example = "2") - private Integer userType; - - @Schema(description = "客户端编å·", example = "145442115") - private String clientId; - - @Schema(description = "状æ€", example = "1") - private Integer status; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientRespVO.java deleted file mode 100644 index 900f363..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientRespVO.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.socail.vo.client; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 社交客户端 Response VO") -@Data -public class SocialClientRespVO { - - @Schema(description = "ç¼–å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "27162") - private Long id; - - @Schema(description = "应用å", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao商城") - private String name; - - @Schema(description = "社交平å°çš„类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "31") - private Integer socialType; - - @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - private Integer userType; - - @Schema(description = "客户端编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "wwd411c69a39ad2e54") - private String clientId; - - @Schema(description = "客户端密钥", requiredMode = Schema.RequiredMode.REQUIRED, example = "peter") - private String clientSecret; - - @Schema(description = "æŽˆæƒæ–¹çš„网页应用编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "2000045") - private String agentId; - - @Schema(description = "状æ€", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Integer status; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientSaveReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientSaveReqVO.java deleted file mode 100644 index 9549b82..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/client/SocialClientSaveReqVO.java +++ /dev/null @@ -1,61 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.socail.vo.client; - -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import com.fasterxml.jackson.annotation.JsonIgnore; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import jakarta.validation.constraints.AssertTrue; -import jakarta.validation.constraints.NotNull; -import java.util.Objects; - -@Schema(description = "管ç†åŽå° - 社交客户端创建/修改 Request VO") -@Data -public class SocialClientSaveReqVO { - - @Schema(description = "ç¼–å·", example = "27162") - private Long id; - - @Schema(description = "应用å", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao商城") - @NotNull(message = "应用åä¸èƒ½ä¸ºç©º") - private String name; - - @Schema(description = "社交平å°çš„类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "31") - @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") - @InEnum(SocialTypeEnum.class) - private Integer socialType; - - @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - @NotNull(message = "用户类型ä¸èƒ½ä¸ºç©º") - @InEnum(UserTypeEnum.class) - private Integer userType; - - @Schema(description = "客户端编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "wwd411c69a39ad2e54") - @NotNull(message = "客户端编å·ä¸èƒ½ä¸ºç©º") - private String clientId; - - @Schema(description = "客户端密钥", requiredMode = Schema.RequiredMode.REQUIRED, example = "peter") - @NotNull(message = "客户端密钥ä¸èƒ½ä¸ºç©º") - private String clientSecret; - - @Schema(description = "æŽˆæƒæ–¹çš„网页应用编å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "2000045") - private String agentId; - - @Schema(description = "状æ€", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "状æ€ä¸èƒ½ä¸ºç©º") - @InEnum(CommonStatusEnum.class) - private Integer status; - - @AssertTrue(message = "agentId ä¸èƒ½ä¸ºç©º") - @JsonIgnore - public boolean isAgentIdValid() { - // 如果是ä¼ä¸šå¾®ä¿¡ï¼Œå¿…须填写 agentId 属性 - return !Objects.equals(socialType, SocialTypeEnum.WECHAT_ENTERPRISE.getType()) - || !StrUtil.isEmpty(agentId); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserBindReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserBindReqVO.java deleted file mode 100644 index 5ed0042..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserBindReqVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.socail.vo.user; - -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import cn.iocoder.yudao.framework.common.validation.InEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; - -@Schema(description = "管ç†åŽå° - 社交绑定 Request VO,使用 code 授æƒç ") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class SocialUserBindReqVO { - - @Schema(description = "社交平å°çš„类型,å‚è§ UserSocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - @InEnum(SocialTypeEnum.class) - @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") - private Integer type; - - @Schema(description = "授æƒç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotEmpty(message = "授æƒç ä¸èƒ½ä¸ºç©º") - private String code; - - @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62") - @NotEmpty(message = "state ä¸èƒ½ä¸ºç©º") - private String state; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserPageReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserPageReqVO.java deleted file mode 100644 index 3297db4..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserPageReqVO.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.socail.vo.user; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDateTime; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管ç†åŽå° - 社交用户分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class SocialUserPageReqVO extends PageParam { - - @Schema(description = "社交平å°çš„类型", example = "30") - private Integer type; - - @Schema(description = "用户昵称", example = "æŽå››") - private String nickname; - - @Schema(description = "社交 openid", example = "oz-Jdt0kd_jdhUxJHQdBJMlOFN7w") - private String openid; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserRespVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserRespVO.java deleted file mode 100644 index fd37703..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserRespVO.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.socail.vo.user; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.time.LocalDateTime; - -@Schema(description = "管ç†åŽå° - 社交用户 Response VO") -@Data -public class SocialUserRespVO { - - @Schema(description = "主键(自增策略)", requiredMode = Schema.RequiredMode.REQUIRED, example = "14569") - private Long id; - - @Schema(description = "社交平å°çš„类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "30") - private Integer type; - - @Schema(description = "社交 openid", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") - private String openid; - - @Schema(description = "社交 token", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") - private String token; - - @Schema(description = "原始 Token æ•°æ®ï¼Œä¸€èˆ¬æ˜¯ JSON æ ¼å¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "{}") - private String rawTokenInfo; - - @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") - private String nickname; - - @Schema(description = "用户头åƒ", example = "https://www.iocoder.cn/xxx.png") - private String avatar; - - @Schema(description = "原始用户数æ®ï¼Œä¸€èˆ¬æ˜¯ JSON æ ¼å¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "{}") - private String rawUserInfo; - - @Schema(description = "最åŽä¸€æ¬¡çš„è®¤è¯ code", requiredMode = Schema.RequiredMode.REQUIRED, example = "666666") - private String code; - - @Schema(description = "最åŽä¸€æ¬¡çš„è®¤è¯ state", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") - private String state; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - - @Schema(description = "æ›´æ–°æ—¶é—´", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime updateTime; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserUnbindReqVO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserUnbindReqVO.java deleted file mode 100644 index e5b1961..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/vo/user/SocialUserUnbindReqVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.socail.vo.user; - -import cn.iocoder.yudao.framework.common.validation.InEnum; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; - -@Schema(description = "管ç†åŽå° - å–æ¶ˆç¤¾äº¤ç»‘定 Request VO") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class SocialUserUnbindReqVO { - - @Schema(description = "社交平å°çš„类型,å‚è§ UserSocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - @InEnum(SocialTypeEnum.class) - @NotNull(message = "社交平å°çš„类型ä¸èƒ½ä¸ºç©º") - private Integer type; - - @Schema(description = "社交用户的 openid", requiredMode = Schema.RequiredMode.REQUIRED, example = "IPRmJ0wvBptiPIlGEZiPewGwiEiE") - @NotEmpty(message = "社交用户的 openid ä¸èƒ½ä¸ºç©º") - private String openid; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java index 18463e7..9741a89 100644 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java +++ b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*; import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; @@ -79,7 +78,6 @@ public interface AuthConvert { return filterList(treeNodeMap.values(), node -> ID_ROOT.equals(node.getParentId())); } - SocialUserBindReqDTO convert(Long userId, Integer userType, AuthSocialLoginReqVO reqVO); SmsCodeSendReqDTO convert(AuthSmsSendReqVO reqVO); diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialClientDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialClientDO.java deleted file mode 100644 index 5449106..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialClientDO.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.dataobject.social; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; -import me.zhyd.oauth.config.AuthConfig; - -/** - * 社交客户端 DO - * - * 对应 {@link AuthConfig} é…置,满足ä¸åŒç§Ÿæˆ·ï¼Œæœ‰è‡ªå·±çš„客户端é…置,实现社交(三方)登录 - * - * @author èŠ‹é“æºç  - */ -@TableName(value = "system_social_client", autoResultMap = true) -@KeySequence("system_social_client_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class SocialClientDO extends TenantBaseDO { - - /** - * ç¼–å·ï¼Œè‡ªå¢ž - */ - @TableId - private Long id; - /** - * 应用å - */ - private String name; - /** - * 社交类型 - * - * 枚举 {@link SocialTypeEnum} - */ - private Integer socialType; - /** - * 用户类型 - * - * 目的:ä¸åŒç”¨æˆ·ç±»åž‹ï¼Œå¯¹åº”ä¸åŒçš„å°ç¨‹åºï¼Œéœ€è¦è‡ªå·±çš„é…ç½® - * - * 枚举 {@link UserTypeEnum} - */ - private Integer userType; - /** - * çŠ¶æ€ - * - * 枚举 {@link CommonStatusEnum} - */ - private Integer status; - - /** - * 客户端 id - */ - private String clientId; - /** - * 客户端 Secret - */ - private String clientSecret; - - /** - * 代ç†ç¼–å· - * - * ç›®å‰åªæœ‰éƒ¨åˆ†â€œç¤¾äº¤ç±»åž‹â€åœ¨ä½¿ç”¨ï¼š - * 1. ä¼ä¸šå¾®ä¿¡ï¼šå¯¹åº”æŽˆæƒæ–¹çš„网页应用 ID - */ - private String agentId; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialUserBindDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialUserBindDO.java deleted file mode 100644 index 0f4e41f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialUserBindDO.java +++ /dev/null @@ -1,56 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.dataobject.social; - -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 社交用户的绑定 - * å³ {@link SocialUserDO} 与 UserDO 的关è”表 - * - * @author èŠ‹é“æºç  - */ -@TableName(value = "system_social_user_bind", autoResultMap = true) -@KeySequence("system_social_user_bind_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class SocialUserBindDO extends BaseDO { - - /** - * ç¼–å· - */ - @TableId - private Long id; - /** - * å…³è”çš„ç”¨æˆ·ç¼–å· - * - * å…³è” UserDO çš„ç¼–å· - */ - private Long userId; - /** - * 用户类型 - * - * 枚举 {@link UserTypeEnum} - */ - private Integer userType; - - /** - * 社交平å°çš„ç”¨æˆ·ç¼–å· - * - * å…³è” {@link SocialUserDO#getId()} - */ - private Long socialUserId; - /** - * 社交平å°çš„类型 - * - * 冗余 {@link SocialUserDO#getType()} - */ - private Integer socialType; - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialUserDO.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialUserDO.java deleted file mode 100644 index f3adf03..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialUserDO.java +++ /dev/null @@ -1,73 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.dataobject.social; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 社交(三方)用户 - * - * @author weir - */ -@TableName(value = "system_social_user", autoResultMap = true) -@KeySequence("system_social_user_seq") // 用于 Oracleã€PostgreSQLã€Kingbaseã€DB2ã€H2 æ•°æ®åº“的主键自增。如果是 MySQL 等数æ®åº“,å¯ä¸å†™ã€‚ -@Data -@EqualsAndHashCode(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class SocialUserDO extends BaseDO { - - /** - * 自增主键 - */ - @TableId - private Long id; - /** - * 社交平å°çš„类型 - * - * 枚举 {@link SocialTypeEnum} - */ - private Integer type; - - /** - * 社交 openid - */ - private String openid; - /** - * 社交 token - */ - private String token; - /** - * 原始 Token æ•°æ®ï¼Œä¸€èˆ¬æ˜¯ JSON æ ¼å¼ - */ - private String rawTokenInfo; - - /** - * 用户昵称 - */ - private String nickname; - /** - * ç”¨æˆ·å¤´åƒ - */ - private String avatar; - /** - * 原始用户数æ®ï¼Œä¸€èˆ¬æ˜¯ JSON æ ¼å¼ - */ - private String rawUserInfo; - - /** - * 最åŽä¸€æ¬¡çš„è®¤è¯ code - */ - private String code; - /** - * 最åŽä¸€æ¬¡çš„è®¤è¯ state - */ - private String state; - -} - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialClientMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialClientMapper.java deleted file mode 100644 index 4ebe226..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialClientMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.social; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface SocialClientMapper extends BaseMapperX { - - default SocialClientDO selectBySocialTypeAndUserType(Integer socialType, Integer userType) { - return selectOne(SocialClientDO::getSocialType, socialType, - SocialClientDO::getUserType, userType); - } - - default PageResult selectPage(SocialClientPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(SocialClientDO::getName, reqVO.getName()) - .eqIfPresent(SocialClientDO::getSocialType, reqVO.getSocialType()) - .eqIfPresent(SocialClientDO::getUserType, reqVO.getUserType()) - .likeIfPresent(SocialClientDO::getClientId, reqVO.getClientId()) - .eqIfPresent(SocialClientDO::getStatus, reqVO.getStatus()) - .orderByDesc(SocialClientDO::getId)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserBindMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserBindMapper.java deleted file mode 100644 index d9957f7..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserBindMapper.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.social; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -@Mapper -public interface SocialUserBindMapper extends BaseMapperX { - - default void deleteByUserTypeAndUserIdAndSocialType(Integer userType, Long userId, Integer socialType) { - delete(new LambdaQueryWrapperX() - .eq(SocialUserBindDO::getUserType, userType) - .eq(SocialUserBindDO::getUserId, userId) - .eq(SocialUserBindDO::getSocialType, socialType)); - } - - default void deleteByUserTypeAndSocialUserId(Integer userType, Long socialUserId) { - delete(new LambdaQueryWrapperX() - .eq(SocialUserBindDO::getUserType, userType) - .eq(SocialUserBindDO::getSocialUserId, socialUserId)); - } - - default SocialUserBindDO selectByUserTypeAndSocialUserId(Integer userType, Long socialUserId) { - return selectOne(SocialUserBindDO::getUserType, userType, - SocialUserBindDO::getSocialUserId, socialUserId); - } - - default List selectListByUserIdAndUserType(Long userId, Integer userType) { - return selectList(new LambdaQueryWrapperX() - .eq(SocialUserBindDO::getUserId, userId) - .eq(SocialUserBindDO::getUserType, userType)); - } - - default SocialUserBindDO selectByUserIdAndUserTypeAndSocialType(Long userId, Integer userType, Integer socialType) { - return selectOne(new LambdaQueryWrapperX() - .eq(SocialUserBindDO::getUserId, userId) - .eq(SocialUserBindDO::getUserType, userType) - .eq(SocialUserBindDO::getSocialType, socialType)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserMapper.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserMapper.java deleted file mode 100644 index a90e6ac..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialUserMapper.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.yudao.module.system.dal.mysql.social; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface SocialUserMapper extends BaseMapperX { - - default SocialUserDO selectByTypeAndCodeAnState(Integer type, String code, String state) { - return selectOne(SocialUserDO::getType, type, - SocialUserDO::getCode, code, - SocialUserDO::getState, state); - } - - default SocialUserDO selectByTypeAndOpenid(Integer type, String openid) { - return selectFirstOne(SocialUserDO::getType, type, - SocialUserDO::getOpenid, openid); - } - - default PageResult selectPage(SocialUserPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(SocialUserDO::getType, reqVO.getType()) - .likeIfPresent(SocialUserDO::getNickname, reqVO.getNickname()) - .likeIfPresent(SocialUserDO::getOpenid, reqVO.getOpenid()) - .betweenIfPresent(SocialUserDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(SocialUserDO::getId)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/config/YudaoJustAuthConfiguration.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/config/YudaoJustAuthConfiguration.java deleted file mode 100644 index 56a24ee..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/config/YudaoJustAuthConfiguration.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.yudao.module.system.framework.justauth.config; - -import cn.iocoder.yudao.module.system.framework.justauth.core.AuthRequestFactory; -import com.xkcoding.justauth.autoconfigure.JustAuthProperties; -import com.xkcoding.justauth.support.cache.RedisStateCache; -import me.zhyd.oauth.cache.AuthStateCache; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.core.RedisTemplate; - -/** - * JustAuth é…置类 TODO 芋艿:等 justauth 1.4.1 版本å‘布ï¼ï¼ï¼ - * - * @author èŠ‹é“æºç  - */ -@Configuration(proxyBeanMethods = false) -@EnableConfigurationProperties({JustAuthProperties.class}) -public class YudaoJustAuthConfiguration { - - @Bean - @ConditionalOnProperty( - prefix = "justauth", - value = {"enabled"}, - havingValue = "true", - matchIfMissing = true - ) - public AuthRequestFactory authRequestFactory(JustAuthProperties properties, AuthStateCache authStateCache) { - return new AuthRequestFactory(properties, authStateCache); - } - - @Bean - public AuthStateCache authStateCache(RedisTemplate justAuthRedisCacheTemplate, - JustAuthProperties justAuthProperties) { - return new RedisStateCache(justAuthRedisCacheTemplate, justAuthProperties.getCache()); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/core/AuthRequestFactory.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/core/AuthRequestFactory.java deleted file mode 100644 index 4ae8b78..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/core/AuthRequestFactory.java +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Copyright (c) 2019-2029, xkcoding & Yangkai.Shen & 沈扬凯 (237497819@qq.com & xkcoding.com). - *

- * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.gnu.org/licenses/lgpl.html - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package cn.iocoder.yudao.module.system.framework.justauth.core; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.EnumUtil; -import cn.hutool.core.util.ReflectUtil; -import cn.hutool.core.util.StrUtil; -import com.xkcoding.http.config.HttpConfig; -import com.xkcoding.justauth.autoconfigure.ExtendProperties; -import com.xkcoding.justauth.autoconfigure.JustAuthProperties; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import me.zhyd.oauth.cache.AuthStateCache; -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.config.AuthDefaultSource; -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.enums.AuthResponseStatus; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.request.*; -import org.springframework.util.CollectionUtils; - -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -// TODO @芋艿:等官方å‘布 1.4.1ï¼ï¼ï¼ -/** - *

- * AuthRequest工厂类 - *

- * - * @author yangkai.shen - * @date Created in 2019-07-22 14:21 - */ -@Slf4j -@RequiredArgsConstructor -public class AuthRequestFactory { - private final JustAuthProperties properties; - private final AuthStateCache authStateCache; - - /** - * 返回当å‰Oauth列表 - * - * @return Oauth列表 - */ - @SuppressWarnings({"unchecked", "rawtypes"}) - public List oauthList() { - // 默认列表 - List defaultList = new ArrayList<>(properties.getType().keySet()); - // 扩展列表 - List extendList = new ArrayList<>(); - ExtendProperties extend = properties.getExtend(); - if (null != extend) { - Class enumClass = extend.getEnumClass(); - List names = EnumUtil.getNames(enumClass); - // 扩展列表 - extendList = extend.getConfig() - .keySet() - .stream() - .filter(x -> names.contains(x.toUpperCase())) - .map(String::toUpperCase) - .collect(Collectors.toList()); - } - - // åˆå¹¶ - return (List) CollUtil.addAll(defaultList, extendList); - } - - /** - * 返回AuthRequest对象 - * - * @param source {@link AuthSource} - * @return {@link AuthRequest} - */ - public AuthRequest get(String source) { - if (StrUtil.isBlank(source)) { - throw new AuthException(AuthResponseStatus.NO_AUTH_SOURCE); - } - - // èŽ·å– JustAuth 中已存在的 - AuthRequest authRequest = getDefaultRequest(source); - - // 如果获å–ä¸åˆ°åˆ™å°è¯•å–自定义的 - if (authRequest == null) { - authRequest = getExtendRequest(properties.getExtend().getEnumClass(), source); - } - - if (authRequest == null) { - throw new AuthException(AuthResponseStatus.UNSUPPORTED); - } - - return authRequest; - } - - /** - * 获å–自定义的 request - * - * @param clazz 枚举类 {@link AuthSource} - * @param source {@link AuthSource} - * @return {@link AuthRequest} - */ - @SuppressWarnings({"unchecked", "rawtypes"}) - private AuthRequest getExtendRequest(Class clazz, String source) { - String upperSource = source.toUpperCase(); - try { - EnumUtil.fromString(clazz, upperSource); - } catch (IllegalArgumentException e) { - // æ— è‡ªå®šä¹‰åŒ¹é… - return null; - } - - Map extendConfig = properties.getExtend().getConfig(); - - // key 转大写 - Map upperConfig = new HashMap<>(6); - extendConfig.forEach((k, v) -> upperConfig.put(k.toUpperCase(), v)); - - ExtendProperties.ExtendRequestConfig extendRequestConfig = upperConfig.get(upperSource); - if (extendRequestConfig != null) { - - // é…ç½® http config - configureHttpConfig(upperSource, extendRequestConfig, properties.getHttpConfig()); - - Class requestClass = extendRequestConfig.getRequestClass(); - - if (requestClass != null) { - // åå°„èŽ·å– Request 对象,所以必须实现 2 ä¸ªå‚æ•°çš„æž„造方法 - return ReflectUtil.newInstance(requestClass, (AuthConfig) extendRequestConfig, authStateCache); - } - } - - return null; - } - - - /** - * 获å–默认的 Request - * - * @param source {@link AuthSource} - * @return {@link AuthRequest} - */ - private AuthRequest getDefaultRequest(String source) { - AuthDefaultSource authDefaultSource; - - try { - authDefaultSource = EnumUtil.fromString(AuthDefaultSource.class, source.toUpperCase()); - } catch (IllegalArgumentException e) { - // æ— è‡ªå®šä¹‰åŒ¹é… - return null; - } - - AuthConfig config = properties.getType().get(authDefaultSource.name()); - // 找ä¸åˆ°å¯¹åº”关系,直接返回空 - if (config == null) { - return null; - } - - // é…ç½® http config - configureHttpConfig(authDefaultSource.name(), config, properties.getHttpConfig()); - - switch (authDefaultSource) { - case GITHUB: - return new AuthGithubRequest(config, authStateCache); - case WEIBO: - return new AuthWeiboRequest(config, authStateCache); - case GITEE: - return new AuthGiteeRequest(config, authStateCache); - case DINGTALK: - return new AuthDingTalkRequest(config, authStateCache); - case DINGTALK_V2: - return new AuthDingTalkV2Request(config, authStateCache); - case DINGTALK_ACCOUNT: - return new AuthDingTalkAccountRequest(config, authStateCache); - case BAIDU: - return new AuthBaiduRequest(config, authStateCache); - case CSDN: - return new AuthCsdnRequest(config, authStateCache); - case CODING: - return new AuthCodingRequest(config, authStateCache); - case OSCHINA: - return new AuthOschinaRequest(config, authStateCache); - case ALIPAY: - return new AuthAlipayRequest(config, authStateCache); - case QQ: - return new AuthQqRequest(config, authStateCache); - case WECHAT_OPEN: - return new AuthWeChatOpenRequest(config, authStateCache); - case WECHAT_MP: - return new AuthWeChatMpRequest(config, authStateCache); - case TAOBAO: - return new AuthTaobaoRequest(config, authStateCache); - case GOOGLE: - return new AuthGoogleRequest(config, authStateCache); - case FACEBOOK: - return new AuthFacebookRequest(config, authStateCache); - case DOUYIN: - return new AuthDouyinRequest(config, authStateCache); - case LINKEDIN: - return new AuthLinkedinRequest(config, authStateCache); - case MICROSOFT: - return new AuthMicrosoftRequest(config, authStateCache); - case MICROSOFT_CN: - return new AuthMicrosoftCnRequest(config, authStateCache); - - case MI: - return new AuthMiRequest(config, authStateCache); - case TOUTIAO: - return new AuthToutiaoRequest(config, authStateCache); - case TEAMBITION: - return new AuthTeambitionRequest(config, authStateCache); - case RENREN: - return new AuthRenrenRequest(config, authStateCache); - case PINTEREST: - return new AuthPinterestRequest(config, authStateCache); - case STACK_OVERFLOW: - return new AuthStackOverflowRequest(config, authStateCache); - case HUAWEI: - return new AuthHuaweiRequest(config, authStateCache); - case HUAWEI_V3: - return new AuthHuaweiV3Request(config, authStateCache); - case WECHAT_ENTERPRISE: - return new AuthWeChatEnterpriseQrcodeRequest(config, authStateCache); - case WECHAT_ENTERPRISE_V2: - return new AuthWeChatEnterpriseQrcodeV2Request(config, authStateCache); - case WECHAT_ENTERPRISE_QRCODE_THIRD: - return new AuthWeChatEnterpriseThirdQrcodeRequest(config, authStateCache); - case WECHAT_ENTERPRISE_WEB: - return new AuthWeChatEnterpriseWebRequest(config, authStateCache); - case KUJIALE: - return new AuthKujialeRequest(config, authStateCache); - case GITLAB: - return new AuthGitlabRequest(config, authStateCache); - case MEITUAN: - return new AuthMeituanRequest(config, authStateCache); - case ELEME: - return new AuthElemeRequest(config, authStateCache); - case TWITTER: - return new AuthTwitterRequest(config, authStateCache); - case FEISHU: - return new AuthFeishuRequest(config, authStateCache); - case JD: - return new AuthJdRequest(config, authStateCache); - case ALIYUN: - return new AuthAliyunRequest(config, authStateCache); - case XMLY: - return new AuthXmlyRequest(config, authStateCache); - case AMAZON: - return new AuthAmazonRequest(config, authStateCache); - case SLACK: - return new AuthSlackRequest(config, authStateCache); - case LINE: - return new AuthLineRequest(config, authStateCache); - case OKTA: - return new AuthOktaRequest(config, authStateCache); - case PROGINN: - return new AuthProginnRequest(config,authStateCache); - case AFDIAN: - return new AuthAfDianRequest(config,authStateCache); - case APPLE: - return new AuthAppleRequest(config,authStateCache); - case FIGMA: - return new AuthFigmaRequest(config,authStateCache); - case WECHAT_MINI_PROGRAM: - config.setIgnoreCheckRedirectUri(true); - config.setIgnoreCheckState(true); - return new AuthWechatMiniProgramRequest(config, authStateCache); - case QQ_MINI_PROGRAM: - config.setIgnoreCheckRedirectUri(true); - config.setIgnoreCheckState(true); - return new AuthQQMiniProgramRequest(config, authStateCache); - default: - return null; - } - } - - /** - * é…ç½® http 相关的é…ç½® - * - * @param authSource {@link AuthSource} - * @param authConfig {@link AuthConfig} - */ - private void configureHttpConfig(String authSource, AuthConfig authConfig, JustAuthProperties.JustAuthHttpConfig httpConfig) { - if (null == httpConfig) { - return; - } - Map proxyConfigMap = httpConfig.getProxy(); - if (CollectionUtils.isEmpty(proxyConfigMap)) { - return; - } - JustAuthProperties.JustAuthProxyConfig proxyConfig = proxyConfigMap.get(authSource); - - if (null == proxyConfig) { - return; - } - - authConfig.setHttpConfig(HttpConfig.builder() - .timeout(httpConfig.getTimeout()) - .proxy(new Proxy(Proxy.Type.valueOf(proxyConfig.getType()), new InetSocketAddress(proxyConfig.getHostname(), proxyConfig.getPort()))) - .build()); - } -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/package-info.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/package-info.java deleted file mode 100644 index e9af3ab..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/justauth/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * justauth 三方登录的拓展 - * - * @author èŠ‹é“æºç  - */ -package cn.iocoder.yudao.module.system.framework.justauth; \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java index 3901e08..8c30958 100644 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java +++ b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java @@ -54,13 +54,6 @@ public interface AdminAuthService { */ AuthLoginRespVO smsLogin(AuthSmsLoginReqVO reqVO); - /** - * 社交快æ·ç™»å½•,使用 code 授æƒç  - * - * @param reqVO ç™»å½•ä¿¡æ¯ - * @return 登录结果 - */ - AuthLoginRespVO socialLogin(@Valid AuthSocialLoginReqVO reqVO); /** * 刷新访问令牌 diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index 94e589d..0159f9b 100644 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -9,8 +9,6 @@ import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*; import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; @@ -22,7 +20,6 @@ import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import cn.iocoder.yudao.module.system.service.logger.LoginLogService; import cn.iocoder.yudao.module.system.service.member.MemberService; import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService; -import cn.iocoder.yudao.module.system.service.social.SocialUserService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import com.anji.captcha.model.common.ResponseModel; import com.anji.captcha.model.vo.CaptchaVO; @@ -57,8 +54,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { private LoginLogService loginLogService; @Resource private OAuth2TokenService oauth2TokenService; - @Resource - private SocialUserService socialUserService; + @Resource private MemberService memberService; @Resource @@ -104,11 +100,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { // 使用账å·å¯†ç ï¼Œè¿›è¡Œç™»å½• AdminUserDO user = authenticate(reqVO.getUsername(), reqVO.getPassword()); - // 如果 socialType éžç©ºï¼Œè¯´æ˜Žéœ€è¦ç»‘定社交用户 - if (reqVO.getSocialType() != null) { - socialUserService.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(), - reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState())); - } + // 创建 Token 令牌,记录登录日志 return createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME); } @@ -165,25 +157,6 @@ public class AdminAuthServiceImpl implements AdminAuthService { } } - @Override - public AuthLoginRespVO socialLogin(AuthSocialLoginReqVO reqVO) { - // 使用 code 授æƒç ï¼Œè¿›è¡Œç™»å½•。然åŽï¼ŒèŽ·å¾—åˆ°ç»‘å®šçš„ç”¨æˆ·ç¼–å· - SocialUserRespDTO socialUser = socialUserService.getSocialUserByCode(UserTypeEnum.ADMIN.getValue(), reqVO.getType(), - reqVO.getCode(), reqVO.getState()); - if (socialUser == null || socialUser.getUserId() == null) { - throw exception(AUTH_THIRD_LOGIN_NOT_BIND); - } - - // 获得用户 - AdminUserDO user = userService.getUser(socialUser.getUserId()); - if (user == null) { - throw exception(USER_NOT_EXISTS); - } - - // 创建 Token 令牌,记录登录日志 - return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL); - } - @VisibleForTesting void validateCaptcha(AuthLoginReqVO reqVO) { ResponseModel response = doValidateCaptcha(reqVO); diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java deleted file mode 100644 index ee08ccf..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java +++ /dev/null @@ -1,160 +0,0 @@ -package cn.iocoder.yudao.module.system.service.social; - -import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxQrcodeReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxaOrderNotifyConfirmReceiveReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxaOrderUploadShippingInfoReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxaSubscribeMessageSendReqDTO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import jakarta.validation.Valid; -import me.chanjar.weixin.common.bean.WxJsapiSignature; -import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo; -import me.zhyd.oauth.model.AuthUser; - -import java.util.List; - -/** - * 社交应用 Service æŽ¥å£ - * - * @author èŠ‹é“æºç  - */ -public interface SocialClientService { - - /** - * 获得社交平å°çš„æŽˆæƒ URL - * - * @param socialType 社交平å°çš„类型 {@link SocialTypeEnum} - * @param userType 用户类型 - * @param redirectUri é‡å®šå‘ URL - * @return 社交平å°çš„æŽˆæƒ URL - */ - String getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri); - - /** - * 请求社交平å°ï¼ŒèŽ·å¾—æŽˆæƒçš„用户 - * - * @param socialType 社交平å°çš„类型 - * @param userType 用户类型 - * @param code 授æƒç  - * @param state æŽˆæƒ state - * @return 授æƒçš„用户 - */ - AuthUser getAuthUser(Integer socialType, Integer userType, String code, String state); - - // =================== 微信公众å·ç‹¬æœ‰ =================== - - /** - * 创建微信公众å·çš„ JS SDK åˆå§‹åŒ–所需的签å - * - * @param userType 用户类型 - * @param url 访问的 URL åœ°å€ - * @return ç­¾å - */ - WxJsapiSignature createWxMpJsapiSignature(Integer userType, String url); - - // =================== 微信å°ç¨‹åºç‹¬æœ‰ =================== - - /** - * 获得微信å°ç¨‹åºçš„æ‰‹æœºä¿¡æ¯ - * - * @param userType 用户类型 - * @param phoneCode 手机授æƒç  - * @return æ‰‹æœºä¿¡æ¯ - */ - WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(Integer userType, String phoneCode); - - /** - * 获得å°ç¨‹åºäºŒç»´ç  - * - * @param reqVO è¯·æ±‚ä¿¡æ¯ - * @return å°ç¨‹åºäºŒç»´ç  - */ - byte[] getWxaQrcode(SocialWxQrcodeReqDTO reqVO); - - /** - * 获得微信å°ç¨‹è®¢é˜…æ¨¡æ¿ - * - * 缓存的目的:考虑到微信å°ç¨‹åºè®¢é˜…消æ¯é€‰æ‹©å¥½æ¨¡ç‰ˆåŽå‡ ä¹Žä¸ä¼šå˜åŠ¨ï¼Œç¼“å­˜å¢žåŠ æŸ¥è¯¢æ•ˆçŽ‡ - * - * @param userType 用户类型 - * @return 微信å°ç¨‹è®¢é˜…æ¨¡æ¿ - */ - List getSubscribeTemplateList(Integer userType); - - /** - * å‘é€å¾®ä¿¡å°ç¨‹åºè®¢é˜…æ¶ˆæ¯ - * - * @param reqDTO 请求 - * @param templateId æ¨¡ç‰ˆç¼–å· - * @param openId 会员 openId - */ - void sendSubscribeMessage(SocialWxaSubscribeMessageSendReqDTO reqDTO, String templateId, String openId); - - /** - * 上传订å•å‘货到微信å°ç¨‹åº - * - * @param userType 用户类型 - * @param reqDTO 请求 - */ - void uploadWxaOrderShippingInfo(Integer userType, SocialWxaOrderUploadShippingInfoReqDTO reqDTO); - - /** - * é€šçŸ¥è®¢å•æ”¶è´§åˆ°å¾®ä¿¡å°ç¨‹åº - * - * @param userType 用户类型 - * @param reqDTO 请求 - */ - void notifyWxaOrderConfirmReceive(Integer userType, SocialWxaOrderNotifyConfirmReceiveReqDTO reqDTO); - - // =================== å®¢æˆ·ç«¯ç®¡ç† =================== - - /** - * 创建社交客户端 - * - * @param createReqVO åˆ›å»ºä¿¡æ¯ - * @return ç¼–å· - */ - Long createSocialClient(@Valid SocialClientSaveReqVO createReqVO); - - /** - * 更新社交客户端 - * - * @param updateReqVO æ›´æ–°ä¿¡æ¯ - */ - void updateSocialClient(@Valid SocialClientSaveReqVO updateReqVO); - - /** - * 删除社交客户端 - * - * @param id ç¼–å· - */ - void deleteSocialClient(Long id); - - /** - * 批é‡åˆ é™¤ç¤¾äº¤å®¢æˆ·ç«¯ - * - * @param ids ç¼–å·æ•°ç»„ - */ - void deleteSocialClientList(List ids); - - /** - * 获得社交客户端 - * - * @param id ç¼–å· - * @return 社交客户端 - */ - SocialClientDO getSocialClient(Long id); - - /** - * 获得社交客户端分页 - * - * @param pageReqVO 分页查询 - * @return 社交客户端分页 - */ - PageResult getSocialClientPage(SocialClientPageReqVO pageReqVO); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java deleted file mode 100644 index d80fae0..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java +++ /dev/null @@ -1,511 +0,0 @@ -package cn.iocoder.yudao.module.system.service.social; - -import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.api.WxMaSubscribeService; -import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; -import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; -import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; -import cn.binarywang.wx.miniapp.bean.shop.request.shipping.*; -import cn.binarywang.wx.miniapp.bean.shop.response.WxMaOrderShippingInfoBaseResponse; -import cn.binarywang.wx.miniapp.config.impl.WxMaRedisBetterConfigImpl; -import cn.binarywang.wx.miniapp.constant.WxMaConstants; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.date.LocalDateTimeUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.DesensitizedUtil; -import cn.hutool.core.util.ObjUtil; -import cn.hutool.core.util.ReflectUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.cache.CacheUtils; -import cn.iocoder.yudao.framework.common.util.http.HttpUtils; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxQrcodeReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxaOrderNotifyConfirmReceiveReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxaOrderUploadShippingInfoReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxaSubscribeMessageSendReqDTO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO; -import cn.iocoder.yudao.module.system.dal.mysql.social.SocialClientMapper; -import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import cn.iocoder.yudao.module.system.framework.justauth.core.AuthRequestFactory; -import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties; -import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import jakarta.annotation.Resource; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.bean.WxJsapiSignature; -import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo; -import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; -import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl; -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.model.AuthResponse; -import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.request.AuthRequest; -import me.zhyd.oauth.utils.AuthStateUtils; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.stereotype.Service; - -import java.time.Duration; -import java.time.ZonedDateTime; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.UTC_MS_WITH_XXX_OFFSET_FORMATTER; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.toEpochSecond; -import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static java.util.Collections.singletonList; - -/** - * 社交应用 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Slf4j -public class SocialClientServiceImpl implements SocialClientService { - - /** - * å°ç¨‹åºç è¦æ‰“开的å°ç¨‹åºç‰ˆæœ¬ - * - * 1. release:正å¼ç‰ˆ - * 2. trial:体验版 - * 3. developer:开å‘版 - */ - @Value("${yudao.wxa-code.env-version:release}") - public String envVersion; - /** - * 订阅消æ¯è·³è½¬å°ç¨‹åºç±»åž‹ - * - * 1. developer:开å‘版 - * 2. trial:体验版 - * 3. formal:正å¼ç‰ˆ - */ - @Value("${yudao.wxa-subscribe-message.miniprogram-state:formal}") - public String miniprogramState; - - @Resource - private AuthRequestFactory authRequestFactory; - - @Resource - private WxMpService wxMpService; - @Resource - private WxMpProperties wxMpProperties; - @Resource - private StringRedisTemplate stringRedisTemplate; // WxMpService 需è¦ä½¿ç”¨åˆ°ï¼Œæ‰€ä»¥åœ¨ Service 注入了它 - /** - * 缓存 WxMpService 对象 - * - * key:使用微信公众å·çš„ appId + secret æ‹¼æŽ¥ï¼Œå³ {@link SocialClientDO} çš„ clientId å’Œ clientSecret 属性。 - * 为什么 key ä½¿ç”¨è¿™ç§æ ¼å¼ï¼Ÿå› ä¸º {@link SocialClientDO} 在管ç†åŽå°å¯ä»¥å˜æ›´ï¼Œé€šè¿‡è¿™ä¸ª key 存储它的å•例。 - * - * 为什么è¦åš WxMpService 缓存?因为 WxMpService æž„å»ºæˆæœ¬æ¯”较大,所以尽é‡ä¿è¯å®ƒæ˜¯å•例。 - */ - private final LoadingCache wxMpServiceCache = CacheUtils.buildAsyncReloadingCache( - Duration.ofSeconds(10L), - new CacheLoader() { - - @Override - public WxMpService load(String key) { - String[] keys = key.split(":"); - return buildWxMpService(keys[0], keys[1]); - } - - }); - - @Resource - private WxMaService wxMaService; - @Resource - private WxMaProperties wxMaProperties; - /** - * 缓存 WxMaService 对象 - * - * è¯´æ˜ŽåŒ {@link #wxMpServiceCache} å˜é‡ - */ - private final LoadingCache wxMaServiceCache = CacheUtils.buildAsyncReloadingCache( - Duration.ofSeconds(10L), - new CacheLoader() { - - @Override - public WxMaService load(String key) { - String[] keys = key.split(":"); - return buildWxMaService(keys[0], keys[1]); - } - - }); - - @Resource - private SocialClientMapper socialClientMapper; - - @Override - public String getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri) { - // 获得对应的 AuthRequest 实现 - AuthRequest authRequest = buildAuthRequest(socialType, userType); - // 生æˆè·³è½¬åœ°å€ - String authorizeUri = authRequest.authorize(AuthStateUtils.createState()); - return HttpUtils.replaceUrlQuery(authorizeUri, "redirect_uri", redirectUri); - } - - @Override - public AuthUser getAuthUser(Integer socialType, Integer userType, String code, String state) { - // 构建请求 - AuthRequest authRequest = buildAuthRequest(socialType, userType); - AuthCallback authCallback = AuthCallback.builder().code(code).state(state).build(); - // 执行请求 - AuthResponse authResponse = authRequest.login(authCallback); - log.info("[getAuthUser][è¯·æ±‚ç¤¾äº¤å¹³å° type({}) request({}) response({})]", socialType, - toJsonString(authCallback), toJsonString(authResponse)); - if (!authResponse.ok()) { - throw exception(SOCIAL_USER_AUTH_FAILURE, authResponse.getMsg()); - } - return (AuthUser) authResponse.getData(); - } - - /** - * 构建 AuthRequest 对象,支æŒå¤šç§Ÿæˆ·é…ç½® - * - * @param socialType 社交类型 - * @param userType 用户类型 - * @return AuthRequest 对象 - */ - @VisibleForTesting - AuthRequest buildAuthRequest(Integer socialType, Integer userType) { - // 1. 先查找默认的é…置项,从 application-*.yaml ä¸­è¯»å– - AuthRequest request = authRequestFactory.get(SocialTypeEnum.valueOfType(socialType).getSource()); - Assert.notNull(request, String.format("社交平å°(%d) ä¸å­˜åœ¨", socialType)); - // 2. 查询 DB çš„é…置项,如果存在则进行覆盖 - SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType(socialType, userType); - if (client != null && Objects.equals(client.getStatus(), CommonStatusEnum.ENABLE.getStatus())) { - // 2.1 构造新的 AuthConfig 对象 - AuthConfig authConfig = (AuthConfig) ReflectUtil.getFieldValue(request, "config"); - AuthConfig newAuthConfig = ReflectUtil.newInstance(authConfig.getClass()); - BeanUtil.copyProperties(authConfig, newAuthConfig); - // 2.2 修改对应的 clientId + clientSecret 密钥 - newAuthConfig.setClientId(client.getClientId()); - newAuthConfig.setClientSecret(client.getClientSecret()); - if (client.getAgentId() != null) { // 如果有 agentId 则修改 agentId - newAuthConfig.setAgentId(client.getAgentId()); - } - // 2.3 设置会 request 里,进行åŽç»­ä½¿ç”¨ - ReflectUtil.setFieldValue(request, "config", newAuthConfig); - } - return request; - } - - // =================== 微信公众å·ç‹¬æœ‰ =================== - - @Override - @SneakyThrows - public WxJsapiSignature createWxMpJsapiSignature(Integer userType, String url) { - WxMpService service = getWxMpService(userType); - return service.createJsapiSignature(url); - } - - /** - * 获得 clientId + clientSecret 对应的 WxMpService 对象 - * - * @param userType 用户类型 - * @return WxMpService 对象 - */ - @VisibleForTesting - WxMpService getWxMpService(Integer userType) { - // 第一步,查询 DB çš„é…置项,获得对应的 WxMpService 对象 - SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType( - SocialTypeEnum.WECHAT_MP.getType(), userType); - if (client != null && Objects.equals(client.getStatus(), CommonStatusEnum.ENABLE.getStatus())) { - return wxMpServiceCache.getUnchecked(client.getClientId() + ":" + client.getClientSecret()); - } - // 第二步,ä¸å­˜åœ¨ DB é…置项,则使用 application-*.yaml 对应的 WxMpService 对象 - return wxMpService; - } - - /** - * 创建 clientId + clientSecret 对应的 WxMpService 对象 - * - * @param clientId å¾®ä¿¡å…¬ä¼—å· appId - * @param clientSecret å¾®ä¿¡å…¬ä¼—å· secret - * @return WxMpService 对象 - */ - public WxMpService buildWxMpService(String clientId, String clientSecret) { - // 第一步,创建 WxMpRedisConfigImpl 对象 - WxMpRedisConfigImpl configStorage = new WxMpRedisConfigImpl( - new RedisTemplateWxRedisOps(stringRedisTemplate), - wxMpProperties.getConfigStorage().getKeyPrefix()); - configStorage.setAppId(clientId); - configStorage.setSecret(clientSecret); - - // 第二步,创建 WxMpService 对象 - WxMpService service = new WxMpServiceImpl(); - service.setWxMpConfigStorage(configStorage); - return service; - } - - // =================== 微信å°ç¨‹åºç‹¬æœ‰ =================== - - @Override - public WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(Integer userType, String phoneCode) { - WxMaService service = getWxMaService(userType); - try { - return service.getUserService().getPhoneNumber(phoneCode); - } catch (WxErrorException e) { - log.error("[getPhoneNumber][userType({}) phoneCode({}) 获得手机å·å¤±è´¥]", userType, phoneCode, e); - throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_PHONE_CODE_ERROR); - } - } - - @Override - public byte[] getWxaQrcode(SocialWxQrcodeReqDTO reqVO) { - WxMaService service = getWxMaService(UserTypeEnum.MEMBER.getValue()); - try { - return service.getQrcodeService().createWxaCodeUnlimitBytes( - ObjUtil.defaultIfEmpty(reqVO.getScene(), SocialWxQrcodeReqDTO.SCENE), - reqVO.getPath(), - ObjUtil.defaultIfNull(reqVO.getCheckPath(), SocialWxQrcodeReqDTO.CHECK_PATH), - envVersion, - ObjUtil.defaultIfNull(reqVO.getWidth(), SocialWxQrcodeReqDTO.WIDTH), - ObjUtil.defaultIfNull(reqVO.getAutoColor(), SocialWxQrcodeReqDTO.AUTO_COLOR), - null, - ObjUtil.defaultIfNull(reqVO.getHyaline(), SocialWxQrcodeReqDTO.HYALINE)); - } catch (WxErrorException e) { - log.error("[getWxQrcode][reqVO({}) 获得å°ç¨‹åºç å¤±è´¥]", reqVO, e); - throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_QRCODE_ERROR); - } - } - - @Override - @Cacheable(cacheNames = RedisKeyConstants.WXA_SUBSCRIBE_TEMPLATE, key = "#userType", - unless = "#result == null") - public List getSubscribeTemplateList(Integer userType) { - WxMaService service = getWxMaService(userType); - try { - WxMaSubscribeService subscribeService = service.getSubscribeService(); - return subscribeService.getTemplateList(); - } catch (WxErrorException e) { - log.error("[getSubscribeTemplate][userType({}) 获得å°ç¨‹åºè®¢é˜…æ¶ˆæ¯æ¨¡ç‰ˆ]", userType, e); - throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_SUBSCRIBE_TEMPLATE_ERROR); - } - } - - @Override - public void sendSubscribeMessage(SocialWxaSubscribeMessageSendReqDTO reqDTO, String templateId, String openId) { - WxMaService service = getWxMaService(reqDTO.getUserType()); - try { - WxMaSubscribeService subscribeService = service.getSubscribeService(); - subscribeService.sendSubscribeMsg(buildMessageSendReqDTO(reqDTO, templateId, openId)); - } catch (WxErrorException e) { - log.error("[sendSubscribeMessage][reqVO({}) templateId({}) openId({}) å‘é€å°ç¨‹åºè®¢é˜…消æ¯å¤±è´¥]", reqDTO, templateId, openId, e); - throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_SUBSCRIBE_MESSAGE_ERROR); - } - } - - /** - * 构建å‘逿¶ˆæ¯è¯·æ±‚傿•° - * - * @param reqDTO 请求 - * @param templateId æ¨¡ç‰ˆç¼–å· - * @param openId 会员 openId - * @return 微信å°ç¨‹åºè®¢é˜…消æ¯è¯·æ±‚傿•° - */ - private WxMaSubscribeMessage buildMessageSendReqDTO(SocialWxaSubscribeMessageSendReqDTO reqDTO, - String templateId, String openId) { - // 设置订阅消æ¯åŸºæœ¬å‚æ•° - WxMaSubscribeMessage subscribeMessage = new WxMaSubscribeMessage().setLang(WxMaConstants.MiniProgramLang.ZH_CN) - .setMiniprogramState(miniprogramState).setTemplateId(templateId).setToUser(openId).setPage(reqDTO.getPage()); - // 设置具体消æ¯å‚æ•° - Map messages = reqDTO.getMessages(); - if (CollUtil.isNotEmpty(messages)) { - reqDTO.getMessages().keySet().forEach(key -> findAndThen(messages, key, value -> - subscribeMessage.addData(new WxMaSubscribeMessage.MsgData(key, value)))); - } - return subscribeMessage; - } - - @Override - public void uploadWxaOrderShippingInfo(Integer userType, SocialWxaOrderUploadShippingInfoReqDTO reqDTO) { - WxMaService service = getWxMaService(userType); - List shippingList; - if (Objects.equals(reqDTO.getLogisticsType(), SocialWxaOrderUploadShippingInfoReqDTO.LOGISTICS_TYPE_EXPRESS)) { - shippingList = singletonList(ShippingListBean.builder() - .trackingNo(reqDTO.getLogisticsNo()) - .expressCompany(reqDTO.getExpressCompany()) - .itemDesc(reqDTO.getItemDesc()) - .contact(ContactBean.builder().receiverContact(DesensitizedUtil.mobilePhone(reqDTO.getReceiverContact())).build()) - .build()); - } else { - shippingList = singletonList(ShippingListBean.builder().itemDesc(reqDTO.getItemDesc()).build()); - } - WxMaOrderShippingInfoUploadRequest request = WxMaOrderShippingInfoUploadRequest.builder() - .orderKey(OrderKeyBean.builder() - .orderNumberType(2) // 使用原支付交易对应的微信订å•å·ï¼Œå³æ¸ é“å•å· - .transactionId(reqDTO.getTransactionId()) - .build()) - .logisticsType(reqDTO.getLogisticsType()) // é…逿–¹å¼ - .deliveryMode(1) // 统一å‘è´§ - .shippingList(shippingList) - .payer(PayerBean.builder().openid(reqDTO.getOpenid()).build()) - .uploadTime(ZonedDateTime.now().format(UTC_MS_WITH_XXX_OFFSET_FORMATTER)) - .build(); - try { - WxMaOrderShippingInfoBaseResponse response = service.getWxMaOrderShippingService().upload(request); - if (response.getErrCode() != 0) { - log.error("[uploadWxaOrderShippingInfo][上传微信å°ç¨‹åºå‘è´§ä¿¡æ¯å¤±è´¥ï¼šrequest({}) response({})]", request, response); - throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_ORDER_UPLOAD_SHIPPING_INFO_ERROR, response.getErrMsg()); - } - log.info("[uploadWxaOrderShippingInfo][上传微信å°ç¨‹åºå‘è´§ä¿¡æ¯æˆåŠŸï¼šrequest({}) response({})]", request, response); - } catch (WxErrorException ex) { - log.error("[uploadWxaOrderShippingInfo][上传微信å°ç¨‹åºå‘è´§ä¿¡æ¯å¤±è´¥ï¼šrequest({})]", request, ex); - throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_ORDER_UPLOAD_SHIPPING_INFO_ERROR, ex.getError().getErrorMsg()); - } - } - - @Override - public void notifyWxaOrderConfirmReceive(Integer userType, SocialWxaOrderNotifyConfirmReceiveReqDTO reqDTO) { - WxMaService service = getWxMaService(userType); - WxMaOrderShippingInfoNotifyConfirmRequest request = WxMaOrderShippingInfoNotifyConfirmRequest.builder() - .transactionId(reqDTO.getTransactionId()) - .receivedTime(toEpochSecond(reqDTO.getReceivedTime())) - .build(); - try { - WxMaOrderShippingInfoBaseResponse response = service.getWxMaOrderShippingService().notifyConfirmReceive(request); - if (response.getErrCode() != 0) { - log.error("[notifyWxaOrderConfirmReceive][确认收货æé†’到微信å°ç¨‹åºå¤±è´¥ï¼šrequest({}) response({})]", request, response); - throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_ORDER_NOTIFY_CONFIRM_RECEIVE_ERROR, response.getErrMsg()); - } - log.info("[notifyWxaOrderConfirmReceive][确认收货æé†’到微信å°ç¨‹åºæˆåŠŸï¼šrequest({}) response({})]", request, response); - } catch (WxErrorException ex) { - log.error("[notifyWxaOrderConfirmReceive][确认收货æé†’到微信å°ç¨‹åºå¤±è´¥ï¼šrequest({})]", request, ex); - throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_ORDER_NOTIFY_CONFIRM_RECEIVE_ERROR, ex.getError().getErrorMsg()); - } - } - - /** - * 获得 clientId + clientSecret 对应的 WxMpService 对象 - * - * @param userType 用户类型 - * @return WxMpService 对象 - */ - @VisibleForTesting - WxMaService getWxMaService(Integer userType) { - // 第一步,查询 DB çš„é…置项,获得对应的 WxMaService 对象 - SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType( - SocialTypeEnum.WECHAT_MINI_PROGRAM.getType(), userType); - if (client != null && Objects.equals(client.getStatus(), CommonStatusEnum.ENABLE.getStatus())) { - return wxMaServiceCache.getUnchecked(client.getClientId() + ":" + client.getClientSecret()); - } - // 第二步,ä¸å­˜åœ¨ DB é…置项,则使用 application-*.yaml 对应的 WxMaService 对象 - return wxMaService; - } - - /** - * 创建 clientId + clientSecret 对应的 WxMaService 对象 - * - * @param clientId 微信å°ç¨‹åº appId - * @param clientSecret 微信å°ç¨‹åº secret - * @return WxMaService 对象 - */ - private WxMaService buildWxMaService(String clientId, String clientSecret) { - // 第一步,创建 WxMaRedisBetterConfigImpl 对象 - WxMaRedisBetterConfigImpl configStorage = new WxMaRedisBetterConfigImpl( - new RedisTemplateWxRedisOps(stringRedisTemplate), - wxMaProperties.getConfigStorage().getKeyPrefix()); - configStorage.setAppid(clientId); - configStorage.setSecret(clientSecret); - - // 第二步,创建 WxMpService 对象 - WxMaService service = new WxMaServiceImpl(); - service.setWxMaConfig(configStorage); - return service; - } - - // =================== å®¢æˆ·ç«¯ç®¡ç† =================== - - @Override - public Long createSocialClient(SocialClientSaveReqVO createReqVO) { - // 校验é‡å¤ - validateSocialClientUnique(null, createReqVO.getUserType(), createReqVO.getSocialType()); - - // æ’å…¥ - SocialClientDO client = BeanUtils.toBean(createReqVO, SocialClientDO.class); - socialClientMapper.insert(client); - return client.getId(); - } - - @Override - public void updateSocialClient(SocialClientSaveReqVO updateReqVO) { - // 校验存在 - validateSocialClientExists(updateReqVO.getId()); - // 校验é‡å¤ - validateSocialClientUnique(updateReqVO.getId(), updateReqVO.getUserType(), updateReqVO.getSocialType()); - - // æ›´æ–° - SocialClientDO updateObj = BeanUtils.toBean(updateReqVO, SocialClientDO.class); - socialClientMapper.updateById(updateObj); - } - - @Override - public void deleteSocialClient(Long id) { - // 校验存在 - validateSocialClientExists(id); - // 删除 - socialClientMapper.deleteById(id); - } - - @Override - public void deleteSocialClientList(List ids) { - socialClientMapper.deleteByIds(ids); - } - - private void validateSocialClientExists(Long id) { - if (socialClientMapper.selectById(id) == null) { - throw exception(SOCIAL_CLIENT_NOT_EXISTS); - } - } - - /** - * 校验社交应用是å¦é‡å¤ï¼Œéœ€è¦ä¿è¯ userType + socialType 唯一 - * 原因是,ä¸åŒç«¯ï¼ˆuserType)选择æŸä¸ªç¤¾äº¤ç™»å½•(socialType)时,需è¦é€šè¿‡ {@link #buildAuthRequest(Integer, Integer)} 构建对应的请求 - * - * @param id ç¼–å· - * @param userType 用户类型 - * @param socialType 社交类型 - */ - private void validateSocialClientUnique(Long id, Integer userType, Integer socialType) { - SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType( - socialType, userType); - if (client == null) { - return; - } - if (id == null // 新增时,说明é‡å¤ - || ObjUtil.notEqual(id, client.getId())) { // 更新时,如果 id ä¸ä¸€è‡´ï¼Œè¯´æ˜Žé‡å¤ - throw exception(SOCIAL_CLIENT_UNIQUE); - } - } - - @Override - public SocialClientDO getSocialClient(Long id) { - return socialClientMapper.selectById(id); - } - - @Override - public PageResult getSocialClientPage(SocialClientPageReqVO pageReqVO) { - return socialClientMapper.selectPage(pageReqVO); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java deleted file mode 100644 index 739ff2d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java +++ /dev/null @@ -1,89 +0,0 @@ -package cn.iocoder.yudao.module.system.service.social; - -import cn.iocoder.yudao.framework.common.exception.ServiceException; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; - -import jakarta.validation.Valid; -import java.util.List; - -/** - * 社交用户 Service 接å£ï¼Œä¾‹å¦‚说社交平å°çš„æŽˆæƒç™»å½• - * - * @author èŠ‹é“æºç  - */ -public interface SocialUserService { - - /** - * 获得指定用户的社交用户列表 - * - * @param userId ç”¨æˆ·ç¼–å· - * @param userType 用户类型 - * @return 社交用户列表 - */ - List getSocialUserList(Long userId, Integer userType); - - /** - * 绑定社交用户 - * - * @param reqDTO ç»‘å®šä¿¡æ¯ - * @return 社交用户 openid - */ - String bindSocialUser(@Valid SocialUserBindReqDTO reqDTO); - - /** - * å–æ¶ˆç»‘定社交用户 - * - * @param userId ç”¨æˆ·ç¼–å· - * @param userType 全局用户类型 - * @param socialType 社交平å°çš„类型 {@link SocialTypeEnum} - * @param openid 社交平å°çš„ openid - */ - void unbindSocialUser(Long userId, Integer userType, Integer socialType, String openid); - - /** - * 获得社交用户,基于 userId - * - * @param userType 用户类型 - * @param userId ç”¨æˆ·ç¼–å· - * @param socialType 社交平å°çš„类型 - * @return 社交用户 - */ - SocialUserRespDTO getSocialUserByUserId(Integer userType, Long userId, Integer socialType); - - /** - * 获得社交用户 - * - * 在认è¯ä¿¡æ¯ä¸æ­£ç¡®çš„æƒ…况下,也会抛出 {@link ServiceException} 业务异常 - * - * @param userType 用户类型 - * @param socialType 社交平å°çš„类型 - * @param code 授æƒç  - * @param state state - * @return 社交用户 - */ - SocialUserRespDTO getSocialUserByCode(Integer userType, Integer socialType, String code, String state); - - // ==================== 社交用户 CRUD ==================== - - /** - * 获得社交用户 - * - * @param id ç¼–å· - * @return 社交用户 - */ - SocialUserDO getSocialUser(Long id); - - /** - * 获得社交用户分页 - * - * @param pageReqVO 分页查询 - * @return 社交用户分页 - */ - PageResult getSocialUserPage(SocialUserPageReqVO pageReqVO); - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java deleted file mode 100644 index 476f31a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java +++ /dev/null @@ -1,173 +0,0 @@ -package cn.iocoder.yudao.module.system.service.social; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.Assert; -import cn.iocoder.yudao.framework.common.exception.ServiceException; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; -import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserBindMapper; -import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserMapper; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import jakarta.annotation.Resource; -import jakarta.validation.constraints.NotNull; -import lombok.extern.slf4j.Slf4j; -import me.zhyd.oauth.model.AuthUser; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; - -import java.util.Collections; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; -import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_NOT_FOUND; - -/** - * 社交用户 Service 实现类 - * - * @author èŠ‹é“æºç  - */ -@Service -@Validated -@Slf4j -public class SocialUserServiceImpl implements SocialUserService { - - @Resource - private SocialUserBindMapper socialUserBindMapper; - @Resource - private SocialUserMapper socialUserMapper; - - @Resource - private SocialClientService socialClientService; - - @Override - public List getSocialUserList(Long userId, Integer userType) { - // 获得绑定 - List socialUserBinds = socialUserBindMapper.selectListByUserIdAndUserType(userId, userType); - if (CollUtil.isEmpty(socialUserBinds)) { - return Collections.emptyList(); - } - // 获得社交用户 - return socialUserMapper.selectByIds(convertSet(socialUserBinds, SocialUserBindDO::getSocialUserId)); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public String bindSocialUser(SocialUserBindReqDTO reqDTO) { - // 获得社交用户 - SocialUserDO socialUser = authSocialUser(reqDTO.getSocialType(), reqDTO.getUserType(), - reqDTO.getCode(), reqDTO.getState()); - Assert.notNull(socialUser, "社交用户ä¸èƒ½ä¸ºç©º"); - - // 社交用户å¯èƒ½ä¹‹å‰ç»‘定过别的用户,需è¦è¿›è¡Œè§£ç»‘ - socialUserBindMapper.deleteByUserTypeAndSocialUserId(reqDTO.getUserType(), socialUser.getId()); - - // 用户å¯èƒ½ä¹‹å‰å·²ç»ç»‘定过该社交类型,需è¦è¿›è¡Œè§£ç»‘ - socialUserBindMapper.deleteByUserTypeAndUserIdAndSocialType(reqDTO.getUserType(), reqDTO.getUserId(), - socialUser.getType()); - - // 绑定当å‰ç™»å½•的社交用户 - SocialUserBindDO socialUserBind = SocialUserBindDO.builder() - .userId(reqDTO.getUserId()).userType(reqDTO.getUserType()) - .socialUserId(socialUser.getId()).socialType(socialUser.getType()).build(); - socialUserBindMapper.insert(socialUserBind); - return socialUser.getOpenid(); - } - - @Override - public void unbindSocialUser(Long userId, Integer userType, Integer socialType, String openid) { - // 获得 openid 对应的 SocialUserDO 社交用户 - SocialUserDO socialUser = socialUserMapper.selectByTypeAndOpenid(socialType, openid); - if (socialUser == null) { - throw exception(SOCIAL_USER_NOT_FOUND); - } - - // 获得对应的社交绑定关系 - socialUserBindMapper.deleteByUserTypeAndUserIdAndSocialType(userType, userId, socialUser.getType()); - } - - @Override - public SocialUserRespDTO getSocialUserByUserId(Integer userType, Long userId, Integer socialType) { - // 获得绑定用户 - SocialUserBindDO socialUserBind = socialUserBindMapper.selectByUserIdAndUserTypeAndSocialType(userId, userType, socialType); - if (socialUserBind == null) { - return null; - } - // 获得社交用户 - SocialUserDO socialUser = socialUserMapper.selectById(socialUserBind.getSocialUserId()); - Assert.notNull(socialUser, "社交用户ä¸èƒ½ä¸ºç©º"); - return new SocialUserRespDTO(socialUser.getOpenid(), socialUser.getNickname(), socialUser.getAvatar(), - socialUserBind.getUserId()); - } - - @Override - public SocialUserRespDTO getSocialUserByCode(Integer userType, Integer socialType, String code, String state) { - // 获得社交用户 - SocialUserDO socialUser = authSocialUser(socialType, userType, code, state); - Assert.notNull(socialUser, "社交用户ä¸èƒ½ä¸ºç©º"); - - // 获得绑定用户 - SocialUserBindDO socialUserBind = socialUserBindMapper.selectByUserTypeAndSocialUserId(userType, - socialUser.getId()); - return new SocialUserRespDTO(socialUser.getOpenid(), socialUser.getNickname(), socialUser.getAvatar(), - socialUserBind != null ? socialUserBind.getUserId() : null); - } - - /** - * 授æƒèŽ·å¾—å¯¹åº”çš„ç¤¾äº¤ç”¨æˆ· - * 如果授æƒå¤±è´¥ï¼Œåˆ™ä¼šæŠ›å‡º {@link ServiceException} 异常 - * - * @param socialType 社交平å°çš„类型 {@link SocialTypeEnum} - * @param userType 用户类型 - * @param code 授æƒç  - * @param state state - * @return 授æƒç”¨æˆ· - */ - @NotNull - public SocialUserDO authSocialUser(Integer socialType, Integer userType, String code, String state) { - // 优先从 DB 中获å–,因为 code 有且å¯ä»¥ä½¿ç”¨ä¸€æ¬¡ã€‚ - // 在社交登录时,当未绑定 User 时,需è¦ç»‘å®šç™»å½•ï¼Œæ­¤æ—¶éœ€è¦ code 使用两次 - SocialUserDO socialUser = socialUserMapper.selectByTypeAndCodeAnState(socialType, code, state); - if (socialUser != null) { - return socialUser; - } - - // è¯·æ±‚èŽ·å– - AuthUser authUser = socialClientService.getAuthUser(socialType, userType, code, state); - Assert.notNull(authUser, "三方用户ä¸èƒ½ä¸ºç©º"); - - // ä¿å­˜åˆ° DB 中 - socialUser = socialUserMapper.selectByTypeAndOpenid(socialType, authUser.getUuid()); - if (socialUser == null) { - socialUser = new SocialUserDO(); - } - socialUser.setType(socialType).setCode(code).setState(state) // 需è¦ä¿å­˜ code + state 字段,ä¿è¯åŽç»­å¯æŸ¥è¯¢ - .setOpenid(authUser.getUuid()).setToken(authUser.getToken().getAccessToken()).setRawTokenInfo((toJsonString(authUser.getToken()))) - .setNickname(authUser.getNickname()).setAvatar(authUser.getAvatar()).setRawUserInfo(toJsonString(authUser.getRawUserInfo())); - if (socialUser.getId() == null) { - socialUserMapper.insert(socialUser); - } else { - socialUserMapper.updateById(socialUser); - } - return socialUser; - } - - // ==================== 社交用户 CRUD ==================== - - @Override - public SocialUserDO getSocialUser(Long id) { - return socialUserMapper.selectById(id); - } - - @Override - public PageResult getSocialUserPage(SocialUserPageReqVO pageReqVO) { - return socialUserMapper.selectPage(pageReqVO); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2OpenControllerTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2OpenControllerTest.java deleted file mode 100644 index 7848272..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2OpenControllerTest.java +++ /dev/null @@ -1,337 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.oauth2; - -import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.date.LocalDateTimeUtil; -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.common.core.KeyValue; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.exception.ErrorCode; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.collection.SetUtils; -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.open.OAuth2OpenAccessTokenRespVO; -import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.open.OAuth2OpenAuthorizeInfoRespVO; -import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.open.OAuth2OpenCheckTokenRespVO; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ApproveDO; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ClientDO; -import cn.iocoder.yudao.module.system.enums.oauth2.OAuth2GrantTypeEnum; -import cn.iocoder.yudao.module.system.service.oauth2.OAuth2ApproveService; -import cn.iocoder.yudao.module.system.service.oauth2.OAuth2ClientService; -import cn.iocoder.yudao.module.system.service.oauth2.OAuth2GrantService; -import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService; -import org.assertj.core.util.Lists; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import jakarta.servlet.http.HttpServletRequest; -import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; -import static java.util.Arrays.asList; -import static org.hamcrest.CoreMatchers.anyOf; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.ArgumentMatchers.isNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -/** - * {@link OAuth2OpenController} çš„å•元测试 - * - * @author èŠ‹é“æºç  - */ -public class OAuth2OpenControllerTest extends BaseMockitoUnitTest { - - @InjectMocks - private OAuth2OpenController oauth2OpenController; - - @Mock - private OAuth2GrantService oauth2GrantService; - @Mock - private OAuth2ClientService oauth2ClientService; - @Mock - private OAuth2ApproveService oauth2ApproveService; - @Mock - private OAuth2TokenService oauth2TokenService; - - @Test - public void testPostAccessToken_authorizationCode() { - // 准备傿•° - String granType = OAuth2GrantTypeEnum.AUTHORIZATION_CODE.getGrantType(); - String code = randomString(); - String redirectUri = randomString(); - String state = randomString(); - HttpServletRequest request = mockRequest("test_client_id", "test_client_secret"); - // mock 方法(client) - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class).setClientId("test_client_id"); - when(oauth2ClientService.validOAuthClientFromCache(eq("test_client_id"), eq("test_client_secret"), eq(granType), eq(new ArrayList<>()), eq(redirectUri))).thenReturn(client); - - // mock 方法(访问令牌) - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class) - .setExpiresTime(LocalDateTimeUtil.offset(LocalDateTime.now(), 30000L, ChronoUnit.MILLIS)); - when(oauth2GrantService.grantAuthorizationCodeForAccessToken(eq("test_client_id"), - eq(code), eq(redirectUri), eq(state))).thenReturn(accessTokenDO); - - // 调用 - CommonResult result = oauth2OpenController.postAccessToken(request, granType, - code, redirectUri, state, null, null, null, null); - // 断言 - assertEquals(0, result.getCode()); - assertPojoEquals(accessTokenDO, result.getData()); - assertTrue(ObjectUtils.equalsAny(result.getData().getExpiresIn(), 29L, 30L)); // 执行过程会过去几毫秒 - } - - @Test - public void testPostAccessToken_password() { - // 准备傿•° - String granType = OAuth2GrantTypeEnum.PASSWORD.getGrantType(); - String username = randomString(); - String password = randomString(); - String scope = "write read"; - HttpServletRequest request = mockRequest("test_client_id", "test_client_secret"); - // mock 方法(client) - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class).setClientId("test_client_id"); - when(oauth2ClientService.validOAuthClientFromCache(eq("test_client_id"), eq("test_client_secret"), - eq(granType), eq(Lists.newArrayList("write", "read")), isNull())).thenReturn(client); - - // mock 方法(访问令牌) - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class) - .setExpiresTime(LocalDateTimeUtil.offset(LocalDateTime.now(), 30000L, ChronoUnit.MILLIS)); - when(oauth2GrantService.grantPassword(eq(username), eq(password), eq("test_client_id"), - eq(Lists.newArrayList("write", "read")))).thenReturn(accessTokenDO); - - // 调用 - CommonResult result = oauth2OpenController.postAccessToken(request, granType, - null, null, null, username, password, scope, null); - // 断言 - assertEquals(0, result.getCode()); - assertPojoEquals(accessTokenDO, result.getData()); - assertTrue(ObjectUtils.equalsAny(result.getData().getExpiresIn(), 29L, 30L)); // 执行过程会过去几毫秒 - } - - @Test - public void testPostAccessToken_refreshToken() { - // 准备傿•° - String granType = OAuth2GrantTypeEnum.REFRESH_TOKEN.getGrantType(); - String refreshToken = randomString(); - String password = randomString(); - HttpServletRequest request = mockRequest("test_client_id", "test_client_secret"); - // mock 方法(client) - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class).setClientId("test_client_id"); - when(oauth2ClientService.validOAuthClientFromCache(eq("test_client_id"), eq("test_client_secret"), - eq(granType), eq(Lists.newArrayList()), isNull())).thenReturn(client); - - // mock 方法(访问令牌) - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class) - .setExpiresTime(LocalDateTimeUtil.offset(LocalDateTime.now(), 30000L, ChronoUnit.MILLIS)); - when(oauth2GrantService.grantRefreshToken(eq(refreshToken), eq("test_client_id"))).thenReturn(accessTokenDO); - - // 调用 - CommonResult result = oauth2OpenController.postAccessToken(request, granType, - null, null, null, null, password, null, refreshToken); - // 断言 - assertEquals(0, result.getCode()); - assertPojoEquals(accessTokenDO, result.getData()); - assertTrue(ObjectUtils.equalsAny(result.getData().getExpiresIn(), 29L, 30L)); // 执行过程会过去几毫秒 - } - - @Test - public void testPostAccessToken_implicit() { - // 调用,并断言 - assertServiceException(() -> oauth2OpenController.postAccessToken(null, - OAuth2GrantTypeEnum.IMPLICIT.getGrantType(), null, null, null, - null, null, null, null), - new ErrorCode(400, "Token 接å£ä¸æ”¯æŒ implicit æŽˆæƒæ¨¡å¼")); - } - - @Test - public void testRevokeToken() { - // 准备傿•° - HttpServletRequest request = mockRequest("demo_client_id", "demo_client_secret"); - String token = randomString(); - // mock 方法(client) - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class).setClientId("demo_client_id"); - when(oauth2ClientService.validOAuthClientFromCache(eq("demo_client_id"), - eq("demo_client_secret"), isNull(), isNull(), isNull())).thenReturn(client); - // mock 方法(移除) - when(oauth2GrantService.revokeToken(eq("demo_client_id"), eq(token))).thenReturn(true); - - // 调用 - CommonResult result = oauth2OpenController.revokeToken(request, token); - // 断言 - assertEquals(0, result.getCode()); - assertTrue(result.getData()); - } - - @Test - public void testCheckToken() { - // 准备傿•° - HttpServletRequest request = mockRequest("demo_client_id", "demo_client_secret"); - String token = randomString(); - // mock 方法 - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class).setUserType(UserTypeEnum.ADMIN.getValue()).setExpiresTime(LocalDateTimeUtil.of(1653485731195L)); - when(oauth2TokenService.checkAccessToken(eq(token))).thenReturn(accessTokenDO); - - // 调用 - CommonResult result = oauth2OpenController.checkToken(request, token); - // 断言 - assertEquals(0, result.getCode()); - assertPojoEquals(accessTokenDO, result.getData()); - assertEquals(1653485731L, result.getData().getExp()); // 执行过程会过去几毫秒 - } - - @Test - public void testAuthorize() { - // 准备傿•° - String clientId = randomString(); - // mock 方法(client) - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class).setClientId("demo_client_id").setScopes(ListUtil.toList("read", "write", "all")); - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId))).thenReturn(client); - // mock 方法(approve) - List approves = asList( - randomPojo(OAuth2ApproveDO.class).setScope("read").setApproved(true), - randomPojo(OAuth2ApproveDO.class).setScope("write").setApproved(false)); - when(oauth2ApproveService.getApproveList(isNull(), eq(UserTypeEnum.ADMIN.getValue()), eq(clientId))).thenReturn(approves); - - // 调用 - CommonResult result = oauth2OpenController.authorize(clientId); - // 断言 - assertEquals(0, result.getCode()); - assertPojoEquals(client, result.getData().getClient()); - assertEquals(new KeyValue<>("read", true), result.getData().getScopes().get(0)); - assertEquals(new KeyValue<>("write", false), result.getData().getScopes().get(1)); - assertEquals(new KeyValue<>("all", false), result.getData().getScopes().get(2)); - } - - @Test - public void testApproveOrDeny_grantTypeError() { - // 调用,并断言 - assertServiceException(() -> oauth2OpenController.approveOrDeny(randomString(), null, - null, null, null, null), - new ErrorCode(400, "response_type 傿•°å€¼åªå…许 code å’Œ token")); - } - - @Test // autoApprove = true,但是ä¸é€šè¿‡ - public void testApproveOrDeny_autoApproveNo() { - // 准备傿•° - String responseType = "code"; - String clientId = randomString(); - String scope = "{\"read\": true, \"write\": false}"; - String redirectUri = randomString(); - String state = randomString(); - // mock 方法 - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class); - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId), isNull(), eq("authorization_code"), - eq(asSet("read", "write")), eq(redirectUri))).thenReturn(client); - - // 调用 - CommonResult result = oauth2OpenController.approveOrDeny(responseType, clientId, - scope, redirectUri, true, state); - // 断言 - assertEquals(0, result.getCode()); - assertNull(result.getData()); - } - - @Test // autoApprove = false,但是ä¸é€šè¿‡ - public void testApproveOrDeny_ApproveNo() { - // 准备傿•° - String responseType = "token"; - String clientId = randomString(); - String scope = "{\"read\": true, \"write\": false}"; - String redirectUri = "https://www.iocoder.cn"; - String state = "test"; - // mock 方法 - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class); - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId), isNull(), eq("implicit"), - eq(asSet("read", "write")), eq(redirectUri))).thenReturn(client); - - // 调用 - CommonResult result = oauth2OpenController.approveOrDeny(responseType, clientId, - scope, redirectUri, false, state); - // 断言 - assertEquals(0, result.getCode()); - assertEquals("https://www.iocoder.cn#error=access_denied&error_description=User%20denied%20access&state=test", result.getData()); - } - - @Test // autoApprove = true,通过 + token - public void testApproveOrDeny_autoApproveWithToken() { - // 准备傿•° - String responseType = "token"; - String clientId = randomString(); - String scope = "{\"read\": true, \"write\": false}"; - String redirectUri = "https://www.iocoder.cn"; - String state = "test"; - // mock 方法(client) - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class).setClientId(clientId).setAdditionalInformation(null); - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId), isNull(), eq("implicit"), - eq(asSet("read", "write")), eq(redirectUri))).thenReturn(client); - // mock 方法(场景一) - when(oauth2ApproveService.checkForPreApproval(isNull(), eq(UserTypeEnum.ADMIN.getValue()), - eq(clientId), eq(SetUtils.asSet("read", "write")))).thenReturn(true); - // mock 方法(访问令牌) - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class) - .setAccessToken("test_access_token").setExpiresTime(LocalDateTimeUtil.offset(LocalDateTime.now(), 30010L, ChronoUnit.MILLIS)); - when(oauth2GrantService.grantImplicit(isNull(), eq(UserTypeEnum.ADMIN.getValue()), - eq(clientId), eq(ListUtil.toList("read")))).thenReturn(accessTokenDO); - - // 调用 - CommonResult result = oauth2OpenController.approveOrDeny(responseType, clientId, - scope, redirectUri, true, state); - // 断言 - assertEquals(0, result.getCode()); - assertThat(result.getData(), anyOf( // 29 å’Œ 30 éƒ½æœ‰ä¸€å®šæ¦‚çŽ‡ï¼Œä¸»è¦æ˜¯æ—¶é—´è®¡ç®— - is("https://www.iocoder.cn#access_token=test_access_token&token_type=bearer&state=test&expires_in=29&scope=read"), - is("https://www.iocoder.cn#access_token=test_access_token&token_type=bearer&state=test&expires_in=30&scope=read") - )); - } - - @Test // autoApprove = false,通过 + code - public void testApproveOrDeny_approveWithCode() { - // 准备傿•° - String responseType = "code"; - String clientId = randomString(); - String scope = "{\"read\": true, \"write\": false}"; - String redirectUri = "https://www.iocoder.cn"; - String state = "test"; - // mock 方法(client) - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class).setClientId(clientId).setAdditionalInformation(null); - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId), isNull(), eq("authorization_code"), - eq(asSet("read", "write")), eq(redirectUri))).thenReturn(client); - // mock 方法(场景二) - when(oauth2ApproveService.updateAfterApproval(isNull(), eq(UserTypeEnum.ADMIN.getValue()), eq(clientId), - eq(MapUtil.builder(new LinkedHashMap()).put("read", true).put("write", false).build()))) - .thenReturn(true); - // mock 方法(访问令牌) - String authorizationCode = "test_code"; - when(oauth2GrantService.grantAuthorizationCodeForCode(isNull(), eq(UserTypeEnum.ADMIN.getValue()), - eq(clientId), eq(ListUtil.toList("read")), eq(redirectUri), eq(state))).thenReturn(authorizationCode); - - // 调用 - CommonResult result = oauth2OpenController.approveOrDeny(responseType, clientId, - scope, redirectUri, false, state); - // 断言 - assertEquals(0, result.getCode()); - assertEquals("https://www.iocoder.cn?code=test_code&state=test", result.getData()); - } - - private HttpServletRequest mockRequest(String clientId, String secret) { - HttpServletRequest request = mock(HttpServletRequest.class); - when(request.getParameter(eq("client_id"))).thenReturn(clientId); - when(request.getParameter(eq("client_secret"))).thenReturn(secret); - return request; - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/AliyunSmsClientTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/AliyunSmsClientTest.java deleted file mode 100644 index b04f426..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/AliyunSmsClientTest.java +++ /dev/null @@ -1,160 +0,0 @@ -package cn.iocoder.yudao.module.system.framework.sms.core.client.impl; - -import cn.iocoder.yudao.framework.common.core.KeyValue; -import cn.iocoder.yudao.framework.common.util.http.HttpUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsSendRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; -import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProperties; -import com.google.common.collect.Lists; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.MockedStatic; -import org.mockito.stubbing.Answer; - -import java.time.LocalDateTime; -import java.util.List; - -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.anyMap; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mockStatic; - -/** - * {@link cn.iocoder.yudao.module.system.framework.sms.core.client.impl.AliyunSmsClient} çš„å•元测试 - * - * @author èŠ‹é“æºç  - */ -public class AliyunSmsClientTest extends BaseMockitoUnitTest { - - private final SmsChannelProperties properties = new SmsChannelProperties() - .setApiKey(randomString()) // éšæœºä¸€ä¸ª apiKey,é¿å…构建报错 - .setApiSecret(randomString()) // éšæœºä¸€ä¸ª apiSecret,é¿å…构建报错 - .setSignature("èŠ‹é“æºç "); - - @InjectMocks - private final AliyunSmsClient smsClient = new AliyunSmsClient(properties); - - @Test - public void tesSendSms_success() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - Long sendLogId = randomLongId(); - String mobile = randomString(); - String apiTemplateId = randomString(); - List> templateParams = Lists.newArrayList( - new KeyValue<>("code", 1234), new KeyValue<>("op", "login")); - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{\"Message\":\"OK\",\"RequestId\":\"30067CE9-3710-5984-8881-909B21D8DB28\",\"Code\":\"OK\",\"BizId\":\"800025323183427988\"}"); - httpUtilsMockedStatic.when(() -> HttpUtils.encodeUtf8(anyString())) - .then((Answer) invocationOnMock -> (String) invocationOnMock.getArguments()[0]); - - // 调用 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, - apiTemplateId, templateParams); - // 断言 - assertTrue(result.getSuccess()); - assertEquals("30067CE9-3710-5984-8881-909B21D8DB28", result.getApiRequestId()); - assertEquals("OK", result.getApiCode()); - assertEquals("OK", result.getApiMsg()); - assertEquals("800025323183427988", result.getSerialNo()); - } - } - - @Test - public void tesSendSms_fail() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - Long sendLogId = randomLongId(); - String mobile = randomString(); - String apiTemplateId = randomString(); - List> templateParams = Lists.newArrayList( - new KeyValue<>("code", 1234), new KeyValue<>("op", "login")); - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{\"Message\":\"手机å·ç æ ¼å¼é”™è¯¯\",\"RequestId\":\"B7700B8E-227E-5886-9564-26036172F01F\",\"Code\":\"isv.MOBILE_NUMBER_ILLEGAL\"}"); - httpUtilsMockedStatic.when(() -> HttpUtils.encodeUtf8(anyString())) - .then((Answer) invocationOnMock -> (String) invocationOnMock.getArguments()[0]); - - // 调用 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, apiTemplateId, templateParams); - // 断言 - assertFalse(result.getSuccess()); - assertEquals("B7700B8E-227E-5886-9564-26036172F01F", result.getApiRequestId()); - assertEquals("isv.MOBILE_NUMBER_ILLEGAL", result.getApiCode()); - assertEquals("手机å·ç æ ¼å¼é”™è¯¯", result.getApiMsg()); - assertNull(result.getSerialNo()); - } - } - - @Test - public void testParseSmsReceiveStatus() { - // 准备傿•° - String text = "[\n" + - " {\n" + - " \"phone_number\" : \"13900000001\",\n" + - " \"send_time\" : \"2017-01-01 11:12:13\",\n" + - " \"report_time\" : \"2017-02-02 22:23:24\",\n" + - " \"success\" : true,\n" + - " \"err_code\" : \"DELIVERED\",\n" + - " \"err_msg\" : \"用户接收æˆåŠŸ\",\n" + - " \"sms_size\" : \"1\",\n" + - " \"biz_id\" : \"12345\",\n" + - " \"out_id\" : \"67890\"\n" + - " }\n" + - "]"; - // mock 方法 - - // 调用 - List statuses = smsClient.parseSmsReceiveStatus(text); - // 断言 - assertEquals(1, statuses.size()); - assertTrue(statuses.get(0).getSuccess()); - assertEquals("DELIVERED", statuses.get(0).getErrorCode()); - assertEquals("用户接收æˆåŠŸ", statuses.get(0).getErrorMsg()); - assertEquals("13900000001", statuses.get(0).getMobile()); - assertEquals(LocalDateTime.of(2017, 2, 2, 22, 23, 24), - statuses.get(0).getReceiveTime()); - assertEquals("12345", statuses.get(0).getSerialNo()); - assertEquals(67890L, statuses.get(0).getLogId()); - } - - @Test - public void testGetSmsTemplate() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - String apiTemplateId = randomString(); - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{\"TemplateCode\":\"SMS_207945135\",\"RequestId\":\"6F4CC077-29C8-5BA5-AB62-5FF95068A5AC\",\"Message\":\"OK\",\"TemplateContent\":\"您的验è¯ç ${code},该验è¯ç 5分钟内有效,请勿泄æ¼äºŽä»–人ï¼\",\"TemplateName\":\"公告通知\",\"TemplateType\":0,\"Code\":\"OK\",\"CreateDate\":\"2020-12-23 17:34:42\",\"Reason\":\"无审批备注\",\"TemplateStatus\":1}"); - httpUtilsMockedStatic.when(() -> HttpUtils.encodeUtf8(anyString())) - .then((Answer) invocationOnMock -> (String) invocationOnMock.getArguments()[0]); - - // 调用 - SmsTemplateRespDTO result = smsClient.getSmsTemplate(apiTemplateId); - // 断言 - assertEquals("SMS_207945135", result.getId()); - assertEquals("您的验è¯ç ${code},该验è¯ç 5分钟内有效,请勿泄æ¼äºŽä»–人ï¼", result.getContent()); - assertEquals(SmsTemplateAuditStatusEnum.SUCCESS.getStatus(), result.getAuditStatus()); - assertEquals("无审批备注", result.getAuditReason()); - } - } - - @Test - public void testConvertSmsTemplateAuditStatus() { - assertEquals(SmsTemplateAuditStatusEnum.CHECKING.getStatus(), - smsClient.convertSmsTemplateAuditStatus(0)); - assertEquals(SmsTemplateAuditStatusEnum.SUCCESS.getStatus(), - smsClient.convertSmsTemplateAuditStatus(1)); - assertEquals(SmsTemplateAuditStatusEnum.FAIL.getStatus(), - smsClient.convertSmsTemplateAuditStatus(2)); - assertThrows(IllegalArgumentException.class, () -> smsClient.convertSmsTemplateAuditStatus(3), - "未知审核状æ€(3)"); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/HuaweiSmsClientTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/HuaweiSmsClientTest.java deleted file mode 100644 index 9d24d09..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/HuaweiSmsClientTest.java +++ /dev/null @@ -1,127 +0,0 @@ -package cn.iocoder.yudao.module.system.framework.sms.core.client.impl; - -import cn.iocoder.yudao.framework.common.core.KeyValue; -import cn.iocoder.yudao.framework.common.util.http.HttpUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsSendRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProperties; -import com.google.common.collect.Lists; - -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.MockedStatic; - -import java.time.LocalDateTime; -import java.util.List; - -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mockStatic; - -/** - * {@link HuaweiSmsClient} çš„å•元测试 - * - * @author scholar - */ -public class HuaweiSmsClientTest extends BaseMockitoUnitTest { - - private final SmsChannelProperties properties = new SmsChannelProperties() - .setApiKey(randomString() + " " + randomString()) // éšæœºä¸€ä¸ª apiKey,é¿å…构建报错 - .setApiSecret(randomString()) // éšæœºä¸€ä¸ª apiSecret,é¿å…构建报错 - .setSignature("èŠ‹é“æºç "); - - @InjectMocks - private HuaweiSmsClient smsClient = new HuaweiSmsClient(properties); - - @Test - public void testDoSendSms_success() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - Long sendLogId = randomLongId(); - String mobile = randomString(); - String apiTemplateId = randomString() + " " + randomString(); - List> templateParams = Lists.newArrayList( - new KeyValue<>("1", 1234), new KeyValue<>("2", "login")); - - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{\"result\":[{\"originTo\":\"+86155****5678\",\"createTime\":\"2018-05-25T16:34:34Z\",\"from\":\"1069********0012\",\"smsMsgId\":\"d6e3cdd0-522b-4692-8304-a07553cdf591_8539659\",\"status\":\"000000\",\"countryId\":\"CN\",\"total\":2}],\"code\":\"000000\",\"description\":\"Success\"}\n"); - - // 调用 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, - apiTemplateId, templateParams); - // 断言 - assertTrue(result.getSuccess()); - assertEquals("d6e3cdd0-522b-4692-8304-a07553cdf591_8539659", result.getSerialNo()); - assertEquals("000000", result.getApiCode()); - } - } - - @Test - public void testDoSendSms_fail_01() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - Long sendLogId = randomLongId(); - String mobile = randomString(); - String apiTemplateId = randomString() + " " + randomString(); - List> templateParams = Lists.newArrayList( - new KeyValue<>("1", 1234), new KeyValue<>("2", "login")); - - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{\"result\":[{\"total\":1,\"originTo\":\"17321315478\",\"createTime\":\"2024-08-18T11:32:20Z\",\"from\":\"x8824060312575\",\"smsMsgId\":\"06e4b966-ad87-479f-8b74-f57fb7aafb60_304613461\",\"countryId\":\"CN\",\"status\":\"E200033\"}],\"code\":\"E000510\",\"description\":\"The SMS fails to be sent. For details, see status.\"}"); - - // 调用 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, - apiTemplateId, templateParams); - // 断言 - assertFalse(result.getSuccess()); - assertEquals("06e4b966-ad87-479f-8b74-f57fb7aafb60_304613461", result.getSerialNo()); - assertEquals("E200033", result.getApiCode()); - } - } - - @Test - public void testDoSendSms_fail_02() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - Long sendLogId = randomLongId(); - String mobile = randomString(); - String apiTemplateId = randomString() + " " + randomString(); - List> templateParams = Lists.newArrayList( - new KeyValue<>("1", 1234), new KeyValue<>("2", "login")); - - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{\"code\":\"E000102\",\"description\":\"Invalid app_key.\"}"); - - // 调用 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, - apiTemplateId, templateParams); - // 断言 - assertFalse(result.getSuccess()); - assertEquals("E000102", result.getApiCode()); - assertEquals("Invalid app_key.", result.getApiMsg()); - } - } - - @Test - public void testParseSmsReceiveStatus() { - // 准备傿•° - String text = "sequence=1&total=1&statusDesc=%E7%94%A8%E6%88%B7%E5%B7%B2%E6%88%90%E5%8A%9F%E6%94%B6%E5%88%B0%E7%9F%AD%E4%BF%A1&updateTime=2024-08-15T03%3A00%3A34Z&source=2&smsMsgId=70207ed7-1d02-41b0-8537-bb25fd1c2364_143684459&status=DELIVRD&extend=176"; - - // 调用 - List statuses = smsClient.parseSmsReceiveStatus(text); - // 断言 - assertEquals(1, statuses.size()); - SmsReceiveRespDTO status = statuses.get(0); - assertTrue(status.getSuccess()); - assertEquals("DELIVRD", status.getErrorCode()); - assertEquals(LocalDateTime.of(2024, 8, 15, 3, 0, 34), status.getReceiveTime()); - assertEquals("70207ed7-1d02-41b0-8537-bb25fd1c2364_143684459", status.getSerialNo()); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/QiniuSmsClientTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/QiniuSmsClientTest.java deleted file mode 100644 index 50c38c1..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/QiniuSmsClientTest.java +++ /dev/null @@ -1,131 +0,0 @@ -package cn.iocoder.yudao.module.system.framework.sms.core.client.impl; - -import cn.iocoder.yudao.framework.common.core.KeyValue; -import cn.iocoder.yudao.framework.common.util.http.HttpUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsSendRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; -import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProperties; -import com.google.common.collect.Lists; - -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.MockedStatic; - -import java.time.LocalDateTime; -import java.util.List; - -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mockStatic; - -/** - * {@link QiniuSmsClient} çš„å•元测试 - * - * @author scholar - */ -public class QiniuSmsClientTest extends BaseMockitoUnitTest { - - private final SmsChannelProperties properties = new SmsChannelProperties() - .setApiKey(randomString())// éšæœºä¸€ä¸ª apiKey,é¿å…构建报错 - .setApiSecret(randomString()) // éšæœºä¸€ä¸ª apiSecret,é¿å…构建报错 - .setSignature("èŠ‹é“æºç "); - - @InjectMocks - private QiniuSmsClient smsClient = new QiniuSmsClient(properties); - - @Test - public void testDoSendSms_success() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - Long sendLogId = randomLongId(); - String mobile = randomString(); - String apiTemplateId = randomString() + " " + randomString(); - List> templateParams = Lists.newArrayList( - new KeyValue<>("1", 1234), new KeyValue<>("2", "login")); - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{\"message_id\":\"17245678901\"}"); - // 调用 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, - apiTemplateId, templateParams); - // 断言 - assertTrue(result.getSuccess()); - assertEquals("17245678901", result.getSerialNo()); - } - } - - @Test - public void testDoSendSms_fail() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - Long sendLogId = randomLongId(); - String mobile = randomString(); - String apiTemplateId = randomString() + " " + randomString(); - List> templateParams = Lists.newArrayList( - new KeyValue<>("1", 1234), new KeyValue<>("2", "login")); - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{\"error\":\"BadToken\",\"message\":\"Your authorization token is invalid\",\"request_id\":\"etziWcJFo1C8Ne8X\"}"); - // 调用 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, - apiTemplateId, templateParams); - // 断言 - assertFalse(result.getSuccess()); - assertEquals("BadToken", result.getApiCode()); - assertEquals("Your authorization token is invalid", result.getApiMsg()); - assertEquals("etziWcJFo1C8Ne8X", result.getApiRequestId()); - } - } - - @Test - public void testGetSmsTemplate() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - String apiTemplateId = randomString(); - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.get(anyString(), anyMap())) - .thenReturn("{\"audit_status\":\"passed\",\"created_at\":1724231187,\"description\":\"\",\"disable_broadcast\":false,\"disable_broadcast_reason\":\"\",\"disable_reason\":\"\",\"disabled\":false,\"id\":\"1826184073773596672\",\"is_oversea\":false,\"name\":\"dd\",\"parameters\":[\"code\"],\"reject_reason\":\"\",\"signature_id\":\"1826099896017498112\",\"signature_text\":\"yudao\",\"template\":\"您的验è¯ç ä¸ºï¼š${code}\",\"type\":\"verification\",\"uid\":1383022432,\"updated_at\":1724288561,\"variable_count\":0}"); - // 调用 - SmsTemplateRespDTO result = smsClient.getSmsTemplate(apiTemplateId); - // 断言 - assertEquals("1826184073773596672", result.getId()); - assertEquals("您的验è¯ç ä¸ºï¼š${code}", result.getContent()); - assertEquals(SmsTemplateAuditStatusEnum.SUCCESS.getStatus(), result.getAuditStatus()); - assertEquals("", result.getAuditReason()); - } - } - - @Test - public void testParseSmsReceiveStatus() { - // 准备傿•° - String text = "{\"items\":[{\"mobile\":\"18881234567\",\"message_id\":\"10135515063508004167\",\"status\":\"DELIVRD\",\"delivrd_at\":1724591666,\"error\":\"DELIVRD\",\"seq\":\"123\"}]}"; - // 调用 - List statuses = smsClient.parseSmsReceiveStatus(text); - // 断言 - assertEquals(1, statuses.size()); - SmsReceiveRespDTO status = statuses.get(0); - assertTrue(status.getSuccess()); - assertEquals("DELIVRD", status.getErrorMsg()); - assertEquals(LocalDateTime.of(2024, 8, 25, 21, 14, 26), status.getReceiveTime()); - assertEquals("18881234567", status.getMobile()); - assertEquals("10135515063508004167", status.getSerialNo()); - assertEquals(123, status.getLogId()); - } - - @Test - public void testConvertSmsTemplateAuditStatus() { - assertEquals(SmsTemplateAuditStatusEnum.SUCCESS.getStatus(), - smsClient.convertSmsTemplateAuditStatus("passed")); - assertEquals(SmsTemplateAuditStatusEnum.CHECKING.getStatus(), - smsClient.convertSmsTemplateAuditStatus("reviewing")); - assertEquals(SmsTemplateAuditStatusEnum.FAIL.getStatus(), - smsClient.convertSmsTemplateAuditStatus("rejected")); - assertThrows(IllegalArgumentException.class, () -> smsClient.convertSmsTemplateAuditStatus("unknown"), - "未知审核状æ€(3)"); - } -} \ No newline at end of file diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/SmsClientTests.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/SmsClientTests.java deleted file mode 100644 index faba754..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/SmsClientTests.java +++ /dev/null @@ -1,151 +0,0 @@ -package cn.iocoder.yudao.module.system.framework.sms.core.client.impl; - -import cn.hutool.core.collection.ListUtil; -import cn.iocoder.yudao.framework.common.core.KeyValue; -import cn.iocoder.yudao.module.system.framework.sms.core.client.SmsClient; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsSendRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProperties; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import java.util.List; - -/** - * å„ç§ {@link SmsClient} çš„é›†æˆæµ‹è¯• - * - * @author èŠ‹é“æºç  - */ -public class SmsClientTests { - - // ========== 阿里云 ========== - - @Test - @Disabled - public void testAliyunSmsClient_getSmsTemplate() throws Throwable { - SmsChannelProperties properties = new SmsChannelProperties() - .setApiKey(System.getenv("SMS_ALIYUN_ACCESS_KEY")) - .setApiSecret(System.getenv("SMS_ALIYUN_SECRET_KEY")); - AliyunSmsClient client = new AliyunSmsClient(properties); - // 准备傿•° - String apiTemplateId = "SMS_207945135"; - // 调用 - SmsTemplateRespDTO template = client.getSmsTemplate(apiTemplateId); - // 打å°ç»“æžœ - System.out.println(template); - } - - @Test - @Disabled - public void testAliyunSmsClient_sendSms() throws Throwable { - SmsChannelProperties properties = new SmsChannelProperties() - .setApiKey(System.getenv("SMS_ALIYUN_ACCESS_KEY")) - .setApiSecret(System.getenv("SMS_ALIYUN_SECRET_KEY")) - .setSignature("Ballcat"); - AliyunSmsClient client = new AliyunSmsClient(properties); - // 准备傿•° - Long sendLogId = System.currentTimeMillis(); - String mobile = "15601691323"; - String apiTemplateId = "SMS_207945135"; - // 调用 - SmsSendRespDTO sendRespDTO = client.sendSms(sendLogId, mobile, apiTemplateId, ListUtil.of(new KeyValue<>("code", "1024"))); - // 打å°ç»“æžœ - System.out.println(sendRespDTO); - } - - // ========== 腾讯云 ========== - - @Test - @Disabled - public void testTencentSmsClient_sendSms() throws Throwable { - String sdkAppId = "1400500458"; - SmsChannelProperties properties = new SmsChannelProperties() - .setApiKey(System.getenv("SMS_TENCENT_ACCESS_KEY") + " " + sdkAppId) - .setApiSecret(System.getenv("SMS_TENCENT_SECRET_KEY")) - .setSignature("èŠ‹é“æºç "); - TencentSmsClient client = new TencentSmsClient(properties); - // 准备傿•° - Long sendLogId = System.currentTimeMillis(); - String mobile = "15601691323"; - String apiTemplateId = "358212"; - // 调用 - SmsSendRespDTO sendRespDTO = client.sendSms(sendLogId, mobile, apiTemplateId, ListUtil.of(new KeyValue<>("code", "1024"))); - // 打å°ç»“æžœ - System.out.println(sendRespDTO); - } - - @Test - @Disabled - public void testTencentSmsClient_getSmsTemplate() throws Throwable { - String sdkAppId = "1400500458"; - SmsChannelProperties properties = new SmsChannelProperties() - .setApiKey(System.getenv("SMS_TENCENT_ACCESS_KEY") + " " + sdkAppId) - .setApiSecret(System.getenv("SMS_TENCENT_SECRET_KEY")) - .setSignature("èŠ‹é“æºç "); - TencentSmsClient client = new TencentSmsClient(properties); - // 准备傿•° - String apiTemplateId = "358212"; - // 调用 - SmsTemplateRespDTO template = client.getSmsTemplate(apiTemplateId); - // 打å°ç»“æžœ - System.out.println(template); - } - - // ========== åŽä¸ºäº‘ ========== - - @Test - @Disabled - public void testHuaweiSmsClient_sendSms() throws Throwable { - String sender = "x8824060312575"; - SmsChannelProperties properties = new SmsChannelProperties() - .setApiKey(System.getenv("SMS_HUAWEI_ACCESS_KEY") + " " + sender) - .setApiSecret(System.getenv("SMS_HUAWEI_SECRET_KEY")) - .setSignature("runpu"); - HuaweiSmsClient client = new HuaweiSmsClient(properties); - // 准备傿•° - Long sendLogId = System.currentTimeMillis(); - String mobile = "17321315478"; - String apiTemplateId = "3644cdab863546a3b718d488659a99ef"; - List> templateParams = ListUtil.of(new KeyValue<>("code", "1024")); - // 调用 - SmsSendRespDTO smsSendRespDTO = client.sendSms(sendLogId, mobile, apiTemplateId, templateParams); - // 打å°ç»“æžœ - System.out.println(smsSendRespDTO); - } - - // ========== 七牛云 ========== - - @Test - @Disabled - public void testQiniuSmsClient_sendSms() throws Throwable { - SmsChannelProperties properties = new SmsChannelProperties() - .setApiKey("SMS_QINIU_ACCESS_KEY") - .setApiSecret("SMS_QINIU_SECRET_KEY"); - QiniuSmsClient client = new QiniuSmsClient(properties); - // 准备傿•° - Long sendLogId = System.currentTimeMillis(); - String mobile = "17321315478"; - String apiTemplateId = "3644cdab863546a3b718d488659a99ef"; - List> templateParams = ListUtil.of(new KeyValue<>("code", "1122")); - // 调用 - SmsSendRespDTO smsSendRespDTO = client.sendSms(sendLogId, mobile, apiTemplateId, templateParams); - // 打å°ç»“æžœ - System.out.println(smsSendRespDTO); - } - - @Test - @Disabled - public void testQiniuSmsClient_getSmsTemplate() throws Throwable { - SmsChannelProperties properties = new SmsChannelProperties() - .setApiKey("SMS_QINIU_ACCESS_KEY") - .setApiSecret("SMS_QINIU_SECRET_KEY"); - QiniuSmsClient client = new QiniuSmsClient(properties); - // 准备傿•° - String apiTemplateId = "3644cdab863546a3b718d488659a99ef"; - // 调用 - SmsTemplateRespDTO template = client.getSmsTemplate(apiTemplateId); - // 打å°ç»“æžœ - System.out.println(template); - } -} - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/TencentSmsClientTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/TencentSmsClientTest.java deleted file mode 100644 index 060a345..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/TencentSmsClientTest.java +++ /dev/null @@ -1,218 +0,0 @@ -package cn.iocoder.yudao.module.system.framework.sms.core.client.impl; - -import cn.iocoder.yudao.framework.common.core.KeyValue; -import cn.iocoder.yudao.framework.common.util.http.HttpUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsSendRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; -import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProperties; -import com.google.common.collect.Lists; - -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.MockedStatic; - -import java.time.LocalDateTime; -import java.util.List; - -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mockStatic; - -/** - * {@link TencentSmsClient} çš„å•元测试 - * - * @author shiwp - */ -public class TencentSmsClientTest extends BaseMockitoUnitTest { - - private final SmsChannelProperties properties = new SmsChannelProperties() - .setApiKey(randomString() + " " + randomString()) // éšæœºä¸€ä¸ª apiKey,é¿å…构建报错 - .setApiSecret(randomString()) // éšæœºä¸€ä¸ª apiSecret,é¿å…构建报错 - .setSignature("èŠ‹é“æºç "); - - @InjectMocks - private TencentSmsClient smsClient = new TencentSmsClient(properties); - - @Test - public void testDoSendSms_success() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - Long sendLogId = randomLongId(); - String mobile = randomString(); - String apiTemplateId = randomString(); - List> templateParams = Lists.newArrayList( - new KeyValue<>("1", 1234), new KeyValue<>("2", "login")); - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{\n" + - " \"Response\": {\n" + - " \"SendStatusSet\": [\n" + - " {\n" + - " \"SerialNo\": \"5000:1045710669157053657849499619\",\n" + - " \"PhoneNumber\": \"+8618511122233\",\n" + - " \"Fee\": 1,\n" + - " \"SessionContext\": \"test\",\n" + - " \"Code\": \"Ok\",\n" + - " \"Message\": \"send success\",\n" + - " \"IsoCode\": \"CN\"\n" + - " },\n" + - " ],\n" + - " \"RequestId\": \"a0aabda6-cf91-4f3e-a81f-9198114a2279\"\n" + - " }\n" + - "}"); - - // 调用 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, - apiTemplateId, templateParams); - // 断言 - assertTrue(result.getSuccess()); - assertEquals("5000:1045710669157053657849499619", result.getSerialNo()); - assertEquals("a0aabda6-cf91-4f3e-a81f-9198114a2279", result.getApiRequestId()); - assertEquals("send success", result.getApiMsg()); - } - } - - @Test - public void testDoSendSms_fail_01() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - Long sendLogId = randomLongId(); - String mobile = randomString(); - String apiTemplateId = randomString(); - List> templateParams = Lists.newArrayList( - new KeyValue<>("1", 1234), new KeyValue<>("2", "login")); - - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{\n" + - " \"Response\": {\n" + - " \"SendStatusSet\": [\n" + - " {\n" + - " \"SerialNo\": \"5000:1045710669157053657849499619\",\n" + - " \"PhoneNumber\": \"+8618511122233\",\n" + - " \"Fee\": 1,\n" + - " \"SessionContext\": \"test\",\n" + - " \"Code\": \"ERROR\",\n" + - " \"Message\": \"send success\",\n" + - " \"IsoCode\": \"CN\"\n" + - " },\n" + - " ],\n" + - " \"RequestId\": \"a0aabda6-cf91-4f3e-a81f-9198114a2279\"\n" + - " }\n" + - "}"); - - // 调用 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, - apiTemplateId, templateParams); - // 断言 - assertFalse(result.getSuccess()); - assertEquals("5000:1045710669157053657849499619", result.getSerialNo()); - assertEquals("a0aabda6-cf91-4f3e-a81f-9198114a2279", result.getApiRequestId()); - assertEquals("send success", result.getApiMsg()); - } - } - - @Test - public void testDoSendSms_fail_02() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - Long sendLogId = randomLongId(); - String mobile = randomString(); - String apiTemplateId = randomString(); - List> templateParams = Lists.newArrayList( - new KeyValue<>("1", 1234), new KeyValue<>("2", "login")); - - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{\"Response\":{\"Error\":{\"Code\":\"AuthFailure.SecretIdNotFound\",\"Message\":\"The SecretId is not found, please ensure that your SecretId is correct.\"},\"RequestId\":\"2a88f82a-261c-4ac6-9fa9-c7d01aaa486a\"}}"); - - // 调用 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, - apiTemplateId, templateParams); - // 断言 - assertFalse(result.getSuccess()); - assertEquals("2a88f82a-261c-4ac6-9fa9-c7d01aaa486a", result.getApiRequestId()); - assertEquals("AuthFailure.SecretIdNotFound", result.getApiCode()); - assertEquals("The SecretId is not found, please ensure that your SecretId is correct.", result.getApiMsg()); - } - } - - @Test - public void testParseSmsReceiveStatus() { - // 准备傿•° - String text = "[\n" + - " {\n" + - " \"user_receive_time\": \"2015-10-17 08:03:04\",\n" + - " \"nationcode\": \"86\",\n" + - " \"mobile\": \"13900000001\",\n" + - " \"report_status\": \"SUCCESS\",\n" + - " \"errmsg\": \"DELIVRD\",\n" + - " \"description\": \"用户短信é€è¾¾æˆåŠŸ\",\n" + - " \"sid\": \"12345\",\n" + - " \"ext\": {\"logId\":\"67890\"}\n" + - " }\n" + - "]"; - - // 调用 - List statuses = smsClient.parseSmsReceiveStatus(text); - // 断言 - assertEquals(1, statuses.size()); - assertTrue(statuses.get(0).getSuccess()); - assertEquals("DELIVRD", statuses.get(0).getErrorCode()); - assertEquals("13900000001", statuses.get(0).getMobile()); - assertEquals(LocalDateTime.of(2015, 10, 17, 8, 3, 4), statuses.get(0).getReceiveTime()); - assertEquals("12345", statuses.get(0).getSerialNo()); - } - - @Test - public void testGetSmsTemplate() throws Throwable { - try (MockedStatic httpUtilsMockedStatic = mockStatic(HttpUtils.class)) { - // 准备傿•° - String apiTemplateId = "1122"; - - // mock 方法 - httpUtilsMockedStatic.when(() -> HttpUtils.post(anyString(), anyMap(), anyString())) - .thenReturn("{ \"Response\": {\n" + - " \"DescribeTemplateStatusSet\": [\n" + - " {\n" + - " \"TemplateName\": \"验è¯ç \",\n" + - " \"TemplateId\": 1122,\n" + - " \"International\": 0,\n" + - " \"ReviewReply\": \"审批备注\",\n" + - " \"CreateTime\": 1617379200,\n" + - " \"TemplateContent\": \"您的验è¯ç æ˜¯{1}\",\n" + - " \"StatusCode\": 0\n" + - " },\n" + - " \n" + - " ],\n" + - " \"RequestId\": \"f36e4f00-605e-49b1-ad0d-bfaba81c7325\"\n" + - " }}"); - - // 调用 - SmsTemplateRespDTO result = smsClient.getSmsTemplate(apiTemplateId); - // 断言 - assertEquals("1122", result.getId()); - assertEquals("您的验è¯ç æ˜¯{1}", result.getContent()); - assertEquals(SmsTemplateAuditStatusEnum.SUCCESS.getStatus(), result.getAuditStatus()); - assertEquals("审批备注", result.getAuditReason()); - } - } - - @Test - public void testConvertSmsTemplateAuditStatus() { - assertEquals(SmsTemplateAuditStatusEnum.SUCCESS.getStatus(), - smsClient.convertSmsTemplateAuditStatus(0)); - assertEquals(SmsTemplateAuditStatusEnum.CHECKING.getStatus(), - smsClient.convertSmsTemplateAuditStatus(1)); - assertEquals(SmsTemplateAuditStatusEnum.FAIL.getStatus(), - smsClient.convertSmsTemplateAuditStatus(-1)); - assertThrows(IllegalArgumentException.class, () -> smsClient.convertSmsTemplateAuditStatus(3), - "未知审核状æ€(3)"); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java deleted file mode 100644 index 62baea3..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java +++ /dev/null @@ -1,358 +0,0 @@ -package cn.iocoder.yudao.module.system.service.auth; - -import cn.hutool.core.util.ReflectUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; -import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; -import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; -import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import cn.iocoder.yudao.module.system.service.logger.LoginLogService; -import cn.iocoder.yudao.module.system.service.member.MemberService; -import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService; -import cn.iocoder.yudao.module.system.service.social.SocialUserService; -import cn.iocoder.yudao.module.system.service.user.AdminUserService; -import com.anji.captcha.model.common.ResponseModel; -import com.anji.captcha.service.CaptchaService; -import jakarta.annotation.Resource; -import jakarta.validation.Validation; -import jakarta.validation.Validator; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - -@Import(AdminAuthServiceImpl.class) -public class AdminAuthServiceImplTest extends BaseDbUnitTest { - - @Resource - private AdminAuthServiceImpl authService; - - @MockBean - private AdminUserService userService; - @MockBean - private CaptchaService captchaService; - @MockBean - private LoginLogService loginLogService; - @MockBean - private SocialUserService socialUserService; - @MockBean - private SmsCodeApi smsCodeApi; - @MockBean - private OAuth2TokenService oauth2TokenService; - @MockBean - private MemberService memberService; - @MockBean - private Validator validator; - - @BeforeEach - public void setUp() { - authService.setCaptchaEnable(true); - // 注入一个 Validator 对象 - ReflectUtil.setFieldValue(authService, "validator", - Validation.buildDefaultValidatorFactory().getValidator()); - } - - @Test - public void testAuthenticate_success() { - // 准备傿•° - String username = randomString(); - String password = randomString(); - // mock user æ•°æ® - AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) - .setPassword(password).setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(userService.getUserByUsername(eq(username))).thenReturn(user); - // mock password åŒ¹é… - when(userService.isPasswordMatch(eq(password), eq(user.getPassword()))).thenReturn(true); - - // 调用 - AdminUserDO loginUser = authService.authenticate(username, password); - // 校验 - assertPojoEquals(user, loginUser); - } - - @Test - public void testAuthenticate_userNotFound() { - // 准备傿•° - String username = randomString(); - String password = randomString(); - - // 调用, 并断言异常 - assertServiceException(() -> authService.authenticate(username, password), - AUTH_LOGIN_BAD_CREDENTIALS); - verify(loginLogService).createLoginLog( - argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) - && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) - && o.getUserId() == null) - ); - } - - @Test - public void testAuthenticate_badCredentials() { - // 准备傿•° - String username = randomString(); - String password = randomString(); - // mock user æ•°æ® - AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) - .setPassword(password).setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(userService.getUserByUsername(eq(username))).thenReturn(user); - - // 调用, 并断言异常 - assertServiceException(() -> authService.authenticate(username, password), - AUTH_LOGIN_BAD_CREDENTIALS); - verify(loginLogService).createLoginLog( - argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) - && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) - && o.getUserId().equals(user.getId())) - ); - } - - @Test - public void testAuthenticate_userDisabled() { - // 准备傿•° - String username = randomString(); - String password = randomString(); - // mock user æ•°æ® - AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) - .setPassword(password).setStatus(CommonStatusEnum.DISABLE.getStatus())); - when(userService.getUserByUsername(eq(username))).thenReturn(user); - // mock password åŒ¹é… - when(userService.isPasswordMatch(eq(password), eq(user.getPassword()))).thenReturn(true); - - // 调用, 并断言异常 - assertServiceException(() -> authService.authenticate(username, password), - AUTH_LOGIN_USER_DISABLED); - verify(loginLogService).createLoginLog( - argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) - && o.getResult().equals(LoginResultEnum.USER_DISABLED.getResult()) - && o.getUserId().equals(user.getId())) - ); - } - - @Test - public void testLogin_success() { - // 准备傿•° - AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class, o -> - o.setUsername("test_username").setPassword("test_password") - .setSocialType(randomEle(SocialTypeEnum.values()).getType())); - - // mock 验è¯ç æ­£ç¡® - authService.setCaptchaEnable(false); - // mock user æ•°æ® - AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(1L).setUsername("test_username") - .setPassword("test_password").setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(userService.getUserByUsername(eq("test_username"))).thenReturn(user); - // mock password åŒ¹é… - when(userService.isPasswordMatch(eq("test_password"), eq(user.getPassword()))).thenReturn(true); - // mock 缓存登录用户到 Redis - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) - .setUserType(UserTypeEnum.ADMIN.getValue())); - when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) - .thenReturn(accessTokenDO); - - // 调用,并校验 - AuthLoginRespVO loginRespVO = authService.login(reqVO); - assertPojoEquals(accessTokenDO, loginRespVO); - // æ ¡éªŒè°ƒç”¨å‚æ•° - verify(loginLogService).createLoginLog( - argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) - && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) - && o.getUserId().equals(user.getId())) - ); - verify(socialUserService).bindSocialUser(eq(new SocialUserBindReqDTO( - user.getId(), UserTypeEnum.ADMIN.getValue(), - reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState()))); - } - - @Test - public void testSendSmsCode() { - // 准备傿•° - String mobile = randomString(); - Integer scene = SmsSceneEnum.ADMIN_MEMBER_LOGIN.getScene(); - AuthSmsSendReqVO reqVO = new AuthSmsSendReqVO(mobile, scene); - // mock 方法(用户信æ¯ï¼‰ - AdminUserDO user = randomPojo(AdminUserDO.class); - when(userService.getUserByMobile(eq(mobile))).thenReturn(user); - - // 调用 - authService.sendSmsCode(reqVO); - // 断言 - verify(smsCodeApi).sendSmsCode(argThat(sendReqDTO -> { - assertEquals(mobile, sendReqDTO.getMobile()); - assertEquals(scene, sendReqDTO.getScene()); - return true; - })); - } - - @Test - public void testSmsLogin_success() { - // 准备傿•° - String mobile = randomString(); - String code = randomString(); - AuthSmsLoginReqVO reqVO = new AuthSmsLoginReqVO(mobile, code); - // mock 方法(验è¯ç ï¼‰ - doNothing().when(smsCodeApi).useSmsCode((argThat(smsCodeUseReqDTO -> { - assertEquals(mobile, smsCodeUseReqDTO.getMobile()); - assertEquals(code, smsCodeUseReqDTO.getCode()); - assertEquals(SmsSceneEnum.ADMIN_MEMBER_LOGIN.getScene(), smsCodeUseReqDTO.getScene()); - return true; - }))); - // mock 方法(用户信æ¯ï¼‰ - AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(1L)); - when(userService.getUserByMobile(eq(mobile))).thenReturn(user); - // mock 缓存登录用户到 Redis - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) - .setUserType(UserTypeEnum.ADMIN.getValue())); - when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) - .thenReturn(accessTokenDO); - - // 调用,并断言 - AuthLoginRespVO loginRespVO = authService.smsLogin(reqVO); - assertPojoEquals(accessTokenDO, loginRespVO); - // 断言调用 - verify(loginLogService).createLoginLog( - argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_MOBILE.getType()) - && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) - && o.getUserId().equals(user.getId())) - ); - } - - @Test - public void testSocialLogin_success() { - // 准备傿•° - AuthSocialLoginReqVO reqVO = randomPojo(AuthSocialLoginReqVO.class); - // mock 方法(绑定的用户编å·ï¼‰ - Long userId = 1L; - when(socialUserService.getSocialUserByCode(eq(UserTypeEnum.ADMIN.getValue()), eq(reqVO.getType()), - eq(reqVO.getCode()), eq(reqVO.getState()))).thenReturn(new SocialUserRespDTO(randomString(), randomString(), randomString(), userId)); - // mock(用户) - AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(userId)); - when(userService.getUser(eq(userId))).thenReturn(user); - // mock 缓存登录用户到 Redis - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) - .setUserType(UserTypeEnum.ADMIN.getValue())); - when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) - .thenReturn(accessTokenDO); - - // 调用,并断言 - AuthLoginRespVO loginRespVO = authService.socialLogin(reqVO); - assertPojoEquals(accessTokenDO, loginRespVO); - // 断言调用 - verify(loginLogService).createLoginLog( - argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_SOCIAL.getType()) - && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) - && o.getUserId().equals(user.getId())) - ); - } - - @Test - public void testValidateCaptcha_successWithEnable() { - // 准备傿•° - AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); - - // mock 验è¯é€šè¿‡ - when(captchaService.verification(argThat(captchaVO -> { - assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); - return true; - }))).thenReturn(ResponseModel.success()); - - // 调用,无需断言 - authService.validateCaptcha(reqVO); - } - - @Test - public void testValidateCaptcha_successWithDisable() { - // 准备傿•° - AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); - - // mock 验è¯ç å…³é—­ - authService.setCaptchaEnable(false); - - // 调用,无需断言 - authService.validateCaptcha(reqVO); - } - - @Test - public void testCaptcha_fail() { - // 准备傿•° - AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); - - // mock 验è¯é€šè¿‡ - when(captchaService.verification(argThat(captchaVO -> { - assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); - return true; - }))).thenReturn(ResponseModel.errorMsg("就是ä¸å¯¹")); - - // 调用, 并断言异常 - assertServiceException(() -> authService.validateCaptcha(reqVO), AUTH_LOGIN_CAPTCHA_CODE_ERROR, "就是ä¸å¯¹"); - // æ ¡éªŒè°ƒç”¨å‚æ•° - verify(loginLogService).createLoginLog( - argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) - && o.getResult().equals(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult())) - ); - } - - @Test - public void testRefreshToken() { - // 准备傿•° - String refreshToken = randomString(); - // mock 方法 - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class); - when(oauth2TokenService.refreshAccessToken(eq(refreshToken), eq("default"))) - .thenReturn(accessTokenDO); - - // 调用 - AuthLoginRespVO loginRespVO = authService.refreshToken(refreshToken); - // 断言 - assertPojoEquals(accessTokenDO, loginRespVO); - } - - @Test - public void testLogout_success() { - // 准备傿•° - String token = randomString(); - // mock - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) - .setUserType(UserTypeEnum.ADMIN.getValue())); - when(oauth2TokenService.removeAccessToken(eq(token))).thenReturn(accessTokenDO); - - // 调用 - authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); - // æ ¡éªŒè°ƒç”¨å‚æ•° - verify(loginLogService).createLoginLog( - argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGOUT_SELF.getType()) - && o.getResult().equals(LoginResultEnum.SUCCESS.getResult())) - ); - // 调用,并校验 - - } - - @Test - public void testLogout_fail() { - // 准备傿•° - String token = randomString(); - - // 调用 - authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); - // æ ¡éªŒè°ƒç”¨å‚æ•° - verify(loginLogService, never()).createLoginLog(any()); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java deleted file mode 100644 index bcf55bd..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java +++ /dev/null @@ -1,296 +0,0 @@ -package cn.iocoder.yudao.module.system.service.dept; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; -import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; -import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.Arrays; -import java.util.List; -import java.util.Set; - -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.*; - -/** - * {@link DeptServiceImpl} çš„å•元测试类 - * - * @author niudehua - */ -@Import(DeptServiceImpl.class) -public class DeptServiceImplTest extends BaseDbUnitTest { - - @Resource - private DeptServiceImpl deptService; - @Resource - private DeptMapper deptMapper; - - @Test - public void testCreateDept() { - // 准备傿•° - DeptSaveReqVO reqVO = randomPojo(DeptSaveReqVO.class, o -> { - o.setId(null); // 防止 id 被设置 - o.setParentId(DeptDO.PARENT_ID_ROOT); - o.setStatus(randomCommonStatus()); - }); - - // 调用 - Long deptId = deptService.createDept(reqVO); - // 断言 - assertNotNull(deptId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - DeptDO deptDO = deptMapper.selectById(deptId); - assertPojoEquals(reqVO, deptDO, "id"); - } - - @Test - public void testUpdateDept() { - // mock æ•°æ® - DeptDO dbDeptDO = randomPojo(DeptDO.class, o -> o.setStatus(randomCommonStatus())); - deptMapper.insert(dbDeptDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - DeptSaveReqVO reqVO = randomPojo(DeptSaveReqVO.class, o -> { - // 设置更新的 ID - o.setParentId(DeptDO.PARENT_ID_ROOT); - o.setId(dbDeptDO.getId()); - o.setStatus(randomCommonStatus()); - }); - - // 调用 - deptService.updateDept(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - DeptDO deptDO = deptMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, deptDO); - } - - @Test - public void testDeleteDept_success() { - // mock æ•°æ® - DeptDO dbDeptDO = randomPojo(DeptDO.class); - deptMapper.insert(dbDeptDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbDeptDO.getId(); - - // 调用 - deptService.deleteDept(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(deptMapper.selectById(id)); - } - - @Test - public void testDeleteDept_exitsChildren() { - // mock æ•°æ® - DeptDO parentDept = randomPojo(DeptDO.class); - deptMapper.insert(parentDept);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - DeptDO childrenDeptDO = randomPojo(DeptDO.class, o -> { - o.setParentId(parentDept.getId()); - o.setStatus(randomCommonStatus()); - }); - // æ’å…¥å­éƒ¨é—¨ - deptMapper.insert(childrenDeptDO); - - // 调用, 并断言异常 - assertServiceException(() -> deptService.deleteDept(parentDept.getId()), DEPT_EXITS_CHILDREN); - } - - @Test - public void testValidateDeptExists_notFound() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> deptService.validateDeptExists(id), DEPT_NOT_FOUND); - } - - @Test - public void testValidateParentDept_parentError() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> deptService.validateParentDept(id, id), - DEPT_PARENT_ERROR); - } - - @Test - public void testValidateParentDept_parentIsChild() { - // mock æ•°æ®ï¼ˆçˆ¶èŠ‚ç‚¹ï¼‰ - DeptDO parentDept = randomPojo(DeptDO.class); - deptMapper.insert(parentDept); - // mock æ•°æ®ï¼ˆå­èŠ‚ç‚¹ï¼‰ - DeptDO childDept = randomPojo(DeptDO.class, o -> { - o.setParentId(parentDept.getId()); - }); - deptMapper.insert(childDept); - - // 准备傿•° - Long id = parentDept.getId(); - Long parentId = childDept.getId(); - - // 调用, 并断言异常 - assertServiceException(() -> deptService.validateParentDept(id, parentId), DEPT_PARENT_IS_CHILD); - } - - @Test - public void testValidateNameUnique_duplicate() { - // mock æ•°æ® - DeptDO deptDO = randomPojo(DeptDO.class); - deptMapper.insert(deptDO); - - // 准备傿•° - Long id = randomLongId(); - Long parentId = deptDO.getParentId(); - String name = deptDO.getName(); - - // 调用, 并断言异常 - assertServiceException(() -> deptService.validateDeptNameUnique(id, parentId, name), - DEPT_NAME_DUPLICATE); - } - - @Test - public void testGetDept() { - // mock æ•°æ® - DeptDO deptDO = randomPojo(DeptDO.class); - deptMapper.insert(deptDO); - // 准备傿•° - Long id = deptDO.getId(); - - // 调用 - DeptDO dbDept = deptService.getDept(id); - // 断言 - assertEquals(deptDO, dbDept); - } - - @Test - public void testGetDeptList_ids() { - // mock æ•°æ® - DeptDO deptDO01 = randomPojo(DeptDO.class); - deptMapper.insert(deptDO01); - DeptDO deptDO02 = randomPojo(DeptDO.class); - deptMapper.insert(deptDO02); - // 准备傿•° - List ids = Arrays.asList(deptDO01.getId(), deptDO02.getId()); - - // 调用 - List deptDOList = deptService.getDeptList(ids); - // 断言 - assertEquals(2, deptDOList.size()); - assertEquals(deptDO01, deptDOList.get(0)); - assertEquals(deptDO02, deptDOList.get(1)); - } - - @Test - public void testGetDeptList_reqVO() { - // mock æ•°æ® - DeptDO dept = randomPojo(DeptDO.class, o -> { // 等会查询到 - o.setName("å¼€å‘部"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); - deptMapper.insert(dept); - // 测试 name ä¸åŒ¹é… - deptMapper.insert(ObjectUtils.cloneIgnoreId(dept, o -> o.setName("å‘"))); - // 测试 status ä¸åŒ¹é… - deptMapper.insert(ObjectUtils.cloneIgnoreId(dept, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 准备傿•° - DeptListReqVO reqVO = new DeptListReqVO(); - reqVO.setName("å¼€"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - - // 调用 - List sysDeptDOS = deptService.getDeptList(reqVO); - // 断言 - assertEquals(1, sysDeptDOS.size()); - assertPojoEquals(dept, sysDeptDOS.get(0)); - } - - @Test - public void testGetChildDeptList() { - // mock æ•°æ®ï¼ˆ1 级别å­èŠ‚ç‚¹ï¼‰ - DeptDO dept1 = randomPojo(DeptDO.class, o -> o.setName("1")); - deptMapper.insert(dept1); - DeptDO dept2 = randomPojo(DeptDO.class, o -> o.setName("2")); - deptMapper.insert(dept2); - // mock æ•°æ®ï¼ˆ2 级å­èŠ‚ç‚¹ï¼‰ - DeptDO dept1a = randomPojo(DeptDO.class, o -> o.setName("1-a").setParentId(dept1.getId())); - deptMapper.insert(dept1a); - DeptDO dept2a = randomPojo(DeptDO.class, o -> o.setName("2-a").setParentId(dept2.getId())); - deptMapper.insert(dept2a); - // 准备傿•° - Long id = dept1.getParentId(); - - // 调用 - List result = deptService.getChildDeptList(id); - // 断言 - assertEquals(result.size(), 2); - assertPojoEquals(dept1, result.get(0)); - assertPojoEquals(dept1a, result.get(1)); - } - - @Test - public void testGetChildDeptListFromCache() { - // mock æ•°æ®ï¼ˆ1 级别å­èŠ‚ç‚¹ï¼‰ - DeptDO dept1 = randomPojo(DeptDO.class, o -> o.setName("1")); - deptMapper.insert(dept1); - DeptDO dept2 = randomPojo(DeptDO.class, o -> o.setName("2")); - deptMapper.insert(dept2); - // mock æ•°æ®ï¼ˆ2 级å­èŠ‚ç‚¹ï¼‰ - DeptDO dept1a = randomPojo(DeptDO.class, o -> o.setName("1-a").setParentId(dept1.getId())); - deptMapper.insert(dept1a); - DeptDO dept2a = randomPojo(DeptDO.class, o -> o.setName("2-a").setParentId(dept2.getId())); - deptMapper.insert(dept2a); - // 准备傿•° - Long id = dept1.getParentId(); - - // 调用 - Set result = deptService.getChildDeptIdListFromCache(id); - // 断言 - assertEquals(result.size(), 2); - assertTrue(result.contains(dept1.getId())); - assertTrue(result.contains(dept1a.getId())); - } - - @Test - public void testValidateDeptList_success() { - // mock æ•°æ® - DeptDO deptDO = randomPojo(DeptDO.class).setStatus(CommonStatusEnum.ENABLE.getStatus()); - deptMapper.insert(deptDO); - // 准备傿•° - List ids = singletonList(deptDO.getId()); - - // 调用,无需断言 - deptService.validateDeptList(ids); - } - - @Test - public void testValidateDeptList_notFound() { - // 准备傿•° - List ids = singletonList(randomLongId()); - - // 调用, 并断言异常 - assertServiceException(() -> deptService.validateDeptList(ids), DEPT_NOT_FOUND); - } - - @Test - public void testValidateDeptList_notEnable() { - // mock æ•°æ® - DeptDO deptDO = randomPojo(DeptDO.class).setStatus(CommonStatusEnum.DISABLE.getStatus()); - deptMapper.insert(deptDO); - // 准备傿•° - List ids = singletonList(deptDO.getId()); - - // 调用, 并断言异常 - assertServiceException(() -> deptService.validateDeptList(ids), DEPT_NOT_ENABLE, deptDO.getName()); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImplTest.java deleted file mode 100644 index 657c09d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImplTest.java +++ /dev/null @@ -1,248 +0,0 @@ -package cn.iocoder.yudao.module.system.service.dept; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; -import cn.iocoder.yudao.module.system.dal.mysql.dept.PostMapper; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.Arrays; -import java.util.List; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.*; - -/** - * {@link PostServiceImpl} çš„å•元测试类 - * - * @author niudehua - */ -@Import(PostServiceImpl.class) -public class PostServiceImplTest extends BaseDbUnitTest { - - @Resource - private PostServiceImpl postService; - - @Resource - private PostMapper postMapper; - - @Test - public void testCreatePost_success() { - // 准备傿•° - PostSaveReqVO reqVO = randomPojo(PostSaveReqVO.class, - o -> o.setStatus(randomEle(CommonStatusEnum.values()).getStatus())) - .setId(null); // 防止 id 被设置 - // 调用 - Long postId = postService.createPost(reqVO); - - // 断言 - assertNotNull(postId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - PostDO post = postMapper.selectById(postId); - assertPojoEquals(reqVO, post, "id"); - } - - @Test - public void testUpdatePost_success() { - // mock æ•°æ® - PostDO postDO = randomPostDO(); - postMapper.insert(postDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - PostSaveReqVO reqVO = randomPojo(PostSaveReqVO.class, o -> { - // 设置更新的 ID - o.setId(postDO.getId()); - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); - }); - - // 调用 - postService.updatePost(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - PostDO post = postMapper.selectById(reqVO.getId()); - assertPojoEquals(reqVO, post); - } - - @Test - public void testDeletePost_success() { - // mock æ•°æ® - PostDO postDO = randomPostDO(); - postMapper.insert(postDO); - // 准备傿•° - Long id = postDO.getId(); - - // 调用 - postService.deletePost(id); - assertNull(postMapper.selectById(id)); - } - - @Test - public void testValidatePost_notFoundForDelete() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> postService.deletePost(id), POST_NOT_FOUND); - } - - @Test - public void testValidatePost_nameDuplicateForCreate() { - // mock æ•°æ® - PostDO postDO = randomPostDO(); - postMapper.insert(postDO);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - PostSaveReqVO reqVO = randomPojo(PostSaveReqVO.class, - // 模拟 name é‡å¤ - o -> o.setName(postDO.getName())); - assertServiceException(() -> postService.createPost(reqVO), POST_NAME_DUPLICATE); - } - - @Test - public void testValidatePost_codeDuplicateForUpdate() { - // mock æ•°æ® - PostDO postDO = randomPostDO(); - postMapper.insert(postDO); - // mock æ•°æ®ï¼šç¨åŽæ¨¡æ‹Ÿé‡å¤å®ƒçš„ code - PostDO codePostDO = randomPostDO(); - postMapper.insert(codePostDO); - // 准备傿•° - PostSaveReqVO reqVO = randomPojo(PostSaveReqVO.class, o -> { - // 设置更新的 ID - o.setId(postDO.getId()); - // 模拟 code é‡å¤ - o.setCode(codePostDO.getCode()); - }); - - // 调用, 并断言异常 - assertServiceException(() -> postService.updatePost(reqVO), POST_CODE_DUPLICATE); - } - - @Test - public void testGetPostPage() { - // mock æ•°æ® - PostDO postDO = randomPojo(PostDO.class, o -> { - o.setName("ç ä»”"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); - postMapper.insert(postDO); - // 测试 name ä¸åŒ¹é… - postMapper.insert(cloneIgnoreId(postDO, o -> o.setName("程åºå‘˜"))); - // 测试 status ä¸åŒ¹é… - postMapper.insert(cloneIgnoreId(postDO, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 准备傿•° - PostPageReqVO reqVO = new PostPageReqVO(); - reqVO.setName("ç "); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - - // 调用 - PageResult pageResult = postService.getPostPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(postDO, pageResult.getList().get(0)); - } - - @Test - public void testGetPostList() { - // mock æ•°æ® - PostDO postDO01 = randomPojo(PostDO.class); - postMapper.insert(postDO01); - // 测试 id ä¸åŒ¹é… - PostDO postDO02 = randomPojo(PostDO.class); - postMapper.insert(postDO02); - // 准备傿•° - List ids = singletonList(postDO01.getId()); - - // 调用 - List list = postService.getPostList(ids); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(postDO01, list.get(0)); - } - - @Test - public void testGetPostList_idsAndStatus() { - // mock æ•°æ® - PostDO postDO01 = randomPojo(PostDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - postMapper.insert(postDO01); - // 测试 status ä¸åŒ¹é… - PostDO postDO02 = randomPojo(PostDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); - postMapper.insert(postDO02); - // 准备傿•° - List ids = Arrays.asList(postDO01.getId(), postDO02.getId()); - - // 调用 - List list = postService.getPostList(ids, singletonList(CommonStatusEnum.ENABLE.getStatus())); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(postDO01, list.get(0)); - } - - @Test - public void testGetPost() { - // mock æ•°æ® - PostDO dbPostDO = randomPostDO(); - postMapper.insert(dbPostDO); - // 准备傿•° - Long id = dbPostDO.getId(); - // 调用 - PostDO post = postService.getPost(id); - // 断言 - assertNotNull(post); - assertPojoEquals(dbPostDO, post); - } - - @Test - public void testValidatePostList_success() { - // mock æ•°æ® - PostDO postDO = randomPostDO().setStatus(CommonStatusEnum.ENABLE.getStatus()); - postMapper.insert(postDO); - // 准备傿•° - List ids = singletonList(postDO.getId()); - - // 调用,无需断言 - postService.validatePostList(ids); - } - - @Test - public void testValidatePostList_notFound() { - // 准备傿•° - List ids = singletonList(randomLongId()); - - // 调用, 并断言异常 - assertServiceException(() -> postService.validatePostList(ids), POST_NOT_FOUND); - } - - @Test - public void testValidatePostList_notEnable() { - // mock æ•°æ® - PostDO postDO = randomPostDO().setStatus(CommonStatusEnum.DISABLE.getStatus()); - postMapper.insert(postDO); - // 准备傿•° - List ids = singletonList(postDO.getId()); - - // 调用, 并断言异常 - assertServiceException(() -> postService.validatePostList(ids), POST_NOT_ENABLE, - postDO.getName()); - } - - @SafeVarargs - private static PostDO randomPostDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(randomCommonStatus()); // ä¿è¯ status 的范围 - }; - return randomPojo(PostDO.class, ArrayUtils.append(consumer, consumers)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImplTest.java deleted file mode 100644 index 999570e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImplTest.java +++ /dev/null @@ -1,352 +0,0 @@ -package cn.iocoder.yudao.module.system.service.dict; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; -import cn.iocoder.yudao.module.system.dal.mysql.dict.DictDataMapper; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.List; -import java.util.function.Consumer; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -@Import(DictDataServiceImpl.class) -public class DictDataServiceImplTest extends BaseDbUnitTest { - - @Resource - private DictDataServiceImpl dictDataService; - - @Resource - private DictDataMapper dictDataMapper; - @MockBean - private DictTypeService dictTypeService; - - @Test - public void testGetDictDataList() { - // mock æ•°æ® - DictDataDO dictDataDO01 = randomDictDataDO().setDictType("yunai").setSort(2) - .setStatus(CommonStatusEnum.ENABLE.getStatus()); - dictDataMapper.insert(dictDataDO01); - DictDataDO dictDataDO02 = randomDictDataDO().setDictType("yunai").setSort(1) - .setStatus(CommonStatusEnum.ENABLE.getStatus()); - dictDataMapper.insert(dictDataDO02); - DictDataDO dictDataDO03 = randomDictDataDO().setDictType("yunai").setSort(3) - .setStatus(CommonStatusEnum.DISABLE.getStatus()); - dictDataMapper.insert(dictDataDO03); - DictDataDO dictDataDO04 = randomDictDataDO().setDictType("yunai2").setSort(3) - .setStatus(CommonStatusEnum.DISABLE.getStatus()); - dictDataMapper.insert(dictDataDO04); - // 准备傿•° - Integer status = CommonStatusEnum.ENABLE.getStatus(); - String dictType = "yunai"; - - // 调用 - List dictDataDOList = dictDataService.getDictDataList(status, dictType); - // 断言 - assertEquals(2, dictDataDOList.size()); - assertPojoEquals(dictDataDO02, dictDataDOList.get(0)); - assertPojoEquals(dictDataDO01, dictDataDOList.get(1)); - } - - @Test - public void testGetDictDataPage() { - // mock æ•°æ® - DictDataDO dbDictData = randomPojo(DictDataDO.class, o -> { // 等会查询到 - o.setLabel("芋艿"); - o.setDictType("yunai"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); - dictDataMapper.insert(dbDictData); - // 测试 label ä¸åŒ¹é… - dictDataMapper.insert(cloneIgnoreId(dbDictData, o -> o.setLabel("艿"))); - // 测试 dictType ä¸åŒ¹é… - dictDataMapper.insert(cloneIgnoreId(dbDictData, o -> o.setDictType("nai"))); - // 测试 status ä¸åŒ¹é… - dictDataMapper.insert(cloneIgnoreId(dbDictData, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 准备傿•° - DictDataPageReqVO reqVO = new DictDataPageReqVO(); - reqVO.setLabel("芋"); - reqVO.setDictType("yunai"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - - // 调用 - PageResult pageResult = dictDataService.getDictDataPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbDictData, pageResult.getList().get(0)); - } - - @Test - public void testGetDictData() { - // mock æ•°æ® - DictDataDO dbDictData = randomDictDataDO(); - dictDataMapper.insert(dbDictData); - // 准备傿•° - Long id = dbDictData.getId(); - - // 调用 - DictDataDO dictData = dictDataService.getDictData(id); - // 断言 - assertPojoEquals(dbDictData, dictData); - } - - @Test - public void testCreateDictData_success() { - // 准备傿•° - DictDataSaveReqVO reqVO = randomPojo(DictDataSaveReqVO.class, - o -> o.setStatus(randomCommonStatus())) - .setId(null); // 防止 id 被赋值 - // mock 方法 - when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(randomDictTypeDO(reqVO.getDictType())); - - // 调用 - Long dictDataId = dictDataService.createDictData(reqVO); - // 断言 - assertNotNull(dictDataId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - DictDataDO dictData = dictDataMapper.selectById(dictDataId); - assertPojoEquals(reqVO, dictData, "id"); - } - - @Test - public void testUpdateDictData_success() { - // mock æ•°æ® - DictDataDO dbDictData = randomDictDataDO(); - dictDataMapper.insert(dbDictData);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - DictDataSaveReqVO reqVO = randomPojo(DictDataSaveReqVO.class, o -> { - o.setId(dbDictData.getId()); // 设置更新的 ID - o.setStatus(randomCommonStatus()); - }); - // mock 方法,字典类型 - when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(randomDictTypeDO(reqVO.getDictType())); - - // 调用 - dictDataService.updateDictData(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - DictDataDO dictData = dictDataMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, dictData); - } - - @Test - public void testDeleteDictData_success() { - // mock æ•°æ® - DictDataDO dbDictData = randomDictDataDO(); - dictDataMapper.insert(dbDictData);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbDictData.getId(); - - // 调用 - dictDataService.deleteDictData(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(dictDataMapper.selectById(id)); - } - - @Test - public void testValidateDictDataExists_success() { - // mock æ•°æ® - DictDataDO dbDictData = randomDictDataDO(); - dictDataMapper.insert(dbDictData);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用æˆåŠŸ - dictDataService.validateDictDataExists(dbDictData.getId()); - } - - @Test - public void testValidateDictDataExists_notExists() { - assertServiceException(() -> dictDataService.validateDictDataExists(randomLongId()), DICT_DATA_NOT_EXISTS); - } - - @Test - public void testValidateDictTypeExists_success() { - // mock 方法,数æ®ç±»åž‹è¢«ç¦ç”¨ - String type = randomString(); - when(dictTypeService.getDictType(eq(type))).thenReturn(randomDictTypeDO(type)); - - // 调用, æˆåŠŸ - dictDataService.validateDictTypeExists(type); - } - - @Test - public void testValidateDictTypeExists_notExists() { - assertServiceException(() -> dictDataService.validateDictTypeExists(randomString()), DICT_TYPE_NOT_EXISTS); - } - - @Test - public void testValidateDictTypeExists_notEnable() { - // mock 方法,数æ®ç±»åž‹è¢«ç¦ç”¨ - String dictType = randomString(); - when(dictTypeService.getDictType(eq(dictType))).thenReturn( - randomPojo(DictTypeDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - - // 调用, 并断言异常 - assertServiceException(() -> dictDataService.validateDictTypeExists(dictType), DICT_TYPE_NOT_ENABLE); - } - - @Test - public void testValidateDictDataValueUnique_success() { - // 调用,æˆåŠŸ - dictDataService.validateDictDataValueUnique(randomLongId(), randomString(), randomString()); - } - - @Test - public void testValidateDictDataValueUnique_valueDuplicateForCreate() { - // 准备傿•° - String dictType = randomString(); - String value = randomString(); - // mock æ•°æ® - dictDataMapper.insert(randomDictDataDO(o -> { - o.setDictType(dictType); - o.setValue(value); - })); - - // 调用,校验异常 - assertServiceException(() -> dictDataService.validateDictDataValueUnique(null, dictType, value), - DICT_DATA_VALUE_DUPLICATE); - } - - @Test - public void testValidateDictDataValueUnique_valueDuplicateForUpdate() { - // 准备傿•° - Long id = randomLongId(); - String dictType = randomString(); - String value = randomString(); - // mock æ•°æ® - dictDataMapper.insert(randomDictDataDO(o -> { - o.setDictType(dictType); - o.setValue(value); - })); - - // 调用,校验异常 - assertServiceException(() -> dictDataService.validateDictDataValueUnique(id, dictType, value), - DICT_DATA_VALUE_DUPLICATE); - } - - @Test - public void testGetDictDataCountByDictType() { - // mock æ•°æ® - dictDataMapper.insert(randomDictDataDO(o -> o.setDictType("yunai"))); - dictDataMapper.insert(randomDictDataDO(o -> o.setDictType("tudou"))); - dictDataMapper.insert(randomDictDataDO(o -> o.setDictType("yunai"))); - // 准备傿•° - String dictType = "yunai"; - - // 调用 - long count = dictDataService.getDictDataCountByDictType(dictType); - // 校验 - assertEquals(2L, count); - } - - @Test - public void testValidateDictDataList_success() { - // mock æ•°æ® - DictDataDO dictDataDO = randomDictDataDO().setStatus(CommonStatusEnum.ENABLE.getStatus()); - dictDataMapper.insert(dictDataDO); - // 准备傿•° - String dictType = dictDataDO.getDictType(); - List values = singletonList(dictDataDO.getValue()); - - // 调用,无需断言 - dictDataService.validateDictDataList(dictType, values); - } - - @Test - public void testValidateDictDataList_notFound() { - // 准备傿•° - String dictType = randomString(); - List values = singletonList(randomString()); - - // 调用, 并断言异常 - assertServiceException(() -> dictDataService.validateDictDataList(dictType, values), DICT_DATA_NOT_EXISTS); - } - - @Test - public void testValidateDictDataList_notEnable() { - // mock æ•°æ® - DictDataDO dictDataDO = randomDictDataDO().setStatus(CommonStatusEnum.DISABLE.getStatus()); - dictDataMapper.insert(dictDataDO); - // 准备傿•° - String dictType = dictDataDO.getDictType(); - List values = singletonList(dictDataDO.getValue()); - - // 调用, 并断言异常 - assertServiceException(() -> dictDataService.validateDictDataList(dictType, values), - DICT_DATA_NOT_ENABLE, dictDataDO.getLabel()); - } - - @Test - public void testGetDictData_dictType() { - // mock æ•°æ® - DictDataDO dictDataDO = randomDictDataDO().setDictType("yunai").setValue("1"); - dictDataMapper.insert(dictDataDO); - DictDataDO dictDataDO02 = randomDictDataDO().setDictType("yunai").setValue("2"); - dictDataMapper.insert(dictDataDO02); - // 准备傿•° - String dictType = "yunai"; - String value = "1"; - - // 调用 - DictDataDO dbDictData = dictDataService.getDictData(dictType, value); - // 断言 - assertEquals(dictDataDO, dbDictData); - } - - @Test - public void testParseDictData() { - // mock æ•°æ® - DictDataDO dictDataDO = randomDictDataDO().setDictType("yunai").setLabel("1"); - dictDataMapper.insert(dictDataDO); - DictDataDO dictDataDO02 = randomDictDataDO().setDictType("yunai").setLabel("2"); - dictDataMapper.insert(dictDataDO02); - // 准备傿•° - String dictType = "yunai"; - String label = "1"; - - // 调用 - DictDataDO dbDictData = dictDataService.parseDictData(dictType, label); - // 断言 - assertEquals(dictDataDO, dbDictData); - } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static DictDataDO randomDictDataDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(randomCommonStatus()); // ä¿è¯ status 的范围 - }; - return randomPojo(DictDataDO.class, ArrayUtils.append(consumer, consumers)); - } - - /** - * 生æˆä¸€ä¸ªæœ‰æ•ˆçš„字典类型 - * - * @param type 字典类型 - * @return DictTypeDO 对象 - */ - private static DictTypeDO randomDictTypeDO(String type) { - return randomPojo(DictTypeDO.class, o -> { - o.setType(type); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // ä¿è¯ status æ˜¯å¼€å¯ - }); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImplTest.java deleted file mode 100644 index e04b96f..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImplTest.java +++ /dev/null @@ -1,271 +0,0 @@ -package cn.iocoder.yudao.module.system.service.dict; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypePageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; -import cn.iocoder.yudao.module.system.dal.mysql.dict.DictTypeMapper; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.List; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -@Import(DictTypeServiceImpl.class) -public class DictTypeServiceImplTest extends BaseDbUnitTest { - - @Resource - private DictTypeServiceImpl dictTypeService; - - @Resource - private DictTypeMapper dictTypeMapper; - @MockBean - private DictDataService dictDataService; - - @Test - public void testGetDictTypePage() { - // mock æ•°æ® - DictTypeDO dbDictType = randomPojo(DictTypeDO.class, o -> { // 等会查询到 - o.setName("yunai"); - o.setType("芋艿"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setCreateTime(buildTime(2021, 1, 15)); - }); - dictTypeMapper.insert(dbDictType); - // 测试 name ä¸åŒ¹é… - dictTypeMapper.insert(cloneIgnoreId(dbDictType, o -> o.setName("tudou"))); - // 测试 type ä¸åŒ¹é… - dictTypeMapper.insert(cloneIgnoreId(dbDictType, o -> o.setType("土豆"))); - // 测试 status ä¸åŒ¹é… - dictTypeMapper.insert(cloneIgnoreId(dbDictType, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 createTime ä¸åŒ¹é… - dictTypeMapper.insert(cloneIgnoreId(dbDictType, o -> o.setCreateTime(buildTime(2021, 1, 1)))); - // 准备傿•° - DictTypePageReqVO reqVO = new DictTypePageReqVO(); - reqVO.setName("nai"); - reqVO.setType("艿"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setCreateTime(buildBetweenTime(2021, 1, 10, 2021, 1, 20)); - - // 调用 - PageResult pageResult = dictTypeService.getDictTypePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbDictType, pageResult.getList().get(0)); - } - - @Test - public void testGetDictType_id() { - // mock æ•°æ® - DictTypeDO dbDictType = randomDictTypeDO(); - dictTypeMapper.insert(dbDictType); - // 准备傿•° - Long id = dbDictType.getId(); - - // 调用 - DictTypeDO dictType = dictTypeService.getDictType(id); - // 断言 - assertNotNull(dictType); - assertPojoEquals(dbDictType, dictType); - } - - @Test - public void testGetDictType_type() { - // mock æ•°æ® - DictTypeDO dbDictType = randomDictTypeDO(); - dictTypeMapper.insert(dbDictType); - // 准备傿•° - String type = dbDictType.getType(); - - // 调用 - DictTypeDO dictType = dictTypeService.getDictType(type); - // 断言 - assertNotNull(dictType); - assertPojoEquals(dbDictType, dictType); - } - - @Test - public void testCreateDictType_success() { - // 准备傿•° - DictTypeSaveReqVO reqVO = randomPojo(DictTypeSaveReqVO.class, - o -> o.setStatus(randomEle(CommonStatusEnum.values()).getStatus())) - .setId(null); // é¿å… id 被赋值 - - // 调用 - Long dictTypeId = dictTypeService.createDictType(reqVO); - // 断言 - assertNotNull(dictTypeId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - DictTypeDO dictType = dictTypeMapper.selectById(dictTypeId); - assertPojoEquals(reqVO, dictType, "id"); - } - - @Test - public void testUpdateDictType_success() { - // mock æ•°æ® - DictTypeDO dbDictType = randomDictTypeDO(); - dictTypeMapper.insert(dbDictType);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - DictTypeSaveReqVO reqVO = randomPojo(DictTypeSaveReqVO.class, o -> { - o.setId(dbDictType.getId()); // 设置更新的 ID - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); - }); - - // 调用 - dictTypeService.updateDictType(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - DictTypeDO dictType = dictTypeMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, dictType); - } - - @Test - public void testDeleteDictType_success() { - // mock æ•°æ® - DictTypeDO dbDictType = randomDictTypeDO(); - dictTypeMapper.insert(dbDictType);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbDictType.getId(); - - // 调用 - dictTypeService.deleteDictType(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(dictTypeMapper.selectById(id)); - } - - @Test - public void testDeleteDictType_hasChildren() { - // mock æ•°æ® - DictTypeDO dbDictType = randomDictTypeDO(); - dictTypeMapper.insert(dbDictType);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbDictType.getId(); - // mock 方法 - when(dictDataService.getDictDataCountByDictType(eq(dbDictType.getType()))).thenReturn(1L); - - // 调用, 并断言异常 - assertServiceException(() -> dictTypeService.deleteDictType(id), DICT_TYPE_HAS_CHILDREN); - } - - @Test - public void testGetDictTypeList() { - // 准备傿•° - DictTypeDO dictTypeDO01 = randomDictTypeDO(); - dictTypeMapper.insert(dictTypeDO01); - DictTypeDO dictTypeDO02 = randomDictTypeDO(); - dictTypeMapper.insert(dictTypeDO02); - // mock 方法 - - // 调用 - List dictTypeDOList = dictTypeService.getDictTypeList(); - // 断言 - assertEquals(2, dictTypeDOList.size()); - assertPojoEquals(dictTypeDO01, dictTypeDOList.get(0)); - assertPojoEquals(dictTypeDO02, dictTypeDOList.get(1)); - } - - @Test - public void testValidateDictDataExists_success() { - // mock æ•°æ® - DictTypeDO dbDictType = randomDictTypeDO(); - dictTypeMapper.insert(dbDictType);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用æˆåŠŸ - dictTypeService.validateDictTypeExists(dbDictType.getId()); - } - - @Test - public void testValidateDictDataExists_notExists() { - assertServiceException(() -> dictTypeService.validateDictTypeExists(randomLongId()), DICT_TYPE_NOT_EXISTS); - } - - @Test - public void testValidateDictTypeUnique_success() { - // 调用,æˆåŠŸ - dictTypeService.validateDictTypeUnique(randomLongId(), randomString()); - } - - @Test - public void testValidateDictTypeUnique_valueDuplicateForCreate() { - // 准备傿•° - String type = randomString(); - // mock æ•°æ® - dictTypeMapper.insert(randomDictTypeDO(o -> o.setType(type))); - - // 调用,校验异常 - assertServiceException(() -> dictTypeService.validateDictTypeUnique(null, type), - DICT_TYPE_TYPE_DUPLICATE); - } - - @Test - public void testValidateDictTypeUnique_valueDuplicateForUpdate() { - // 准备傿•° - Long id = randomLongId(); - String type = randomString(); - // mock æ•°æ® - dictTypeMapper.insert(randomDictTypeDO(o -> o.setType(type))); - - // 调用,校验异常 - assertServiceException(() -> dictTypeService.validateDictTypeUnique(id, type), - DICT_TYPE_TYPE_DUPLICATE); - } - - @Test - public void testValidateDictTypNameUnique_success() { - // 调用,æˆåŠŸ - dictTypeService.validateDictTypeNameUnique(randomLongId(), randomString()); - } - - @Test - public void testValidateDictTypeNameUnique_nameDuplicateForCreate() { - // 准备傿•° - String name = randomString(); - // mock æ•°æ® - dictTypeMapper.insert(randomDictTypeDO(o -> o.setName(name))); - - // 调用,校验异常 - assertServiceException(() -> dictTypeService.validateDictTypeNameUnique(null, name), - DICT_TYPE_NAME_DUPLICATE); - } - - @Test - public void testValidateDictTypeNameUnique_nameDuplicateForUpdate() { - // 准备傿•° - Long id = randomLongId(); - String name = randomString(); - // mock æ•°æ® - dictTypeMapper.insert(randomDictTypeDO(o -> o.setName(name))); - - // 调用,校验异常 - assertServiceException(() -> dictTypeService.validateDictTypeNameUnique(id, name), - DICT_TYPE_NAME_DUPLICATE); - } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static DictTypeDO randomDictTypeDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - }; - return randomPojo(DictTypeDO.class, ArrayUtils.append(consumer, consumers)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java deleted file mode 100644 index f5135da..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.iocoder.yudao.module.system.service.logger; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; -import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO; -import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum.CAPTCHA_CODE_ERROR; -import static cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum.SUCCESS; -import static org.junit.jupiter.api.Assertions.assertEquals; - -@Import(LoginLogServiceImpl.class) -public class LoginLogServiceImplTest extends BaseDbUnitTest { - - @Resource - private LoginLogServiceImpl loginLogService; - - @Resource - private LoginLogMapper loginLogMapper; - - @Test - public void testGetLoginLogPage() { - // mock æ•°æ® - LoginLogDO loginLogDO = randomPojo(LoginLogDO.class, o -> { - o.setUserIp("192.168.199.16"); - o.setUsername("wang"); - o.setResult(SUCCESS.getResult()); - o.setCreateTime(buildTime(2021, 3, 6)); - }); - loginLogMapper.insert(loginLogDO); - // 测试 status ä¸åŒ¹é… - loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setResult(CAPTCHA_CODE_ERROR.getResult()))); - // 测试 ip ä¸åŒ¹é… - loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setUserIp("192.168.128.18"))); - // 测试 username ä¸åŒ¹é… - loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setUsername("yunai"))); - // 测试 createTime ä¸åŒ¹é… - loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setCreateTime(buildTime(2021, 2, 6)))); - // æž„é€ è°ƒç”¨å‚æ•° - LoginLogPageReqVO reqVO = new LoginLogPageReqVO(); - reqVO.setUsername("wang"); - reqVO.setUserIp("192.168.199"); - reqVO.setStatus(true); - reqVO.setCreateTime(buildBetweenTime(2021, 3, 5, 2021, 3, 7)); - - // 调用 - PageResult pageResult = loginLogService.getLoginLogPage(reqVO); - // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(loginLogDO, pageResult.getList().get(0)); - } - - @Test - public void testCreateLoginLog() { - LoginLogCreateReqDTO reqDTO = randomPojo(LoginLogCreateReqDTO.class); - - // 调用 - loginLogService.createLoginLog(reqDTO); - // 断言 - LoginLogDO loginLogDO = loginLogMapper.selectOne(null); - assertPojoEquals(reqDTO, loginLogDO); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java deleted file mode 100644 index 6951b69..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java +++ /dev/null @@ -1,113 +0,0 @@ -package cn.iocoder.yudao.module.system.service.logger; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.framework.test.core.util.RandomUtils; -import cn.iocoder.yudao.framework.common.biz.system.logger.dto.OperateLogCreateReqDTO; -import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogPageReqDTO; -import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; -import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper; -import jakarta.annotation.Resource; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static org.junit.jupiter.api.Assertions.assertEquals; - -@Import({OperateLogServiceImpl.class}) -public class OperateLogServiceImplTest extends BaseDbUnitTest { - - @Resource - private OperateLogService operateLogServiceImpl; - - @Resource - private OperateLogMapper operateLogMapper; - - @Test - public void testCreateOperateLog() { - OperateLogCreateReqDTO reqVO = RandomUtils.randomPojo(OperateLogCreateReqDTO.class); - - // 调研 - operateLogServiceImpl.createOperateLog(reqVO); - // 断言 - OperateLogDO operateLogDO = operateLogMapper.selectOne(null); - assertPojoEquals(reqVO, operateLogDO); - } - - @Test - public void testGetOperateLogPage_vo() { - // 构造æ“作日志 - OperateLogDO operateLogDO = RandomUtils.randomPojo(OperateLogDO.class, o -> { - o.setUserId(2048L); - o.setBizId(999L); - o.setType("订å•"); - o.setSubType("创建订å•"); - o.setAction("修改编å·ä¸º 1 的用户信æ¯"); - o.setCreateTime(buildTime(2021, 3, 6)); - }); - operateLogMapper.insert(operateLogDO); - // 测试 userId ä¸åŒ¹é… - operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setUserId(1024L))); - // 测试 bizId ä¸åŒ¹é… - operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setBizId(888L))); - // 测试 type ä¸åŒ¹é… - operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setType("退款"))); - // 测试 subType ä¸åŒ¹é… - operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setSubType("创建退款"))); - // 测试 action ä¸åŒ¹é… - operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setAction("修改编å·ä¸º 1 退款信æ¯"))); - // 测试 createTime ä¸åŒ¹é… - operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setCreateTime(buildTime(2021, 2, 6)))); - - // æž„é€ è°ƒç”¨å‚æ•° - OperateLogPageReqVO reqVO = new OperateLogPageReqVO(); - reqVO.setUserId(2048L); - reqVO.setBizId(999L); - reqVO.setType("订"); - reqVO.setSubType("订å•"); - reqVO.setAction("用户信æ¯"); - reqVO.setCreateTime(buildBetweenTime(2021, 3, 5, 2021, 3, 7)); - - // 调用 - PageResult pageResult = operateLogServiceImpl.getOperateLogPage(reqVO); - // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(operateLogDO, pageResult.getList().get(0)); - } - - @Test - public void testGetOperateLogPage_dto() { - // 构造æ“作日志 - OperateLogDO operateLogDO = RandomUtils.randomPojo(OperateLogDO.class, o -> { - o.setUserId(2048L); - o.setBizId(999L); - o.setType("订å•"); - }); - operateLogMapper.insert(operateLogDO); - // 测试 userId ä¸åŒ¹é… - operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setUserId(1024L))); - // 测试 bizId ä¸åŒ¹é… - operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setBizId(888L))); - // 测试 type ä¸åŒ¹é… - operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setType("退款"))); - - // æž„é€ è°ƒç”¨å‚æ•° - OperateLogPageReqDTO reqDTO = new OperateLogPageReqDTO(); - reqDTO.setUserId(2048L); - reqDTO.setBizId(999L); - reqDTO.setType("订å•"); - - // 调用 - PageResult pageResult = operateLogServiceImpl.getOperateLogPage(reqDTO); - // æ–­è¨€ï¼ŒåªæŸ¥åˆ°äº†ä¸€æ¡ç¬¦åˆæ¡ä»¶çš„ - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(operateLogDO, pageResult.getList().get(0)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailAccountServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailAccountServiceImplTest.java deleted file mode 100644 index a3f237e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailAccountServiceImplTest.java +++ /dev/null @@ -1,179 +0,0 @@ -package cn.iocoder.yudao.module.system.service.mail; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; -import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_ACCOUNT_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -/** - * {@link MailAccountServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(MailAccountServiceImpl.class) -public class MailAccountServiceImplTest extends BaseDbUnitTest { - - @Resource - private MailAccountServiceImpl mailAccountService; - - @Resource - private MailAccountMapper mailAccountMapper; - - @MockBean - private MailTemplateService mailTemplateService; - - @Test - public void testCreateMailAccount_success() { - // 准备傿•° - MailAccountSaveReqVO reqVO = randomPojo(MailAccountSaveReqVO.class, o -> o.setMail(randomEmail())) - .setId(null); // 防止 id 被赋值 - - // 调用 - Long mailAccountId = mailAccountService.createMailAccount(reqVO); - // 断言 - assertNotNull(mailAccountId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - MailAccountDO mailAccount = mailAccountMapper.selectById(mailAccountId); - assertPojoEquals(reqVO, mailAccount, "id"); - } - - @Test - public void testUpdateMailAccount_success() { - // mock æ•°æ® - MailAccountDO dbMailAccount = randomPojo(MailAccountDO.class); - mailAccountMapper.insert(dbMailAccount);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - MailAccountSaveReqVO reqVO = randomPojo(MailAccountSaveReqVO.class, o -> { - o.setId(dbMailAccount.getId()); // 设置更新的 ID - o.setMail(randomEmail()); - }); - - // 调用 - mailAccountService.updateMailAccount(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - MailAccountDO mailAccount = mailAccountMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, mailAccount); - } - - @Test - public void testUpdateMailAccount_notExists() { - // 准备傿•° - MailAccountSaveReqVO reqVO = randomPojo(MailAccountSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> mailAccountService.updateMailAccount(reqVO), MAIL_ACCOUNT_NOT_EXISTS); - } - - @Test - public void testDeleteMailAccount_success() { - // mock æ•°æ® - MailAccountDO dbMailAccount = randomPojo(MailAccountDO.class); - mailAccountMapper.insert(dbMailAccount);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbMailAccount.getId(); - // mock æ–¹æ³•ï¼ˆæ— å…³è”æ¨¡ç‰ˆï¼‰ - when(mailTemplateService.getMailTemplateCountByAccountId(eq(id))).thenReturn(0L); - - // 调用 - mailAccountService.deleteMailAccount(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(mailAccountMapper.selectById(id)); - } - - @Test - public void testGetMailAccountFromCache() { - // mock æ•°æ® - MailAccountDO dbMailAccount = randomPojo(MailAccountDO.class); - mailAccountMapper.insert(dbMailAccount);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbMailAccount.getId(); - - // 调用 - MailAccountDO mailAccount = mailAccountService.getMailAccountFromCache(id); - // 断言 - assertPojoEquals(dbMailAccount, mailAccount); - } - - @Test - public void testDeleteMailAccount_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> mailAccountService.deleteMailAccount(id), MAIL_ACCOUNT_NOT_EXISTS); - } - - @Test - public void testGetMailAccountPage() { - // mock æ•°æ® - MailAccountDO dbMailAccount = randomPojo(MailAccountDO.class, o -> { // 等会查询到 - o.setMail("768@qq.com"); - o.setUsername("yunai"); - }); - mailAccountMapper.insert(dbMailAccount); - // 测试 mail ä¸åŒ¹é… - mailAccountMapper.insert(cloneIgnoreId(dbMailAccount, o -> o.setMail("788@qq.com"))); - // 测试 username ä¸åŒ¹é… - mailAccountMapper.insert(cloneIgnoreId(dbMailAccount, o -> o.setUsername("tudou"))); - // 准备傿•° - MailAccountPageReqVO reqVO = new MailAccountPageReqVO(); - reqVO.setMail("768"); - reqVO.setUsername("yu"); - - // 调用 - PageResult pageResult = mailAccountService.getMailAccountPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbMailAccount, pageResult.getList().get(0)); - } - - @Test - public void testGetMailAccount() { - // mock æ•°æ® - MailAccountDO dbMailAccount = randomPojo(MailAccountDO.class); - mailAccountMapper.insert(dbMailAccount);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbMailAccount.getId(); - - // 调用 - MailAccountDO mailAccount = mailAccountService.getMailAccount(id); - // 断言 - assertPojoEquals(dbMailAccount, mailAccount); - } - - @Test - public void testGetMailAccountList() { - // mock æ•°æ® - MailAccountDO dbMailAccount01 = randomPojo(MailAccountDO.class); - mailAccountMapper.insert(dbMailAccount01); - MailAccountDO dbMailAccount02 = randomPojo(MailAccountDO.class); - mailAccountMapper.insert(dbMailAccount02); - // 准备傿•° - - // 调用 - List list = mailAccountService.getMailAccountList(); - // 断言 - assertEquals(2, list.size()); - assertPojoEquals(dbMailAccount01, list.get(0)); - assertPojoEquals(dbMailAccount02, list.get(1)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailLogServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailLogServiceImplTest.java deleted file mode 100644 index 482aa5a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailLogServiceImplTest.java +++ /dev/null @@ -1,183 +0,0 @@ -package cn.iocoder.yudao.module.system.service.mail; - -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; -import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailLogDO; -import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; -import cn.iocoder.yudao.module.system.dal.mysql.mail.MailLogMapper; -import cn.iocoder.yudao.module.system.enums.mail.MailSendStatusEnum; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.Map; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.*; - -/** - * {@link MailLogServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(MailLogServiceImpl.class) -public class MailLogServiceImplTest extends BaseDbUnitTest { - - @Resource - private MailLogServiceImpl mailLogService; - - @Resource - private MailLogMapper mailLogMapper; - - @Test - public void testCreateMailLog() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String toMail = randomEmail(); - MailAccountDO account = randomPojo(MailAccountDO.class); - MailTemplateDO template = randomPojo(MailTemplateDO.class); - String templateContent = randomString(); - Map templateParams = randomTemplateParams(); - Boolean isSend = true; - // mock 方法 - - // 调用 - Long logId = mailLogService.createMailLog(userId, userType, toMail, account, template, templateContent, templateParams, isSend); - // 断言 - MailLogDO log = mailLogMapper.selectById(logId); - assertNotNull(log); - assertEquals(MailSendStatusEnum.INIT.getStatus(), log.getSendStatus()); - assertEquals(userId, log.getUserId()); - assertEquals(userType, log.getUserType()); - assertEquals(toMail, log.getToMail()); - assertEquals(account.getId(), log.getAccountId()); - assertEquals(account.getMail(), log.getFromMail()); - assertEquals(template.getId(), log.getTemplateId()); - assertEquals(template.getCode(), log.getTemplateCode()); - assertEquals(template.getNickname(), log.getTemplateNickname()); - assertEquals(template.getTitle(), log.getTemplateTitle()); - assertEquals(templateContent, log.getTemplateContent()); - assertEquals(templateParams, log.getTemplateParams()); - } - - @Test - public void testUpdateMailSendResult_success() { - // mock æ•°æ® - MailLogDO log = randomPojo(MailLogDO.class, o -> { - o.setSendStatus(MailSendStatusEnum.INIT.getStatus()); - o.setSendTime(null).setSendMessageId(null).setSendException(null) - .setTemplateParams(randomTemplateParams()); - }); - mailLogMapper.insert(log); - // 准备傿•° - Long logId = log.getId(); - String messageId = randomString(); - - // 调用 - mailLogService.updateMailSendResult(logId, messageId, null); - // 断言 - MailLogDO dbLog = mailLogMapper.selectById(logId); - assertEquals(MailSendStatusEnum.SUCCESS.getStatus(), dbLog.getSendStatus()); - assertNotNull(dbLog.getSendTime()); - assertEquals(messageId, dbLog.getSendMessageId()); - assertNull(dbLog.getSendException()); - } - - @Test - public void testUpdateMailSendResult_exception() { - // mock æ•°æ® - MailLogDO log = randomPojo(MailLogDO.class, o -> { - o.setSendStatus(MailSendStatusEnum.INIT.getStatus()); - o.setSendTime(null).setSendMessageId(null).setSendException(null) - .setTemplateParams(randomTemplateParams()); - }); - mailLogMapper.insert(log); - // 准备傿•° - Long logId = log.getId(); - Exception exception = new NullPointerException("测试异常"); - - // 调用 - mailLogService.updateMailSendResult(logId, null, exception); - // 断言 - MailLogDO dbLog = mailLogMapper.selectById(logId); - assertEquals(MailSendStatusEnum.FAILURE.getStatus(), dbLog.getSendStatus()); - assertNotNull(dbLog.getSendTime()); - assertNull(dbLog.getSendMessageId()); - assertEquals("NullPointerException: 测试异常", dbLog.getSendException()); - } - - @Test - public void testGetMailLog() { - // mock æ•°æ® - MailLogDO dbMailLog = randomPojo(MailLogDO.class, o -> o.setTemplateParams(randomTemplateParams())); - mailLogMapper.insert(dbMailLog); - // 准备傿•° - Long id = dbMailLog.getId(); - - // 调用 - MailLogDO mailLog = mailLogService.getMailLog(id); - // 断言 - assertPojoEquals(dbMailLog, mailLog); - } - - @Test - public void testGetMailLogPage() { - // mock æ•°æ® - MailLogDO dbMailLog = randomPojo(MailLogDO.class, o -> { // 等会查询到 - o.setUserId(1L); - o.setUserType(UserTypeEnum.ADMIN.getValue()); - o.setToMail("768@qq.com"); - o.setAccountId(10L); - o.setTemplateId(100L); - o.setSendStatus(MailSendStatusEnum.INIT.getStatus()); - o.setSendTime(buildTime(2023, 2, 10)); - o.setTemplateParams(randomTemplateParams()); - }); - mailLogMapper.insert(dbMailLog); - // 测试 userId ä¸åŒ¹é… - mailLogMapper.insert(cloneIgnoreId(dbMailLog, o -> o.setUserId(2L))); - // 测试 userType ä¸åŒ¹é… - mailLogMapper.insert(cloneIgnoreId(dbMailLog, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); - // 测试 toMail ä¸åŒ¹é… - mailLogMapper.insert(cloneIgnoreId(dbMailLog, o -> o.setToMail("788@.qq.com"))); - // 测试 accountId ä¸åŒ¹é… - mailLogMapper.insert(cloneIgnoreId(dbMailLog, o -> o.setAccountId(11L))); - // 测试 templateId ä¸åŒ¹é… - mailLogMapper.insert(cloneIgnoreId(dbMailLog, o -> o.setTemplateId(101L))); - // 测试 sendStatus ä¸åŒ¹é… - mailLogMapper.insert(cloneIgnoreId(dbMailLog, o -> o.setSendStatus(MailSendStatusEnum.SUCCESS.getStatus()))); - // 测试 sendTime ä¸åŒ¹é… - mailLogMapper.insert(cloneIgnoreId(dbMailLog, o -> o.setSendTime(buildTime(2023, 3, 10)))); - // 准备傿•° - MailLogPageReqVO reqVO = new MailLogPageReqVO(); - reqVO.setUserId(1L); - reqVO.setUserType(UserTypeEnum.ADMIN.getValue()); - reqVO.setToMail("768"); - reqVO.setAccountId(10L); - reqVO.setTemplateId(100L); - reqVO.setSendStatus(MailSendStatusEnum.INIT.getStatus()); - reqVO.setSendTime((buildBetweenTime(2023, 2, 1, 2023, 2, 15))); - - // 调用 - PageResult pageResult = mailLogService.getMailLogPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbMailLog, pageResult.getList().get(0)); - } - - private static Map randomTemplateParams() { - return MapUtil.builder().put(randomString(), randomString()) - .put(randomString(), randomString()).build(); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailSendServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailSendServiceImplTest.java deleted file mode 100644 index 1ef1e12..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailSendServiceImplTest.java +++ /dev/null @@ -1,329 +0,0 @@ -package cn.iocoder.yudao.module.system.service.mail; - -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.framework.test.core.util.RandomUtils; -import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; -import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; -import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage; -import cn.iocoder.yudao.module.system.mq.producer.mail.MailProducer; -import cn.iocoder.yudao.module.system.service.member.MemberService; -import cn.iocoder.yudao.module.system.service.user.AdminUserService; -import org.assertj.core.util.Lists; -import org.dromara.hutool.extra.mail.*; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; - -import java.util.HashMap; -import java.util.Map; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - -public class MailSendServiceImplTest extends BaseMockitoUnitTest { - - @InjectMocks - private MailSendServiceImpl mailSendService; - - @Mock - private AdminUserService adminUserService; - @Mock - private MemberService memberService; - @Mock - private MailAccountService mailAccountService; - @Mock - private MailTemplateService mailTemplateService; - @Mock - private MailLogService mailLogService; - @Mock - private MailProducer mailProducer; - - /** - * ç”¨äºŽå¿«é€Ÿæµ‹è¯•ä½ çš„é‚®ç®±è´¦å·æ˜¯å¦æ­£å¸¸ - */ - @Test - @Disabled - public void testDemo() { - MailAccount mailAccount = new MailAccount() -// .setFrom("奥特曼 ") - .setFrom("ydym_test@163.com") // é‚®ç®±åœ°å€ - .setHost("smtp.163.com").setPort(465).setSslEnable(true) // SMTP æœåС噍 - .setAuth(true).setUser("ydym_test@163.com").setPass("WBZTEINMIFVRYSOE".toCharArray()); // 登录账å·å¯†ç  - String messageId = MailUtil.send(mailAccount, "7685413@qq.com", "主题", "内容", false); - System.out.println("å‘é€ç»“果:" + messageId); - } - - @Test - public void testSendSingleMailToAdmin() { - // 准备傿•° - Long userId = randomLongId(); - String templateCode = RandomUtils.randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock adminUserService 的方法 - AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setMobile("15601691300")); - when(adminUserService.getUser(eq(userId))).thenReturn(user); - - // mock MailTemplateService 的方法 - MailTemplateDO template = randomPojo(MailTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(mailTemplateService.getMailTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - String title = RandomUtils.randomString(); - when(mailTemplateService.formatMailTemplateContent(eq(template.getTitle()), eq(templateParams))) - .thenReturn(title); - String content = RandomUtils.randomString(); - when(mailTemplateService.formatMailTemplateContent(eq(template.getContent()), eq(templateParams))) - .thenReturn(content); - // mock MailAccountService 的方法 - MailAccountDO account = randomPojo(MailAccountDO.class); - when(mailAccountService.getMailAccountFromCache(eq(template.getAccountId()))).thenReturn(account); - // mock MailLogService 的方法 - Long mailLogId = randomLongId(); - when(mailLogService.createMailLog(eq(userId), eq(UserTypeEnum.ADMIN.getValue()), eq(user.getEmail()), - eq(account), eq(template), eq(content), eq(templateParams), eq(true))).thenReturn(mailLogId); - - // 调用 - Long resultMailLogId = mailSendService.sendSingleMailToAdmin(null, userId, templateCode, templateParams); - // 断言 - assertEquals(mailLogId, resultMailLogId); - // 断言调用 - verify(mailProducer).sendMailSendMessage(eq(mailLogId), eq(user.getEmail()), - eq(account.getId()), eq(template.getNickname()), eq(title), eq(content)); - } - - @Test - public void testSendSingleMailToMember() { - // 准备傿•° - Long userId = randomLongId(); - String templateCode = RandomUtils.randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock memberService 的方法 - String mail = randomEmail(); - when(memberService.getMemberUserEmail(eq(userId))).thenReturn(mail); - - // mock MailTemplateService 的方法 - MailTemplateDO template = randomPojo(MailTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(mailTemplateService.getMailTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - String title = RandomUtils.randomString(); - when(mailTemplateService.formatMailTemplateContent(eq(template.getTitle()), eq(templateParams))) - .thenReturn(title); - String content = RandomUtils.randomString(); - when(mailTemplateService.formatMailTemplateContent(eq(template.getContent()), eq(templateParams))) - .thenReturn(content); - // mock MailAccountService 的方法 - MailAccountDO account = randomPojo(MailAccountDO.class); - when(mailAccountService.getMailAccountFromCache(eq(template.getAccountId()))).thenReturn(account); - // mock MailLogService 的方法 - Long mailLogId = randomLongId(); - when(mailLogService.createMailLog(eq(userId), eq(UserTypeEnum.MEMBER.getValue()), eq(mail), - eq(account), eq(template), eq(content), eq(templateParams), eq(true))).thenReturn(mailLogId); - - // 调用 - Long resultMailLogId = mailSendService.sendSingleMailToMember(null, userId, templateCode, templateParams); - // 断言 - assertEquals(mailLogId, resultMailLogId); - // 断言调用 - verify(mailProducer).sendMailSendMessage(eq(mailLogId), eq(mail), - eq(account.getId()), eq(template.getNickname()), eq(title), eq(content)); - } - - /** - * å‘逿ˆåŠŸï¼Œå½“çŸ­ä¿¡æ¨¡æ¿å¼€å¯æ—¶ - */ - @Test - public void testSendSingleMail_successWhenMailTemplateEnable() { - // 准备傿•° - String mail = randomEmail(); - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String templateCode = RandomUtils.randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock MailTemplateService 的方法 - MailTemplateDO template = randomPojo(MailTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(mailTemplateService.getMailTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - String title = RandomUtils.randomString(); - when(mailTemplateService.formatMailTemplateContent(eq(template.getTitle()), eq(templateParams))) - .thenReturn(title); - String content = RandomUtils.randomString(); - when(mailTemplateService.formatMailTemplateContent(eq(template.getContent()), eq(templateParams))) - .thenReturn(content); - // mock MailAccountService 的方法 - MailAccountDO account = randomPojo(MailAccountDO.class); - when(mailAccountService.getMailAccountFromCache(eq(template.getAccountId()))).thenReturn(account); - // mock MailLogService 的方法 - Long mailLogId = randomLongId(); - when(mailLogService.createMailLog(eq(userId), eq(userType), eq(mail), - eq(account), eq(template), eq(content), eq(templateParams), eq(true))).thenReturn(mailLogId); - - // 调用 - Long resultMailLogId = mailSendService.sendSingleMail(mail, userId, userType, templateCode, templateParams); - // 断言 - assertEquals(mailLogId, resultMailLogId); - // 断言调用 - verify(mailProducer).sendMailSendMessage(eq(mailLogId), eq(mail), - eq(account.getId()), eq(template.getNickname()), eq(title), eq(content)); - } - - /** - * å‘逿ˆåŠŸï¼Œå½“çŸ­ä¿¡æ¨¡æ¿å…³é—­æ—¶ - */ - @Test - public void testSendSingleMail_successWhenSmsTemplateDisable() { - // 准备傿•° - String mail = randomEmail(); - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String templateCode = RandomUtils.randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock MailTemplateService 的方法 - MailTemplateDO template = randomPojo(MailTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.DISABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(mailTemplateService.getMailTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - String title = RandomUtils.randomString(); - when(mailTemplateService.formatMailTemplateContent(eq(template.getTitle()), eq(templateParams))) - .thenReturn(title); - String content = RandomUtils.randomString(); - when(mailTemplateService.formatMailTemplateContent(eq(template.getContent()), eq(templateParams))) - .thenReturn(content); - // mock MailAccountService 的方法 - MailAccountDO account = randomPojo(MailAccountDO.class); - when(mailAccountService.getMailAccountFromCache(eq(template.getAccountId()))).thenReturn(account); - // mock MailLogService 的方法 - Long mailLogId = randomLongId(); - when(mailLogService.createMailLog(eq(userId), eq(userType), eq(mail), - eq(account), eq(template), eq(content), eq(templateParams), eq(false))).thenReturn(mailLogId); - - // 调用 - Long resultMailLogId = mailSendService.sendSingleMail(mail, userId, userType, templateCode, templateParams); - // 断言 - assertEquals(mailLogId, resultMailLogId); - // 断言调用 - verify(mailProducer, times(0)).sendMailSendMessage(anyLong(), anyString(), - anyLong(), anyString(), anyString(), anyString()); - } - - @Test - public void testValidateMailTemplateValid_notExists() { - // 准备傿•° - String templateCode = RandomUtils.randomString(); - // mock 方法 - - // 调用,并断言异常 - assertServiceException(() -> mailSendService.validateMailTemplate(templateCode), - MAIL_TEMPLATE_NOT_EXISTS); - } - - @Test - public void testValidateTemplateParams_paramMiss() { - // 准备傿•° - MailTemplateDO template = randomPojo(MailTemplateDO.class, - o -> o.setParams(Lists.newArrayList("code"))); - Map templateParams = new HashMap<>(); - // mock 方法 - - // 调用,并断言异常 - assertServiceException(() -> mailSendService.validateTemplateParams(template, templateParams), - MAIL_SEND_TEMPLATE_PARAM_MISS, "code"); - } - - @Test - public void testValidateMail_notExists() { - // 准备傿•° - // mock 方法 - - // 调用,并断言异常 - assertServiceException(() -> mailSendService.validateMail(null), - MAIL_SEND_MAIL_NOT_EXISTS); - } - - @Test - public void testDoSendMail_success() { - try (final MockedStatic mailUtilMock = mockStatic(MailUtil.class)) { - // 准备傿•° - MailSendMessage message = randomPojo(MailSendMessage.class, o -> o.setNickname("芋艿")); - // mock 方法(获得邮箱账å·ï¼‰ - MailAccountDO account = randomPojo(MailAccountDO.class, o -> o.setMail("7685@qq.com")); - when(mailAccountService.getMailAccountFromCache(eq(message.getAccountId()))) - .thenReturn(account); - - // mock 方法(å‘é€é‚®ä»¶ï¼‰ - String messageId = randomString(); - mailUtilMock.when(() -> MailUtil.send( - argThat(mailAccount -> { - assertEquals("芋艿 <7685@qq.com>", mailAccount.getFrom()); - assertTrue(mailAccount.isAuth()); - assertEquals(account.getUsername(), mailAccount.getUser()); - assertArrayEquals(account.getPassword().toCharArray(), mailAccount.getPass()); - assertEquals(account.getHost(), mailAccount.getHost()); - assertEquals(account.getPort(), mailAccount.getPort()); - assertEquals(account.getSslEnable(), mailAccount.isSslEnable()); - return true; - }), eq(message.getMail()), eq(message.getTitle()), eq(message.getContent()), eq(true))) - .thenReturn(messageId); - - // 调用 - mailSendService.doSendMail(message); - // 断言 - verify(mailLogService).updateMailSendResult(eq(message.getLogId()), eq(messageId), isNull()); - } - } - - @Test - public void testDoSendMail_exception() { - try (MockedStatic mailUtilMock = mockStatic(MailUtil.class)) { - // 准备傿•° - MailSendMessage message = randomPojo(MailSendMessage.class, o -> o.setNickname("芋艿")); - // mock 方法(获得邮箱账å·ï¼‰ - MailAccountDO account = randomPojo(MailAccountDO.class, o -> o.setMail("7685@qq.com")); - when(mailAccountService.getMailAccountFromCache(eq(message.getAccountId()))) - .thenReturn(account); - - // mock 方法(å‘é€é‚®ä»¶ï¼‰ - Exception e = new NullPointerException("啦啦啦"); - mailUtilMock.when(() -> MailUtil.send(argThat(mailAccount -> { - assertEquals("芋艿 <7685@qq.com>", mailAccount.getFrom()); - assertTrue(mailAccount.isAuth()); - assertEquals(account.getUsername(), mailAccount.getUser()); - assertArrayEquals(account.getPassword().toCharArray(), mailAccount.getPass()); - assertEquals(account.getHost(), mailAccount.getHost()); - assertEquals(account.getPort(), mailAccount.getPort()); - assertEquals(account.getSslEnable(), mailAccount.isSslEnable()); - return true; - }), eq(message.getMail()), eq(message.getTitle()), eq(message.getContent()), eq(true))).thenThrow(e); - - // 调用 - mailSendService.doSendMail(message); - // 断言 - verify(mailLogService).updateMailSendResult(eq(message.getLogId()), isNull(), same(e)); - } - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateServiceImplTest.java deleted file mode 100644 index 70059b2..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateServiceImplTest.java +++ /dev/null @@ -1,215 +0,0 @@ -package cn.iocoder.yudao.module.system.service.mail; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateSaveReqVO; -import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; -import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPLATE_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -/** - * {@link MailTemplateServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(MailTemplateServiceImpl.class) -public class MailTemplateServiceImplTest extends BaseDbUnitTest { - - @Resource - private MailTemplateServiceImpl mailTemplateService; - - @Resource - private MailTemplateMapper mailTemplateMapper; - - @Test - public void testCreateMailTemplate_success() { - // 准备傿•° - MailTemplateSaveReqVO reqVO = randomPojo(MailTemplateSaveReqVO.class) - .setId(null); // 防止 id 被赋值 - - // 调用 - Long mailTemplateId = mailTemplateService.createMailTemplate(reqVO); - // 断言 - assertNotNull(mailTemplateId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - MailTemplateDO mailTemplate = mailTemplateMapper.selectById(mailTemplateId); - assertPojoEquals(reqVO, mailTemplate, "id"); - } - - @Test - public void testUpdateMailTemplate_success() { - // mock æ•°æ® - MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class); - mailTemplateMapper.insert(dbMailTemplate);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - MailTemplateSaveReqVO reqVO = randomPojo(MailTemplateSaveReqVO.class, o -> { - o.setId(dbMailTemplate.getId()); // 设置更新的 ID - }); - - // 调用 - mailTemplateService.updateMailTemplate(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - MailTemplateDO mailTemplate = mailTemplateMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, mailTemplate); - } - - @Test - public void testUpdateMailTemplate_notExists() { - // 准备傿•° - MailTemplateSaveReqVO reqVO = randomPojo(MailTemplateSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> mailTemplateService.updateMailTemplate(reqVO), MAIL_TEMPLATE_NOT_EXISTS); - } - - @Test - public void testDeleteMailTemplate_success() { - // mock æ•°æ® - MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class); - mailTemplateMapper.insert(dbMailTemplate);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbMailTemplate.getId(); - - // 调用 - mailTemplateService.deleteMailTemplate(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(mailTemplateMapper.selectById(id)); - } - - @Test - public void testDeleteMailTemplate_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> mailTemplateService.deleteMailTemplate(id), MAIL_TEMPLATE_NOT_EXISTS); - } - - @Test - public void testGetMailTemplatePage() { - // mock æ•°æ® - MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class, o -> { // 等会查询到 - o.setName("æºç "); - o.setCode("test_01"); - o.setAccountId(1L); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setCreateTime(buildTime(2023, 2, 3)); - }); - mailTemplateMapper.insert(dbMailTemplate); - // 测试 name ä¸åŒ¹é… - mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate, o -> o.setName("芋é“"))); - // 测试 code ä¸åŒ¹é… - mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate, o -> o.setCode("test_02"))); - // 测试 accountId ä¸åŒ¹é… - mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate, o -> o.setAccountId(2L))); - // 测试 status ä¸åŒ¹é… - mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 createTime ä¸åŒ¹é… - mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate, o -> o.setCreateTime(buildTime(2023, 1, 5)))); - // 准备傿•° - MailTemplatePageReqVO reqVO = new MailTemplatePageReqVO(); - reqVO.setName("æº"); - reqVO.setCode("est_01"); - reqVO.setAccountId(1L); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 5)); - - // 调用 - PageResult pageResult = mailTemplateService.getMailTemplatePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbMailTemplate, pageResult.getList().get(0)); - } - - @Test - public void testGetMailTemplateList() { - // mock æ•°æ® - MailTemplateDO dbMailTemplate01 = randomPojo(MailTemplateDO.class); - mailTemplateMapper.insert(dbMailTemplate01); - MailTemplateDO dbMailTemplate02 = randomPojo(MailTemplateDO.class); - mailTemplateMapper.insert(dbMailTemplate02); - - // 调用 - List list = mailTemplateService.getMailTemplateList(); - // 断言 - assertEquals(2, list.size()); - assertEquals(dbMailTemplate01, list.get(0)); - assertEquals(dbMailTemplate02, list.get(1)); - } - - @Test - public void testGetMailTemplate() { - // mock æ•°æ® - MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class); - mailTemplateMapper.insert(dbMailTemplate); - // 准备傿•° - Long id = dbMailTemplate.getId(); - - // 调用 - MailTemplateDO mailTemplate = mailTemplateService.getMailTemplate(id); - // 断言 - assertPojoEquals(dbMailTemplate, mailTemplate); - } - - @Test - public void testGetMailTemplateByCodeFromCache() { - // mock æ•°æ® - MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class); - mailTemplateMapper.insert(dbMailTemplate); - // 准备傿•° - String code = dbMailTemplate.getCode(); - - // 调用 - MailTemplateDO mailTemplate = mailTemplateService.getMailTemplateByCodeFromCache(code); - // 断言 - assertPojoEquals(dbMailTemplate, mailTemplate); - } - - @Test - public void testFormatMailTemplateContent() { - // 准备傿•° - Map params = new HashMap<>(); - params.put("name", "å°çº¢"); - params.put("what", "饭"); - - // 调用,并断言 - assertEquals("å°çº¢ï¼Œä½ å¥½ï¼Œé¥­åƒäº†å—?", - mailTemplateService.formatMailTemplateContent("{name},你好,{what}åƒäº†å—?", params)); - } - - @Test - public void testCountByAccountId() { - // mock æ•°æ® - MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class); - mailTemplateMapper.insert(dbMailTemplate); - // 测试 accountId ä¸åŒ¹é… - mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate, o -> o.setAccountId(2L))); - // 准备傿•° - Long accountId = dbMailTemplate.getAccountId(); - - // 调用 - long count = mailTemplateService.getMailTemplateCountByAccountId(accountId); - // 断言 - assertEquals(1, count); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImplTest.java deleted file mode 100644 index 7b40af3..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImplTest.java +++ /dev/null @@ -1,130 +0,0 @@ -package cn.iocoder.yudao.module.system.service.notice; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; -import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND; -import static org.junit.jupiter.api.Assertions.*; - -@Import(NoticeServiceImpl.class) -class NoticeServiceImplTest extends BaseDbUnitTest { - - @Resource - private NoticeServiceImpl noticeService; - - @Resource - private NoticeMapper noticeMapper; - - @Test - public void testGetNoticePage_success() { - // æ’å…¥å‰ç½®æ•°æ® - NoticeDO dbNotice = randomPojo(NoticeDO.class, o -> { - o.setTitle("尼夿‹‰æ–¯èµµå››æ¥å•¦ï¼"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); - noticeMapper.insert(dbNotice); - // 测试 title ä¸åŒ¹é… - noticeMapper.insert(cloneIgnoreId(dbNotice, o -> o.setTitle("尼夿‹‰æ–¯å‡¯å¥‡ä¹Ÿæ¥å•¦ï¼"))); - // 测试 status ä¸åŒ¹é… - noticeMapper.insert(cloneIgnoreId(dbNotice, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 准备傿•° - NoticePageReqVO reqVO = new NoticePageReqVO(); - reqVO.setTitle("尼夿‹‰æ–¯èµµå››æ¥å•¦ï¼"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - - // 调用 - PageResult pageResult = noticeService.getNoticePage(reqVO); - // éªŒè¯æŸ¥è¯¢ç»“æžœç»è¿‡ç­›é€‰ - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbNotice, pageResult.getList().get(0)); - } - - @Test - public void testGetNotice_success() { - // æ’å…¥å‰ç½®æ•°æ® - NoticeDO dbNotice = randomPojo(NoticeDO.class); - noticeMapper.insert(dbNotice); - - // 查询 - NoticeDO notice = noticeService.getNotice(dbNotice.getId()); - - // éªŒè¯æ’入与读å–对象是å¦ä¸€è‡´ - assertNotNull(notice); - assertPojoEquals(dbNotice, notice); - } - - @Test - public void testCreateNotice_success() { - // 准备傿•° - NoticeSaveReqVO reqVO = randomPojo(NoticeSaveReqVO.class) - .setId(null); // é¿å… id 被赋值 - - // 调用 - Long noticeId = noticeService.createNotice(reqVO); - // 校验æ’å…¥å±žæ€§æ˜¯å¦æ­£ç¡® - assertNotNull(noticeId); - NoticeDO notice = noticeMapper.selectById(noticeId); - assertPojoEquals(reqVO, notice, "id"); - } - - @Test - public void testUpdateNotice_success() { - // æ’å…¥å‰ç½®æ•°æ® - NoticeDO dbNoticeDO = randomPojo(NoticeDO.class); - noticeMapper.insert(dbNoticeDO); - - // å‡†å¤‡æ›´æ–°å‚æ•° - NoticeSaveReqVO reqVO = randomPojo(NoticeSaveReqVO.class, o -> o.setId(dbNoticeDO.getId())); - - // æ›´æ–° - noticeService.updateNotice(reqVO); - // æ£€éªŒæ˜¯å¦æ›´æ–°æˆåŠŸ - NoticeDO notice = noticeMapper.selectById(reqVO.getId()); - assertPojoEquals(reqVO, notice); - } - - @Test - public void testDeleteNotice_success() { - // æ’å…¥å‰ç½®æ•°æ® - NoticeDO dbNotice = randomPojo(NoticeDO.class); - noticeMapper.insert(dbNotice); - - // 删除 - noticeService.deleteNotice(dbNotice.getId()); - - // 检查是å¦åˆ é™¤æˆåŠŸ - assertNull(noticeMapper.selectById(dbNotice.getId())); - } - - @Test - public void testValidateNoticeExists_success() { - // æ’å…¥å‰ç½®æ•°æ® - NoticeDO dbNotice = randomPojo(NoticeDO.class); - noticeMapper.insert(dbNotice); - - // æˆåŠŸè°ƒç”¨ - noticeService.validateNoticeExists(dbNotice.getId()); - } - - @Test - public void testValidateNoticeExists_noExists() { - assertServiceException(() -> - noticeService.validateNoticeExists(randomLongId()), NOTICE_NOT_FOUND); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImplTest.java deleted file mode 100644 index cfd193b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImplTest.java +++ /dev/null @@ -1,276 +0,0 @@ -package cn.iocoder.yudao.module.system.service.notify; - -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyMessageDO; -import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO; -import cn.iocoder.yudao.module.system.dal.mysql.notify.NotifyMessageMapper; -import jakarta.annotation.Resource; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.*; - -/** -* {@link NotifyMessageServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ -@Import(NotifyMessageServiceImpl.class) -public class NotifyMessageServiceImplTest extends BaseDbUnitTest { - - @Resource - private NotifyMessageServiceImpl notifyMessageService; - - @Resource - private NotifyMessageMapper notifyMessageMapper; - - @Test - public void testCreateNotifyMessage_success() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - NotifyTemplateDO template = randomPojo(NotifyTemplateDO.class); - String templateContent = randomString(); - Map templateParams = randomTemplateParams(); - // mock 方法 - - // 调用 - Long messageId = notifyMessageService.createNotifyMessage(userId, userType, - template, templateContent, templateParams); - // 断言 - NotifyMessageDO message = notifyMessageMapper.selectById(messageId); - assertNotNull(message); - assertEquals(userId, message.getUserId()); - assertEquals(userType, message.getUserType()); - assertEquals(template.getId(), message.getTemplateId()); - assertEquals(template.getCode(), message.getTemplateCode()); - assertEquals(template.getType(), message.getTemplateType()); - assertEquals(template.getNickname(), message.getTemplateNickname()); - assertEquals(templateContent, message.getTemplateContent()); - assertEquals(templateParams, message.getTemplateParams()); - assertEquals(false, message.getReadStatus()); - assertNull(message.getReadTime()); - } - - @Test - public void testGetNotifyMessagePage() { - // mock æ•°æ® - NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 - o.setUserId(1L); - o.setUserType(UserTypeEnum.ADMIN.getValue()); - o.setTemplateCode("test_01"); - o.setTemplateType(10); - o.setCreateTime(buildTime(2022, 1, 2)); - o.setTemplateParams(randomTemplateParams()); - }); - notifyMessageMapper.insert(dbNotifyMessage); - // 测试 userId ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserId(2L))); - // 测试 userType ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); - // 测试 templateCode ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setTemplateCode("test_11"))); - // 测试 templateType ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setTemplateType(20))); - // 测试 createTime ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setCreateTime(buildTime(2022, 2, 1)))); - // 准备傿•° - NotifyMessagePageReqVO reqVO = new NotifyMessagePageReqVO(); - reqVO.setUserId(1L); - reqVO.setUserType(UserTypeEnum.ADMIN.getValue()); - reqVO.setTemplateCode("est_01"); - reqVO.setTemplateType(10); - reqVO.setCreateTime(buildBetweenTime(2022, 1, 1, 2022, 1, 10)); - - // 调用 - PageResult pageResult = notifyMessageService.getNotifyMessagePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbNotifyMessage, pageResult.getList().get(0)); - } - - @Test - public void testGetNotifyMessage() { - // mock æ•°æ® - NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, - o -> o.setTemplateParams(randomTemplateParams())); - notifyMessageMapper.insert(dbNotifyMessage); - // 准备傿•° - Long id = dbNotifyMessage.getId(); - - // 调用 - NotifyMessageDO notifyMessage = notifyMessageService.getNotifyMessage(id); - assertPojoEquals(dbNotifyMessage, notifyMessage); - } - - @Test - public void testGetMyNotifyMessagePage() { - // mock æ•°æ® - NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 - o.setUserId(1L); - o.setUserType(UserTypeEnum.ADMIN.getValue()); - o.setReadStatus(true); - o.setCreateTime(buildTime(2022, 1, 2)); - o.setTemplateParams(randomTemplateParams()); - }); - notifyMessageMapper.insert(dbNotifyMessage); - // 测试 userId ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserId(2L))); - // 测试 userType ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); - // 测试 readStatus ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setReadStatus(false))); - // 测试 createTime ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setCreateTime(buildTime(2022, 2, 1)))); - // 准备傿•° - Long userId = 1L; - Integer userType = UserTypeEnum.ADMIN.getValue(); - NotifyMessageMyPageReqVO reqVO = new NotifyMessageMyPageReqVO(); - reqVO.setReadStatus(true); - reqVO.setCreateTime(buildBetweenTime(2022, 1, 1, 2022, 1, 10)); - - // 调用 - PageResult pageResult = notifyMessageService.getMyMyNotifyMessagePage(reqVO, userId, userType); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbNotifyMessage, pageResult.getList().get(0)); - } - - @Test - public void testGetUnreadNotifyMessageList() { - // mock æ•°æ® - NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 - o.setUserId(1L); - o.setUserType(UserTypeEnum.ADMIN.getValue()); - o.setReadStatus(false); - o.setTemplateParams(randomTemplateParams()); - }); - notifyMessageMapper.insert(dbNotifyMessage); - // 测试 userId ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserId(2L))); - // 测试 userType ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); - // 测试 readStatus ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setReadStatus(true))); - // 准备傿•° - Long userId = 1L; - Integer userType = UserTypeEnum.ADMIN.getValue(); - Integer size = 10; - - // 调用 - List list = notifyMessageService.getUnreadNotifyMessageList(userId, userType, size); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(dbNotifyMessage, list.get(0)); - } - - @Test - public void testGetUnreadNotifyMessageCount() { - // mock æ•°æ® - NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 - o.setUserId(1L); - o.setUserType(UserTypeEnum.ADMIN.getValue()); - o.setReadStatus(false); - o.setTemplateParams(randomTemplateParams()); - }); - notifyMessageMapper.insert(dbNotifyMessage); - // 测试 userId ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserId(2L))); - // 测试 userType ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); - // 测试 readStatus ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setReadStatus(true))); - // 准备傿•° - Long userId = 1L; - Integer userType = UserTypeEnum.ADMIN.getValue(); - - // 调用,并断言 - assertEquals(1, notifyMessageService.getUnreadNotifyMessageCount(userId, userType)); - } - - @Test - public void testUpdateNotifyMessageRead() { - // mock æ•°æ® - NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 - o.setUserId(1L); - o.setUserType(UserTypeEnum.ADMIN.getValue()); - o.setReadStatus(false); - o.setReadTime(null); - o.setTemplateParams(randomTemplateParams()); - }); - notifyMessageMapper.insert(dbNotifyMessage); - // 测试 userId ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserId(2L))); - // 测试 userType ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); - // 测试 readStatus ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setReadStatus(true))); - // 准备傿•° - Collection ids = Arrays.asList(dbNotifyMessage.getId(), dbNotifyMessage.getId() + 1, - dbNotifyMessage.getId() + 2, dbNotifyMessage.getId() + 3); - Long userId = 1L; - Integer userType = UserTypeEnum.ADMIN.getValue(); - - // 调用 - int updateCount = notifyMessageService.updateNotifyMessageRead(ids, userId, userType); - // 断言 - assertEquals(1, updateCount); - NotifyMessageDO notifyMessage = notifyMessageMapper.selectById(dbNotifyMessage.getId()); - assertTrue(notifyMessage.getReadStatus()); - assertNotNull(notifyMessage.getReadTime()); - } - - @Test - public void testUpdateAllNotifyMessageRead() { - // mock æ•°æ® - NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 - o.setUserId(1L); - o.setUserType(UserTypeEnum.ADMIN.getValue()); - o.setReadStatus(false); - o.setReadTime(null); - o.setTemplateParams(randomTemplateParams()); - }); - notifyMessageMapper.insert(dbNotifyMessage); - // 测试 userId ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserId(2L))); - // 测试 userType ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); - // 测试 readStatus ä¸åŒ¹é… - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setReadStatus(true))); - // 准备傿•° - Long userId = 1L; - Integer userType = UserTypeEnum.ADMIN.getValue(); - - // 调用 - int updateCount = notifyMessageService.updateAllNotifyMessageRead(userId, userType); - // 断言 - assertEquals(1, updateCount); - NotifyMessageDO notifyMessage = notifyMessageMapper.selectById(dbNotifyMessage.getId()); - assertTrue(notifyMessage.getReadStatus()); - assertNotNull(notifyMessage.getReadTime()); - } - - private static Map randomTemplateParams() { - return MapUtil.builder().put(randomString(), randomString()) - .put(randomString(), randomString()).build(); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifySendServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifySendServiceImplTest.java deleted file mode 100644 index 9dbdac4..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifySendServiceImplTest.java +++ /dev/null @@ -1,190 +0,0 @@ -package cn.iocoder.yudao.module.system.service.notify; - -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO; -import org.assertj.core.util.Lists; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.HashMap; -import java.util.Map; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTIFY_SEND_TEMPLATE_PARAM_MISS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - -class NotifySendServiceImplTest extends BaseMockitoUnitTest { - - @InjectMocks - private NotifySendServiceImpl notifySendService; - - @Mock - private NotifyTemplateService notifyTemplateService; - @Mock - private NotifyMessageService notifyMessageService; - - @Test - public void testSendSingleNotifyToAdmin() { - // 准备傿•° - Long userId = randomLongId(); - String templateCode = randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock NotifyTemplateService 的方法 - NotifyTemplateDO template = randomPojo(NotifyTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(notifyTemplateService.getNotifyTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - String content = randomString(); - when(notifyTemplateService.formatNotifyTemplateContent(eq(template.getContent()), eq(templateParams))) - .thenReturn(content); - // mock NotifyMessageService 的方法 - Long messageId = randomLongId(); - when(notifyMessageService.createNotifyMessage(eq(userId), eq(UserTypeEnum.ADMIN.getValue()), - eq(template), eq(content), eq(templateParams))).thenReturn(messageId); - - // 调用 - Long resultMessageId = notifySendService.sendSingleNotifyToAdmin(userId, templateCode, templateParams); - // 断言 - assertEquals(messageId, resultMessageId); - } - - @Test - public void testSendSingleNotifyToMember() { - // 准备傿•° - Long userId = randomLongId(); - String templateCode = randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock NotifyTemplateService 的方法 - NotifyTemplateDO template = randomPojo(NotifyTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(notifyTemplateService.getNotifyTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - String content = randomString(); - when(notifyTemplateService.formatNotifyTemplateContent(eq(template.getContent()), eq(templateParams))) - .thenReturn(content); - // mock NotifyMessageService 的方法 - Long messageId = randomLongId(); - when(notifyMessageService.createNotifyMessage(eq(userId), eq(UserTypeEnum.MEMBER.getValue()), - eq(template), eq(content), eq(templateParams))).thenReturn(messageId); - - // 调用 - Long resultMessageId = notifySendService.sendSingleNotifyToMember(userId, templateCode, templateParams); - // 断言 - assertEquals(messageId, resultMessageId); - } - - /** - * å‘逿ˆåŠŸï¼Œå½“çŸ­ä¿¡æ¨¡æ¿å¼€å¯æ—¶ - */ - @Test - public void testSendSingleNotify_successWhenMailTemplateEnable() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String templateCode = randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock NotifyTemplateService 的方法 - NotifyTemplateDO template = randomPojo(NotifyTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(notifyTemplateService.getNotifyTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - String content = randomString(); - when(notifyTemplateService.formatNotifyTemplateContent(eq(template.getContent()), eq(templateParams))) - .thenReturn(content); - // mock NotifyMessageService 的方法 - Long messageId = randomLongId(); - when(notifyMessageService.createNotifyMessage(eq(userId), eq(userType), - eq(template), eq(content), eq(templateParams))).thenReturn(messageId); - - // 调用 - Long resultMessageId = notifySendService.sendSingleNotify(userId, userType, templateCode, templateParams); - // 断言 - assertEquals(messageId, resultMessageId); - } - - /** - * å‘逿ˆåŠŸï¼Œå½“çŸ­ä¿¡æ¨¡æ¿å…³é—­æ—¶ - */ - @Test - public void testSendSingleMail_successWhenSmsTemplateDisable() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String templateCode = randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock NotifyTemplateService 的方法 - NotifyTemplateDO template = randomPojo(NotifyTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.DISABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(notifyTemplateService.getNotifyTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - - // 调用 - Long resultMessageId = notifySendService.sendSingleNotify(userId, userType, templateCode, templateParams); - // 断言 - assertNull(resultMessageId); - verify(notifyTemplateService, never()).formatNotifyTemplateContent(anyString(), anyMap()); - verify(notifyMessageService, never()).createNotifyMessage(anyLong(), anyInt(), any(), anyString(), anyMap()); - } - - @Test - public void testCheckMailTemplateValid_notExists() { - // 准备傿•° - String templateCode = randomString(); - // mock 方法 - - // 调用,并断言异常 - assertServiceException(() -> notifySendService.validateNotifyTemplate(templateCode), - NOTICE_NOT_FOUND); - } - - @Test - public void testCheckTemplateParams_paramMiss() { - // 准备傿•° - NotifyTemplateDO template = randomPojo(NotifyTemplateDO.class, - o -> o.setParams(Lists.newArrayList("code"))); - Map templateParams = new HashMap<>(); - // mock 方法 - - // 调用,并断言异常 - assertServiceException(() -> notifySendService.validateTemplateParams(template, templateParams), - NOTIFY_SEND_TEMPLATE_PARAM_MISS, "code"); - } - - @Test - public void testSendBatchNotify() { - // 准备傿•° - // mock 方法 - - // 调用 - UnsupportedOperationException exception = Assertions.assertThrows( - UnsupportedOperationException.class, - () -> notifySendService.sendBatchNotify(null, null, null, null, null) - ); - // 断言 - assertEquals("æš‚æ—¶ä¸æ”¯æŒè¯¥æ“作,感兴趣å¯ä»¥å®žçŽ°è¯¥åŠŸèƒ½å“Ÿï¼", exception.getMessage()); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateServiceImplTest.java deleted file mode 100644 index ba1f98e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateServiceImplTest.java +++ /dev/null @@ -1,178 +0,0 @@ -package cn.iocoder.yudao.module.system.service.notify; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.NotifyTemplatePageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.NotifyTemplateSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO; -import cn.iocoder.yudao.module.system.dal.mysql.notify.NotifyTemplateMapper; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.HashMap; -import java.util.Map; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTIFY_TEMPLATE_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -/** - * {@link NotifyTemplateServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(NotifyTemplateServiceImpl.class) -public class NotifyTemplateServiceImplTest extends BaseDbUnitTest { - - @Resource - private NotifyTemplateServiceImpl notifyTemplateService; - - @Resource - private NotifyTemplateMapper notifyTemplateMapper; - - @Test - public void testCreateNotifyTemplate_success() { - // 准备傿•° - NotifyTemplateSaveReqVO reqVO = randomPojo(NotifyTemplateSaveReqVO.class, - o -> o.setStatus(randomCommonStatus())) - .setId(null); // 防止 id 被赋值 - - // 调用 - Long notifyTemplateId = notifyTemplateService.createNotifyTemplate(reqVO); - // 断言 - assertNotNull(notifyTemplateId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - NotifyTemplateDO notifyTemplate = notifyTemplateMapper.selectById(notifyTemplateId); - assertPojoEquals(reqVO, notifyTemplate, "id"); - } - - @Test - public void testUpdateNotifyTemplate_success() { - // mock æ•°æ® - NotifyTemplateDO dbNotifyTemplate = randomPojo(NotifyTemplateDO.class); - notifyTemplateMapper.insert(dbNotifyTemplate);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - NotifyTemplateSaveReqVO reqVO = randomPojo(NotifyTemplateSaveReqVO.class, o -> { - o.setId(dbNotifyTemplate.getId()); // 设置更新的 ID - o.setStatus(randomCommonStatus()); - }); - - // 调用 - notifyTemplateService.updateNotifyTemplate(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - NotifyTemplateDO notifyTemplate = notifyTemplateMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, notifyTemplate); - } - - @Test - public void testUpdateNotifyTemplate_notExists() { - // 准备傿•° - NotifyTemplateSaveReqVO reqVO = randomPojo(NotifyTemplateSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> notifyTemplateService.updateNotifyTemplate(reqVO), NOTIFY_TEMPLATE_NOT_EXISTS); - } - - @Test - public void testDeleteNotifyTemplate_success() { - // mock æ•°æ® - NotifyTemplateDO dbNotifyTemplate = randomPojo(NotifyTemplateDO.class); - notifyTemplateMapper.insert(dbNotifyTemplate);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbNotifyTemplate.getId(); - - // 调用 - notifyTemplateService.deleteNotifyTemplate(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(notifyTemplateMapper.selectById(id)); - } - - @Test - public void testDeleteNotifyTemplate_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> notifyTemplateService.deleteNotifyTemplate(id), NOTIFY_TEMPLATE_NOT_EXISTS); - } - - @Test - public void testGetNotifyTemplatePage() { - // mock æ•°æ® - NotifyTemplateDO dbNotifyTemplate = randomPojo(NotifyTemplateDO.class, o -> { // 等会查询到 - o.setName("芋头"); - o.setCode("test_01"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setCreateTime(buildTime(2022, 2, 3)); - }); - notifyTemplateMapper.insert(dbNotifyTemplate); - // 测试 name ä¸åŒ¹é… - notifyTemplateMapper.insert(cloneIgnoreId(dbNotifyTemplate, o -> o.setName("投"))); - // 测试 code ä¸åŒ¹é… - notifyTemplateMapper.insert(cloneIgnoreId(dbNotifyTemplate, o -> o.setCode("test_02"))); - // 测试 status ä¸åŒ¹é… - notifyTemplateMapper.insert(cloneIgnoreId(dbNotifyTemplate, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 createTime ä¸åŒ¹é… - notifyTemplateMapper.insert(cloneIgnoreId(dbNotifyTemplate, o -> o.setCreateTime(buildTime(2022, 1, 5)))); - // 准备傿•° - NotifyTemplatePageReqVO reqVO = new NotifyTemplatePageReqVO(); - reqVO.setName("芋"); - reqVO.setCode("est_01"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setCreateTime(buildBetweenTime(2022, 2, 1, 2022, 2, 5)); - - // 调用 - PageResult pageResult = notifyTemplateService.getNotifyTemplatePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbNotifyTemplate, pageResult.getList().get(0)); - } - - @Test - public void testGetNotifyTemplate() { - // mock æ•°æ® - NotifyTemplateDO dbNotifyTemplate = randomPojo(NotifyTemplateDO.class); - notifyTemplateMapper.insert(dbNotifyTemplate); - // 准备傿•° - Long id = dbNotifyTemplate.getId(); - - // 调用 - NotifyTemplateDO notifyTemplate = notifyTemplateService.getNotifyTemplate(id); - // 断言 - assertPojoEquals(dbNotifyTemplate, notifyTemplate); - } - - @Test - public void testGetNotifyTemplateByCodeFromCache() { - // mock æ•°æ® - NotifyTemplateDO dbNotifyTemplate = randomPojo(NotifyTemplateDO.class); - notifyTemplateMapper.insert(dbNotifyTemplate); - // 准备傿•° - String code = dbNotifyTemplate.getCode(); - - // 调用 - NotifyTemplateDO notifyTemplate = notifyTemplateService.getNotifyTemplateByCodeFromCache(code); - // 断言 - assertPojoEquals(dbNotifyTemplate, notifyTemplate); - } - - @Test - public void testFormatNotifyTemplateContent() { - // 准备傿•° - Map params = new HashMap<>(); - params.put("name", "å°çº¢"); - params.put("what", "饭"); - - // 调用,并断言 - assertEquals("å°çº¢ï¼Œä½ å¥½ï¼Œé¥­åƒäº†å—?", - notifyTemplateService.formatNotifyTemplateContent("{name},你好,{what}åƒäº†å—?", params)); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ApproveServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ApproveServiceImplTest.java deleted file mode 100644 index 142201c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ApproveServiceImplTest.java +++ /dev/null @@ -1,270 +0,0 @@ -package cn.iocoder.yudao.module.system.service.oauth2; - -import cn.hutool.core.date.LocalDateTimeUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.util.date.DateUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ApproveDO; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ClientDO; -import cn.iocoder.yudao.module.system.dal.mysql.oauth2.OAuth2ApproveMapper; -import org.assertj.core.util.Lists; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.temporal.ChronoUnit; -import java.util.*; - -import static cn.hutool.core.util.RandomUtil.*; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -/** - * {@link OAuth2ApproveServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(OAuth2ApproveServiceImpl.class) -public class OAuth2ApproveServiceImplTest extends BaseDbUnitTest { - - @Resource - private OAuth2ApproveServiceImpl oauth2ApproveService; - - @Resource - private OAuth2ApproveMapper oauth2ApproveMapper; - - @MockBean - private OAuth2ClientService oauth2ClientService; - - @Test - public void checkForPreApproval_clientAutoApprove() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String clientId = randomString(); - List requestedScopes = Lists.newArrayList("read"); - // mock 方法 - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId))) - .thenReturn(randomPojo(OAuth2ClientDO.class).setAutoApproveScopes(requestedScopes)); - - // 调用 - boolean success = oauth2ApproveService.checkForPreApproval(userId, userType, - clientId, requestedScopes); - // 断言 - assertTrue(success); - List result = oauth2ApproveMapper.selectList(); - assertEquals(1, result.size()); - assertEquals(userId, result.get(0).getUserId()); - assertEquals(userType, result.get(0).getUserType()); - assertEquals(clientId, result.get(0).getClientId()); - assertEquals("read", result.get(0).getScope()); - assertTrue(result.get(0).getApproved()); - assertFalse(DateUtils.isExpired(result.get(0).getExpiresTime())); - } - - @Test - public void checkForPreApproval_approve() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String clientId = randomString(); - List requestedScopes = Lists.newArrayList("read"); - // mock 方法 - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId))) - .thenReturn(randomPojo(OAuth2ClientDO.class).setAutoApproveScopes(null)); - // mock æ•°æ® - OAuth2ApproveDO approve = randomPojo(OAuth2ApproveDO.class).setUserId(userId) - .setUserType(userType).setClientId(clientId).setScope("read") - .setExpiresTime(LocalDateTimeUtil.offset(LocalDateTime.now(), 1L, ChronoUnit.DAYS)).setApproved(true); // åŒæ„ - oauth2ApproveMapper.insert(approve); - - // 调用 - boolean success = oauth2ApproveService.checkForPreApproval(userId, userType, - clientId, requestedScopes); - // 断言 - assertTrue(success); - } - - @Test - public void checkForPreApproval_reject() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String clientId = randomString(); - List requestedScopes = Lists.newArrayList("read"); - // mock 方法 - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId))) - .thenReturn(randomPojo(OAuth2ClientDO.class).setAutoApproveScopes(null)); - // mock æ•°æ® - OAuth2ApproveDO approve = randomPojo(OAuth2ApproveDO.class).setUserId(userId) - .setUserType(userType).setClientId(clientId).setScope("read") - .setExpiresTime(LocalDateTimeUtil.offset(LocalDateTime.now(), 1L, ChronoUnit.DAYS)).setApproved(false); // æ‹’ç» - oauth2ApproveMapper.insert(approve); - - // 调用 - boolean success = oauth2ApproveService.checkForPreApproval(userId, userType, - clientId, requestedScopes); - // 断言 - assertFalse(success); - } - - @Test - public void testUpdateAfterApproval_none() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String clientId = randomString(); - - // 调用 - boolean success = oauth2ApproveService.updateAfterApproval(userId, userType, clientId, - null); - // 断言 - assertTrue(success); - List result = oauth2ApproveMapper.selectList(); - assertEquals(0, result.size()); - } - - @Test - public void testUpdateAfterApproval_approved() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String clientId = randomString(); - Map requestedScopes = new LinkedHashMap<>(); // 有åºï¼Œæ–¹ä¾¿åˆ¤æ–­ - requestedScopes.put("read", true); - requestedScopes.put("write", false); - // mock 方法 - - // 调用 - boolean success = oauth2ApproveService.updateAfterApproval(userId, userType, clientId, - requestedScopes); - // 断言 - assertTrue(success); - List result = oauth2ApproveMapper.selectList(); - assertEquals(2, result.size()); - // read - assertEquals(userId, result.get(0).getUserId()); - assertEquals(userType, result.get(0).getUserType()); - assertEquals(clientId, result.get(0).getClientId()); - assertEquals("read", result.get(0).getScope()); - assertTrue(result.get(0).getApproved()); - assertFalse(DateUtils.isExpired(result.get(0).getExpiresTime())); - // write - assertEquals(userId, result.get(1).getUserId()); - assertEquals(userType, result.get(1).getUserType()); - assertEquals(clientId, result.get(1).getClientId()); - assertEquals("write", result.get(1).getScope()); - assertFalse(result.get(1).getApproved()); - assertFalse(DateUtils.isExpired(result.get(1).getExpiresTime())); - } - - @Test - public void testUpdateAfterApproval_reject() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String clientId = randomString(); - Map requestedScopes = new LinkedHashMap<>(); - requestedScopes.put("write", false); - // mock 方法 - - // 调用 - boolean success = oauth2ApproveService.updateAfterApproval(userId, userType, clientId, - requestedScopes); - // 断言 - assertFalse(success); - List result = oauth2ApproveMapper.selectList(); - assertEquals(1, result.size()); - // write - assertEquals(userId, result.get(0).getUserId()); - assertEquals(userType, result.get(0).getUserType()); - assertEquals(clientId, result.get(0).getClientId()); - assertEquals("write", result.get(0).getScope()); - assertFalse(result.get(0).getApproved()); - assertFalse(DateUtils.isExpired(result.get(0).getExpiresTime())); - } - - @Test - public void testGetApproveList() { - // 准备傿•° - Long userId = 10L; - Integer userType = UserTypeEnum.ADMIN.getValue(); - String clientId = randomString(); - // mock æ•°æ® - OAuth2ApproveDO approve = randomPojo(OAuth2ApproveDO.class).setUserId(userId) - .setUserType(userType).setClientId(clientId).setExpiresTime(LocalDateTimeUtil.offset(LocalDateTime.now(), 1L, ChronoUnit.DAYS)); - oauth2ApproveMapper.insert(approve); // 未过期 - oauth2ApproveMapper.insert(ObjectUtil.clone(approve).setId(null) - .setExpiresTime(LocalDateTimeUtil.offset(LocalDateTime.now(), -1L, ChronoUnit.DAYS))); // 已过期 - - // 调用 - List result = oauth2ApproveService.getApproveList(userId, userType, clientId); - // 断言 - assertEquals(1, result.size()); - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(approve, result.get(0), "expiresTime"); - } - - @Test - public void testSaveApprove_insert() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String clientId = randomString(); - String scope = randomString(); - Boolean approved = randomBoolean(); - LocalDateTime expireTime = LocalDateTime.ofInstant(randomDay(1, 30).toInstant(), ZoneId.systemDefault()); - // mock 方法 - - // 调用 - oauth2ApproveService.saveApprove(userId, userType, clientId, - scope, approved, expireTime); - // 断言 - List result = oauth2ApproveMapper.selectList(); - assertEquals(1, result.size()); - assertEquals(userId, result.get(0).getUserId()); - assertEquals(userType, result.get(0).getUserType()); - assertEquals(clientId, result.get(0).getClientId()); - assertEquals(scope, result.get(0).getScope()); - assertEquals(approved, result.get(0).getApproved()); - assertEquals(expireTime, result.get(0).getExpiresTime()); - } - - @Test - public void testSaveApprove_update() { - // mock æ•°æ® - OAuth2ApproveDO approve = randomPojo(OAuth2ApproveDO.class); - oauth2ApproveMapper.insert(approve); - // 准备傿•° - Long userId = approve.getUserId(); - Integer userType = approve.getUserType(); - String clientId = approve.getClientId(); - String scope = approve.getScope(); - Boolean approved = randomBoolean(); - LocalDateTime expireTime = LocalDateTime.ofInstant(randomDay(1, 30).toInstant(), ZoneId.systemDefault()); - // mock 方法 - - // 调用 - oauth2ApproveService.saveApprove(userId, userType, clientId, - scope, approved, expireTime); - // 断言 - List result = oauth2ApproveMapper.selectList(); - assertEquals(1, result.size()); - assertEquals(approve.getId(), result.get(0).getId()); - assertEquals(userId, result.get(0).getUserId()); - assertEquals(userType, result.get(0).getUserType()); - assertEquals(clientId, result.get(0).getClientId()); - assertEquals(scope, result.get(0).getScope()); - assertEquals(approved, result.get(0).getApproved()); - assertEquals(expireTime, result.get(0).getExpiresTime()); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientServiceImplTest.java deleted file mode 100644 index 05e85cb..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2ClientServiceImplTest.java +++ /dev/null @@ -1,220 +0,0 @@ -package cn.iocoder.yudao.module.system.service.oauth2; - -import cn.hutool.extra.spring.SpringUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.client.OAuth2ClientPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.client.OAuth2ClientSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ClientDO; -import cn.iocoder.yudao.module.system.dal.mysql.oauth2.OAuth2ClientMapper; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.Collections; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mockStatic; - -/** - * {@link OAuth2ClientServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(OAuth2ClientServiceImpl.class) -public class OAuth2ClientServiceImplTest extends BaseDbUnitTest { - - @Resource - private OAuth2ClientServiceImpl oauth2ClientService; - - @Resource - private OAuth2ClientMapper oauth2ClientMapper; - - @Test - public void testCreateOAuth2Client_success() { - // 准备傿•° - OAuth2ClientSaveReqVO reqVO = randomPojo(OAuth2ClientSaveReqVO.class, - o -> o.setLogo(randomString())) - .setId(null); // 防止 id 被赋值 - - // 调用 - Long oauth2ClientId = oauth2ClientService.createOAuth2Client(reqVO); - // 断言 - assertNotNull(oauth2ClientId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - OAuth2ClientDO oAuth2Client = oauth2ClientMapper.selectById(oauth2ClientId); - assertPojoEquals(reqVO, oAuth2Client, "id"); - } - - @Test - public void testUpdateOAuth2Client_success() { - // mock æ•°æ® - OAuth2ClientDO dbOAuth2Client = randomPojo(OAuth2ClientDO.class); - oauth2ClientMapper.insert(dbOAuth2Client);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - OAuth2ClientSaveReqVO reqVO = randomPojo(OAuth2ClientSaveReqVO.class, o -> { - o.setId(dbOAuth2Client.getId()); // 设置更新的 ID - o.setLogo(randomString()); - }); - - // 调用 - oauth2ClientService.updateOAuth2Client(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - OAuth2ClientDO oAuth2Client = oauth2ClientMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, oAuth2Client); - } - - @Test - public void testUpdateOAuth2Client_notExists() { - // 准备傿•° - OAuth2ClientSaveReqVO reqVO = randomPojo(OAuth2ClientSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> oauth2ClientService.updateOAuth2Client(reqVO), OAUTH2_CLIENT_NOT_EXISTS); - } - - @Test - public void testDeleteOAuth2Client_success() { - // mock æ•°æ® - OAuth2ClientDO dbOAuth2Client = randomPojo(OAuth2ClientDO.class); - oauth2ClientMapper.insert(dbOAuth2Client);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbOAuth2Client.getId(); - - // 调用 - oauth2ClientService.deleteOAuth2Client(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(oauth2ClientMapper.selectById(id)); - } - - @Test - public void testDeleteOAuth2Client_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> oauth2ClientService.deleteOAuth2Client(id), OAUTH2_CLIENT_NOT_EXISTS); - } - - @Test - public void testValidateClientIdExists_withId() { - // mock æ•°æ® - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class).setClientId("tudou"); - oauth2ClientMapper.insert(client); - // 准备傿•° - Long id = randomLongId(); - String clientId = "tudou"; - - // 调用,ä¸ä¼šæŠ¥é”™ - assertServiceException(() -> oauth2ClientService.validateClientIdExists(id, clientId), OAUTH2_CLIENT_EXISTS); - } - - @Test - public void testValidateClientIdExists_noId() { - // mock æ•°æ® - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class).setClientId("tudou"); - oauth2ClientMapper.insert(client); - // 准备傿•° - String clientId = "tudou"; - - // 调用,ä¸ä¼šæŠ¥é”™ - assertServiceException(() -> oauth2ClientService.validateClientIdExists(null, clientId), OAUTH2_CLIENT_EXISTS); - } - - @Test - public void testGetOAuth2Client() { - // mock æ•°æ® - OAuth2ClientDO clientDO = randomPojo(OAuth2ClientDO.class); - oauth2ClientMapper.insert(clientDO); - // 准备傿•° - Long id = clientDO.getId(); - - // 调用,并断言 - OAuth2ClientDO dbClientDO = oauth2ClientService.getOAuth2Client(id); - assertPojoEquals(clientDO, dbClientDO); - } - - @Test - public void testGetOAuth2ClientFromCache() { - // mock æ•°æ® - OAuth2ClientDO clientDO = randomPojo(OAuth2ClientDO.class); - oauth2ClientMapper.insert(clientDO); - // 准备傿•° - String clientId = clientDO.getClientId(); - - // 调用,并断言 - OAuth2ClientDO dbClientDO = oauth2ClientService.getOAuth2ClientFromCache(clientId); - assertPojoEquals(clientDO, dbClientDO); - } - - @Test - public void testGetOAuth2ClientPage() { - // mock æ•°æ® - OAuth2ClientDO dbOAuth2Client = randomPojo(OAuth2ClientDO.class, o -> { // 等会查询到 - o.setName("潜龙"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); - oauth2ClientMapper.insert(dbOAuth2Client); - // 测试 name ä¸åŒ¹é… - oauth2ClientMapper.insert(cloneIgnoreId(dbOAuth2Client, o -> o.setName("凤凰"))); - // 测试 status ä¸åŒ¹é… - oauth2ClientMapper.insert(cloneIgnoreId(dbOAuth2Client, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 准备傿•° - OAuth2ClientPageReqVO reqVO = new OAuth2ClientPageReqVO(); - reqVO.setName("é¾™"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - - // 调用 - PageResult pageResult = oauth2ClientService.getOAuth2ClientPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbOAuth2Client, pageResult.getList().get(0)); - } - - @Test - public void testValidOAuthClientFromCache() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(OAuth2ClientServiceImpl.class))) - .thenReturn(oauth2ClientService); - - // mock 方法 - OAuth2ClientDO client = randomPojo(OAuth2ClientDO.class).setClientId("default") - .setStatus(CommonStatusEnum.ENABLE.getStatus()); - oauth2ClientMapper.insert(client); - OAuth2ClientDO client02 = randomPojo(OAuth2ClientDO.class).setClientId("disable") - .setStatus(CommonStatusEnum.DISABLE.getStatus()); - oauth2ClientMapper.insert(client02); - - // 调用,并断言 - assertServiceException(() -> oauth2ClientService.validOAuthClientFromCache(randomString(), - null, null, null, null), OAUTH2_CLIENT_NOT_EXISTS); - assertServiceException(() -> oauth2ClientService.validOAuthClientFromCache("disable", - null, null, null, null), OAUTH2_CLIENT_DISABLE); - assertServiceException(() -> oauth2ClientService.validOAuthClientFromCache("default", - randomString(), null, null, null), OAUTH2_CLIENT_CLIENT_SECRET_ERROR); - assertServiceException(() -> oauth2ClientService.validOAuthClientFromCache("default", - null, randomString(), null, null), OAUTH2_CLIENT_AUTHORIZED_GRANT_TYPE_NOT_EXISTS); - assertServiceException(() -> oauth2ClientService.validOAuthClientFromCache("default", - null, null, Collections.singleton(randomString()), null), OAUTH2_CLIENT_SCOPE_OVER); - assertServiceException(() -> oauth2ClientService.validOAuthClientFromCache("default", - null, null, null, "test"), OAUTH2_CLIENT_REDIRECT_URI_NOT_MATCH, "test"); - // æˆåŠŸè°ƒç”¨ï¼ˆ1ï¼šå‚æ•°å®Œæ•´ï¼‰ - OAuth2ClientDO result = oauth2ClientService.validOAuthClientFromCache(client.getClientId(), client.getSecret(), - client.getAuthorizedGrantTypes().get(0), client.getScopes(), client.getRedirectUris().get(0)); - assertPojoEquals(client, result); - // æˆåŠŸè°ƒç”¨ï¼ˆ2ï¼šåªæœ‰ clientId 傿•°ï¼‰ - result = oauth2ClientService.validOAuthClientFromCache(client.getClientId()); - assertPojoEquals(client, result); - } - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2CodeServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2CodeServiceImplTest.java deleted file mode 100644 index cba9d3e..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2CodeServiceImplTest.java +++ /dev/null @@ -1,101 +0,0 @@ -package cn.iocoder.yudao.module.system.service.oauth2; - -import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.util.date.DateUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2CodeDO; -import cn.iocoder.yudao.module.system.dal.mysql.oauth2.OAuth2CodeMapper; -import org.assertj.core.util.Lists; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.time.LocalDateTime; -import java.util.List; - -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.OAUTH2_CODE_EXPIRE; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.OAUTH2_CODE_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -/** - * {@link OAuth2CodeServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(OAuth2CodeServiceImpl.class) -class OAuth2CodeServiceImplTest extends BaseDbUnitTest { - - @Resource - private OAuth2CodeServiceImpl oauth2CodeService; - - @Resource - private OAuth2CodeMapper oauth2CodeMapper; - - @Test - public void testCreateAuthorizationCode() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = RandomUtil.randomEle(UserTypeEnum.values()).getValue(); - String clientId = randomString(); - List scopes = Lists.newArrayList("read", "write"); - String redirectUri = randomString(); - String state = randomString(); - - // 调用 - OAuth2CodeDO codeDO = oauth2CodeService.createAuthorizationCode(userId, userType, clientId, - scopes, redirectUri, state); - // 断言 - OAuth2CodeDO dbCodeDO = oauth2CodeMapper.selectByCode(codeDO.getCode()); - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(codeDO, dbCodeDO, "expiresTime", "createTime", "updateTime", "deleted"); - assertEquals(userId, codeDO.getUserId()); - assertEquals(userType, codeDO.getUserType()); - assertEquals(clientId, codeDO.getClientId()); - assertEquals(scopes, codeDO.getScopes()); - assertEquals(redirectUri, codeDO.getRedirectUri()); - assertEquals(state, codeDO.getState()); - assertFalse(DateUtils.isExpired(codeDO.getExpiresTime())); - } - - @Test - public void testConsumeAuthorizationCode_null() { - // 调用,并断言 - assertServiceException(() -> oauth2CodeService.consumeAuthorizationCode(randomString()), - OAUTH2_CODE_NOT_EXISTS); - } - - @Test - public void testConsumeAuthorizationCode_expired() { - // 准备傿•° - String code = "test_code"; - // mock æ•°æ® - OAuth2CodeDO codeDO = randomPojo(OAuth2CodeDO.class).setCode(code) - .setExpiresTime(LocalDateTime.now().minusDays(1)); - oauth2CodeMapper.insert(codeDO); - - // 调用,并断言 - assertServiceException(() -> oauth2CodeService.consumeAuthorizationCode(code), - OAUTH2_CODE_EXPIRE); - } - - @Test - public void testConsumeAuthorizationCode_success() { - // 准备傿•° - String code = "test_code"; - // mock æ•°æ® - OAuth2CodeDO codeDO = randomPojo(OAuth2CodeDO.class).setCode(code) - .setExpiresTime(LocalDateTime.now().plusDays(1)); - oauth2CodeMapper.insert(codeDO); - - // 调用 - OAuth2CodeDO result = oauth2CodeService.consumeAuthorizationCode(code); - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(codeDO, result, "expiresTime"); - assertNull(oauth2CodeMapper.selectByCode(code)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2GrantServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2GrantServiceImplTest.java deleted file mode 100644 index 52c7228..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2GrantServiceImplTest.java +++ /dev/null @@ -1,173 +0,0 @@ -package cn.iocoder.yudao.module.system.service.oauth2; - -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2CodeDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; -import cn.iocoder.yudao.module.system.service.auth.AdminAuthService; -import com.google.common.collect.Lists; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.List; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static java.util.Collections.emptyList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -/** - * {@link OAuth2GrantServiceImpl} çš„å•元测试 - * - * @author èŠ‹é“æºç  - */ -public class OAuth2GrantServiceImplTest extends BaseMockitoUnitTest { - - @InjectMocks - private OAuth2GrantServiceImpl oauth2GrantService; - - @Mock - private OAuth2TokenService oauth2TokenService; - @Mock - private OAuth2CodeService oauth2CodeService; - @Mock - private AdminAuthService adminAuthService; - - @Test - public void testGrantImplicit() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String clientId = randomString(); - List scopes = Lists.newArrayList("read", "write"); - // mock 方法 - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class); - when(oauth2TokenService.createAccessToken(eq(userId), eq(userType), - eq(clientId), eq(scopes))).thenReturn(accessTokenDO); - - // 调用,并断言 - assertPojoEquals(accessTokenDO, oauth2GrantService.grantImplicit( - userId, userType, clientId, scopes)); - } - - @Test - public void testGrantAuthorizationCodeForCode() { - // 准备傿•° - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String clientId = randomString(); - List scopes = Lists.newArrayList("read", "write"); - String redirectUri = randomString(); - String state = randomString(); - // mock 方法 - OAuth2CodeDO codeDO = randomPojo(OAuth2CodeDO.class); - when(oauth2CodeService.createAuthorizationCode(eq(userId), eq(userType), - eq(clientId), eq(scopes), eq(redirectUri), eq(state))).thenReturn(codeDO); - - // 调用,并断言 - assertEquals(codeDO.getCode(), oauth2GrantService.grantAuthorizationCodeForCode(userId, userType, - clientId, scopes, redirectUri, state)); - } - - @Test - public void testGrantAuthorizationCodeForAccessToken() { - // 准备傿•° - String clientId = randomString(); - String code = randomString(); - List scopes = Lists.newArrayList("read", "write"); - String redirectUri = randomString(); - String state = randomString(); - // mock 方法(code) - OAuth2CodeDO codeDO = randomPojo(OAuth2CodeDO.class, o -> { - o.setClientId(clientId); - o.setRedirectUri(redirectUri); - o.setState(state); - o.setScopes(scopes); - }); - when(oauth2CodeService.consumeAuthorizationCode(eq(code))).thenReturn(codeDO); - // mock 方法(创建令牌) - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class); - when(oauth2TokenService.createAccessToken(eq(codeDO.getUserId()), eq(codeDO.getUserType()), - eq(codeDO.getClientId()), eq(codeDO.getScopes()))).thenReturn(accessTokenDO); - - // 调用,并断言 - assertPojoEquals(accessTokenDO, oauth2GrantService.grantAuthorizationCodeForAccessToken( - clientId, code, redirectUri, state)); - } - - @Test - public void testGrantPassword() { - // 准备傿•° - String username = randomString(); - String password = randomString(); - String clientId = randomString(); - List scopes = Lists.newArrayList("read", "write"); - // mock 方法(认è¯) - AdminUserDO user = randomPojo(AdminUserDO.class); - when(adminAuthService.authenticate(eq(username), eq(password))).thenReturn(user); - // mock 方法(访问令牌) - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class); - when(oauth2TokenService.createAccessToken(eq(user.getId()), eq(UserTypeEnum.ADMIN.getValue()), - eq(clientId), eq(scopes))).thenReturn(accessTokenDO); - - // 调用,并断言 - assertPojoEquals(accessTokenDO, oauth2GrantService.grantPassword( - username, password, clientId, scopes)); - } - - @Test - public void testGrantRefreshToken() { - // 准备傿•° - String refreshToken = randomString(); - String clientId = randomString(); - // mock 方法 - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class); - when(oauth2TokenService.refreshAccessToken(eq(refreshToken), eq(clientId))) - .thenReturn(accessTokenDO); - - // 调用,并断言 - assertPojoEquals(accessTokenDO, oauth2GrantService.grantRefreshToken( - refreshToken, clientId)); - } - - @Test - public void testGrantClientCredentials() { - assertThrows(UnsupportedOperationException.class, - () -> oauth2GrantService.grantClientCredentials(randomString(), emptyList()), - "æš‚æ—¶ä¸æ”¯æŒ client_credentials æŽˆæƒæ¨¡å¼"); - } - - @Test - public void testRevokeToken_clientIdError() { - // 准备傿•° - String clientId = randomString(); - String accessToken = randomString(); - // mock 方法 - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class); - when(oauth2TokenService.getAccessToken(eq(accessToken))).thenReturn(accessTokenDO); - - // 调用,并断言 - assertFalse(oauth2GrantService.revokeToken(clientId, accessToken)); - } - - @Test - public void testRevokeToken_success() { - // 准备傿•° - String clientId = randomString(); - String accessToken = randomString(); - // mock 方法(访问令牌) - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class).setClientId(clientId); - when(oauth2TokenService.getAccessToken(eq(accessToken))).thenReturn(accessTokenDO); - // mock 方法(移除) - when(oauth2TokenService.removeAccessToken(eq(accessToken))).thenReturn(accessTokenDO); - - // 调用,并断言 - assertTrue(oauth2GrantService.revokeToken(clientId, accessToken)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImplTest.java deleted file mode 100644 index 03f78b4..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImplTest.java +++ /dev/null @@ -1,329 +0,0 @@ -package cn.iocoder.yudao.module.system.service.oauth2; - -import cn.hutool.core.date.LocalDateTimeUtil; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.exception.ErrorCode; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.date.DateUtils; -import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbAndRedisUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.token.OAuth2AccessTokenPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ClientDO; -import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2RefreshTokenDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; -import cn.iocoder.yudao.module.system.dal.mysql.oauth2.OAuth2AccessTokenMapper; -import cn.iocoder.yudao.module.system.dal.mysql.oauth2.OAuth2RefreshTokenMapper; -import cn.iocoder.yudao.module.system.dal.redis.oauth2.OAuth2AccessTokenRedisDAO; -import cn.iocoder.yudao.module.system.service.user.AdminUserService; -import jakarta.annotation.Resource; -import org.assertj.core.util.Lists; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import java.time.LocalDateTime; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -/** - * {@link OAuth2TokenServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import({OAuth2TokenServiceImpl.class, OAuth2AccessTokenRedisDAO.class}) -public class OAuth2TokenServiceImplTest extends BaseDbAndRedisUnitTest { - - @Resource - private OAuth2TokenServiceImpl oauth2TokenService; - - @Resource - private OAuth2AccessTokenMapper oauth2AccessTokenMapper; - @Resource - private OAuth2RefreshTokenMapper oauth2RefreshTokenMapper; - - @Resource - private OAuth2AccessTokenRedisDAO oauth2AccessTokenRedisDAO; - - @MockBean - private OAuth2ClientService oauth2ClientService; - @MockBean - private AdminUserService adminUserService; - - @Test - public void testCreateAccessToken() { - TenantContextHolder.setTenantId(0L); - // 准备傿•° - Long userId = randomLongId(); - Integer userType = UserTypeEnum.ADMIN.getValue(); - String clientId = randomString(); - List scopes = Lists.newArrayList("read", "write"); - // mock 方法 - OAuth2ClientDO clientDO = randomPojo(OAuth2ClientDO.class).setClientId(clientId) - .setAccessTokenValiditySeconds(30).setRefreshTokenValiditySeconds(60); - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId))).thenReturn(clientDO); - // mock æ•°æ®ï¼ˆç”¨æˆ·ï¼‰ - AdminUserDO user = randomPojo(AdminUserDO.class); - when(adminUserService.getUser(userId)).thenReturn(user); - - // 调用 - OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.createAccessToken(userId, userType, clientId, scopes); - // 断言访问令牌 - OAuth2AccessTokenDO dbAccessTokenDO = oauth2AccessTokenMapper.selectByAccessToken(accessTokenDO.getAccessToken()); - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(accessTokenDO, dbAccessTokenDO, "expiresTime", "createTime", "updateTime", "deleted"); - assertEquals(userId, accessTokenDO.getUserId()); - assertEquals(userType, accessTokenDO.getUserType()); - assertEquals(2, accessTokenDO.getUserInfo().size()); - assertEquals(user.getNickname(), accessTokenDO.getUserInfo().get("nickname")); - assertEquals(user.getDeptId().toString(), accessTokenDO.getUserInfo().get("deptId")); - assertEquals(clientId, accessTokenDO.getClientId()); - assertEquals(scopes, accessTokenDO.getScopes()); - assertFalse(DateUtils.isExpired(accessTokenDO.getExpiresTime())); - // 断言访问令牌的缓存 - OAuth2AccessTokenDO redisAccessTokenDO = oauth2AccessTokenRedisDAO.get(accessTokenDO.getAccessToken()); - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(accessTokenDO, redisAccessTokenDO, "expiresTime", "createTime", "updateTime", "deleted"); - // 断言刷新令牌 - OAuth2RefreshTokenDO refreshTokenDO = oauth2RefreshTokenMapper.selectList().get(0); - assertPojoEquals(accessTokenDO, refreshTokenDO, "id", "expiresTime", "createTime", "updateTime", "deleted"); - assertFalse(DateUtils.isExpired(refreshTokenDO.getExpiresTime())); - } - - @Test - public void testRefreshAccessToken_null() { - // 准备傿•° - String refreshToken = randomString(); - String clientId = randomString(); - // mock 方法 - - // 调用,并断言 - assertServiceException(() -> oauth2TokenService.refreshAccessToken(refreshToken, clientId), - new ErrorCode(400, "无效的刷新令牌")); - } - - @Test - public void testRefreshAccessToken_clientIdError() { - // 准备傿•° - String refreshToken = randomString(); - String clientId = randomString(); - // mock 方法 - OAuth2ClientDO clientDO = randomPojo(OAuth2ClientDO.class).setClientId(clientId); - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId))).thenReturn(clientDO); - // mock æ•°æ®ï¼ˆè®¿é—®ä»¤ç‰Œï¼‰ - OAuth2RefreshTokenDO refreshTokenDO = randomPojo(OAuth2RefreshTokenDO.class) - .setRefreshToken(refreshToken).setClientId("error"); - oauth2RefreshTokenMapper.insert(refreshTokenDO); - - // 调用,并断言 - assertServiceException(() -> oauth2TokenService.refreshAccessToken(refreshToken, clientId), - new ErrorCode(400, "刷新令牌的客户端编å·ä¸æ­£ç¡®")); - } - - @Test - public void testRefreshAccessToken_expired() { - // 准备傿•° - String refreshToken = randomString(); - String clientId = randomString(); - // mock 方法 - OAuth2ClientDO clientDO = randomPojo(OAuth2ClientDO.class).setClientId(clientId); - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId))).thenReturn(clientDO); - // mock æ•°æ®ï¼ˆè®¿é—®ä»¤ç‰Œï¼‰ - OAuth2RefreshTokenDO refreshTokenDO = randomPojo(OAuth2RefreshTokenDO.class) - .setRefreshToken(refreshToken).setClientId(clientId) - .setExpiresTime(LocalDateTime.now().minusDays(1)); - oauth2RefreshTokenMapper.insert(refreshTokenDO); - - // 调用,并断言 - assertServiceException(() -> oauth2TokenService.refreshAccessToken(refreshToken, clientId), - new ErrorCode(401, "刷新令牌已过期")); - assertEquals(0, oauth2AccessTokenMapper.selectCount()); - } - - @Test - public void testRefreshAccessToken_success() { - TenantContextHolder.setTenantId(0L); - // 准备傿•° - String refreshToken = randomString(); - String clientId = randomString(); - // mock 方法 - OAuth2ClientDO clientDO = randomPojo(OAuth2ClientDO.class).setClientId(clientId) - .setAccessTokenValiditySeconds(30); - when(oauth2ClientService.validOAuthClientFromCache(eq(clientId))).thenReturn(clientDO); - // mock æ•°æ®ï¼ˆè®¿é—®ä»¤ç‰Œï¼‰ - OAuth2RefreshTokenDO refreshTokenDO = randomPojo(OAuth2RefreshTokenDO.class, o -> - o.setRefreshToken(refreshToken).setClientId(clientId) - .setExpiresTime(LocalDateTime.now().plusDays(1)) - .setUserType(UserTypeEnum.ADMIN.getValue()) - .setTenantId(TenantContextHolder.getTenantId())); - oauth2RefreshTokenMapper.insert(refreshTokenDO); - // mock æ•°æ®ï¼ˆè®¿é—®ä»¤ç‰Œï¼‰ - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class).setRefreshToken(refreshToken) - .setUserType(refreshTokenDO.getUserType()); - oauth2AccessTokenMapper.insert(accessTokenDO); - oauth2AccessTokenRedisDAO.set(accessTokenDO); - // mock æ•°æ®ï¼ˆç”¨æˆ·ï¼‰ - AdminUserDO user = randomPojo(AdminUserDO.class); - when(adminUserService.getUser(refreshTokenDO.getUserId())).thenReturn(user); - - // 调用 - OAuth2AccessTokenDO newAccessTokenDO = oauth2TokenService.refreshAccessToken(refreshToken, clientId); - // 断言,è€çš„访问令牌被删除 - assertNull(oauth2AccessTokenMapper.selectByAccessToken(accessTokenDO.getAccessToken())); - assertNull(oauth2AccessTokenRedisDAO.get(accessTokenDO.getAccessToken())); - // 断言,新的访问令牌 - OAuth2AccessTokenDO dbAccessTokenDO = oauth2AccessTokenMapper.selectByAccessToken(newAccessTokenDO.getAccessToken()); - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(newAccessTokenDO, dbAccessTokenDO, "expiresTime", "createTime", "updateTime", "deleted"); - assertPojoEquals(newAccessTokenDO, refreshTokenDO, "id", "expiresTime", "createTime", "updateTime", "deleted", - "creator", "updater"); - assertFalse(DateUtils.isExpired(newAccessTokenDO.getExpiresTime())); - // 断言,新的访问令牌的缓存 - OAuth2AccessTokenDO redisAccessTokenDO = oauth2AccessTokenRedisDAO.get(newAccessTokenDO.getAccessToken()); - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(newAccessTokenDO, redisAccessTokenDO, "expiresTime", "createTime", "updateTime", "deleted"); - } - - @Test - public void testGetAccessToken() { - // mock æ•°æ®ï¼ˆè®¿é—®ä»¤ç‰Œï¼‰ - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class) - .setExpiresTime(LocalDateTime.now().plusDays(1)); - oauth2AccessTokenMapper.insert(accessTokenDO); - // 准备傿•° - String accessToken = accessTokenDO.getAccessToken(); - - // 调用 - OAuth2AccessTokenDO result = oauth2TokenService.getAccessToken(accessToken); - // 断言 - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(accessTokenDO, result, "expiresTime", "createTime", "updateTime", "deleted", - "creator", "updater"); - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(accessTokenDO, oauth2AccessTokenRedisDAO.get(accessToken), "expiresTime", "createTime", "updateTime", "deleted", - "creator", "updater"); - } - - @Test - public void testCheckAccessToken_null() { - // 调研,并断言 - assertServiceException(() -> oauth2TokenService.checkAccessToken(randomString()), - new ErrorCode(401, "访问令牌ä¸å­˜åœ¨")); - } - - @Test - public void testCheckAccessToken_expired() { - // mock æ•°æ®ï¼ˆè®¿é—®ä»¤ç‰Œï¼‰ - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class) - .setExpiresTime(LocalDateTime.now().minusDays(1)); - oauth2AccessTokenMapper.insert(accessTokenDO); - // 准备傿•° - String accessToken = accessTokenDO.getAccessToken(); - - // 调研,并断言 - assertServiceException(() -> oauth2TokenService.checkAccessToken(accessToken), - new ErrorCode(401, "访问令牌已过期")); - } - - @Test - public void testCheckAccessToken_refreshToken() { - // mock æ•°æ®ï¼ˆè®¿é—®ä»¤ç‰Œï¼‰ - OAuth2RefreshTokenDO refreshTokenDO = randomPojo(OAuth2RefreshTokenDO.class) - .setExpiresTime(LocalDateTime.now().plusDays(1)); - oauth2RefreshTokenMapper.insert(refreshTokenDO); - // 准备傿•° - String accessToken = refreshTokenDO.getRefreshToken(); - - // 调研,并断言 - OAuth2AccessTokenDO result = oauth2TokenService.getAccessToken(accessToken); - // 断言 - assertPojoEquals(refreshTokenDO, result, "expiresTime", "createTime", "updateTime", "deleted", - "creator", "updater"); - } - - @Test - public void testCheckAccessToken_success() { - // mock æ•°æ®ï¼ˆè®¿é—®ä»¤ç‰Œï¼‰ - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class) - .setExpiresTime(LocalDateTime.now().plusDays(1)); - oauth2AccessTokenMapper.insert(accessTokenDO); - // 准备傿•° - String accessToken = accessTokenDO.getAccessToken(); - - // 调研,并断言 - OAuth2AccessTokenDO result = oauth2TokenService.getAccessToken(accessToken); - // 断言 - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(accessTokenDO, result, "expiresTime", "createTime", "updateTime", "deleted", - "creator", "updater"); - } - - @Test - public void testRemoveAccessToken_null() { - // 调用,并断言 - assertNull(oauth2TokenService.removeAccessToken(randomString())); - } - - @Test - public void testRemoveAccessToken_success() { - // mock æ•°æ®ï¼ˆè®¿é—®ä»¤ç‰Œï¼‰ - OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class) - .setExpiresTime(LocalDateTime.now().plusDays(1)); - oauth2AccessTokenMapper.insert(accessTokenDO); - // mock æ•°æ®ï¼ˆåˆ·æ–°ä»¤ç‰Œï¼‰ - OAuth2RefreshTokenDO refreshTokenDO = randomPojo(OAuth2RefreshTokenDO.class) - .setRefreshToken(accessTokenDO.getRefreshToken()); - oauth2RefreshTokenMapper.insert(refreshTokenDO); - // 调用 - OAuth2AccessTokenDO result = oauth2TokenService.removeAccessToken(accessTokenDO.getAccessToken()); - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(accessTokenDO, result, "expiresTime", "createTime", "updateTime", "deleted", - "creator", "updater"); - // æ–­è¨€æ•°æ® - assertNull(oauth2AccessTokenMapper.selectByAccessToken(accessTokenDO.getAccessToken())); - assertNull(oauth2RefreshTokenMapper.selectByRefreshToken(accessTokenDO.getRefreshToken())); - assertNull(oauth2AccessTokenRedisDAO.get(accessTokenDO.getAccessToken())); - } - - - @Test - public void testGetAccessTokenPage() { - // mock æ•°æ® - OAuth2AccessTokenDO dbAccessToken = randomPojo(OAuth2AccessTokenDO.class, o -> { // 等会查询到 - o.setUserId(10L); - o.setUserType(1); - o.setClientId("test_client"); - o.setExpiresTime(LocalDateTime.now().plusDays(1)); - }); - oauth2AccessTokenMapper.insert(dbAccessToken); - // 测试 userId ä¸åŒ¹é… - oauth2AccessTokenMapper.insert(cloneIgnoreId(dbAccessToken, o -> o.setUserId(20L))); - // 测试 userType ä¸åŒ¹é… - oauth2AccessTokenMapper.insert(cloneIgnoreId(dbAccessToken, o -> o.setUserType(2))); - // 测试 userType ä¸åŒ¹é… - oauth2AccessTokenMapper.insert(cloneIgnoreId(dbAccessToken, o -> o.setClientId("it_client"))); - // 测试 expireTime ä¸åŒ¹é… - oauth2AccessTokenMapper.insert(cloneIgnoreId(dbAccessToken, o -> o.setExpiresTime(LocalDateTimeUtil.now()))); - // 准备傿•° - OAuth2AccessTokenPageReqVO reqVO = new OAuth2AccessTokenPageReqVO(); - reqVO.setUserId(10L); - reqVO.setUserType(1); - reqVO.setClientId("test"); - - // 调用 - PageResult pageResult = oauth2TokenService.getAccessTokenPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - // TODO @芋艿:expiresTime 被å±è”½ï¼Œä»… win11 会å¤çŽ°ï¼Œå»ºè®®åŽç»­ä¿®å¤ã€‚ - assertPojoEquals(dbAccessToken, pageResult.getList().get(0), "expiresTime"); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImplTest.java deleted file mode 100644 index cc39379..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImplTest.java +++ /dev/null @@ -1,331 +0,0 @@ -package cn.iocoder.yudao.module.system.service.permission; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; -import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; -import cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper; -import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; -import cn.iocoder.yudao.module.system.service.tenant.TenantService; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO.ID_ROOT; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.verify; - -@Import(MenuServiceImpl.class) -public class MenuServiceImplTest extends BaseDbUnitTest { - - @Resource - private MenuServiceImpl menuService; - - @Resource - private MenuMapper menuMapper; - - @MockBean - private PermissionService permissionService; - @MockBean - private TenantService tenantService; - - @Test - public void testCreateMenu_success() { - // mock æ•°æ®ï¼ˆæž„造父èœå•) - MenuDO menuDO = buildMenuDO(MenuTypeEnum.MENU, - "parent", 0L); - menuMapper.insert(menuDO); - Long parentId = menuDO.getId(); - // 准备傿•° - MenuSaveVO reqVO = randomPojo(MenuSaveVO.class, o -> { - o.setParentId(parentId); - o.setName("testSonName"); - o.setType(MenuTypeEnum.MENU.getType()); - }).setId(null); // 防止 id 被赋值 - Long menuId = menuService.createMenu(reqVO); - - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - MenuDO dbMenu = menuMapper.selectById(menuId); - assertPojoEquals(reqVO, dbMenu, "id"); - } - - @Test - public void testUpdateMenu_success() { - // mock æ•°æ®ï¼ˆæž„造父å­èœå•) - MenuDO sonMenuDO = createParentAndSonMenu(); - Long sonId = sonMenuDO.getId(); - // 准备傿•° - MenuSaveVO reqVO = randomPojo(MenuSaveVO.class, o -> { - o.setId(sonId); - o.setName("testSonName"); // 修改åå­— - o.setParentId(sonMenuDO.getParentId()); - o.setType(MenuTypeEnum.MENU.getType()); - }); - - // 调用 - menuService.updateMenu(reqVO); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - MenuDO dbMenu = menuMapper.selectById(sonId); - assertPojoEquals(reqVO, dbMenu); - } - - @Test - public void testUpdateMenu_sonIdNotExist() { - // 准备傿•° - MenuSaveVO reqVO = randomPojo(MenuSaveVO.class); - // 调用,并断言异常 - assertServiceException(() -> menuService.updateMenu(reqVO), MENU_NOT_EXISTS); - } - - @Test - public void testDeleteMenu_success() { - // mock æ•°æ® - MenuDO menuDO = randomPojo(MenuDO.class); - menuMapper.insert(menuDO); - // 准备傿•° - Long id = menuDO.getId(); - - // 调用 - menuService.deleteMenu(id); - // 断言 - MenuDO dbMenuDO = menuMapper.selectById(id); - assertNull(dbMenuDO); - verify(permissionService).processMenuDeleted(id); - } - - @Test - public void testDeleteMenu_menuNotExist() { - assertServiceException(() -> menuService.deleteMenu(randomLongId()), - MENU_NOT_EXISTS); - } - - @Test - public void testDeleteMenu_existChildren() { - // mock æ•°æ®ï¼ˆæž„造父å­èœå•) - MenuDO sonMenu = createParentAndSonMenu(); - // 准备傿•° - Long parentId = sonMenu.getParentId(); - - // 调用并断言异常 - assertServiceException(() -> menuService.deleteMenu(parentId), MENU_EXISTS_CHILDREN); - } - - @Test - public void testGetMenuList_all() { - // mock æ•°æ® - MenuDO menu100 = randomPojo(MenuDO.class); - menuMapper.insert(menu100); - MenuDO menu101 = randomPojo(MenuDO.class); - menuMapper.insert(menu101); - // 准备傿•° - - // 调用 - List list = menuService.getMenuList(); - // 断言 - assertEquals(2, list.size()); - assertPojoEquals(menu100, list.get(0)); - assertPojoEquals(menu101, list.get(1)); - } - - @Test - public void testGetMenuList() { - // mock æ•°æ® - MenuDO menuDO = randomPojo(MenuDO.class, o -> o.setName("芋艿").setStatus(CommonStatusEnum.ENABLE.getStatus())); - menuMapper.insert(menuDO); - // 测试 status ä¸åŒ¹é… - menuMapper.insert(cloneIgnoreId(menuDO, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 name ä¸åŒ¹é… - menuMapper.insert(cloneIgnoreId(menuDO, o -> o.setName("艿"))); - // 准备傿•° - MenuListReqVO reqVO = new MenuListReqVO().setName("芋").setStatus(CommonStatusEnum.ENABLE.getStatus()); - - // 调用 - List result = menuService.getMenuList(reqVO); - // 断言 - assertEquals(1, result.size()); - assertPojoEquals(menuDO, result.get(0)); - } - - @Test - public void testGetMenuListByTenant() { - // mock æ•°æ® - MenuDO menu100 = randomPojo(MenuDO.class, o -> o.setId(100L).setStatus(CommonStatusEnum.ENABLE.getStatus())); - menuMapper.insert(menu100); - MenuDO menu101 = randomPojo(MenuDO.class, o -> o.setId(101L).setStatus(CommonStatusEnum.DISABLE.getStatus())); - menuMapper.insert(menu101); - MenuDO menu102 = randomPojo(MenuDO.class, o -> o.setId(102L).setStatus(CommonStatusEnum.ENABLE.getStatus())); - menuMapper.insert(menu102); - // mock 过滤èœå• - Set menuIds = asSet(100L, 101L); - doNothing().when(tenantService).handleTenantMenu(argThat(handler -> { - handler.handle(menuIds); - return true; - })); - // 准备傿•° - MenuListReqVO reqVO = new MenuListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus()); - - // 调用 - List result = menuService.getMenuListByTenant(reqVO); - // 断言 - assertEquals(1, result.size()); - assertPojoEquals(menu100, result.get(0)); - } - - @Test - public void testGetMenuIdListByPermissionFromCache() { - // mock æ•°æ® - MenuDO menu100 = randomPojo(MenuDO.class); - menuMapper.insert(menu100); - MenuDO menu101 = randomPojo(MenuDO.class); - menuMapper.insert(menu101); - // 准备傿•° - String permission = menu100.getPermission(); - - // 调用 - List ids = menuService.getMenuIdListByPermissionFromCache(permission); - // 断言 - assertEquals(1, ids.size()); - assertEquals(menu100.getId(), ids.get(0)); - } - - @Test - public void testGetMenuList_ids() { - // mock æ•°æ® - MenuDO menu100 = randomPojo(MenuDO.class); - menuMapper.insert(menu100); - MenuDO menu101 = randomPojo(MenuDO.class); - menuMapper.insert(menu101); - // 准备傿•° - Collection ids = Collections.singleton(menu100.getId()); - - // 调用 - List list = menuService.getMenuList(ids); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(menu100, list.get(0)); - } - - @Test - public void testGetMenu() { - // mock æ•°æ® - MenuDO menu = randomPojo(MenuDO.class); - menuMapper.insert(menu); - // 准备傿•° - Long id = menu.getId(); - - // 调用 - MenuDO dbMenu = menuService.getMenu(id); - // 断言 - assertPojoEquals(menu, dbMenu); - } - - @Test - public void testValidateParentMenu_success() { - // mock æ•°æ® - MenuDO menuDO = buildMenuDO(MenuTypeEnum.MENU, "parent", 0L); - menuMapper.insert(menuDO); - // 准备傿•° - Long parentId = menuDO.getId(); - - // 调用,无需断言 - menuService.validateParentMenu(parentId, null); - } - - @Test - public void testValidateParentMenu_canNotSetSelfToBeParent() { - // 调用,并断言异常 - assertServiceException(() -> menuService.validateParentMenu(1L, 1L), - MENU_PARENT_ERROR); - } - - @Test - public void testValidateParentMenu_parentNotExist() { - // 调用,并断言异常 - assertServiceException(() -> menuService.validateParentMenu(randomLongId(), null), - MENU_PARENT_NOT_EXISTS); - } - - @Test - public void testValidateParentMenu_parentTypeError() { - // mock æ•°æ® - MenuDO menuDO = buildMenuDO(MenuTypeEnum.BUTTON, "parent", 0L); - menuMapper.insert(menuDO); - // 准备傿•° - Long parentId = menuDO.getId(); - - // 调用,并断言异常 - assertServiceException(() -> menuService.validateParentMenu(parentId, null), - MENU_PARENT_NOT_DIR_OR_MENU); - } - - @Test - public void testValidateMenu_Name_success() { - // mock 父å­èœå• - MenuDO sonMenu = createParentAndSonMenu(); - // 准备傿•° - Long parentId = sonMenu.getParentId(); - Long otherSonMenuId = randomLongId(); - String otherSonMenuName = randomString(); - - // 调用,无需断言 - menuService.validateMenuName(parentId, otherSonMenuName, otherSonMenuId); - } - - @Test - public void testValidateMenu_sonMenuNameNameDuplicate() { - // mock 父å­èœå• - MenuDO sonMenu = createParentAndSonMenu(); - // 准备傿•° - Long parentId = sonMenu.getParentId(); - Long otherSonMenuId = randomLongId(); - String otherSonMenuName = sonMenu.getName(); //相åŒåç§° - - // 调用,并断言异常 - assertServiceException(() -> menuService.validateMenuName(parentId, otherSonMenuName, otherSonMenuId), - MENU_NAME_DUPLICATE); - } - - // ====================== åˆå§‹åŒ–方法 ====================== - - /** - * æ’入父å­èœå•,返回å­èœå• - * - * @return å­èœå• - */ - private MenuDO createParentAndSonMenu() { - // 构造父å­èœå• - MenuDO parentMenuDO = buildMenuDO(MenuTypeEnum.MENU, "parent", ID_ROOT); - menuMapper.insert(parentMenuDO); - // 构建å­èœå• - MenuDO sonMenuDO = buildMenuDO(MenuTypeEnum.MENU, "testSonName", - parentMenuDO.getParentId()); - menuMapper.insert(sonMenuDO); - return sonMenuDO; - } - - private MenuDO buildMenuDO(MenuTypeEnum type, String name, Long parentId) { - return buildMenuDO(type, name, parentId, randomCommonStatus()); - } - - private MenuDO buildMenuDO(MenuTypeEnum type, String name, Long parentId, Integer status) { - return randomPojo(MenuDO.class, o -> o.setId(null).setName(name).setParentId(parentId) - .setType(type.getType()).setStatus(status)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java deleted file mode 100644 index 9180444..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java +++ /dev/null @@ -1,527 +0,0 @@ -package cn.iocoder.yudao.module.system.service.permission; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.extra.spring.SpringUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; -import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMenuMapper; -import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleMapper; -import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum; -import cn.iocoder.yudao.module.system.service.dept.DeptService; -import cn.iocoder.yudao.module.system.service.user.AdminUserService; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.Collection; -import java.util.List; -import java.util.Set; - -import static cn.hutool.core.collection.ListUtil.toList; -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static java.util.Collections.singleton; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - -@Import({PermissionServiceImpl.class}) -public class PermissionServiceTest extends BaseDbUnitTest { - - @Resource - private PermissionServiceImpl permissionService; - - @Resource - private RoleMenuMapper roleMenuMapper; - @Resource - private UserRoleMapper userRoleMapper; - - @MockBean - private RoleService roleService; - @MockBean - private MenuService menuService; - @MockBean - private DeptService deptService; - @MockBean - private AdminUserService userService; - - @Test - public void testHasAnyPermissions_superAdmin() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(PermissionServiceImpl.class))) - .thenReturn(permissionService); - - // 准备傿•° - Long userId = 1L; - String[] roles = new String[]{"system:user:query", "system:user:create"}; - // mock 用户登录的角色 - userRoleMapper.insert(randomPojo(UserRoleDO.class).setUserId(userId).setRoleId(100L)); - RoleDO role = randomPojo(RoleDO.class, o -> o.setId(100L) - .setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(roleService.getRoleListFromCache(eq(singleton(100L)))).thenReturn(toList(role)); - // mock 其它方法 - when(roleService.hasAnySuperAdmin(eq(asSet(100L)))).thenReturn(true); - - // 调用,并断言 - assertTrue(permissionService.hasAnyPermissions(userId, roles)); - } - } - - @Test - public void testHasAnyPermissions_normal() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(PermissionServiceImpl.class))) - .thenReturn(permissionService); - - // 准备傿•° - Long userId = 1L; - String[] roles = new String[]{"system:user:query", "system:user:create"}; - // mock 用户登录的角色 - userRoleMapper.insert(randomPojo(UserRoleDO.class).setUserId(userId).setRoleId(100L)); - RoleDO role = randomPojo(RoleDO.class, o -> o.setId(100L) - .setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(roleService.getRoleListFromCache(eq(singleton(100L)))).thenReturn(toList(role)); - // mock èœå• - Long menuId = 1000L; - when(menuService.getMenuIdListByPermissionFromCache( - eq("system:user:create"))).thenReturn(singletonList(menuId)); - roleMenuMapper.insert(randomPojo(RoleMenuDO.class).setRoleId(100L).setMenuId(1000L)); - - // 调用,并断言 - assertTrue(permissionService.hasAnyPermissions(userId, roles)); - } - } - - @Test - public void testHasAnyRoles() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(PermissionServiceImpl.class))) - .thenReturn(permissionService); - - // 准备傿•° - Long userId = 1L; - String[] roles = new String[]{"yunai", "tudou"}; - // mock 用户与角色的缓存 - userRoleMapper.insert(randomPojo(UserRoleDO.class).setUserId(userId).setRoleId(100L)); - RoleDO role = randomPojo(RoleDO.class, o -> o.setId(100L).setCode("tudou") - .setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(roleService.getRoleListFromCache(eq(singleton(100L)))).thenReturn(toList(role)); - - // 调用,并断言 - assertTrue(permissionService.hasAnyRoles(userId, roles)); - } - } - - // ========== 角色-èœå•的相关方法 ========== - - @Test - public void testAssignRoleMenu() { - // 准备傿•° - Long roleId = 1L; - Set menuIds = asSet(200L, 300L); - // mock æ•°æ® - RoleMenuDO roleMenu01 = randomPojo(RoleMenuDO.class).setRoleId(1L).setMenuId(100L); - roleMenuMapper.insert(roleMenu01); - RoleMenuDO roleMenu02 = randomPojo(RoleMenuDO.class).setRoleId(1L).setMenuId(200L); - roleMenuMapper.insert(roleMenu02); - - // 调用 - permissionService.assignRoleMenu(roleId, menuIds); - // 断言 - List roleMenuList = roleMenuMapper.selectList(); - assertEquals(2, roleMenuList.size()); - assertEquals(1L, roleMenuList.get(0).getRoleId()); - assertEquals(200L, roleMenuList.get(0).getMenuId()); - assertEquals(1L, roleMenuList.get(1).getRoleId()); - assertEquals(300L, roleMenuList.get(1).getMenuId()); - } - - @Test - public void testProcessRoleDeleted() { - // 准备傿•° - Long roleId = randomLongId(); - // mock æ•°æ® UserRole - UserRoleDO userRoleDO01 = randomPojo(UserRoleDO.class, o -> o.setRoleId(roleId)); // 被删除 - userRoleMapper.insert(userRoleDO01); - UserRoleDO userRoleDO02 = randomPojo(UserRoleDO.class); // ä¸è¢«åˆ é™¤ - userRoleMapper.insert(userRoleDO02); - // mock æ•°æ® RoleMenu - RoleMenuDO roleMenuDO01 = randomPojo(RoleMenuDO.class, o -> o.setRoleId(roleId)); // 被删除 - roleMenuMapper.insert(roleMenuDO01); - RoleMenuDO roleMenuDO02 = randomPojo(RoleMenuDO.class); // ä¸è¢«åˆ é™¤ - roleMenuMapper.insert(roleMenuDO02); - - // 调用 - permissionService.processRoleDeleted(roleId); - // æ–­è¨€æ•°æ® RoleMenuDO - List dbRoleMenus = roleMenuMapper.selectList(); - assertEquals(1, dbRoleMenus.size()); - assertPojoEquals(dbRoleMenus.get(0), roleMenuDO02); - // æ–­è¨€æ•°æ® UserRoleDO - List dbUserRoles = userRoleMapper.selectList(); - assertEquals(1, dbUserRoles.size()); - assertPojoEquals(dbUserRoles.get(0), userRoleDO02); - } - - @Test - public void testProcessMenuDeleted() { - // 准备傿•° - Long menuId = randomLongId(); - // mock æ•°æ® - RoleMenuDO roleMenuDO01 = randomPojo(RoleMenuDO.class, o -> o.setMenuId(menuId)); // 被删除 - roleMenuMapper.insert(roleMenuDO01); - RoleMenuDO roleMenuDO02 = randomPojo(RoleMenuDO.class); // ä¸è¢«åˆ é™¤ - roleMenuMapper.insert(roleMenuDO02); - - // 调用 - permissionService.processMenuDeleted(menuId); - // æ–­è¨€æ•°æ® - List dbRoleMenus = roleMenuMapper.selectList(); - assertEquals(1, dbRoleMenus.size()); - assertPojoEquals(dbRoleMenus.get(0), roleMenuDO02); - } - - @Test - public void testGetRoleMenuIds_superAdmin() { - // 准备傿•° - Long roleId = 100L; - // mock 方法 - when(roleService.hasAnySuperAdmin(eq(singleton(100L)))).thenReturn(true); - List menuList = singletonList(randomPojo(MenuDO.class).setId(1L)); - when(menuService.getMenuList()).thenReturn(menuList); - - // 调用 - Set menuIds = permissionService.getRoleMenuListByRoleId(roleId); - // 断言 - assertEquals(singleton(1L), menuIds); - } - - @Test - public void testGetRoleMenuIds_normal() { - // 准备傿•° - Long roleId = 100L; - // mock æ•°æ® - RoleMenuDO roleMenu01 = randomPojo(RoleMenuDO.class).setRoleId(100L).setMenuId(1L); - roleMenuMapper.insert(roleMenu01); - RoleMenuDO roleMenu02 = randomPojo(RoleMenuDO.class).setRoleId(100L).setMenuId(2L); - roleMenuMapper.insert(roleMenu02); - - // 调用 - Set menuIds = permissionService.getRoleMenuListByRoleId(roleId); - // 断言 - assertEquals(asSet(1L, 2L), menuIds); - } - - @Test - public void testGetMenuRoleIdListByMenuIdFromCache() { - // 准备傿•° - Long menuId = 1L; - // mock æ•°æ® - RoleMenuDO roleMenu01 = randomPojo(RoleMenuDO.class).setRoleId(100L).setMenuId(1L); - roleMenuMapper.insert(roleMenu01); - RoleMenuDO roleMenu02 = randomPojo(RoleMenuDO.class).setRoleId(200L).setMenuId(1L); - roleMenuMapper.insert(roleMenu02); - - // 调用 - Set roleIds = permissionService.getMenuRoleIdListByMenuIdFromCache(menuId); - // 断言 - assertEquals(asSet(100L, 200L), roleIds); - } - - // ========== 用户-角色的相关方法 ========== - - @Test - public void testAssignUserRole() { - // 准备傿•° - Long userId = 1L; - Set roleIds = asSet(200L, 300L); - // mock æ•°æ® - UserRoleDO userRole01 = randomPojo(UserRoleDO.class).setUserId(1L).setRoleId(100L); - userRoleMapper.insert(userRole01); - UserRoleDO userRole02 = randomPojo(UserRoleDO.class).setUserId(1L).setRoleId(200L); - userRoleMapper.insert(userRole02); - - // 调用 - permissionService.assignUserRole(userId, roleIds); - // 断言 - List userRoleDOList = userRoleMapper.selectList(); - assertEquals(2, userRoleDOList.size()); - assertEquals(1L, userRoleDOList.get(0).getUserId()); - assertEquals(200L, userRoleDOList.get(0).getRoleId()); - assertEquals(1L, userRoleDOList.get(1).getUserId()); - assertEquals(300L, userRoleDOList.get(1).getRoleId()); - } - - @Test - public void testProcessUserDeleted() { - // 准备傿•° - Long userId = randomLongId(); - // mock æ•°æ® - UserRoleDO userRoleDO01 = randomPojo(UserRoleDO.class, o -> o.setUserId(userId)); // 被删除 - userRoleMapper.insert(userRoleDO01); - UserRoleDO userRoleDO02 = randomPojo(UserRoleDO.class); // ä¸è¢«åˆ é™¤ - userRoleMapper.insert(userRoleDO02); - - // 调用 - permissionService.processUserDeleted(userId); - // æ–­è¨€æ•°æ® - List dbUserRoles = userRoleMapper.selectList(); - assertEquals(1, dbUserRoles.size()); - assertPojoEquals(dbUserRoles.get(0), userRoleDO02); - } - - @Test - public void testGetUserRoleIdListByUserId() { - // 准备傿•° - Long userId = 1L; - // mock æ•°æ® - UserRoleDO userRoleDO01 = randomPojo(UserRoleDO.class, o -> o.setUserId(1L).setRoleId(10L)); - userRoleMapper.insert(userRoleDO01); - UserRoleDO roleMenuDO02 = randomPojo(UserRoleDO.class, o -> o.setUserId(1L).setRoleId(20L)); - userRoleMapper.insert(roleMenuDO02); - - // 调用 - Set result = permissionService.getUserRoleIdListByUserId(userId); - // 断言 - assertEquals(asSet(10L, 20L), result); - } - - @Test - public void testGetUserRoleIdListByUserIdFromCache() { - // 准备傿•° - Long userId = 1L; - // mock æ•°æ® - UserRoleDO userRoleDO01 = randomPojo(UserRoleDO.class, o -> o.setUserId(1L).setRoleId(10L)); - userRoleMapper.insert(userRoleDO01); - UserRoleDO roleMenuDO02 = randomPojo(UserRoleDO.class, o -> o.setUserId(1L).setRoleId(20L)); - userRoleMapper.insert(roleMenuDO02); - - // 调用 - Set result = permissionService.getUserRoleIdListByUserIdFromCache(userId); - // 断言 - assertEquals(asSet(10L, 20L), result); - } - - @Test - public void testGetUserRoleIdsFromCache() { - // 准备傿•° - Long userId = 1L; - // mock æ•°æ® - UserRoleDO userRoleDO01 = randomPojo(UserRoleDO.class, o -> o.setUserId(1L).setRoleId(10L)); - userRoleMapper.insert(userRoleDO01); - UserRoleDO roleMenuDO02 = randomPojo(UserRoleDO.class, o -> o.setUserId(1L).setRoleId(20L)); - userRoleMapper.insert(roleMenuDO02); - - // 调用 - Set result = permissionService.getUserRoleIdListByUserIdFromCache(userId); - // 断言 - assertEquals(asSet(10L, 20L), result); - } - - @Test - public void testGetUserRoleIdListByRoleId() { - // 准备傿•° - Collection roleIds = asSet(10L, 20L); - // mock æ•°æ® - UserRoleDO userRoleDO01 = randomPojo(UserRoleDO.class, o -> o.setUserId(1L).setRoleId(10L)); - userRoleMapper.insert(userRoleDO01); - UserRoleDO roleMenuDO02 = randomPojo(UserRoleDO.class, o -> o.setUserId(2L).setRoleId(20L)); - userRoleMapper.insert(roleMenuDO02); - - // 调用 - Set result = permissionService.getUserRoleIdListByRoleId(roleIds); - // 断言 - assertEquals(asSet(1L, 2L), result); - } - - @Test - public void testGetEnableUserRoleListByUserIdFromCache() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(PermissionServiceImpl.class))) - .thenReturn(permissionService); - - // 准备傿•° - Long userId = 1L; - // mock 用户登录的角色 - userRoleMapper.insert(randomPojo(UserRoleDO.class).setUserId(userId).setRoleId(100L)); - userRoleMapper.insert(randomPojo(UserRoleDO.class).setUserId(userId).setRoleId(200L)); - RoleDO role01 = randomPojo(RoleDO.class, o -> o.setId(100L) - .setStatus(CommonStatusEnum.ENABLE.getStatus())); - RoleDO role02 = randomPojo(RoleDO.class, o -> o.setId(200L) - .setStatus(CommonStatusEnum.DISABLE.getStatus())); - when(roleService.getRoleListFromCache(eq(asSet(100L, 200L)))) - .thenReturn(toList(role01, role02)); - - // 调用 - List result = permissionService.getEnableUserRoleListByUserIdFromCache(userId); - // 断言 - assertEquals(1, result.size()); - assertPojoEquals(role01, result.get(0)); - } - } - - // ========== 用户-部门的相关方法 ========== - - @Test - public void testAssignRoleDataScope() { - // 准备傿•° - Long roleId = 1L; - Integer dataScope = 2; - Set dataScopeDeptIds = asSet(10L, 20L); - - // 调用 - permissionService.assignRoleDataScope(roleId, dataScope, dataScopeDeptIds); - // 断言 - verify(roleService).updateRoleDataScope(eq(roleId), eq(dataScope), eq(dataScopeDeptIds)); - } - - @Test - public void testGetDeptDataPermission_All() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(PermissionServiceImpl.class))) - .thenReturn(permissionService); - - // 准备傿•° - Long userId = 1L; - // mock ç”¨æˆ·çš„è§’è‰²ç¼–å· - userRoleMapper.insert(randomPojo(UserRoleDO.class).setUserId(userId).setRoleId(2L)); - // mock 获得用户的角色 - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.ALL.getScope()) - .setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(roleService.getRoleListFromCache(eq(singleton(2L)))).thenReturn(toList(roleDO)); - - // 调用 - DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(userId); - // 断言 - assertTrue(result.getAll()); - assertFalse(result.getSelf()); - assertTrue(CollUtil.isEmpty(result.getDeptIds())); - } - } - - @Test - public void testGetDeptDataPermission_DeptCustom() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(PermissionServiceImpl.class))) - .thenReturn(permissionService); - - // 准备傿•° - Long userId = 1L; - // mock ç”¨æˆ·çš„è§’è‰²ç¼–å· - userRoleMapper.insert(randomPojo(UserRoleDO.class).setUserId(userId).setRoleId(2L)); - // mock 获得用户的角色 - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_CUSTOM.getScope()) - .setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(roleService.getRoleListFromCache(eq(singleton(2L)))).thenReturn(toList(roleDO)); - // mock 部门的返回 - when(userService.getUser(eq(1L))).thenReturn(new AdminUserDO().setDeptId(3L), - null, null); // 最åŽè¿”回 null 的目的,看看会ä¸ä¼šé‡å¤è°ƒç”¨ - - // 调用 - DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(userId); - // 断言 - assertFalse(result.getAll()); - assertFalse(result.getSelf()); - assertEquals(roleDO.getDataScopeDeptIds().size() + 1, result.getDeptIds().size()); - assertTrue(CollUtil.containsAll(result.getDeptIds(), roleDO.getDataScopeDeptIds())); - assertTrue(CollUtil.contains(result.getDeptIds(), 3L)); - } - } - - @Test - public void testGetDeptDataPermission_DeptOnly() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(PermissionServiceImpl.class))) - .thenReturn(permissionService); - - // 准备傿•° - Long userId = 1L; - // mock ç”¨æˆ·çš„è§’è‰²ç¼–å· - userRoleMapper.insert(randomPojo(UserRoleDO.class).setUserId(userId).setRoleId(2L)); - // mock 获得用户的角色 - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_ONLY.getScope()) - .setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(roleService.getRoleListFromCache(eq(singleton(2L)))).thenReturn(toList(roleDO)); - // mock 部门的返回 - when(userService.getUser(eq(1L))).thenReturn(new AdminUserDO().setDeptId(3L), - null, null); // 最åŽè¿”回 null 的目的,看看会ä¸ä¼šé‡å¤è°ƒç”¨ - - // 调用 - DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(userId); - // 断言 - assertFalse(result.getAll()); - assertFalse(result.getSelf()); - assertEquals(1, result.getDeptIds().size()); - assertTrue(CollUtil.contains(result.getDeptIds(), 3L)); - } - } - - @Test - public void testGetDeptDataPermission_DeptAndChild() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(PermissionServiceImpl.class))) - .thenReturn(permissionService); - - // 准备傿•° - Long userId = 1L; - // mock ç”¨æˆ·çš„è§’è‰²ç¼–å· - userRoleMapper.insert(randomPojo(UserRoleDO.class).setUserId(userId).setRoleId(2L)); - // mock 获得用户的角色 - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_AND_CHILD.getScope()) - .setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(roleService.getRoleListFromCache(eq(singleton(2L)))).thenReturn(toList(roleDO)); - // mock 部门的返回 - when(userService.getUser(eq(1L))).thenReturn(new AdminUserDO().setDeptId(3L), - null, null); // 最åŽè¿”回 null 的目的,看看会ä¸ä¼šé‡å¤è°ƒç”¨ - // mock 方法(部门) - DeptDO deptDO = randomPojo(DeptDO.class); - when(deptService.getChildDeptIdListFromCache(eq(3L))).thenReturn(singleton(deptDO.getId())); - - // 调用 - DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(userId); - // 断言 - assertFalse(result.getAll()); - assertFalse(result.getSelf()); - assertEquals(2, result.getDeptIds().size()); - assertTrue(CollUtil.contains(result.getDeptIds(), deptDO.getId())); - assertTrue(CollUtil.contains(result.getDeptIds(), 3L)); - } - } - - @Test - public void testGetDeptDataPermission_Self() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(PermissionServiceImpl.class))) - .thenReturn(permissionService); - - // 准备傿•° - Long userId = 1L; - // mock ç”¨æˆ·çš„è§’è‰²ç¼–å· - userRoleMapper.insert(randomPojo(UserRoleDO.class).setUserId(userId).setRoleId(2L)); - // mock 获得用户的角色 - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.SELF.getScope()) - .setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(roleService.getRoleListFromCache(eq(singleton(2L)))).thenReturn(toList(roleDO)); - - // 调用 - DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(userId); - // 断言 - assertFalse(result.getAll()); - assertTrue(result.getSelf()); - assertTrue(CollUtil.isEmpty(result.getDeptIds())); - } - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImplTest.java deleted file mode 100644 index fc87193..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImplTest.java +++ /dev/null @@ -1,372 +0,0 @@ -package cn.iocoder.yudao.module.system.service.permission; - -import cn.hutool.extra.spring.SpringUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; -import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper; -import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum; -import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.Collection; -import java.util.List; -import java.util.Set; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static java.util.Collections.singleton; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mockStatic; -import static org.mockito.Mockito.verify; - -@Import(RoleServiceImpl.class) -public class RoleServiceImplTest extends BaseDbUnitTest { - - @Resource - private RoleServiceImpl roleService; - - @Resource - private RoleMapper roleMapper; - - @MockBean - private PermissionService permissionService; - - @Test - public void testCreateRole() { - // 准备傿•° - RoleSaveReqVO reqVO = randomPojo(RoleSaveReqVO.class) - .setId(null) // 防止 id 被赋值 - .setStatus(randomCommonStatus()); - - // 调用 - Long roleId = roleService.createRole(reqVO, null); - // 断言 - RoleDO roleDO = roleMapper.selectById(roleId); - assertPojoEquals(reqVO, roleDO, "id"); - assertEquals(RoleTypeEnum.CUSTOM.getType(), roleDO.getType()); - assertEquals(DataScopeEnum.ALL.getScope(), roleDO.getDataScope()); - } - - @Test - public void testUpdateRole() { - // mock æ•°æ® - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType())); - roleMapper.insert(roleDO); - // 准备傿•° - Long id = roleDO.getId(); - RoleSaveReqVO reqVO = randomPojo(RoleSaveReqVO.class, o -> o.setId(id) - .setStatus(randomCommonStatus())); - - // 调用 - roleService.updateRole(reqVO); - // 断言 - RoleDO newRoleDO = roleMapper.selectById(id); - assertPojoEquals(reqVO, newRoleDO); - } - - @Test - public void testUpdateRoleDataScope() { - // mock æ•°æ® - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType())); - roleMapper.insert(roleDO); - // 准备傿•° - Long id = roleDO.getId(); - Integer dataScope = randomEle(DataScopeEnum.values()).getScope(); - Set dataScopeRoleIds = randomSet(Long.class); - - // 调用 - roleService.updateRoleDataScope(id, dataScope, dataScopeRoleIds); - // 断言 - RoleDO dbRoleDO = roleMapper.selectById(id); - assertEquals(dataScope, dbRoleDO.getDataScope()); - assertEquals(dataScopeRoleIds, dbRoleDO.getDataScopeDeptIds()); - } - - @Test - public void testDeleteRole() { - // mock æ•°æ® - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType())); - roleMapper.insert(roleDO); - // 傿•°å‡†å¤‡ - Long id = roleDO.getId(); - - // 调用 - roleService.deleteRole(id); - // 断言 - assertNull(roleMapper.selectById(id)); - // verify åˆ é™¤ç›¸å…³æ•°æ® - verify(permissionService).processRoleDeleted(id); - } - - @Test - public void testValidateRoleDuplicate_success() { - // 调用,ä¸ä¼šæŠ›å¼‚常 - roleService.validateRoleDuplicate(randomString(), randomString(), null); - } - - @Test - public void testValidateRoleDuplicate_nameDuplicate() { - // mock æ•°æ® - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setName("role_name")); - roleMapper.insert(roleDO); - // 准备傿•° - String name = "role_name"; - - // 调用,并断言异常 - assertServiceException(() -> roleService.validateRoleDuplicate(name, randomString(), null), - ROLE_NAME_DUPLICATE, name); - } - - @Test - public void testValidateRoleDuplicate_codeDuplicate() { - // mock æ•°æ® - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setCode("code")); - roleMapper.insert(roleDO); - // 准备傿•° - String code = "code"; - - // 调用,并断言异常 - assertServiceException(() -> roleService.validateRoleDuplicate(randomString(), code, null), - ROLE_CODE_DUPLICATE, code); - } - - @Test - public void testValidateUpdateRole_success() { - RoleDO roleDO = randomPojo(RoleDO.class); - roleMapper.insert(roleDO); - // 准备傿•° - Long id = roleDO.getId(); - - // 调用,无异常 - roleService.validateRoleForUpdate(id); - } - - @Test - public void testValidateUpdateRole_roleIdNotExist() { - assertServiceException(() -> roleService.validateRoleForUpdate(randomLongId()), ROLE_NOT_EXISTS); - } - - @Test - public void testValidateUpdateRole_systemRoleCanNotBeUpdate() { - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.SYSTEM.getType())); - roleMapper.insert(roleDO); - // 准备傿•° - Long id = roleDO.getId(); - - assertServiceException(() -> roleService.validateRoleForUpdate(id), - ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE); - } - - @Test - public void testGetRole() { - // mock æ•°æ® - RoleDO roleDO = randomPojo(RoleDO.class); - roleMapper.insert(roleDO); - // 傿•°å‡†å¤‡ - Long id = roleDO.getId(); - - // 调用 - RoleDO dbRoleDO = roleService.getRole(id); - // 断言 - assertPojoEquals(roleDO, dbRoleDO); - } - - @Test - public void testGetRoleFromCache() { - // mock æ•°æ®ï¼ˆç¼“存) - RoleDO roleDO = randomPojo(RoleDO.class); - roleMapper.insert(roleDO); - // 傿•°å‡†å¤‡ - Long id = roleDO.getId(); - - // 调用 - RoleDO dbRoleDO = roleService.getRoleFromCache(id); - // 断言 - assertPojoEquals(roleDO, dbRoleDO); - } - - @Test - public void testGetRoleListByStatus() { - // mock æ•°æ® - RoleDO dbRole01 = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - roleMapper.insert(dbRole01); - RoleDO dbRole02 = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); - roleMapper.insert(dbRole02); - - // 调用 - List list = roleService.getRoleListByStatus( - singleton(CommonStatusEnum.ENABLE.getStatus())); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(dbRole01, list.get(0)); - } - - @Test - public void testGetRoleList() { - // mock æ•°æ® - RoleDO dbRole01 = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - roleMapper.insert(dbRole01); - RoleDO dbRole02 = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); - roleMapper.insert(dbRole02); - - // 调用 - List list = roleService.getRoleList(); - // 断言 - assertEquals(2, list.size()); - assertPojoEquals(dbRole01, list.get(0)); - assertPojoEquals(dbRole02, list.get(1)); - } - - @Test - public void testGetRoleList_ids() { - // mock æ•°æ® - RoleDO dbRole01 = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - roleMapper.insert(dbRole01); - RoleDO dbRole02 = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); - roleMapper.insert(dbRole02); - // 准备傿•° - Collection ids = singleton(dbRole01.getId()); - - // 调用 - List list = roleService.getRoleList(ids); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(dbRole01, list.get(0)); - } - - @Test - public void testGetRoleListFromCache() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(RoleServiceImpl.class))) - .thenReturn(roleService); - - // mock æ•°æ® - RoleDO dbRole = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - roleMapper.insert(dbRole); - // 测试 id ä¸åŒ¹é… - roleMapper.insert(cloneIgnoreId(dbRole, o -> {})); - // 准备傿•° - Collection ids = singleton(dbRole.getId()); - - // 调用 - List list = roleService.getRoleListFromCache(ids); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(dbRole, list.get(0)); - } - } - - @Test - public void testGetRolePage() { - // mock æ•°æ® - RoleDO dbRole = randomPojo(RoleDO.class, o -> { // 等会查询到 - o.setName("土豆"); - o.setCode("tudou"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setCreateTime(buildTime(2022, 2, 8)); - }); - roleMapper.insert(dbRole); - // 测试 name ä¸åŒ¹é… - roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setName("红薯"))); - // 测试 code ä¸åŒ¹é… - roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCode("hong"))); - // 测试 createTime ä¸åŒ¹é… - roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCreateTime(buildTime(2022, 2, 16)))); - // 准备傿•° - RolePageReqVO reqVO = new RolePageReqVO(); - reqVO.setName("土豆"); - reqVO.setCode("tu"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setCreateTime(buildBetweenTime(2022, 2, 1, 2022, 2, 12)); - - // 调用 - PageResult pageResult = roleService.getRolePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbRole, pageResult.getList().get(0)); - } - - @Test - public void testHasAnySuperAdmin_true() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(RoleServiceImpl.class))) - .thenReturn(roleService); - - // mock æ•°æ® - RoleDO dbRole = randomPojo(RoleDO.class).setCode("super_admin"); - roleMapper.insert(dbRole); - // 准备傿•° - Long id = dbRole.getId(); - - // 调用,并调用 - assertTrue(roleService.hasAnySuperAdmin(singletonList(id))); - } - } - - @Test - public void testHasAnySuperAdmin_false() { - try (MockedStatic springUtilMockedStatic = mockStatic(SpringUtil.class)) { - springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(RoleServiceImpl.class))) - .thenReturn(roleService); - - // mock æ•°æ® - RoleDO dbRole = randomPojo(RoleDO.class).setCode("tenant_admin"); - roleMapper.insert(dbRole); - // 准备傿•° - Long id = dbRole.getId(); - - // 调用,并调用 - assertFalse(roleService.hasAnySuperAdmin(singletonList(id))); - } - } - - @Test - public void testValidateRoleList_success() { - // mock æ•°æ® - RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - roleMapper.insert(roleDO); - // 准备傿•° - List ids = singletonList(roleDO.getId()); - - // 调用,无需断言 - roleService.validateRoleList(ids); - } - - @Test - public void testValidateRoleList_notFound() { - // 准备傿•° - List ids = singletonList(randomLongId()); - - // 调用, 并断言异常 - assertServiceException(() -> roleService.validateRoleList(ids), ROLE_NOT_EXISTS); - } - - @Test - public void testValidateRoleList_notEnable() { - // mock æ•°æ® - RoleDO RoleDO = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); - roleMapper.insert(RoleDO); - // 准备傿•° - List ids = singletonList(RoleDO.getId()); - - // 调用, 并断言异常 - assertServiceException(() -> roleService.validateRoleList(ids), ROLE_IS_DISABLE, RoleDO.getName()); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java deleted file mode 100644 index 295911a..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsChannelServiceTest.java +++ /dev/null @@ -1,217 +0,0 @@ -package cn.iocoder.yudao.module.system.service.sms; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.system.framework.sms.core.client.SmsClient; -import cn.iocoder.yudao.module.system.framework.sms.core.client.SmsClientFactory; -import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProperties; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.sms.vo.channel.SmsChannelSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; -import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsChannelMapper; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - -@Import(SmsChannelServiceImpl.class) -public class SmsChannelServiceTest extends BaseDbUnitTest { - - @Resource - private SmsChannelServiceImpl smsChannelService; - - @Resource - private SmsChannelMapper smsChannelMapper; - - @MockBean - private SmsClientFactory smsClientFactory; - @MockBean - private SmsTemplateService smsTemplateService; - - @Test - public void testCreateSmsChannel_success() { - // 准备傿•° - SmsChannelSaveReqVO reqVO = randomPojo(SmsChannelSaveReqVO.class, o -> o.setStatus(randomCommonStatus())) - .setId(null); // 防止 id 被赋值 - - // 调用 - Long smsChannelId = smsChannelService.createSmsChannel(reqVO); - // 断言 - assertNotNull(smsChannelId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SmsChannelDO smsChannel = smsChannelMapper.selectById(smsChannelId); - assertPojoEquals(reqVO, smsChannel, "id"); - } - - @Test - public void testUpdateSmsChannel_success() { - // mock æ•°æ® - SmsChannelDO dbSmsChannel = randomPojo(SmsChannelDO.class); - smsChannelMapper.insert(dbSmsChannel);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - SmsChannelSaveReqVO reqVO = randomPojo(SmsChannelSaveReqVO.class, o -> { - o.setId(dbSmsChannel.getId()); // 设置更新的 ID - o.setStatus(randomCommonStatus()); - o.setCallbackUrl(randomString()); - }); - - // 调用 - smsChannelService.updateSmsChannel(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - SmsChannelDO smsChannel = smsChannelMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, smsChannel); - } - - @Test - public void testUpdateSmsChannel_notExists() { - // 准备傿•° - SmsChannelSaveReqVO reqVO = randomPojo(SmsChannelSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> smsChannelService.updateSmsChannel(reqVO), SMS_CHANNEL_NOT_EXISTS); - } - - @Test - public void testDeleteSmsChannel_success() { - // mock æ•°æ® - SmsChannelDO dbSmsChannel = randomPojo(SmsChannelDO.class); - smsChannelMapper.insert(dbSmsChannel);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbSmsChannel.getId(); - - // 调用 - smsChannelService.deleteSmsChannel(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(smsChannelMapper.selectById(id)); - } - - @Test - public void testDeleteSmsChannel_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> smsChannelService.deleteSmsChannel(id), SMS_CHANNEL_NOT_EXISTS); - } - - @Test - public void testDeleteSmsChannel_hasChildren() { - // mock æ•°æ® - SmsChannelDO dbSmsChannel = randomPojo(SmsChannelDO.class); - smsChannelMapper.insert(dbSmsChannel);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbSmsChannel.getId(); - // mock 方法 - when(smsTemplateService.getSmsTemplateCountByChannelId(eq(id))).thenReturn(10L); - - // 调用, 并断言异常 - assertServiceException(() -> smsChannelService.deleteSmsChannel(id), SMS_CHANNEL_HAS_CHILDREN); - } - - @Test - public void testGetSmsChannel() { - // mock æ•°æ® - SmsChannelDO dbSmsChannel = randomPojo(SmsChannelDO.class); - smsChannelMapper.insert(dbSmsChannel); // @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbSmsChannel.getId(); - - // 调用,并断言 - assertPojoEquals(dbSmsChannel, smsChannelService.getSmsChannel(id)); - } - - @Test - public void testGetSmsChannelList() { - // mock æ•°æ® - SmsChannelDO dbSmsChannel01 = randomPojo(SmsChannelDO.class); - smsChannelMapper.insert(dbSmsChannel01); - SmsChannelDO dbSmsChannel02 = randomPojo(SmsChannelDO.class); - smsChannelMapper.insert(dbSmsChannel02); - // 准备傿•° - - // 调用 - List list = smsChannelService.getSmsChannelList(); - // 断言 - assertEquals(2, list.size()); - assertPojoEquals(dbSmsChannel01, list.get(0)); - assertPojoEquals(dbSmsChannel02, list.get(1)); - } - - @Test - public void testGetSmsChannelPage() { - // mock æ•°æ® - SmsChannelDO dbSmsChannel = randomPojo(SmsChannelDO.class, o -> { // 等会查询到 - o.setSignature("èŠ‹é“æºç "); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setCreateTime(buildTime(2020, 12, 12)); - }); - smsChannelMapper.insert(dbSmsChannel); - // 测试 signature ä¸åŒ¹é… - smsChannelMapper.insert(cloneIgnoreId(dbSmsChannel, o -> o.setSignature("æºç "))); - // 测试 status ä¸åŒ¹é… - smsChannelMapper.insert(cloneIgnoreId(dbSmsChannel, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 createTime ä¸åŒ¹é… - smsChannelMapper.insert(cloneIgnoreId(dbSmsChannel, o -> o.setCreateTime(buildTime(2020, 11, 11)))); - // 准备傿•° - SmsChannelPageReqVO reqVO = new SmsChannelPageReqVO(); - reqVO.setSignature("芋é“"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setCreateTime(buildBetweenTime(2020, 12, 1, 2020, 12, 24)); - - // 调用 - PageResult pageResult = smsChannelService.getSmsChannelPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbSmsChannel, pageResult.getList().get(0)); - } - - @Test - public void testGetSmsClient_id() { - // mock æ•°æ® - SmsChannelDO channel = randomPojo(SmsChannelDO.class); - smsChannelMapper.insert(channel); - // 准备傿•° - Long id = channel.getId(); - // mock 方法 - SmsClient mockClient = mock(SmsClient.class); - SmsChannelProperties properties = BeanUtils.toBean(channel, SmsChannelProperties.class); - when(smsClientFactory.createOrUpdateSmsClient(eq(properties))).thenReturn(mockClient); - - // 调用 - SmsClient client = smsChannelService.getSmsClient(id); - // 断言 - assertSame(client, mockClient); - } - - @Test - public void testGetSmsClient_code() { - // 准备傿•° - String code = randomString(); - // mock 方法 - SmsClient mockClient = mock(SmsClient.class); - when(smsClientFactory.getSmsClient(eq(code))).thenReturn(mockClient); - - // 调用 - SmsClient client = smsChannelService.getSmsClient(code); - // 断言 - assertSame(client, mockClient); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImplTest.java deleted file mode 100644 index 093a5ae..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImplTest.java +++ /dev/null @@ -1,191 +0,0 @@ -package cn.iocoder.yudao.module.system.service.sms; - -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; -import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeValidateReqDTO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO; -import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsCodeMapper; -import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; -import cn.iocoder.yudao.module.system.framework.sms.config.SmsCodeProperties; -import jakarta.annotation.Resource; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import java.time.Duration; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.ArgumentMatchers.isNull; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@Import(SmsCodeServiceImpl.class) -public class SmsCodeServiceImplTest extends BaseDbUnitTest { - - @Resource - private SmsCodeServiceImpl smsCodeService; - - @Resource - private SmsCodeMapper smsCodeMapper; - - @MockBean - private SmsCodeProperties smsCodeProperties; - @MockBean - private SmsSendService smsSendService; - - @BeforeEach - public void setUp() { - when(smsCodeProperties.getExpireTimes()).thenReturn(Duration.ofMinutes(5)); - when(smsCodeProperties.getSendFrequency()).thenReturn(Duration.ofMinutes(1)); - when(smsCodeProperties.getSendMaximumQuantityPerDay()).thenReturn(10); - when(smsCodeProperties.getBeginCode()).thenReturn(9999); - when(smsCodeProperties.getEndCode()).thenReturn(9999); - } - - @Test - public void sendSmsCode_success() { - // 准备傿•° - SmsCodeSendReqDTO reqDTO = randomPojo(SmsCodeSendReqDTO.class, o -> { - o.setMobile("15601691300"); - o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene()); - }); - - // 调用 - smsCodeService.sendSmsCode(reqDTO); - // 断言 code 验è¯ç  - SmsCodeDO smsCodeDO = smsCodeMapper.selectOne(null); - assertPojoEquals(reqDTO, smsCodeDO); - assertEquals("9999", smsCodeDO.getCode()); - assertEquals(1, smsCodeDO.getTodayIndex()); - assertFalse(smsCodeDO.getUsed()); - // 断言调用 - verify(smsSendService).sendSingleSms(eq(reqDTO.getMobile()), isNull(), isNull(), - eq("user-sms-login"), eq(MapUtil.of("code", "9999"))); - } - - @Test - public void sendSmsCode_tooFast() { - // mock æ•°æ® - SmsCodeDO smsCodeDO = randomPojo(SmsCodeDO.class, - o -> o.setMobile("15601691300").setTodayIndex(1)); - smsCodeMapper.insert(smsCodeDO); - // 准备傿•° - SmsCodeSendReqDTO reqDTO = randomPojo(SmsCodeSendReqDTO.class, o -> { - o.setMobile("15601691300"); - o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene()); - }); - - // 调用,并断言异常 - assertServiceException(() -> smsCodeService.sendSmsCode(reqDTO), - SMS_CODE_SEND_TOO_FAST); - } - - @Test - public void sendSmsCode_exceedDay() { - // mock æ•°æ® - SmsCodeDO smsCodeDO = randomPojo(SmsCodeDO.class, - o -> o.setMobile("15601691300").setTodayIndex(10).setCreateTime(LocalDateTime.now())); - smsCodeMapper.insert(smsCodeDO); - // 准备傿•° - SmsCodeSendReqDTO reqDTO = randomPojo(SmsCodeSendReqDTO.class, o -> { - o.setMobile("15601691300"); - o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene()); - }); - when(smsCodeProperties.getSendFrequency()).thenReturn(Duration.ofMillis(0)); - - // 调用,并断言异常 - assertServiceException(() -> smsCodeService.sendSmsCode(reqDTO), - SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY); - } - - @Test - public void testUseSmsCode_success() { - // 准备傿•° - SmsCodeUseReqDTO reqDTO = randomPojo(SmsCodeUseReqDTO.class, o -> { - o.setMobile("15601691300"); - o.setScene(randomEle(SmsSceneEnum.values()).getScene()); - }); - smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> { - o.setMobile(reqDTO.getMobile()).setScene(reqDTO.getScene()) - .setCode(reqDTO.getCode()).setUsed(false); - })); - - // 调用 - smsCodeService.useSmsCode(reqDTO); - // 断言 - SmsCodeDO smsCodeDO = smsCodeMapper.selectOne(null); - assertTrue(smsCodeDO.getUsed()); - assertNotNull(smsCodeDO.getUsedTime()); - assertEquals(reqDTO.getUsedIp(), smsCodeDO.getUsedIp()); - } - - @Test - public void validateSmsCode_success() { - // 准备傿•° - SmsCodeValidateReqDTO reqDTO = randomPojo(SmsCodeValidateReqDTO.class, o -> { - o.setMobile("15601691300"); - o.setScene(randomEle(SmsSceneEnum.values()).getScene()); - }); - smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile()) - .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(false))); - - // 调用 - smsCodeService.validateSmsCode(reqDTO); - } - - @Test - public void validateSmsCode_notFound() { - // 准备傿•° - SmsCodeValidateReqDTO reqDTO = randomPojo(SmsCodeValidateReqDTO.class, o -> { - o.setMobile("15601691300"); - o.setScene(randomEle(SmsSceneEnum.values()).getScene()); - }); - - // 调用,并断言异常 - assertServiceException(() -> smsCodeService.validateSmsCode(reqDTO), - SMS_CODE_NOT_FOUND); - } - - @Test - public void validateSmsCode_expired() { - // 准备傿•° - SmsCodeValidateReqDTO reqDTO = randomPojo(SmsCodeValidateReqDTO.class, o -> { - o.setMobile("15601691300"); - o.setScene(randomEle(SmsSceneEnum.values()).getScene()); - }); - smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile()) - .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(false) - .setCreateTime(LocalDateTime.now().minusMinutes(6)))); - - // 调用,并断言异常 - assertServiceException(() -> smsCodeService.validateSmsCode(reqDTO), - SMS_CODE_EXPIRED); - } - - @Test - public void validateSmsCode_used() { - // 准备傿•° - SmsCodeValidateReqDTO reqDTO = randomPojo(SmsCodeValidateReqDTO.class, o -> { - o.setMobile("15601691300"); - o.setScene(randomEle(SmsSceneEnum.values()).getScene()); - }); - smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile()) - .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(true) - .setCreateTime(LocalDateTime.now()))); - - // 调用,并断言异常 - assertServiceException(() -> smsCodeService.validateSmsCode(reqDTO), - SMS_CODE_USED); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImplTest.java deleted file mode 100644 index 570e8ce..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsLogServiceImplTest.java +++ /dev/null @@ -1,190 +0,0 @@ -package cn.iocoder.yudao.module.system.service.sms; - -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsLogDO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; -import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsLogMapper; -import cn.iocoder.yudao.module.system.enums.sms.SmsReceiveStatusEnum; -import cn.iocoder.yudao.module.system.enums.sms.SmsSendStatusEnum; -import cn.iocoder.yudao.module.system.enums.sms.SmsTemplateTypeEnum; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.time.LocalDateTime; -import java.util.Map; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomBoolean; -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@Import(SmsLogServiceImpl.class) -public class SmsLogServiceImplTest extends BaseDbUnitTest { - - @Resource - private SmsLogServiceImpl smsLogService; - - @Resource - private SmsLogMapper smsLogMapper; - - @Test - public void testGetSmsLogPage() { - // mock æ•°æ® - SmsLogDO dbSmsLog = randomSmsLogDO(o -> { // 等会查询到 - o.setChannelId(1L); - o.setTemplateId(10L); - o.setMobile("15601691300"); - o.setSendStatus(SmsSendStatusEnum.INIT.getStatus()); - o.setSendTime(buildTime(2020, 11, 11)); - o.setReceiveStatus(SmsReceiveStatusEnum.INIT.getStatus()); - o.setReceiveTime(buildTime(2021, 11, 11)); - }); - smsLogMapper.insert(dbSmsLog); - // 测试 channelId ä¸åŒ¹é… - smsLogMapper.insert(cloneIgnoreId(dbSmsLog, o -> o.setChannelId(2L))); - // 测试 templateId ä¸åŒ¹é… - smsLogMapper.insert(cloneIgnoreId(dbSmsLog, o -> o.setTemplateId(20L))); - // 测试 mobile ä¸åŒ¹é… - smsLogMapper.insert(cloneIgnoreId(dbSmsLog, o -> o.setMobile("18818260999"))); - // 测试 sendStatus ä¸åŒ¹é… - smsLogMapper.insert(cloneIgnoreId(dbSmsLog, o -> o.setSendStatus(SmsSendStatusEnum.IGNORE.getStatus()))); - // 测试 sendTime ä¸åŒ¹é… - smsLogMapper.insert(cloneIgnoreId(dbSmsLog, o -> o.setSendTime(buildTime(2020, 12, 12)))); - // 测试 receiveStatus ä¸åŒ¹é… - smsLogMapper.insert(cloneIgnoreId(dbSmsLog, o -> o.setReceiveStatus(SmsReceiveStatusEnum.SUCCESS.getStatus()))); - // 测试 receiveTime ä¸åŒ¹é… - smsLogMapper.insert(cloneIgnoreId(dbSmsLog, o -> o.setReceiveTime(buildTime(2021, 12, 12)))); - // 准备傿•° - SmsLogPageReqVO reqVO = new SmsLogPageReqVO(); - reqVO.setChannelId(1L); - reqVO.setTemplateId(10L); - reqVO.setMobile("156"); - reqVO.setSendStatus(SmsSendStatusEnum.INIT.getStatus()); - reqVO.setSendTime(buildBetweenTime(2020, 11, 1, 2020, 11, 30)); - reqVO.setReceiveStatus(SmsReceiveStatusEnum.INIT.getStatus()); - reqVO.setReceiveTime(buildBetweenTime(2021, 11, 1, 2021, 11, 30)); - - // 调用 - PageResult pageResult = smsLogService.getSmsLogPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbSmsLog, pageResult.getList().get(0)); - } - - @Test - public void testCreateSmsLog() { - // 准备傿•° - String mobile = randomString(); - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - Boolean isSend = randomBoolean(); - SmsTemplateDO templateDO = randomPojo(SmsTemplateDO.class, - o -> o.setType(randomEle(SmsTemplateTypeEnum.values()).getType())); - String templateContent = randomString(); - Map templateParams = randomTemplateParams(); - // mock 方法 - - // 调用 - Long logId = smsLogService.createSmsLog(mobile, userId, userType, isSend, - templateDO, templateContent, templateParams); - // 断言 - SmsLogDO logDO = smsLogMapper.selectById(logId); - assertEquals(isSend ? SmsSendStatusEnum.INIT.getStatus() : SmsSendStatusEnum.IGNORE.getStatus(), - logDO.getSendStatus()); - assertEquals(mobile, logDO.getMobile()); - assertEquals(userType, logDO.getUserType()); - assertEquals(userId, logDO.getUserId()); - assertEquals(templateDO.getId(), logDO.getTemplateId()); - assertEquals(templateDO.getCode(), logDO.getTemplateCode()); - assertEquals(templateDO.getType(), logDO.getTemplateType()); - assertEquals(templateDO.getChannelId(), logDO.getChannelId()); - assertEquals(templateDO.getChannelCode(), logDO.getChannelCode()); - assertEquals(templateContent, logDO.getTemplateContent()); - assertEquals(templateParams, logDO.getTemplateParams()); - assertEquals(SmsReceiveStatusEnum.INIT.getStatus(), logDO.getReceiveStatus()); - } - - @Test - public void testUpdateSmsSendResult() { - // mock æ•°æ® - SmsLogDO dbSmsLog = randomSmsLogDO( - o -> o.setSendStatus(SmsSendStatusEnum.IGNORE.getStatus())); - smsLogMapper.insert(dbSmsLog); - // 准备傿•° - Long id = dbSmsLog.getId(); - Boolean success = randomBoolean(); - String apiSendCode = randomString(); - String apiSendMsg = randomString(); - String apiRequestId = randomString(); - String apiSerialNo = randomString(); - - // 调用 - smsLogService.updateSmsSendResult(id, success, - apiSendCode, apiSendMsg, apiRequestId, apiSerialNo); - // 断言 - dbSmsLog = smsLogMapper.selectById(id); - assertEquals(success ? SmsSendStatusEnum.SUCCESS.getStatus() : SmsSendStatusEnum.FAILURE.getStatus(), - dbSmsLog.getSendStatus()); - assertNotNull(dbSmsLog.getSendTime()); - assertEquals(apiSendCode, dbSmsLog.getApiSendCode()); - assertEquals(apiSendMsg, dbSmsLog.getApiSendMsg()); - assertEquals(apiRequestId, dbSmsLog.getApiRequestId()); - assertEquals(apiSerialNo, dbSmsLog.getApiSerialNo()); - } - - @Test - public void testUpdateSmsReceiveResult() { - // mock æ•°æ® - SmsLogDO dbSmsLog = randomSmsLogDO( - o -> o.setReceiveStatus(SmsReceiveStatusEnum.INIT.getStatus())); - smsLogMapper.insert(dbSmsLog); - // 准备傿•° - Long id = dbSmsLog.getId(); - Boolean success = randomBoolean(); - LocalDateTime receiveTime = randomLocalDateTime(); - String apiReceiveCode = randomString(); - String apiReceiveMsg = randomString(); - - // 调用 - smsLogService.updateSmsReceiveResult(id, success, receiveTime, apiReceiveCode, apiReceiveMsg); - // 断言 - dbSmsLog = smsLogMapper.selectById(id); - assertEquals(success ? SmsReceiveStatusEnum.SUCCESS.getStatus() - : SmsReceiveStatusEnum.FAILURE.getStatus(), dbSmsLog.getReceiveStatus()); - assertEquals(receiveTime, dbSmsLog.getReceiveTime()); - assertEquals(apiReceiveCode, dbSmsLog.getApiReceiveCode()); - assertEquals(apiReceiveMsg, dbSmsLog.getApiReceiveMsg()); - } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static SmsLogDO randomSmsLogDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setTemplateParams(randomTemplateParams()); - o.setTemplateType(randomEle(SmsTemplateTypeEnum.values()).getType()); // ä¿è¯ templateType 的范围 - o.setUserType(randomEle(UserTypeEnum.values()).getValue()); // ä¿è¯ userType 的范围 - o.setSendStatus(randomEle(SmsSendStatusEnum.values()).getStatus()); // ä¿è¯ sendStatus 的范围 - o.setReceiveStatus(randomEle(SmsReceiveStatusEnum.values()).getStatus()); // ä¿è¯ receiveStatus 的范围 - }; - return randomPojo(SmsLogDO.class, ArrayUtils.append(consumer, consumers)); - } - - private static Map randomTemplateParams() { - return MapUtil.builder().put(randomString(), randomString()) - .put(randomString(), randomString()).build(); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImplTest.java deleted file mode 100644 index 487c6f7..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImplTest.java +++ /dev/null @@ -1,298 +0,0 @@ -package cn.iocoder.yudao.module.system.service.sms; - -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.common.core.KeyValue; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.module.system.framework.sms.core.client.SmsClient; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsSendRespDTO; -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; -import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; -import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; -import cn.iocoder.yudao.module.system.service.member.MemberService; -import cn.iocoder.yudao.module.system.service.user.AdminUserService; -import org.assertj.core.util.Lists; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - -public class SmsSendServiceImplTest extends BaseMockitoUnitTest { - - @InjectMocks - private SmsSendServiceImpl smsSendService; - - @Mock - private AdminUserService adminUserService; - @Mock - private MemberService memberService; - @Mock - private SmsChannelService smsChannelService; - @Mock - private SmsTemplateService smsTemplateService; - @Mock - private SmsLogService smsLogService; - @Mock - private SmsProducer smsProducer; - - @Test - public void testSendSingleSmsToAdmin() { - // 准备傿•° - Long userId = randomLongId(); - String templateCode = randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock adminUserService 的方法 - AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setMobile("15601691300")); - when(adminUserService.getUser(eq(userId))).thenReturn(user); - - // mock SmsTemplateService 的方法 - SmsTemplateDO template = randomPojo(SmsTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(smsTemplateService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - String content = randomString(); - when(smsTemplateService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams))) - .thenReturn(content); - // mock SmsChannelService 的方法 - SmsChannelDO smsChannel = randomPojo(SmsChannelDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(smsChannelService.getSmsChannel(eq(template.getChannelId()))).thenReturn(smsChannel); - // mock SmsLogService 的方法 - Long smsLogId = randomLongId(); - when(smsLogService.createSmsLog(eq(user.getMobile()), eq(userId), eq(UserTypeEnum.ADMIN.getValue()), eq(Boolean.TRUE), eq(template), - eq(content), eq(templateParams))).thenReturn(smsLogId); - - // 调用 - Long resultSmsLogId = smsSendService.sendSingleSmsToAdmin(null, userId, templateCode, templateParams); - // 断言 - assertEquals(smsLogId, resultSmsLogId); - // 断言调用 - verify(smsProducer).sendSmsSendMessage(eq(smsLogId), eq(user.getMobile()), - eq(template.getChannelId()), eq(template.getApiTemplateId()), - eq(Lists.newArrayList(new KeyValue<>("code", "1234"), new KeyValue<>("op", "login")))); - } - - @Test - public void testSendSingleSmsToUser() { - // 准备傿•° - Long userId = randomLongId(); - String templateCode = randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock memberService 的方法 - String mobile = "15601691300"; - when(memberService.getMemberUserMobile(eq(userId))).thenReturn(mobile); - - // mock SmsTemplateService 的方法 - SmsTemplateDO template = randomPojo(SmsTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(smsTemplateService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - String content = randomString(); - when(smsTemplateService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams))) - .thenReturn(content); - // mock SmsChannelService 的方法 - SmsChannelDO smsChannel = randomPojo(SmsChannelDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(smsChannelService.getSmsChannel(eq(template.getChannelId()))).thenReturn(smsChannel); - // mock SmsLogService 的方法 - Long smsLogId = randomLongId(); - when(smsLogService.createSmsLog(eq(mobile), eq(userId), eq(UserTypeEnum.MEMBER.getValue()), eq(Boolean.TRUE), eq(template), - eq(content), eq(templateParams))).thenReturn(smsLogId); - - // 调用 - Long resultSmsLogId = smsSendService.sendSingleSmsToMember(null, userId, templateCode, templateParams); - // 断言 - assertEquals(smsLogId, resultSmsLogId); - // 断言调用 - verify(smsProducer).sendSmsSendMessage(eq(smsLogId), eq(mobile), - eq(template.getChannelId()), eq(template.getApiTemplateId()), - eq(Lists.newArrayList(new KeyValue<>("code", "1234"), new KeyValue<>("op", "login")))); - } - - /** - * å‘逿ˆåŠŸï¼Œå½“çŸ­ä¿¡æ¨¡æ¿å¼€å¯æ—¶ - */ - @Test - public void testSendSingleSms_successWhenSmsTemplateEnable() { - // 准备傿•° - String mobile = randomString(); - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String templateCode = randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock SmsTemplateService 的方法 - SmsTemplateDO template = randomPojo(SmsTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(smsTemplateService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - String content = randomString(); - when(smsTemplateService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams))) - .thenReturn(content); - // mock SmsChannelService 的方法 - SmsChannelDO smsChannel = randomPojo(SmsChannelDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(smsChannelService.getSmsChannel(eq(template.getChannelId()))).thenReturn(smsChannel); - // mock SmsLogService 的方法 - Long smsLogId = randomLongId(); - when(smsLogService.createSmsLog(eq(mobile), eq(userId), eq(userType), eq(Boolean.TRUE), eq(template), - eq(content), eq(templateParams))).thenReturn(smsLogId); - - // 调用 - Long resultSmsLogId = smsSendService.sendSingleSms(mobile, userId, userType, templateCode, templateParams); - // 断言 - assertEquals(smsLogId, resultSmsLogId); - // 断言调用 - verify(smsProducer).sendSmsSendMessage(eq(smsLogId), eq(mobile), - eq(template.getChannelId()), eq(template.getApiTemplateId()), - eq(Lists.newArrayList(new KeyValue<>("code", "1234"), new KeyValue<>("op", "login")))); - } - - /** - * å‘逿ˆåŠŸï¼Œå½“çŸ­ä¿¡æ¨¡æ¿å…³é—­æ—¶ - */ - @Test - public void testSendSingleSms_successWhenSmsTemplateDisable() { - // 准备傿•° - String mobile = randomString(); - Long userId = randomLongId(); - Integer userType = randomEle(UserTypeEnum.values()).getValue(); - String templateCode = randomString(); - Map templateParams = MapUtil.builder().put("code", "1234") - .put("op", "login").build(); - // mock SmsTemplateService 的方法 - SmsTemplateDO template = randomPojo(SmsTemplateDO.class, o -> { - o.setStatus(CommonStatusEnum.DISABLE.getStatus()); - o.setContent("验è¯ç ä¸º{code}, æ“作为{op}"); - o.setParams(Lists.newArrayList("code", "op")); - }); - when(smsTemplateService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); - String content = randomString(); - when(smsTemplateService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams))) - .thenReturn(content); - // mock SmsChannelService 的方法 - SmsChannelDO smsChannel = randomPojo(SmsChannelDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - when(smsChannelService.getSmsChannel(eq(template.getChannelId()))).thenReturn(smsChannel); - // mock SmsLogService 的方法 - Long smsLogId = randomLongId(); - when(smsLogService.createSmsLog(eq(mobile), eq(userId), eq(userType), eq(Boolean.FALSE), eq(template), - eq(content), eq(templateParams))).thenReturn(smsLogId); - - // 调用 - Long resultSmsLogId = smsSendService.sendSingleSms(mobile, userId, userType, templateCode, templateParams); - // 断言 - assertEquals(smsLogId, resultSmsLogId); - // 断言调用 - verify(smsProducer, times(0)).sendSmsSendMessage(anyLong(), anyString(), - anyLong(), any(), anyList()); - } - - @Test - public void testCheckSmsTemplateValid_notExists() { - // 准备傿•° - String templateCode = randomString(); - // mock 方法 - - // 调用,并断言异常 - assertServiceException(() -> smsSendService.validateSmsTemplate(templateCode), - SMS_SEND_TEMPLATE_NOT_EXISTS); - } - - @Test - public void testBuildTemplateParams_paramMiss() { - // 准备傿•° - SmsTemplateDO template = randomPojo(SmsTemplateDO.class, - o -> o.setParams(Lists.newArrayList("code"))); - Map templateParams = new HashMap<>(); - // mock 方法 - - // 调用,并断言异常 - assertServiceException(() -> smsSendService.buildTemplateParams(template, templateParams), - SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS, "code"); - } - - @Test - public void testCheckMobile_notExists() { - // 准备傿•° - // mock 方法 - - // 调用,并断言异常 - assertServiceException(() -> smsSendService.validateMobile(null), - SMS_SEND_MOBILE_NOT_EXISTS); - } - - @Test - public void testSendBatchNotify() { - // 准备傿•° - // mock 方法 - - // 调用 - UnsupportedOperationException exception = Assertions.assertThrows( - UnsupportedOperationException.class, - () -> smsSendService.sendBatchSms(null, null, null, null, null) - ); - // 断言 - assertEquals("æš‚æ—¶ä¸æ”¯æŒè¯¥æ“作,感兴趣å¯ä»¥å®žçŽ°è¯¥åŠŸèƒ½å“Ÿï¼", exception.getMessage()); - } - - @Test - @SuppressWarnings("unchecked") - public void testDoSendSms() throws Throwable { - // 准备傿•° - SmsSendMessage message = randomPojo(SmsSendMessage.class); - // mock SmsClientFactory 的方法 - SmsClient smsClient = spy(SmsClient.class); - when(smsChannelService.getSmsClient(eq(message.getChannelId()))).thenReturn(smsClient); - // mock SmsClient 的方法 - SmsSendRespDTO sendResult = randomPojo(SmsSendRespDTO.class); - when(smsClient.sendSms(eq(message.getLogId()), eq(message.getMobile()), eq(message.getApiTemplateId()), - eq(message.getTemplateParams()))).thenReturn(sendResult); - - // 调用 - smsSendService.doSendSms(message); - // 断言 - verify(smsLogService).updateSmsSendResult(eq(message.getLogId()), - eq(sendResult.getSuccess()), eq(sendResult.getApiCode()), - eq(sendResult.getApiMsg()), eq(sendResult.getApiRequestId()), eq(sendResult.getSerialNo())); - } - - @Test - public void testReceiveSmsStatus() throws Throwable { - // 准备傿•° - String channelCode = randomString(); - String text = randomString(); - // mock SmsClientFactory 的方法 - SmsClient smsClient = spy(SmsClient.class); - when(smsChannelService.getSmsClient(eq(channelCode))).thenReturn(smsClient); - // mock SmsClient 的方法 - List receiveResults = randomPojoList(SmsReceiveRespDTO.class); - - // 调用 - smsSendService.receiveSmsStatus(channelCode, text); - // 断言 - receiveResults.forEach(result -> smsLogService.updateSmsReceiveResult(eq(result.getLogId()), eq(result.getSuccess()), - eq(result.getReceiveTime()), eq(result.getErrorCode()), eq(result.getErrorCode()))); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImplTest.java deleted file mode 100644 index 22f737d..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsTemplateServiceImplTest.java +++ /dev/null @@ -1,348 +0,0 @@ -package cn.iocoder.yudao.module.system.service.sms; - -import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import cn.iocoder.yudao.module.system.framework.sms.core.client.SmsClient; -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; -import cn.iocoder.yudao.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTemplateSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; -import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsTemplateMapper; -import cn.iocoder.yudao.module.system.enums.sms.SmsTemplateTypeEnum; -import com.google.common.collect.Lists; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.List; -import java.util.Map; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -@Import(SmsTemplateServiceImpl.class) -public class SmsTemplateServiceImplTest extends BaseDbUnitTest { - - @Resource - private SmsTemplateServiceImpl smsTemplateService; - - @Resource - private SmsTemplateMapper smsTemplateMapper; - - @MockBean - private SmsChannelService smsChannelService; - @MockBean - private SmsClient smsClient; - - @Test - public void testFormatSmsTemplateContent() { - // 准备傿•° - String content = "正在进行登录æ“作{operation},您的验è¯ç æ˜¯{code}"; - Map params = MapUtil.builder("operation", "登录") - .put("code", "1234").build(); - - // 调用 - String result = smsTemplateService.formatSmsTemplateContent(content, params); - // 断言 - assertEquals("正在进行登录æ“作登录,您的验è¯ç æ˜¯1234", result); - } - - @Test - public void testParseTemplateContentParams() { - // 准备傿•° - String content = "正在进行登录æ“作{operation},您的验è¯ç æ˜¯{code}"; - // mock 方法 - - // 调用 - List params = smsTemplateService.parseTemplateContentParams(content); - // 断言 - assertEquals(Lists.newArrayList("operation", "code"), params); - } - - @Test - @SuppressWarnings("unchecked") - public void testCreateSmsTemplate_success() throws Throwable { - // 准备傿•° - SmsTemplateSaveReqVO reqVO = randomPojo(SmsTemplateSaveReqVO.class, o -> { - o.setContent("正在进行登录æ“作{operation},您的验è¯ç æ˜¯{code}"); - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setType(randomEle(SmsTemplateTypeEnum.values()).getType()); // ä¿è¯ type çš„ 范围 - }).setId(null); // 防止 id 被赋值 - // mock Channel 的方法 - SmsChannelDO channelDO = randomPojo(SmsChannelDO.class, o -> { - o.setId(reqVO.getChannelId()); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // ä¿è¯ status å¼€å¯ï¼Œåˆ›å»ºå¿…é¡»å¤„äºŽè¿™ä¸ªçŠ¶æ€ - }); - when(smsChannelService.getSmsChannel(eq(channelDO.getId()))).thenReturn(channelDO); - // mock 获得 API çŸ­ä¿¡æ¨¡æ¿æˆåŠŸ - when(smsChannelService.getSmsClient(eq(reqVO.getChannelId()))).thenReturn(smsClient); - when(smsClient.getSmsTemplate(eq(reqVO.getApiTemplateId()))).thenReturn( - randomPojo(SmsTemplateRespDTO.class, o -> o.setAuditStatus(SmsTemplateAuditStatusEnum.SUCCESS.getStatus()))); - - // 调用 - Long smsTemplateId = smsTemplateService.createSmsTemplate(reqVO); - // 断言 - assertNotNull(smsTemplateId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SmsTemplateDO smsTemplate = smsTemplateMapper.selectById(smsTemplateId); - assertPojoEquals(reqVO, smsTemplate, "id"); - assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams()); - assertEquals(channelDO.getCode(), smsTemplate.getChannelCode()); - } - - @Test - @SuppressWarnings("unchecked") - public void testUpdateSmsTemplate_success() throws Throwable { - // mock æ•°æ® - SmsTemplateDO dbSmsTemplate = randomSmsTemplateDO(); - smsTemplateMapper.insert(dbSmsTemplate);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - SmsTemplateSaveReqVO reqVO = randomPojo(SmsTemplateSaveReqVO.class, o -> { - o.setId(dbSmsTemplate.getId()); // 设置更新的 ID - o.setContent("正在进行登录æ“作{operation},您的验è¯ç æ˜¯{code}"); - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setType(randomEle(SmsTemplateTypeEnum.values()).getType()); // ä¿è¯ type çš„ 范围 - }); - // mock 方法 - SmsChannelDO channelDO = randomPojo(SmsChannelDO.class, o -> { - o.setId(reqVO.getChannelId()); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // ä¿è¯ status å¼€å¯ï¼Œåˆ›å»ºå¿…é¡»å¤„äºŽè¿™ä¸ªçŠ¶æ€ - }); - when(smsChannelService.getSmsChannel(eq(channelDO.getId()))).thenReturn(channelDO); - // mock 获得 API çŸ­ä¿¡æ¨¡æ¿æˆåŠŸ - when(smsChannelService.getSmsClient(eq(reqVO.getChannelId()))).thenReturn(smsClient); - when(smsClient.getSmsTemplate(eq(reqVO.getApiTemplateId()))).thenReturn( - randomPojo(SmsTemplateRespDTO.class, o -> o.setAuditStatus(SmsTemplateAuditStatusEnum.SUCCESS.getStatus()))); - - // 调用 - smsTemplateService.updateSmsTemplate(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - SmsTemplateDO smsTemplate = smsTemplateMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, smsTemplate); - assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams()); - assertEquals(channelDO.getCode(), smsTemplate.getChannelCode()); - } - - @Test - public void testUpdateSmsTemplate_notExists() { - // 准备傿•° - SmsTemplateSaveReqVO reqVO = randomPojo(SmsTemplateSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> smsTemplateService.updateSmsTemplate(reqVO), SMS_TEMPLATE_NOT_EXISTS); - } - - @Test - public void testDeleteSmsTemplate_success() { - // mock æ•°æ® - SmsTemplateDO dbSmsTemplate = randomSmsTemplateDO(); - smsTemplateMapper.insert(dbSmsTemplate);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbSmsTemplate.getId(); - - // 调用 - smsTemplateService.deleteSmsTemplate(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(smsTemplateMapper.selectById(id)); - } - - @Test - public void testDeleteSmsTemplate_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> smsTemplateService.deleteSmsTemplate(id), SMS_TEMPLATE_NOT_EXISTS); - } - - @Test - public void testGetSmsTemplate() { - // mock æ•°æ® - SmsTemplateDO dbSmsTemplate = randomSmsTemplateDO(); - smsTemplateMapper.insert(dbSmsTemplate);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbSmsTemplate.getId(); - - // 调用 - SmsTemplateDO smsTemplate = smsTemplateService.getSmsTemplate(id); - // 校验 - assertPojoEquals(dbSmsTemplate, smsTemplate); - } - - @Test - public void testGetSmsTemplateByCodeFromCache() { - // mock æ•°æ® - SmsTemplateDO dbSmsTemplate = randomSmsTemplateDO(); - smsTemplateMapper.insert(dbSmsTemplate);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - String code = dbSmsTemplate.getCode(); - - // 调用 - SmsTemplateDO smsTemplate = smsTemplateService.getSmsTemplateByCodeFromCache(code); - // 校验 - assertPojoEquals(dbSmsTemplate, smsTemplate); - } - - @Test - public void testGetSmsTemplatePage() { - // mock æ•°æ® - SmsTemplateDO dbSmsTemplate = randomPojo(SmsTemplateDO.class, o -> { // 等会查询到 - o.setType(SmsTemplateTypeEnum.PROMOTION.getType()); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setCode("tudou"); - o.setContent("èŠ‹é“æºç "); - o.setApiTemplateId("yunai"); - o.setChannelId(1L); - o.setCreateTime(buildTime(2021, 11, 11)); - }); - smsTemplateMapper.insert(dbSmsTemplate); - // 测试 type ä¸åŒ¹é… - smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setType(SmsTemplateTypeEnum.VERIFICATION_CODE.getType()))); - // 测试 status ä¸åŒ¹é… - smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 code ä¸åŒ¹é… - smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setCode("yuanma"))); - // 测试 content ä¸åŒ¹é… - smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setContent("æºç "))); - // 测试 apiTemplateId ä¸åŒ¹é… - smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setApiTemplateId("nai"))); - // 测试 channelId ä¸åŒ¹é… - smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setChannelId(2L))); - // 测试 createTime ä¸åŒ¹é… - smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setCreateTime(buildTime(2021, 12, 12)))); - // 准备傿•° - SmsTemplatePageReqVO reqVO = new SmsTemplatePageReqVO(); - reqVO.setType(SmsTemplateTypeEnum.PROMOTION.getType()); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setCode("tu"); - reqVO.setContent("芋é“"); - reqVO.setApiTemplateId("yu"); - reqVO.setChannelId(1L); - reqVO.setCreateTime(buildBetweenTime(2021, 11, 1, 2021, 12, 1)); - - // 调用 - PageResult pageResult = smsTemplateService.getSmsTemplatePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbSmsTemplate, pageResult.getList().get(0)); - } - - @Test - public void testGetSmsTemplateCountByChannelId() { - // mock æ•°æ® - SmsTemplateDO dbSmsTemplate = randomPojo(SmsTemplateDO.class, o -> o.setChannelId(1L)); - smsTemplateMapper.insert(dbSmsTemplate); - // 测试 channelId ä¸åŒ¹é… - smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate, o -> o.setChannelId(2L))); - // 准备傿•° - Long channelId = 1L; - - // 调用 - Long count = smsTemplateService.getSmsTemplateCountByChannelId(channelId); - // 断言 - assertEquals(1, count); - } - - @Test - public void testValidateSmsChannel_success() { - // 准备傿•° - Long channelId = randomLongId(); - // mock 方法 - SmsChannelDO channelDO = randomPojo(SmsChannelDO.class, o -> { - o.setId(channelId); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // ä¿è¯ status å¼€å¯ï¼Œåˆ›å»ºå¿…é¡»å¤„äºŽè¿™ä¸ªçŠ¶æ€ - }); - when(smsChannelService.getSmsChannel(eq(channelId))).thenReturn(channelDO); - - // 调用 - SmsChannelDO returnChannelDO = smsTemplateService.validateSmsChannel(channelId); - // 断言 - assertPojoEquals(returnChannelDO, channelDO); - } - - @Test - public void testValidateSmsChannel_notExists() { - // 准备傿•° - Long channelId = randomLongId(); - - // 调用,校验异常 - assertServiceException(() -> smsTemplateService.validateSmsChannel(channelId), - SMS_CHANNEL_NOT_EXISTS); - } - - @Test - public void testValidateSmsChannel_disable() { - // 准备傿•° - Long channelId = randomLongId(); - // mock 方法 - SmsChannelDO channelDO = randomPojo(SmsChannelDO.class, o -> { - o.setId(channelId); - o.setStatus(CommonStatusEnum.DISABLE.getStatus()); // ä¿è¯ status ç¦ç”¨ï¼Œè§¦å‘失败 - }); - when(smsChannelService.getSmsChannel(eq(channelId))).thenReturn(channelDO); - - // 调用,校验异常 - assertServiceException(() -> smsTemplateService.validateSmsChannel(channelId), - SMS_CHANNEL_DISABLE); - } - - @Test - public void testValidateDictDataValueUnique_success() { - // 调用,æˆåŠŸ - smsTemplateService.validateSmsTemplateCodeDuplicate(randomLongId(), randomString()); - } - - @Test - public void testValidateSmsTemplateCodeDuplicate_valueDuplicateForCreate() { - // 准备傿•° - String code = randomString(); - // mock æ•°æ® - smsTemplateMapper.insert(randomSmsTemplateDO(o -> o.setCode(code))); - - // 调用,校验异常 - assertServiceException(() -> smsTemplateService.validateSmsTemplateCodeDuplicate(null, code), - SMS_TEMPLATE_CODE_DUPLICATE, code); - } - - @Test - public void testValidateDictDataValueUnique_valueDuplicateForUpdate() { - // 准备傿•° - Long id = randomLongId(); - String code = randomString(); - // mock æ•°æ® - smsTemplateMapper.insert(randomSmsTemplateDO(o -> o.setCode(code))); - - // 调用,校验异常 - assertServiceException(() -> smsTemplateService.validateSmsTemplateCodeDuplicate(id, code), - SMS_TEMPLATE_CODE_DUPLICATE, code); - } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static SmsTemplateDO randomSmsTemplateDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setType(randomEle(SmsTemplateTypeEnum.values()).getType()); // ä¿è¯ type çš„ 范围 - }; - return randomPojo(SmsTemplateDO.class, ArrayUtils.append(consumer, consumers)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImplTest.java deleted file mode 100644 index 5d75e88..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImplTest.java +++ /dev/null @@ -1,471 +0,0 @@ -package cn.iocoder.yudao.module.system.service.social; - -import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.api.WxMaUserService; -import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; -import cn.hutool.core.util.ReflectUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO; -import cn.iocoder.yudao.module.system.dal.mysql.social.SocialClientMapper; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import cn.iocoder.yudao.module.system.framework.justauth.core.AuthRequestFactory; -import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties; -import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties; -import jakarta.annotation.Resource; -import me.chanjar.weixin.common.bean.WxJsapiSignature; -import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.mp.api.WxMpService; -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.model.AuthResponse; -import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.request.AuthDefaultRequest; -import me.zhyd.oauth.request.AuthRequest; -import me.zhyd.oauth.utils.AuthStateUtils; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; -import org.springframework.data.redis.core.StringRedisTemplate; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -/** - * {@link SocialClientServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(SocialClientServiceImpl.class) -public class SocialClientServiceImplTest extends BaseDbUnitTest { - - @Resource - private SocialClientServiceImpl socialClientService; - - @Resource - private SocialClientMapper socialClientMapper; - - @MockBean - private AuthRequestFactory authRequestFactory; - - @MockBean - private WxMpService wxMpService; - @MockBean - private WxMpProperties wxMpProperties; - @MockBean - private StringRedisTemplate stringRedisTemplate; - @MockBean - private WxMaService wxMaService; - @MockBean - private WxMaProperties wxMaProperties; - - @Test - public void testGetAuthorizeUrl() { - try (MockedStatic authStateUtilsMock = mockStatic(AuthStateUtils.class)) { - // 准备傿•° - Integer socialType = SocialTypeEnum.WECHAT_MP.getType(); - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - String redirectUri = "sss"; - // mock 获得对应的 AuthRequest 实现 - AuthRequest authRequest = mock(AuthRequest.class); - when(authRequestFactory.get(eq("WECHAT_MP"))).thenReturn(authRequest); - // mock 方法 - authStateUtilsMock.when(AuthStateUtils::createState).thenReturn("aoteman"); - when(authRequest.authorize(eq("aoteman"))).thenReturn("https://www.iocoder.cn?redirect_uri=yyy"); - - // 调用 - String url = socialClientService.getAuthorizeUrl(socialType, userType, redirectUri); - // 断言 - assertEquals("https://www.iocoder.cn?redirect_uri=sss", url); - } - } - - @Test - public void testAuthSocialUser_success() { - // 准备傿•° - Integer socialType = SocialTypeEnum.WECHAT_MP.getType(); - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - String code = randomString(); - String state = randomString(); - // mock 方法(AuthRequest) - AuthRequest authRequest = mock(AuthRequest.class); - when(authRequestFactory.get(eq("WECHAT_MP"))).thenReturn(authRequest); - // mock 方法(AuthResponse) - AuthUser authUser = randomPojo(AuthUser.class); - AuthResponse authResponse = new AuthResponse<>(2000, null, authUser); - when(authRequest.login(argThat(authCallback -> { - assertEquals(code, authCallback.getCode()); - assertEquals(state, authCallback.getState()); - return true; - }))).thenReturn(authResponse); - - // 调用 - AuthUser result = socialClientService.getAuthUser(socialType, userType, code, state); - // 断言 - assertSame(authUser, result); - } - - @Test - public void testAuthSocialUser_fail() { - // 准备傿•° - Integer socialType = SocialTypeEnum.WECHAT_MP.getType(); - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - String code = randomString(); - String state = randomString(); - // mock 方法(AuthRequest) - AuthRequest authRequest = mock(AuthRequest.class); - when(authRequestFactory.get(eq("WECHAT_MP"))).thenReturn(authRequest); - // mock 方法(AuthResponse) - AuthResponse authResponse = new AuthResponse<>(0, "模拟失败", null); - when(authRequest.login(argThat(authCallback -> { - assertEquals(code, authCallback.getCode()); - assertEquals(state, authCallback.getState()); - return true; - }))).thenReturn(authResponse); - - // 调用并断言 - assertServiceException( - () -> socialClientService.getAuthUser(socialType, userType, code, state), - SOCIAL_USER_AUTH_FAILURE, "模拟失败"); - } - - @Test - public void testBuildAuthRequest_clientNull() { - // 准备傿•° - Integer socialType = SocialTypeEnum.WECHAT_MP.getType(); - Integer userType = randomPojo(SocialTypeEnum.class).getType(); - // mock 获得对应的 AuthRequest 实现 - AuthRequest authRequest = mock(AuthDefaultRequest.class); - AuthConfig authConfig = (AuthConfig) ReflectUtil.getFieldValue(authRequest, "config"); - when(authRequestFactory.get(eq("WECHAT_MP"))).thenReturn(authRequest); - - // 调用 - AuthRequest result = socialClientService.buildAuthRequest(socialType, userType); - // 断言 - assertSame(authRequest, result); - assertSame(authConfig, ReflectUtil.getFieldValue(authConfig, "config")); - } - - @Test - public void testBuildAuthRequest_clientDisable() { - // 准备傿•° - Integer socialType = SocialTypeEnum.WECHAT_MP.getType(); - Integer userType = randomPojo(SocialTypeEnum.class).getType(); - // mock 获得对应的 AuthRequest 实现 - AuthRequest authRequest = mock(AuthDefaultRequest.class); - AuthConfig authConfig = (AuthConfig) ReflectUtil.getFieldValue(authRequest, "config"); - when(authRequestFactory.get(eq("WECHAT_MP"))).thenReturn(authRequest); - // mock æ•°æ® - SocialClientDO client = randomPojo(SocialClientDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()) - .setUserType(userType).setSocialType(socialType)); - socialClientMapper.insert(client); - - // 调用 - AuthRequest result = socialClientService.buildAuthRequest(socialType, userType); - // 断言 - assertSame(authRequest, result); - assertSame(authConfig, ReflectUtil.getFieldValue(authConfig, "config")); - } - - @Test - public void testBuildAuthRequest_clientEnable() { - // 准备傿•° - Integer socialType = SocialTypeEnum.WECHAT_MP.getType(); - Integer userType = randomPojo(SocialTypeEnum.class).getType(); - // mock 获得对应的 AuthRequest 实现 - AuthConfig authConfig = mock(AuthConfig.class); - AuthRequest authRequest = mock(AuthDefaultRequest.class); - ReflectUtil.setFieldValue(authRequest, "config", authConfig); - when(authRequestFactory.get(eq("WECHAT_MP"))).thenReturn(authRequest); - // mock æ•°æ® - SocialClientDO client = randomPojo(SocialClientDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()) - .setUserType(userType).setSocialType(socialType)); - socialClientMapper.insert(client); - - // 调用 - AuthRequest result = socialClientService.buildAuthRequest(socialType, userType); - // 断言 - assertSame(authRequest, result); - assertNotSame(authConfig, ReflectUtil.getFieldValue(authRequest, "config")); - } - - // =================== 微信公众å·ç‹¬æœ‰ =================== - - @Test - public void testCreateWxMpJsapiSignature() throws WxErrorException { - // 准备傿•° - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - String url = randomString(); - // mock 方法 - WxJsapiSignature signature = randomPojo(WxJsapiSignature.class); - when(wxMpService.createJsapiSignature(eq(url))).thenReturn(signature); - - // 调用 - WxJsapiSignature result = socialClientService.createWxMpJsapiSignature(userType, url); - // 断言 - assertSame(signature, result); - } - - @Test - public void testGetWxMpService_clientNull() { - // 准备傿•° - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - // mock 方法 - - // 调用 - WxMpService result = socialClientService.getWxMpService(userType); - // 断言 - assertSame(wxMpService, result); - } - - @Test - public void testGetWxMpService_clientDisable() { - // 准备傿•° - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - // mock æ•°æ® - SocialClientDO client = randomPojo(SocialClientDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()) - .setUserType(userType).setSocialType(SocialTypeEnum.WECHAT_MP.getType())); - socialClientMapper.insert(client); - - // 调用 - WxMpService result = socialClientService.getWxMpService(userType); - // 断言 - assertSame(wxMpService, result); - } - - @Test - public void testGetWxMpService_clientEnable() { - // 准备傿•° - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - // mock æ•°æ® - SocialClientDO client = randomPojo(SocialClientDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()) - .setUserType(userType).setSocialType(SocialTypeEnum.WECHAT_MP.getType())); - socialClientMapper.insert(client); - // mock 方法 - WxMpProperties.ConfigStorage configStorage = mock(WxMpProperties.ConfigStorage.class); - when(wxMpProperties.getConfigStorage()).thenReturn(configStorage); - - // 调用 - WxMpService result = socialClientService.getWxMpService(userType); - // 断言 - assertNotSame(wxMpService, result); - assertEquals(client.getClientId(), result.getWxMpConfigStorage().getAppId()); - assertEquals(client.getClientSecret(), result.getWxMpConfigStorage().getSecret()); - } - - // =================== 微信å°ç¨‹åºç‹¬æœ‰ =================== - - @Test - public void testGetWxMaPhoneNumberInfo_success() throws WxErrorException { - // 准备傿•° - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - String phoneCode = randomString(); - // mock 方法 - WxMaUserService userService = mock(WxMaUserService.class); - when(wxMaService.getUserService()).thenReturn(userService); - WxMaPhoneNumberInfo phoneNumber = randomPojo(WxMaPhoneNumberInfo.class); - when(userService.getPhoneNumber(eq(phoneCode))).thenReturn(phoneNumber); - - // 调用 - WxMaPhoneNumberInfo result = socialClientService.getWxMaPhoneNumberInfo(userType, phoneCode); - // 断言 - assertSame(phoneNumber, result); - } - - @Test - public void testGetWxMaPhoneNumberInfo_exception() throws WxErrorException { - // 准备傿•° - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - String phoneCode = randomString(); - // mock 方法 - WxMaUserService userService = mock(WxMaUserService.class); - when(wxMaService.getUserService()).thenReturn(userService); - WxErrorException wxErrorException = new WxErrorException(new NullPointerException()); - when(userService.getPhoneNumber(eq(phoneCode))).thenThrow(wxErrorException); - - // 调用并断言异常 - assertServiceException(() -> socialClientService.getWxMaPhoneNumberInfo(userType, phoneCode), - SOCIAL_CLIENT_WEIXIN_MINI_APP_PHONE_CODE_ERROR); - } - - @Test - public void testGetWxMaService_clientNull() { - // 准备傿•° - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - // mock 方法 - - // 调用 - WxMaService result = socialClientService.getWxMaService(userType); - // 断言 - assertSame(wxMaService, result); - } - - @Test - public void testGetWxMaService_clientDisable() { - // 准备傿•° - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - // mock æ•°æ® - SocialClientDO client = randomPojo(SocialClientDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()) - .setUserType(userType).setSocialType(SocialTypeEnum.WECHAT_MINI_PROGRAM.getType())); - socialClientMapper.insert(client); - - // 调用 - WxMaService result = socialClientService.getWxMaService(userType); - // 断言 - assertSame(wxMaService, result); - } - - @Test - public void testGetWxMaService_clientEnable() { - // 准备傿•° - Integer userType = randomPojo(UserTypeEnum.class).getValue(); - // mock æ•°æ® - SocialClientDO client = randomPojo(SocialClientDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()) - .setUserType(userType).setSocialType(SocialTypeEnum.WECHAT_MINI_PROGRAM.getType())); - socialClientMapper.insert(client); - // mock 方法 - WxMaProperties.ConfigStorage configStorage = mock(WxMaProperties.ConfigStorage.class); - when(wxMaProperties.getConfigStorage()).thenReturn(configStorage); - - // 调用 - WxMaService result = socialClientService.getWxMaService(userType); - // 断言 - assertNotSame(wxMaService, result); - assertEquals(client.getClientId(), result.getWxMaConfig().getAppid()); - assertEquals(client.getClientSecret(), result.getWxMaConfig().getSecret()); - } - - // =================== å®¢æˆ·ç«¯ç®¡ç† =================== - - @Test - public void testCreateSocialClient_success() { - // 准备傿•° - SocialClientSaveReqVO reqVO = randomPojo(SocialClientSaveReqVO.class, - o -> o.setSocialType(randomEle(SocialTypeEnum.values()).getType()) - .setUserType(randomEle(UserTypeEnum.values()).getValue()) - .setStatus(randomCommonStatus())) - .setId(null); // 防止 id 被赋值 - - // 调用 - Long socialClientId = socialClientService.createSocialClient(reqVO); - // 断言 - assertNotNull(socialClientId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - SocialClientDO socialClient = socialClientMapper.selectById(socialClientId); - assertPojoEquals(reqVO, socialClient, "id"); - } - - @Test - public void testUpdateSocialClient_success() { - // mock æ•°æ® - SocialClientDO dbSocialClient = randomPojo(SocialClientDO.class); - socialClientMapper.insert(dbSocialClient);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - SocialClientSaveReqVO reqVO = randomPojo(SocialClientSaveReqVO.class, o -> { - o.setId(dbSocialClient.getId()); // 设置更新的 ID - o.setSocialType(randomEle(SocialTypeEnum.values()).getType()) - .setUserType(randomEle(UserTypeEnum.values()).getValue()) - .setStatus(randomCommonStatus()); - }); - - // 调用 - socialClientService.updateSocialClient(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - SocialClientDO socialClient = socialClientMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, socialClient); - } - - @Test - public void testUpdateSocialClient_notExists() { - // 准备傿•° - SocialClientSaveReqVO reqVO = randomPojo(SocialClientSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> socialClientService.updateSocialClient(reqVO), SOCIAL_CLIENT_NOT_EXISTS); - } - - @Test - public void testDeleteSocialClient_success() { - // mock æ•°æ® - SocialClientDO dbSocialClient = randomPojo(SocialClientDO.class); - socialClientMapper.insert(dbSocialClient);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbSocialClient.getId(); - - // 调用 - socialClientService.deleteSocialClient(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(socialClientMapper.selectById(id)); - } - - @Test - public void testDeleteSocialClient_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> socialClientService.deleteSocialClient(id), SOCIAL_CLIENT_NOT_EXISTS); - } - - @Test - public void testGetSocialClient() { - // mock æ•°æ® - SocialClientDO dbSocialClient = randomPojo(SocialClientDO.class); - socialClientMapper.insert(dbSocialClient);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbSocialClient.getId(); - - // 调用 - SocialClientDO socialClient = socialClientService.getSocialClient(id); - // æ ¡éªŒæ•°æ®æ­£ç¡® - assertPojoEquals(dbSocialClient, socialClient); - } - - @Test - public void testGetSocialClientPage() { - // mock æ•°æ® - SocialClientDO dbSocialClient = randomPojo(SocialClientDO.class, o -> { // 等会查询到 - o.setName("芋头"); - o.setSocialType(SocialTypeEnum.GITEE.getType()); - o.setUserType(UserTypeEnum.ADMIN.getValue()); - o.setClientId("yudao"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); - socialClientMapper.insert(dbSocialClient); - // 测试 name ä¸åŒ¹é… - socialClientMapper.insert(cloneIgnoreId(dbSocialClient, o -> o.setName(randomString()))); - // 测试 socialType ä¸åŒ¹é… - socialClientMapper.insert(cloneIgnoreId(dbSocialClient, o -> o.setSocialType(SocialTypeEnum.DINGTALK.getType()))); - // 测试 userType ä¸åŒ¹é… - socialClientMapper.insert(cloneIgnoreId(dbSocialClient, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); - // 测试 clientId ä¸åŒ¹é… - socialClientMapper.insert(cloneIgnoreId(dbSocialClient, o -> o.setClientId("dao"))); - // 测试 status ä¸åŒ¹é… - socialClientMapper.insert(cloneIgnoreId(dbSocialClient, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 准备傿•° - SocialClientPageReqVO reqVO = new SocialClientPageReqVO(); - reqVO.setName("芋"); - reqVO.setSocialType(SocialTypeEnum.GITEE.getType()); - reqVO.setUserType(UserTypeEnum.ADMIN.getValue()); - reqVO.setClientId("yu"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - - // 调用 - PageResult pageResult = socialClientService.getSocialClientPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbSocialClient, pageResult.getList().get(0)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java deleted file mode 100644 index 8416415..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java +++ /dev/null @@ -1,288 +0,0 @@ -package cn.iocoder.yudao.module.system.service.social; - -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; -import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; -import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO; -import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; -import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserBindMapper; -import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserMapper; -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; -import jakarta.annotation.Resource; -import me.zhyd.oauth.model.AuthUser; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import java.util.List; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.hutool.core.util.RandomUtil.randomLong; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_NOT_FOUND; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.when; - -/** - * {@link SocialUserServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(SocialUserServiceImpl.class) -public class SocialUserServiceImplTest extends BaseDbUnitTest { - - @Resource - private SocialUserServiceImpl socialUserService; - - @Resource - private SocialUserMapper socialUserMapper; - @Resource - private SocialUserBindMapper socialUserBindMapper; - - @MockBean - private SocialClientService socialClientService; - - @Test - public void testGetSocialUserList() { - Long userId = 1L; - Integer userType = UserTypeEnum.ADMIN.getValue(); - // mock 获得社交用户 - SocialUserDO socialUser = randomPojo(SocialUserDO.class).setType(SocialTypeEnum.GITEE.getType()); - socialUserMapper.insert(socialUser); // å¯è¢«æŸ¥åˆ° - socialUserMapper.insert(randomPojo(SocialUserDO.class)); // ä¸å¯è¢«æŸ¥åˆ° - // mock 获得绑定 - socialUserBindMapper.insert(randomPojo(SocialUserBindDO.class) // å¯è¢«æŸ¥è¯¢åˆ° - .setUserId(userId).setUserType(userType).setSocialType(SocialTypeEnum.GITEE.getType()) - .setSocialUserId(socialUser.getId())); - socialUserBindMapper.insert(randomPojo(SocialUserBindDO.class) // ä¸å¯è¢«æŸ¥è¯¢åˆ° - .setUserId(2L).setUserType(userType).setSocialType(SocialTypeEnum.DINGTALK.getType())); - - // 调用 - List result = socialUserService.getSocialUserList(userId, userType); - // 断言 - assertEquals(1, result.size()); - assertPojoEquals(socialUser, result.get(0)); - } - - @Test - public void testBindSocialUser() { - // 准备傿•° - SocialUserBindReqDTO reqDTO = new SocialUserBindReqDTO() - .setUserId(1L).setUserType(UserTypeEnum.ADMIN.getValue()) - .setSocialType(SocialTypeEnum.GITEE.getType()).setCode("test_code").setState("test_state"); - // mock æ•°æ®ï¼šèŽ·å¾—ç¤¾äº¤ç”¨æˆ· - SocialUserDO socialUser = randomPojo(SocialUserDO.class).setType(reqDTO.getSocialType()) - .setCode(reqDTO.getCode()).setState(reqDTO.getState()); - socialUserMapper.insert(socialUser); - // mock æ•°æ®ï¼šç”¨æˆ·å¯èƒ½ä¹‹å‰å·²ç»ç»‘定过该社交类型 - socialUserBindMapper.insert(randomPojo(SocialUserBindDO.class).setUserId(1L).setUserType(UserTypeEnum.ADMIN.getValue()) - .setSocialType(SocialTypeEnum.GITEE.getType()).setSocialUserId(-1L)); - // mock æ•°æ®ï¼šç¤¾äº¤ç”¨æˆ·å¯èƒ½ä¹‹å‰ç»‘定过别的用户 - socialUserBindMapper.insert(randomPojo(SocialUserBindDO.class).setUserType(UserTypeEnum.ADMIN.getValue()) - .setSocialType(SocialTypeEnum.GITEE.getType()).setSocialUserId(socialUser.getId())); - - // 调用 - String openid = socialUserService.bindSocialUser(reqDTO); - // 断言 - List socialUserBinds = socialUserBindMapper.selectList(); - assertEquals(1, socialUserBinds.size()); - assertEquals(socialUser.getOpenid(), openid); - } - - @Test - public void testUnbindSocialUser_success() { - // 准备傿•° - Long userId = 1L; - Integer userType = UserTypeEnum.ADMIN.getValue(); - Integer type = SocialTypeEnum.GITEE.getType(); - String openid = "test_openid"; - // mock æ•°æ®ï¼šç¤¾äº¤ç”¨æˆ· - SocialUserDO socialUser = randomPojo(SocialUserDO.class).setType(type).setOpenid(openid); - socialUserMapper.insert(socialUser); - // mock æ•°æ®ï¼šç¤¾äº¤ç»‘定关系 - SocialUserBindDO socialUserBind = randomPojo(SocialUserBindDO.class).setUserType(userType) - .setUserId(userId).setSocialType(type); - socialUserBindMapper.insert(socialUserBind); - - // 调用 - socialUserService.unbindSocialUser(userId, userType, type, openid); - // 断言 - assertEquals(0, socialUserBindMapper.selectCount(null).intValue()); - } - - @Test - public void testUnbindSocialUser_notFound() { - // 调用,并断言 - assertServiceException( - () -> socialUserService.unbindSocialUser(randomLong(), UserTypeEnum.ADMIN.getValue(), - SocialTypeEnum.GITEE.getType(), "test_openid"), - SOCIAL_USER_NOT_FOUND); - } - - @Test - public void testGetSocialUser() { - // 准备傿•° - Integer userType = UserTypeEnum.ADMIN.getValue(); - Integer type = SocialTypeEnum.GITEE.getType(); - String code = "tudou"; - String state = "yuanma"; - // mock 社交用户 - SocialUserDO socialUserDO = randomPojo(SocialUserDO.class).setType(type).setCode(code).setState(state); - socialUserMapper.insert(socialUserDO); - // mock 社交用户的绑定 - Long userId = randomLong(); - SocialUserBindDO socialUserBind = randomPojo(SocialUserBindDO.class).setUserType(userType).setUserId(userId) - .setSocialType(type).setSocialUserId(socialUserDO.getId()); - socialUserBindMapper.insert(socialUserBind); - - // 调用 - SocialUserRespDTO socialUser = socialUserService.getSocialUserByCode(userType, type, code, state); - // 断言 - assertEquals(userId, socialUser.getUserId()); - assertEquals(socialUserDO.getOpenid(), socialUser.getOpenid()); - } - - @Test - public void testAuthSocialUser_exists() { - // 准备傿•° - Integer socialType = SocialTypeEnum.GITEE.getType(); - Integer userType = randomEle(SocialTypeEnum.values()).getType(); - String code = "tudou"; - String state = "yuanma"; - // mock 方法 - SocialUserDO socialUser = randomPojo(SocialUserDO.class).setType(socialType).setCode(code).setState(state); - socialUserMapper.insert(socialUser); - - // 调用 - SocialUserDO result = socialUserService.authSocialUser(socialType, userType, code, state); - // 断言 - assertPojoEquals(socialUser, result); - } - - @Test - public void testAuthSocialUser_notNull() { - // mock æ•°æ® - SocialUserDO socialUser = randomPojo(SocialUserDO.class, - o -> o.setType(SocialTypeEnum.GITEE.getType()).setCode("tudou").setState("yuanma")); - socialUserMapper.insert(socialUser); - // 准备傿•° - Integer socialType = SocialTypeEnum.GITEE.getType(); - Integer userType = randomEle(SocialTypeEnum.values()).getType(); - String code = "tudou"; - String state = "yuanma"; - - // 调用 - SocialUserDO result = socialUserService.authSocialUser(socialType, userType, code, state); - // 断言 - assertPojoEquals(socialUser, result); - } - - @Test - public void testAuthSocialUser_insert() { - // 准备傿•° - Integer socialType = SocialTypeEnum.GITEE.getType(); - Integer userType = randomEle(SocialTypeEnum.values()).getType(); - String code = "tudou"; - String state = "yuanma"; - // mock 方法 - AuthUser authUser = randomPojo(AuthUser.class); - when(socialClientService.getAuthUser(eq(socialType), eq(userType), eq(code), eq(state))).thenReturn(authUser); - - // 调用 - SocialUserDO result = socialUserService.authSocialUser(socialType, userType, code, state); - // 断言 - assertBindSocialUser(socialType, result, authUser); - assertEquals(code, result.getCode()); - assertEquals(state, result.getState()); - } - - @Test - public void testAuthSocialUser_update() { - // 准备傿•° - Integer socialType = SocialTypeEnum.GITEE.getType(); - Integer userType = randomEle(SocialTypeEnum.values()).getType(); - String code = "tudou"; - String state = "yuanma"; - // mock æ•°æ® - socialUserMapper.insert(randomPojo(SocialUserDO.class).setType(socialType).setOpenid("test_openid")); - // mock 方法 - AuthUser authUser = randomPojo(AuthUser.class); - when(socialClientService.getAuthUser(eq(socialType), eq(userType), eq(code), eq(state))).thenReturn(authUser); - - // 调用 - SocialUserDO result = socialUserService.authSocialUser(socialType, userType, code, state); - // 断言 - assertBindSocialUser(socialType, result, authUser); - assertEquals(code, result.getCode()); - assertEquals(state, result.getState()); - } - - private void assertBindSocialUser(Integer type, SocialUserDO socialUser, AuthUser authUser) { - assertEquals(authUser.getToken().getAccessToken(), socialUser.getToken()); - assertEquals(toJsonString(authUser.getToken()), socialUser.getRawTokenInfo()); - assertEquals(authUser.getNickname(), socialUser.getNickname()); - assertEquals(authUser.getAvatar(), socialUser.getAvatar()); - assertEquals(toJsonString(authUser.getRawUserInfo()), socialUser.getRawUserInfo()); - assertEquals(type, socialUser.getType()); - assertEquals(authUser.getUuid(), socialUser.getOpenid()); - } - - @Test - public void testGetSocialUser_id() { - // mock æ•°æ® - SocialUserDO socialUserDO = randomPojo(SocialUserDO.class); - socialUserMapper.insert(socialUserDO); - // 傿•°å‡†å¤‡ - Long id = socialUserDO.getId(); - - // 调用 - SocialUserDO dbSocialUserDO = socialUserService.getSocialUser(id); - // 断言 - assertPojoEquals(socialUserDO, dbSocialUserDO); - } - - @Test - public void testGetSocialUserPage() { - // mock æ•°æ® - SocialUserDO dbSocialUser = randomPojo(SocialUserDO.class, o -> { // 等会查询到 - o.setType(SocialTypeEnum.GITEE.getType()); - o.setNickname("芋艿"); - o.setOpenid("yudaoyuanma"); - o.setCreateTime(buildTime(2020, 1, 15)); - }); - socialUserMapper.insert(dbSocialUser); - // 测试 type ä¸åŒ¹é… - socialUserMapper.insert(cloneIgnoreId(dbSocialUser, o -> o.setType(SocialTypeEnum.DINGTALK.getType()))); - // 测试 nickname ä¸åŒ¹é… - socialUserMapper.insert(cloneIgnoreId(dbSocialUser, o -> o.setNickname(randomString()))); - // 测试 openid ä¸åŒ¹é… - socialUserMapper.insert(cloneIgnoreId(dbSocialUser, o -> o.setOpenid("java"))); - // 测试 createTime ä¸åŒ¹é… - socialUserMapper.insert(cloneIgnoreId(dbSocialUser, o -> o.setCreateTime(buildTime(2020, 1, 21)))); - // 准备傿•° - SocialUserPageReqVO reqVO = new SocialUserPageReqVO(); - reqVO.setType(SocialTypeEnum.GITEE.getType()); - reqVO.setNickname("芋"); - reqVO.setOpenid("yudao"); - reqVO.setCreateTime(buildBetweenTime(2020, 1, 10, 2020, 1, 20)); - - // 调用 - PageResult pageResult = socialUserService.getSocialUserPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbSocialUser, pageResult.getList().get(0)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageServiceImplTest.java deleted file mode 100644 index 0e030f3..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantPackageServiceImplTest.java +++ /dev/null @@ -1,236 +0,0 @@ -package cn.iocoder.yudao.module.system.service.tenant; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.packages.TenantPackagePageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.packages.TenantPackageSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantPackageDO; -import cn.iocoder.yudao.module.system.dal.mysql.tenant.TenantPackageMapper; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static java.util.Arrays.asList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -/** -* {@link TenantPackageServiceImpl} çš„å•元测试类 -* -* @author èŠ‹é“æºç  -*/ -@Import(TenantPackageServiceImpl.class) -public class TenantPackageServiceImplTest extends BaseDbUnitTest { - - @Resource - private TenantPackageServiceImpl tenantPackageService; - - @Resource - private TenantPackageMapper tenantPackageMapper; - - @MockBean - private TenantService tenantService; - - @Test - public void testCreateTenantPackage_success() { - // 准备傿•° - TenantPackageSaveReqVO reqVO = randomPojo(TenantPackageSaveReqVO.class, - o -> o.setStatus(randomCommonStatus())) - .setId(null); // 防止 id 被赋值 - - // 调用 - Long tenantPackageId = tenantPackageService.createTenantPackage(reqVO); - // 断言 - assertNotNull(tenantPackageId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - TenantPackageDO tenantPackage = tenantPackageMapper.selectById(tenantPackageId); - assertPojoEquals(reqVO, tenantPackage, "id"); - } - - @Test - public void testUpdateTenantPackage_success() { - // mock æ•°æ® - TenantPackageDO dbTenantPackage = randomPojo(TenantPackageDO.class, - o -> o.setStatus(randomCommonStatus())); - tenantPackageMapper.insert(dbTenantPackage);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - TenantPackageSaveReqVO reqVO = randomPojo(TenantPackageSaveReqVO.class, o -> { - o.setId(dbTenantPackage.getId()); // 设置更新的 ID - o.setStatus(randomCommonStatus()); - }); - // mock 方法 - Long tenantId01 = randomLongId(); - Long tenantId02 = randomLongId(); - when(tenantService.getTenantListByPackageId(eq(reqVO.getId()))).thenReturn( - asList(randomPojo(TenantDO.class, o -> o.setId(tenantId01)), - randomPojo(TenantDO.class, o -> o.setId(tenantId02)))); - - // 调用 - tenantPackageService.updateTenantPackage(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - TenantPackageDO tenantPackage = tenantPackageMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, tenantPackage); - // 校验调用租户的èœå• - verify(tenantService).updateTenantRoleMenu(eq(tenantId01), eq(reqVO.getMenuIds())); - verify(tenantService).updateTenantRoleMenu(eq(tenantId02), eq(reqVO.getMenuIds())); - } - - @Test - public void testUpdateTenantPackage_notExists() { - // 准备傿•° - TenantPackageSaveReqVO reqVO = randomPojo(TenantPackageSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> tenantPackageService.updateTenantPackage(reqVO), TENANT_PACKAGE_NOT_EXISTS); - } - - @Test - public void testDeleteTenantPackage_success() { - // mock æ•°æ® - TenantPackageDO dbTenantPackage = randomPojo(TenantPackageDO.class); - tenantPackageMapper.insert(dbTenantPackage);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbTenantPackage.getId(); - // mock ç§Ÿæˆ·æœªä½¿ç”¨è¯¥å¥—é¤ - when(tenantService.getTenantCountByPackageId(eq(id))).thenReturn(0L); - - // 调用 - tenantPackageService.deleteTenantPackage(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(tenantPackageMapper.selectById(id)); - } - - @Test - public void testDeleteTenantPackage_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> tenantPackageService.deleteTenantPackage(id), TENANT_PACKAGE_NOT_EXISTS); - } - - @Test - public void testDeleteTenantPackage_used() { - // mock æ•°æ® - TenantPackageDO dbTenantPackage = randomPojo(TenantPackageDO.class); - tenantPackageMapper.insert(dbTenantPackage);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbTenantPackage.getId(); - // mock ç§Ÿæˆ·åœ¨ä½¿ç”¨è¯¥å¥—é¤ - when(tenantService.getTenantCountByPackageId(eq(id))).thenReturn(1L); - - // 调用, 并断言异常 - assertServiceException(() -> tenantPackageService.deleteTenantPackage(id), TENANT_PACKAGE_USED); - } - - @Test - public void testGetTenantPackagePage() { - // mock æ•°æ® - TenantPackageDO dbTenantPackage = randomPojo(TenantPackageDO.class, o -> { // 等会查询到 - o.setName("èŠ‹é“æºç "); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setRemark("æºç è§£æž"); - o.setCreateTime(buildTime(2022, 10, 10)); - }); - tenantPackageMapper.insert(dbTenantPackage); - // 测试 name ä¸åŒ¹é… - tenantPackageMapper.insert(cloneIgnoreId(dbTenantPackage, o -> o.setName("æºç "))); - // 测试 status ä¸åŒ¹é… - tenantPackageMapper.insert(cloneIgnoreId(dbTenantPackage, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 remark ä¸åŒ¹é… - tenantPackageMapper.insert(cloneIgnoreId(dbTenantPackage, o -> o.setRemark("è§£æž"))); - // 测试 createTime ä¸åŒ¹é… - tenantPackageMapper.insert(cloneIgnoreId(dbTenantPackage, o -> o.setCreateTime(buildTime(2022, 11, 11)))); - // 准备傿•° - TenantPackagePageReqVO reqVO = new TenantPackagePageReqVO(); - reqVO.setName("芋é“"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setRemark("æºç "); - reqVO.setCreateTime(buildBetweenTime(2022, 10, 9, 2022, 10, 11)); - - // 调用 - PageResult pageResult = tenantPackageService.getTenantPackagePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbTenantPackage, pageResult.getList().get(0)); - } - - @Test - public void testValidTenantPackage_success() { - // mock æ•°æ® - TenantPackageDO dbTenantPackage = randomPojo(TenantPackageDO.class, - o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - tenantPackageMapper.insert(dbTenantPackage);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用 - TenantPackageDO result = tenantPackageService.validTenantPackage(dbTenantPackage.getId()); - // 断言 - assertPojoEquals(dbTenantPackage, result); - } - - @Test - public void testValidTenantPackage_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> tenantPackageService.validTenantPackage(id), TENANT_PACKAGE_NOT_EXISTS); - } - - @Test - public void testValidTenantPackage_disable() { - // mock æ•°æ® - TenantPackageDO dbTenantPackage = randomPojo(TenantPackageDO.class, - o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); - tenantPackageMapper.insert(dbTenantPackage);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用, 并断言异常 - assertServiceException(() -> tenantPackageService.validTenantPackage(dbTenantPackage.getId()), - TENANT_PACKAGE_DISABLE, dbTenantPackage.getName()); - } - - @Test - public void testGetTenantPackage() { - // mock æ•°æ® - TenantPackageDO dbTenantPackage = randomPojo(TenantPackageDO.class); - tenantPackageMapper.insert(dbTenantPackage);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用 - TenantPackageDO result = tenantPackageService.getTenantPackage(dbTenantPackage.getId()); - // 断言 - assertPojoEquals(result, dbTenantPackage); - } - - @Test - public void testGetTenantPackageListByStatus() { - // mock æ•°æ® - TenantPackageDO dbTenantPackage = randomPojo(TenantPackageDO.class, - o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); - tenantPackageMapper.insert(dbTenantPackage); - // 测试 status ä¸åŒ¹é… - tenantPackageMapper.insert(cloneIgnoreId(dbTenantPackage, - o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - - // 调用 - List list = tenantPackageService.getTenantPackageListByStatus( - CommonStatusEnum.ENABLE.getStatus()); - assertEquals(1, list.size()); - assertPojoEquals(dbTenantPackage, list.get(0)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java deleted file mode 100644 index f4d4f86..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java +++ /dev/null @@ -1,458 +0,0 @@ -package cn.iocoder.yudao.module.system.service.tenant; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.tenant.config.TenantProperties; -import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; -import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantPackageDO; -import cn.iocoder.yudao.module.system.dal.mysql.tenant.TenantMapper; -import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum; -import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum; -import cn.iocoder.yudao.module.system.service.permission.MenuService; -import cn.iocoder.yudao.module.system.service.permission.PermissionService; -import cn.iocoder.yudao.module.system.service.permission.RoleService; -import cn.iocoder.yudao.module.system.service.tenant.handler.TenantInfoHandler; -import cn.iocoder.yudao.module.system.service.tenant.handler.TenantMenuHandler; -import cn.iocoder.yudao.module.system.service.user.AdminUserService; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import jakarta.annotation.Resource; -import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO.PACKAGE_ID_SYSTEM; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static java.util.Arrays.asList; -import static java.util.Collections.singleton; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -/** - * {@link TenantServiceImpl} çš„å•元测试类 - * - * @author èŠ‹é“æºç  - */ -@Import(TenantServiceImpl.class) -public class TenantServiceImplTest extends BaseDbUnitTest { - - @Resource - private TenantServiceImpl tenantService; - - @Resource - private TenantMapper tenantMapper; - - @MockBean - private TenantProperties tenantProperties; - @MockBean - private TenantPackageService tenantPackageService; - @MockBean - private AdminUserService userService; - @MockBean - private RoleService roleService; - @MockBean - private MenuService menuService; - @MockBean - private PermissionService permissionService; - - @BeforeEach - public void setUp() { - // 清ç†ç§Ÿæˆ·ä¸Šä¸‹æ–‡ - TenantContextHolder.clear(); - } - - @Test - public void testGetTenantIdList() { - // mock æ•°æ® - TenantDO tenant = randomPojo(TenantDO.class, o -> o.setId(1L)); - tenantMapper.insert(tenant); - - // 调用,并断言业务异常 - List result = tenantService.getTenantIdList(); - assertEquals(Collections.singletonList(1L), result); - } - - @Test - public void testValidTenant_notExists() { - assertServiceException(() -> tenantService.validTenant(randomLongId()), TENANT_NOT_EXISTS); - } - - @Test - public void testValidTenant_disable() { - // mock æ•°æ® - TenantDO tenant = randomPojo(TenantDO.class, o -> o.setId(1L).setStatus(CommonStatusEnum.DISABLE.getStatus())); - tenantMapper.insert(tenant); - - // 调用,并断言业务异常 - assertServiceException(() -> tenantService.validTenant(1L), TENANT_DISABLE, tenant.getName()); - } - - @Test - public void testValidTenant_expired() { - // mock æ•°æ® - TenantDO tenant = randomPojo(TenantDO.class, o -> o.setId(1L).setStatus(CommonStatusEnum.ENABLE.getStatus()) - .setExpireTime(buildTime(2020, 2, 2))); - tenantMapper.insert(tenant); - - // 调用,并断言业务异常 - assertServiceException(() -> tenantService.validTenant(1L), TENANT_EXPIRE, tenant.getName()); - } - - @Test - public void testValidTenant_success() { - // mock æ•°æ® - TenantDO tenant = randomPojo(TenantDO.class, o -> o.setId(1L).setStatus(CommonStatusEnum.ENABLE.getStatus()) - .setExpireTime(LocalDateTime.now().plusDays(1))); - tenantMapper.insert(tenant); - - // 调用,并断言业务异常 - tenantService.validTenant(1L); - } - - @Test - public void testCreateTenant() { - // mock å¥—é¤ 100L - TenantPackageDO tenantPackage = randomPojo(TenantPackageDO.class, o -> o.setId(100L)); - when(tenantPackageService.validTenantPackage(eq(100L))).thenReturn(tenantPackage); - // mock 角色 200L - when(roleService.createRole(argThat(role -> { - assertEquals(RoleCodeEnum.TENANT_ADMIN.getName(), role.getName()); - assertEquals(RoleCodeEnum.TENANT_ADMIN.getCode(), role.getCode()); - assertEquals(0, role.getSort()); - assertEquals("系统自动生æˆ", role.getRemark()); - return true; - }), eq(RoleTypeEnum.SYSTEM.getType()))).thenReturn(200L); - // mock 用户 300L - when(userService.createUser(argThat(user -> { - assertEquals("yunai", user.getUsername()); - assertEquals("yuanma", user.getPassword()); - assertEquals("芋é“", user.getNickname()); - assertEquals("15601691300", user.getMobile()); - return true; - }))).thenReturn(300L); - - // 准备傿•° - TenantSaveReqVO reqVO = randomPojo(TenantSaveReqVO.class, o -> { - o.setContactName("芋é“"); - o.setContactMobile("15601691300"); - o.setPackageId(100L); - o.setStatus(randomCommonStatus()); - o.setWebsite("https://www.iocoder.cn"); - o.setUsername("yunai"); - o.setPassword("yuanma"); - }).setId(null); // 设置为 null,方便åŽé¢æ ¡éªŒ - - // 调用 - Long tenantId = tenantService.createTenant(reqVO); - // 断言 - assertNotNull(tenantId); - // æ ¡éªŒè®°å½•çš„å±žæ€§æ˜¯å¦æ­£ç¡® - TenantDO tenant = tenantMapper.selectById(tenantId); - assertPojoEquals(reqVO, tenant, "id"); - assertEquals(300L, tenant.getContactUserId()); - // verify åˆ†é…æƒé™ - verify(permissionService).assignRoleMenu(eq(200L), same(tenantPackage.getMenuIds())); - // verify 分é…角色 - verify(permissionService).assignUserRole(eq(300L), eq(singleton(200L))); - } - - @Test - public void testUpdateTenant_success() { - // mock æ•°æ® - TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setStatus(randomCommonStatus())); - tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - TenantSaveReqVO reqVO = randomPojo(TenantSaveReqVO.class, o -> { - o.setId(dbTenant.getId()); // 设置更新的 ID - o.setStatus(randomCommonStatus()); - o.setWebsite(randomString()); - }); - - // mock å¥—é¤ - TenantPackageDO tenantPackage = randomPojo(TenantPackageDO.class, - o -> o.setMenuIds(asSet(200L, 201L))); - when(tenantPackageService.validTenantPackage(eq(reqVO.getPackageId()))).thenReturn(tenantPackage); - // mock 所有角色 - RoleDO role100 = randomPojo(RoleDO.class, o -> o.setId(100L).setCode(RoleCodeEnum.TENANT_ADMIN.getCode())); - role100.setTenantId(dbTenant.getId()); - RoleDO role101 = randomPojo(RoleDO.class, o -> o.setId(101L)); - role101.setTenantId(dbTenant.getId()); - when(roleService.getRoleList()).thenReturn(asList(role100, role101)); - // mock æ¯ä¸ªè§’色的æƒé™ - when(permissionService.getRoleMenuListByRoleId(eq(101L))).thenReturn(asSet(201L, 202L)); - - // 调用 - tenantService.updateTenant(reqVO); - // æ ¡éªŒæ˜¯å¦æ›´æ–°æ­£ç¡® - TenantDO tenant = tenantMapper.selectById(reqVO.getId()); // èŽ·å–æœ€æ–°çš„ - assertPojoEquals(reqVO, tenant); - // verify 设置角色æƒé™ - verify(permissionService).assignRoleMenu(eq(100L), eq(asSet(200L, 201L))); - verify(permissionService).assignRoleMenu(eq(101L), eq(asSet(201L))); - } - - @Test - public void testUpdateTenant_notExists() { - // 准备傿•° - TenantSaveReqVO reqVO = randomPojo(TenantSaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> tenantService.updateTenant(reqVO), TENANT_NOT_EXISTS); - } - - @Test - public void testUpdateTenant_system() { - // mock æ•°æ® - TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(PACKAGE_ID_SYSTEM)); - tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - TenantSaveReqVO reqVO = randomPojo(TenantSaveReqVO.class, o -> { - o.setId(dbTenant.getId()); // 设置更新的 ID - }); - - // 调用,校验业务异常 - assertServiceException(() -> tenantService.updateTenant(reqVO), TENANT_CAN_NOT_UPDATE_SYSTEM); - } - - @Test - public void testDeleteTenant_success() { - // mock æ•°æ® - TenantDO dbTenant = randomPojo(TenantDO.class, - o -> o.setStatus(randomCommonStatus())); - tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbTenant.getId(); - - // 调用 - tenantService.deleteTenant(id); - // 校验数æ®ä¸å­˜åœ¨äº† - assertNull(tenantMapper.selectById(id)); - } - - @Test - public void testDeleteTenant_notExists() { - // 准备傿•° - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> tenantService.deleteTenant(id), TENANT_NOT_EXISTS); - } - - @Test - public void testDeleteTenant_system() { - // mock æ•°æ® - TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(PACKAGE_ID_SYSTEM)); - tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbTenant.getId(); - - // 调用, 并断言异常 - assertServiceException(() -> tenantService.deleteTenant(id), TENANT_CAN_NOT_UPDATE_SYSTEM); - } - - @Test - public void testGetTenant() { - // mock æ•°æ® - TenantDO dbTenant = randomPojo(TenantDO.class); - tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - // 准备傿•° - Long id = dbTenant.getId(); - - // 调用 - TenantDO result = tenantService.getTenant(id); - // 校验存在 - assertPojoEquals(result, dbTenant); - } - - @Test - public void testGetTenantPage() { - // mock æ•°æ® - TenantDO dbTenant = randomPojo(TenantDO.class, o -> { // 等会查询到 - o.setName("èŠ‹é“æºç "); - o.setContactName("芋艿"); - o.setContactMobile("15601691300"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setCreateTime(buildTime(2020, 12, 12)); - }); - tenantMapper.insert(dbTenant); - // 测试 name ä¸åŒ¹é… - tenantMapper.insert(cloneIgnoreId(dbTenant, o -> o.setName(randomString()))); - // 测试 contactName ä¸åŒ¹é… - tenantMapper.insert(cloneIgnoreId(dbTenant, o -> o.setContactName(randomString()))); - // 测试 contactMobile ä¸åŒ¹é… - tenantMapper.insert(cloneIgnoreId(dbTenant, o -> o.setContactMobile(randomString()))); - // 测试 status ä¸åŒ¹é… - tenantMapper.insert(cloneIgnoreId(dbTenant, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 createTime ä¸åŒ¹é… - tenantMapper.insert(cloneIgnoreId(dbTenant, o -> o.setCreateTime(buildTime(2021, 12, 12)))); - // 准备傿•° - TenantPageReqVO reqVO = new TenantPageReqVO(); - reqVO.setName("芋é“"); - reqVO.setContactName("艿"); - reqVO.setContactMobile("1560"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setCreateTime(buildBetweenTime(2020, 12, 1, 2020, 12, 24)); - - // 调用 - PageResult pageResult = tenantService.getTenantPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbTenant, pageResult.getList().get(0)); - } - - @Test - public void testGetTenantByName() { - // mock æ•°æ® - TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setName("芋é“")); - tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用 - TenantDO result = tenantService.getTenantByName("芋é“"); - // 校验存在 - assertPojoEquals(result, dbTenant); - } - - @Test - public void testGetTenantByWebsite() { - // mock æ•°æ® - TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setWebsite("https://www.iocoder.cn")); - tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用 - TenantDO result = tenantService.getTenantByWebsite("https://www.iocoder.cn"); - // 校验存在 - assertPojoEquals(result, dbTenant); - } - - @Test - public void testGetTenantListByPackageId() { - // mock æ•°æ® - TenantDO dbTenant1 = randomPojo(TenantDO.class, o -> o.setPackageId(1L)); - tenantMapper.insert(dbTenant1);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - TenantDO dbTenant2 = randomPojo(TenantDO.class, o -> o.setPackageId(2L)); - tenantMapper.insert(dbTenant2);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用 - List result = tenantService.getTenantListByPackageId(1L); - assertEquals(1, result.size()); - assertPojoEquals(dbTenant1, result.get(0)); - } - - @Test - public void testGetTenantCountByPackageId() { - // mock æ•°æ® - TenantDO dbTenant1 = randomPojo(TenantDO.class, o -> o.setPackageId(1L)); - tenantMapper.insert(dbTenant1);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - TenantDO dbTenant2 = randomPojo(TenantDO.class, o -> o.setPackageId(2L)); - tenantMapper.insert(dbTenant2);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - - // 调用 - Long count = tenantService.getTenantCountByPackageId(1L); - assertEquals(1, count); - } - - @Test - public void testHandleTenantInfo_disable() { - // 准备傿•° - TenantInfoHandler handler = mock(TenantInfoHandler.class); - // mock ç¦ç”¨ - when(tenantProperties.getEnable()).thenReturn(false); - - // 调用 - tenantService.handleTenantInfo(handler); - // 断言 - verify(handler, never()).handle(any()); - } - - @Test - public void testHandleTenantInfo_success() { - // 准备傿•° - TenantInfoHandler handler = mock(TenantInfoHandler.class); - // mock 未ç¦ç”¨ - when(tenantProperties.getEnable()).thenReturn(true); - // mock 租户 - TenantDO dbTenant = randomPojo(TenantDO.class); - tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - TenantContextHolder.setTenantId(dbTenant.getId()); - - // 调用 - tenantService.handleTenantInfo(handler); - // 断言 - verify(handler).handle(argThat(argument -> { - assertPojoEquals(dbTenant, argument); - return true; - })); - } - - @Test - public void testHandleTenantMenu_disable() { - // 准备傿•° - TenantMenuHandler handler = mock(TenantMenuHandler.class); - // mock ç¦ç”¨ - when(tenantProperties.getEnable()).thenReturn(false); - - // 调用 - tenantService.handleTenantMenu(handler); - // 断言 - verify(handler, never()).handle(any()); - } - - @Test // 系统租户的情况 - public void testHandleTenantMenu_system() { - // 准备傿•° - TenantMenuHandler handler = mock(TenantMenuHandler.class); - // mock 未ç¦ç”¨ - when(tenantProperties.getEnable()).thenReturn(true); - // mock 租户 - TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(PACKAGE_ID_SYSTEM)); - tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - TenantContextHolder.setTenantId(dbTenant.getId()); - // mock èœå• - when(menuService.getMenuList()).thenReturn(Arrays.asList(randomPojo(MenuDO.class, o -> o.setId(100L)), - randomPojo(MenuDO.class, o -> o.setId(101L)))); - - // 调用 - tenantService.handleTenantMenu(handler); - // 断言 - verify(handler).handle(asSet(100L, 101L)); - } - - @Test // 普通租户的情况 - public void testHandleTenantMenu_normal() { - // 准备傿•° - TenantMenuHandler handler = mock(TenantMenuHandler.class); - // mock 未ç¦ç”¨ - when(tenantProperties.getEnable()).thenReturn(true); - // mock 租户 - TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(200L)); - tenantMapper.insert(dbTenant);// @Sql: å…ˆæ’入出一æ¡å­˜åœ¨çš„æ•°æ® - TenantContextHolder.setTenantId(dbTenant.getId()); - // mock èœå• - when(tenantPackageService.getTenantPackage(eq(200L))).thenReturn(randomPojo(TenantPackageDO.class, - o -> o.setMenuIds(asSet(100L, 101L)))); - - // 调用 - tenantService.handleTenantMenu(handler); - // 断言 - verify(handler).handle(asSet(100L, 101L)); - } -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java deleted file mode 100644 index 6256c42..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java +++ /dev/null @@ -1,763 +0,0 @@ -package cn.iocoder.yudao.module.system.service.user; - -import cn.hutool.core.util.RandomUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.exception.ServiceException; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; -import cn.iocoder.yudao.module.infra.api.config.ConfigApi; -import cn.iocoder.yudao.module.infra.api.file.FileApi; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; -import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO; -import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; -import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; -import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper; -import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper; -import cn.iocoder.yudao.module.system.enums.common.SexEnum; -import cn.iocoder.yudao.module.system.service.dept.DeptService; -import cn.iocoder.yudao.module.system.service.dept.PostService; -import cn.iocoder.yudao.module.system.service.permission.PermissionService; -import cn.iocoder.yudao.module.system.service.tenant.TenantService; -import jakarta.annotation.Resource; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.stubbing.Answer; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; -import org.springframework.security.crypto.password.PasswordEncoder; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.function.Consumer; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.module.system.service.user.AdminUserServiceImpl.USER_INIT_PASSWORD_KEY; -import static java.util.Collections.singleton; -import static java.util.Collections.singletonList; -import static org.assertj.core.util.Lists.newArrayList; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -@Import(AdminUserServiceImpl.class) -public class AdminUserServiceImplTest extends BaseDbUnitTest { - - @Resource - private AdminUserServiceImpl userService; - - @Resource - private AdminUserMapper userMapper; - @Resource - private UserPostMapper userPostMapper; - - @MockBean - private DeptService deptService; - @MockBean - private PostService postService; - @MockBean - private PermissionService permissionService; - @MockBean - private PasswordEncoder passwordEncoder; - @MockBean - private TenantService tenantService; - @MockBean - private FileApi fileApi; - @MockBean - private ConfigApi configApi; - - @BeforeEach - public void before() { - // mock åˆå§‹åŒ–å¯†ç  - when(configApi.getConfigValueByKey(USER_INIT_PASSWORD_KEY)).thenReturn("yudaoyuanma"); - } - - @Test - public void testCreatUser_success() { - // 准备傿•° - UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> { - o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); - o.setMobile(randomString()); - o.setPostIds(asSet(1L, 2L)); - }).setId(null); // é¿å… id 被赋值 - // mock 账户é¢åº¦å……è¶³ - TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1)); - doNothing().when(tenantService).handleTenantInfo(argThat(handler -> { - handler.handle(tenant); - return true; - })); - // mock deptService 的方法 - DeptDO dept = randomPojo(DeptDO.class, o -> { - o.setId(reqVO.getDeptId()); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); - when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); - // mock postService 的方法 - List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> - randomPojo(PostDO.class, o -> { - o.setId(postId); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - })); - when(postService.getPostList(eq(reqVO.getPostIds()), isNull())).thenReturn(posts); - // mock passwordEncoder 的方法 - when(passwordEncoder.encode(eq(reqVO.getPassword()))).thenReturn("yudaoyuanma"); - - // 调用 - Long userId = userService.createUser(reqVO); - // 断言 - AdminUserDO user = userMapper.selectById(userId); - assertPojoEquals(reqVO, user, "password", "id"); - assertEquals("yudaoyuanma", user.getPassword()); - assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus()); - // 断言关è”å²—ä½ - List userPosts = userPostMapper.selectListByUserId(user.getId()); - assertEquals(1L, userPosts.get(0).getPostId()); - assertEquals(2L, userPosts.get(1).getPostId()); - } - - @Test - public void testCreatUser_max() { - // 准备傿•° - UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class); - // mock 账户é¢åº¦ä¸è¶³ - TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(-1)); - doNothing().when(tenantService).handleTenantInfo(argThat(handler -> { - handler.handle(tenant); - return true; - })); - - // 调用,并断言异常 - assertServiceException(() -> userService.createUser(reqVO), USER_COUNT_MAX, -1); - } - - @Test - public void testUpdateUser_success() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(o -> o.setPostIds(asSet(1L, 2L))); - userMapper.insert(dbUser); - userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(1L)); - userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(2L)); - // 准备傿•° - UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> { - o.setId(dbUser.getId()); - o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); - o.setMobile(randomString()); - o.setPostIds(asSet(2L, 3L)); - }); - // mock deptService 的方法 - DeptDO dept = randomPojo(DeptDO.class, o -> { - o.setId(reqVO.getDeptId()); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); - when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); - // mock postService 的方法 - List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> - randomPojo(PostDO.class, o -> { - o.setId(postId); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - })); - when(postService.getPostList(eq(reqVO.getPostIds()), isNull())).thenReturn(posts); - - // 调用 - userService.updateUser(reqVO); - // 断言 - AdminUserDO user = userMapper.selectById(reqVO.getId()); - assertPojoEquals(reqVO, user, "password"); - // 断言关è”å²—ä½ - List userPosts = userPostMapper.selectListByUserId(user.getId()); - assertEquals(2L, userPosts.get(0).getPostId()); - assertEquals(3L, userPosts.get(1).getPostId()); - } - - @Test - public void testUpdateUserLogin() { - // mock æ•°æ® - AdminUserDO user = randomAdminUserDO(o -> o.setLoginDate(null)); - userMapper.insert(user); - // 准备傿•° - Long id = user.getId(); - String loginIp = randomString(); - - // 调用 - userService.updateUserLogin(id, loginIp); - // 断言 - AdminUserDO dbUser = userMapper.selectById(id); - assertEquals(loginIp, dbUser.getLoginIp()); - assertNotNull(dbUser.getLoginDate()); - } - - @Test - public void testUpdateUserProfile_success() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(); - userMapper.insert(dbUser); - // 准备傿•° - Long userId = dbUser.getId(); - UserProfileUpdateReqVO reqVO = randomPojo(UserProfileUpdateReqVO.class, o -> { - o.setMobile(randomString()); - o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); - o.setAvatar(randomURL()); - }); - - // 调用 - userService.updateUserProfile(userId, reqVO); - // 断言 - AdminUserDO user = userMapper.selectById(userId); - assertPojoEquals(reqVO, user); - } - - @Test - public void testUpdateUserPassword_success() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(o -> o.setPassword("encode:tudou")); - userMapper.insert(dbUser); - // 准备傿•° - Long userId = dbUser.getId(); - UserProfileUpdatePasswordReqVO reqVO = randomPojo(UserProfileUpdatePasswordReqVO.class, o -> { - o.setOldPassword("tudou"); - o.setNewPassword("yuanma"); - }); - // mock 方法 - when(passwordEncoder.encode(anyString())).then( - (Answer) invocationOnMock -> "encode:" + invocationOnMock.getArgument(0)); - when(passwordEncoder.matches(eq(reqVO.getOldPassword()), eq(dbUser.getPassword()))).thenReturn(true); - - // 调用 - userService.updateUserPassword(userId, reqVO); - // 断言 - AdminUserDO user = userMapper.selectById(userId); - assertEquals("encode:yuanma", user.getPassword()); - } - - @Test - public void testUpdateUserPassword02_success() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(); - userMapper.insert(dbUser); - // 准备傿•° - Long userId = dbUser.getId(); - String password = "yudao"; - // mock 方法 - when(passwordEncoder.encode(anyString())).then( - (Answer) invocationOnMock -> "encode:" + invocationOnMock.getArgument(0)); - - // 调用 - userService.updateUserPassword(userId, password); - // 断言 - AdminUserDO user = userMapper.selectById(userId); - assertEquals("encode:" + password, user.getPassword()); - } - - @Test - public void testUpdateUserStatus() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(); - userMapper.insert(dbUser); - // 准备傿•° - Long userId = dbUser.getId(); - Integer status = randomCommonStatus(); - - // 调用 - userService.updateUserStatus(userId, status); - // 断言 - AdminUserDO user = userMapper.selectById(userId); - assertEquals(status, user.getStatus()); - } - - @Test - public void testDeleteUser_success(){ - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(); - userMapper.insert(dbUser); - // 准备傿•° - Long userId = dbUser.getId(); - - // è°ƒç”¨æ•°æ® - userService.deleteUser(userId); - // 校验结果 - assertNull(userMapper.selectById(userId)); - // 校验调用次数 - verify(permissionService, times(1)).processUserDeleted(eq(userId)); - } - - @Test - public void testGetUserByUsername() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(); - userMapper.insert(dbUser); - // 准备傿•° - String username = dbUser.getUsername(); - - // 调用 - AdminUserDO user = userService.getUserByUsername(username); - // 断言 - assertPojoEquals(dbUser, user); - } - - @Test - public void testGetUserByMobile() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(); - userMapper.insert(dbUser); - // 准备傿•° - String mobile = dbUser.getMobile(); - - // 调用 - AdminUserDO user = userService.getUserByMobile(mobile); - // 断言 - assertPojoEquals(dbUser, user); - } - - @Test - public void testGetUserPage() { - // mock æ•°æ® - AdminUserDO dbUser = initGetUserPageData(); - // 准备傿•° - UserPageReqVO reqVO = new UserPageReqVO(); - reqVO.setUsername("tu"); - reqVO.setMobile("1560"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setCreateTime(buildBetweenTime(2020, 12, 1, 2020, 12, 24)); - reqVO.setDeptId(1L); // 其中,1L 是 2L 的父部门 - // mock 方法 - List deptList = newArrayList(randomPojo(DeptDO.class, o -> o.setId(2L))); - when(deptService.getChildDeptList(eq(reqVO.getDeptId()))).thenReturn(deptList); - - // 调用 - PageResult pageResult = userService.getUserPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbUser, pageResult.getList().get(0)); - } - - /** - * åˆå§‹åŒ– getUserPage æ–¹æ³•çš„æµ‹è¯•æ•°æ® - */ - private AdminUserDO initGetUserPageData() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(o -> { // 等会查询到 - o.setUsername("tudou"); - o.setMobile("15601691300"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setCreateTime(buildTime(2020, 12, 12)); - o.setDeptId(2L); - }); - userMapper.insert(dbUser); - // 测试 username ä¸åŒ¹é… - userMapper.insert(cloneIgnoreId(dbUser, o -> o.setUsername("dou"))); - // 测试 mobile ä¸åŒ¹é… - userMapper.insert(cloneIgnoreId(dbUser, o -> o.setMobile("18818260888"))); - // 测试 status ä¸åŒ¹é… - userMapper.insert(cloneIgnoreId(dbUser, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 createTime ä¸åŒ¹é… - userMapper.insert(cloneIgnoreId(dbUser, o -> o.setCreateTime(buildTime(2020, 11, 11)))); - // 测试 dept ä¸åŒ¹é… - userMapper.insert(cloneIgnoreId(dbUser, o -> o.setDeptId(0L))); - return dbUser; - } - - @Test - public void testGetUser() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(); - userMapper.insert(dbUser); - // 准备傿•° - Long userId = dbUser.getId(); - - // 调用 - AdminUserDO user = userService.getUser(userId); - // 断言 - assertPojoEquals(dbUser, user); - } - - @Test - public void testGetUserListByDeptIds() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(o -> o.setDeptId(1L)); - userMapper.insert(dbUser); - // 测试 deptId ä¸åŒ¹é… - userMapper.insert(cloneIgnoreId(dbUser, o -> o.setDeptId(2L))); - // 准备傿•° - Collection deptIds = singleton(1L); - - // 调用 - List list = userService.getUserListByDeptIds(deptIds); - // 断言 - assertEquals(1, list.size()); - assertEquals(dbUser, list.get(0)); - } - - /** - * 情况一,校验ä¸é€šè¿‡ï¼Œå¯¼è‡´æ’入失败 - */ - @Test - public void testImportUserList_01() { - // 准备傿•° - UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { - o.setEmail(randomEmail()); - o.setMobile(randomMobile()); - }); - // mock 方法,模拟失败 - doThrow(new ServiceException(DEPT_NOT_FOUND)).when(deptService).validateDeptList(any()); - - // 调用 - UserImportRespVO respVO = userService.importUserList(newArrayList(importUser), true); - // 断言 - assertEquals(0, respVO.getCreateUsernames().size()); - assertEquals(0, respVO.getUpdateUsernames().size()); - assertEquals(1, respVO.getFailureUsernames().size()); - assertEquals(DEPT_NOT_FOUND.getMsg(), respVO.getFailureUsernames().get(importUser.getUsername())); - } - - /** - * 情况二,ä¸å­˜åœ¨ï¼Œè¿›è¡Œæ’å…¥ - */ - @Test - public void testImportUserList_02() { - // 准备傿•° - UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setSex(randomEle(SexEnum.values()).getSex()); // ä¿è¯ sex 的范围 - o.setEmail(randomEmail()); - o.setMobile(randomMobile()); - }); - // mock deptService 的方法 - DeptDO dept = randomPojo(DeptDO.class, o -> { - o.setId(importUser.getDeptId()); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); - when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); - // mock passwordEncoder 的方法 - when(passwordEncoder.encode(eq("yudaoyuanma"))).thenReturn("java"); - - // 调用 - UserImportRespVO respVO = userService.importUserList(newArrayList(importUser), true); - // 断言 - assertEquals(1, respVO.getCreateUsernames().size()); - AdminUserDO user = userMapper.selectByUsername(respVO.getCreateUsernames().get(0)); - assertPojoEquals(importUser, user); - assertEquals("java", user.getPassword()); - assertEquals(0, respVO.getUpdateUsernames().size()); - assertEquals(0, respVO.getFailureUsernames().size()); - } - - /** - * 情况三,存在,但是ä¸å¼ºåˆ¶æ›´æ–° - */ - @Test - public void testImportUserList_03() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(); - userMapper.insert(dbUser); - // 准备傿•° - UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setSex(randomEle(SexEnum.values()).getSex()); // ä¿è¯ sex 的范围 - o.setUsername(dbUser.getUsername()); - o.setEmail(randomEmail()); - o.setMobile(randomMobile()); - }); - // mock deptService 的方法 - DeptDO dept = randomPojo(DeptDO.class, o -> { - o.setId(importUser.getDeptId()); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); - when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); - - // 调用 - UserImportRespVO respVO = userService.importUserList(newArrayList(importUser), false); - // 断言 - assertEquals(0, respVO.getCreateUsernames().size()); - assertEquals(0, respVO.getUpdateUsernames().size()); - assertEquals(1, respVO.getFailureUsernames().size()); - assertEquals(USER_USERNAME_EXISTS.getMsg(), respVO.getFailureUsernames().get(importUser.getUsername())); - } - - /** - * 情况四,存在,强制更新 - */ - @Test - public void testImportUserList_04() { - // mock æ•°æ® - AdminUserDO dbUser = randomAdminUserDO(); - userMapper.insert(dbUser); - // 准备傿•° - UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> { - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setSex(randomEle(SexEnum.values()).getSex()); // ä¿è¯ sex 的范围 - o.setUsername(dbUser.getUsername()); - o.setEmail(randomEmail()); - o.setMobile(randomMobile()); - }); - // mock deptService 的方法 - DeptDO dept = randomPojo(DeptDO.class, o -> { - o.setId(importUser.getDeptId()); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); - when(deptService.getDept(eq(dept.getId()))).thenReturn(dept); - - // 调用 - UserImportRespVO respVO = userService.importUserList(newArrayList(importUser), true); - // 断言 - assertEquals(0, respVO.getCreateUsernames().size()); - assertEquals(1, respVO.getUpdateUsernames().size()); - AdminUserDO user = userMapper.selectByUsername(respVO.getUpdateUsernames().get(0)); - assertPojoEquals(importUser, user); - assertEquals(0, respVO.getFailureUsernames().size()); - } - - @Test - public void testValidateUserExists_notExists() { - assertServiceException(() -> userService.validateUserExists(randomLongId()), USER_NOT_EXISTS); - } - - @Test - public void testValidateUsernameUnique_usernameExistsForCreate() { - // 准备傿•° - String username = randomString(); - // mock æ•°æ® - userMapper.insert(randomAdminUserDO(o -> o.setUsername(username))); - - // 调用,校验异常 - assertServiceException(() -> userService.validateUsernameUnique(null, username), - USER_USERNAME_EXISTS); - } - - @Test - public void testValidateUsernameUnique_usernameExistsForUpdate() { - // 准备傿•° - Long id = randomLongId(); - String username = randomString(); - // mock æ•°æ® - userMapper.insert(randomAdminUserDO(o -> o.setUsername(username))); - - // 调用,校验异常 - assertServiceException(() -> userService.validateUsernameUnique(id, username), - USER_USERNAME_EXISTS); - } - - @Test - public void testValidateEmailUnique_emailExistsForCreate() { - // 准备傿•° - String email = randomString(); - // mock æ•°æ® - userMapper.insert(randomAdminUserDO(o -> o.setEmail(email))); - - // 调用,校验异常 - assertServiceException(() -> userService.validateEmailUnique(null, email), - USER_EMAIL_EXISTS); - } - - @Test - public void testValidateEmailUnique_emailExistsForUpdate() { - // 准备傿•° - Long id = randomLongId(); - String email = randomString(); - // mock æ•°æ® - userMapper.insert(randomAdminUserDO(o -> o.setEmail(email))); - - // 调用,校验异常 - assertServiceException(() -> userService.validateEmailUnique(id, email), - USER_EMAIL_EXISTS); - } - - @Test - public void testValidateMobileUnique_mobileExistsForCreate() { - // 准备傿•° - String mobile = randomString(); - // mock æ•°æ® - userMapper.insert(randomAdminUserDO(o -> o.setMobile(mobile))); - - // 调用,校验异常 - assertServiceException(() -> userService.validateMobileUnique(null, mobile), - USER_MOBILE_EXISTS); - } - - @Test - public void testValidateMobileUnique_mobileExistsForUpdate() { - // 准备傿•° - Long id = randomLongId(); - String mobile = randomString(); - // mock æ•°æ® - userMapper.insert(randomAdminUserDO(o -> o.setMobile(mobile))); - - // 调用,校验异常 - assertServiceException(() -> userService.validateMobileUnique(id, mobile), - USER_MOBILE_EXISTS); - } - - @Test - public void testValidateOldPassword_notExists() { - assertServiceException(() -> userService.validateOldPassword(randomLongId(), randomString()), - USER_NOT_EXISTS); - } - - @Test - public void testValidateOldPassword_passwordFailed() { - // mock æ•°æ® - AdminUserDO user = randomAdminUserDO(); - userMapper.insert(user); - // 准备傿•° - Long id = user.getId(); - String oldPassword = user.getPassword(); - - // 调用,校验异常 - assertServiceException(() -> userService.validateOldPassword(id, oldPassword), - USER_PASSWORD_FAILED); - // 校验调用 - verify(passwordEncoder, times(1)).matches(eq(oldPassword), eq(user.getPassword())); - } - - @Test - public void testUserListByPostIds() { - // 准备傿•° - Collection postIds = asSet(10L, 20L); - // mock user1 æ•°æ® - AdminUserDO user1 = randomAdminUserDO(o -> o.setPostIds(asSet(10L, 30L))); - userMapper.insert(user1); - userPostMapper.insert(new UserPostDO().setUserId(user1.getId()).setPostId(10L)); - userPostMapper.insert(new UserPostDO().setUserId(user1.getId()).setPostId(30L)); - // mock user2 æ•°æ® - AdminUserDO user2 = randomAdminUserDO(o -> o.setPostIds(singleton(100L))); - userMapper.insert(user2); - userPostMapper.insert(new UserPostDO().setUserId(user2.getId()).setPostId(100L)); - - // 调用 - List result = userService.getUserListByPostIds(postIds); - // 断言 - assertEquals(1, result.size()); - assertEquals(user1, result.get(0)); - } - - @Test - public void testGetUserList() { - // mock æ•°æ® - AdminUserDO user = randomAdminUserDO(); - userMapper.insert(user); - // 测试 id ä¸åŒ¹é… - userMapper.insert(randomAdminUserDO()); - // 准备傿•° - Collection ids = singleton(user.getId()); - - // 调用 - List result = userService.getUserList(ids); - // 断言 - assertEquals(1, result.size()); - assertEquals(user, result.get(0)); - } - - @Test - public void testGetUserMap() { - // mock æ•°æ® - AdminUserDO user = randomAdminUserDO(); - userMapper.insert(user); - // 测试 id ä¸åŒ¹é… - userMapper.insert(randomAdminUserDO()); - // 准备傿•° - Collection ids = singleton(user.getId()); - - // 调用 - Map result = userService.getUserMap(ids); - // 断言 - assertEquals(1, result.size()); - assertEquals(user, result.get(user.getId())); - } - - @Test - public void testGetUserListByNickname() { - // mock æ•°æ® - AdminUserDO user = randomAdminUserDO(o -> o.setNickname("芋头")); - userMapper.insert(user); - // 测试 nickname ä¸åŒ¹é… - userMapper.insert(randomAdminUserDO(o -> o.setNickname("æºç "))); - // 准备傿•° - String nickname = "芋"; - - // 调用 - List result = userService.getUserListByNickname(nickname); - // 断言 - assertEquals(1, result.size()); - assertEquals(user, result.get(0)); - } - - @Test - public void testGetUserListByStatus() { - // mock æ•°æ® - AdminUserDO user = randomAdminUserDO(o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); - userMapper.insert(user); - // 测试 status ä¸åŒ¹é… - userMapper.insert(randomAdminUserDO(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); - // 准备傿•° - Integer status = CommonStatusEnum.DISABLE.getStatus(); - - // 调用 - List result = userService.getUserListByStatus(status); - // 断言 - assertEquals(1, result.size()); - assertEquals(user, result.get(0)); - } - - @Test - public void testValidateUserList_success() { - // mock æ•°æ® - AdminUserDO userDO = randomAdminUserDO().setStatus(CommonStatusEnum.ENABLE.getStatus()); - userMapper.insert(userDO); - // 准备傿•° - List ids = singletonList(userDO.getId()); - - // 调用,无需断言 - userService.validateUserList(ids); - } - - @Test - public void testValidateUserList_notFound() { - // 准备傿•° - List ids = singletonList(randomLongId()); - - // 调用, 并断言异常 - assertServiceException(() -> userService.validateUserList(ids), USER_NOT_EXISTS); - } - - @Test - public void testValidateUserList_notEnable() { - // mock æ•°æ® - AdminUserDO userDO = randomAdminUserDO().setStatus(CommonStatusEnum.DISABLE.getStatus()); - userMapper.insert(userDO); - // 准备傿•° - List ids = singletonList(userDO.getId()); - - // 调用, 并断言异常 - assertServiceException(() -> userService.validateUserList(ids), USER_IS_DISABLE, - userDO.getNickname()); - } - - // ========== éšæœºå¯¹è±¡ ========== - - @SafeVarargs - private static AdminUserDO randomAdminUserDO(Consumer... consumers) { - Consumer consumer = (o) -> { - o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // ä¿è¯ status 的范围 - o.setSex(randomEle(SexEnum.values()).getSex()); // ä¿è¯ sex 的范围 - }; - return randomPojo(AdminUserDO.class, ArrayUtils.append(consumer, consumers)); - } - -} diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/application-unit-test.yaml b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/application-unit-test.yaml deleted file mode 100644 index c1f6573..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/application-unit-test.yaml +++ /dev/null @@ -1,48 +0,0 @@ -spring: - main: - lazy-initialization: true # 开坿‡’加载,加快速度 - banner-mode: off # å•元测试,ç¦ç”¨ Banner - ---- #################### æ•°æ®åº“相关é…ç½® #################### - -spring: - # æ•°æ®æºé…置项 - datasource: - name: ruoyi-vue-pro - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模å¼ï¼›DATABASE_TO_UPPER é…置表和字段使用å°å†™ - driver-class-name: org.h2.Driver - username: sa - password: - druid: - async-init: true # å•元测试,异步åˆå§‹åŒ– Druid 连接池,æå‡å¯åŠ¨é€Ÿåº¦ - initial-size: 1 # å•元测试,é…置为 1,æå‡å¯åŠ¨é€Ÿåº¦ - sql: - init: - schema-locations: classpath:/sql/create_tables.sql - - # Redis é…置。Redisson 默认的é…置足够使用,一般ä¸éœ€è¦è¿›è¡Œè°ƒä¼˜ - data: - redis: - host: 127.0.0.1 # åœ°å€ - port: 16379 # 端å£ï¼ˆå•元测试,使用 16379 端å£ï¼‰ - database: 0 # æ•°æ®åº“索引 - -mybatis: - lazy-initialization: true # å•元测试,设置 MyBatis Mapper 延迟加载,加速æ¯ä¸ªå•元测试 - ---- #################### 定时任务相关é…ç½® #################### - ---- #################### é…置中心相关é…ç½® #################### - ---- #################### æœåŠ¡ä¿éšœç›¸å…³é…ç½® #################### - -# Lock4j é…置项(å•元测试,ç¦ç”¨ Lock4j) - ---- #################### 监控相关é…ç½® #################### - ---- #################### 芋é“相关é…ç½® #################### - -# 芋é“é…置项,设置当å‰é¡¹ç›®æ‰€æœ‰è‡ªå®šä¹‰çš„é…ç½® -yudao: - info: - base-package: cn.iocoder.yudao.module diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/logback.xml b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/logback.xml deleted file mode 100644 index daf756b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/logback.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/sql/clean.sql b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/sql/clean.sql deleted file mode 100644 index e7946a1..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/sql/clean.sql +++ /dev/null @@ -1,33 +0,0 @@ -DELETE FROM "system_dept"; -DELETE FROM "system_dict_data"; -DELETE FROM "system_role"; -DELETE FROM "system_role_menu"; -DELETE FROM "system_menu"; -DELETE FROM "system_user_role"; -DELETE FROM "system_dict_type"; -DELETE FROM "system_user_session"; -DELETE FROM "system_post"; -DELETE FROM "system_user_post"; -DELETE FROM "system_notice"; -DELETE FROM "system_login_log"; -DELETE FROM "system_operate_log"; -DELETE FROM "system_users"; -DELETE FROM "system_sms_channel"; -DELETE FROM "system_sms_template"; -DELETE FROM "system_sms_log"; -DELETE FROM "system_sms_code"; -DELETE FROM "system_social_client"; -DELETE FROM "system_social_user"; -DELETE FROM "system_social_user_bind"; -DELETE FROM "system_tenant"; -DELETE FROM "system_tenant_package"; -DELETE FROM "system_oauth2_client"; -DELETE FROM "system_oauth2_approve"; -DELETE FROM "system_oauth2_access_token"; -DELETE FROM "system_oauth2_refresh_token"; -DELETE FROM "system_oauth2_code"; -DELETE FROM "system_mail_account"; -DELETE FROM "system_mail_template"; -DELETE FROM "system_mail_log"; -DELETE FROM "system_notify_template"; -DELETE FROM "system_notify_message"; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/sql/create_tables.sql b/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/sql/create_tables.sql deleted file mode 100644 index 4df039b..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-module-system/src/test/resources/sql/create_tables.sql +++ /dev/null @@ -1,614 +0,0 @@ -CREATE TABLE IF NOT EXISTS "system_dept" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(30) NOT NULL DEFAULT '', - "parent_id" bigint NOT NULL DEFAULT '0', - "sort" int NOT NULL DEFAULT '0', - "leader_user_id" bigint DEFAULT NULL, - "phone" varchar(11) DEFAULT NULL, - "email" varchar(50) DEFAULT NULL, - "status" tinyint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '部门表'; - -CREATE TABLE IF NOT EXISTS "system_dict_data" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "sort" int NOT NULL DEFAULT '0', - "label" varchar(100) NOT NULL DEFAULT '', - "value" varchar(100) NOT NULL DEFAULT '', - "dict_type" varchar(100) NOT NULL DEFAULT '', - "status" tinyint NOT NULL DEFAULT '0', - "color_type" varchar(100) NOT NULL DEFAULT '', - "css_class" varchar(100) NOT NULL DEFAULT '', - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '字典数æ®è¡¨'; - -CREATE TABLE IF NOT EXISTS "system_role" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(30) NOT NULL, - "code" varchar(100) NOT NULL, - "sort" int NOT NULL, - "data_scope" tinyint NOT NULL DEFAULT '1', - "data_scope_dept_ids" varchar(500) NOT NULL DEFAULT '', - "status" tinyint NOT NULL, - "type" tinyint NOT NULL, - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '角色信æ¯è¡¨'; - -CREATE TABLE IF NOT EXISTS "system_role_menu" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "role_id" bigint NOT NULL, - "menu_id" bigint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '角色和èœå•å…³è”表'; - -CREATE TABLE IF NOT EXISTS "system_menu" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(50) NOT NULL, - "permission" varchar(100) NOT NULL DEFAULT '', - "type" tinyint NOT NULL, - "sort" int NOT NULL DEFAULT '0', - "parent_id" bigint NOT NULL DEFAULT '0', - "path" varchar(200) DEFAULT '', - "icon" varchar(100) DEFAULT '#', - "component" varchar(255) DEFAULT NULL, - "component_name" varchar(255) DEFAULT NULL, - "status" tinyint NOT NULL DEFAULT '0', - "visible" bit NOT NULL DEFAULT TRUE, - "keep_alive" bit NOT NULL DEFAULT TRUE, - "always_show" bit NOT NULL DEFAULT TRUE, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT 'èœå•æƒé™è¡¨'; - -CREATE TABLE IF NOT EXISTS "system_user_role" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "role_id" bigint NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp DEFAULT NULL, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp DEFAULT NULL, - "deleted" bit DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '用户和角色关è”表'; - -CREATE TABLE IF NOT EXISTS "system_dict_type" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(100) NOT NULL DEFAULT '', - "type" varchar(100) NOT NULL DEFAULT '', - "status" tinyint NOT NULL DEFAULT '0', - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "deleted_time" timestamp NOT NULL, - PRIMARY KEY ("id") -) COMMENT '字典类型表'; - -CREATE TABLE IF NOT EXISTS `system_user_session` ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - `token` varchar(32) NOT NULL, - `user_id` bigint DEFAULT NULL, - "user_type" tinyint NOT NULL, - `username` varchar(50) NOT NULL DEFAULT '', - `user_ip` varchar(50) DEFAULT NULL, - `user_agent` varchar(512) DEFAULT NULL, - `session_timeout` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '' , - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY (`id`) -) COMMENT '用户在线 Session'; - -CREATE TABLE IF NOT EXISTS "system_post" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "code" varchar(64) NOT NULL, - "name" varchar(50) NOT NULL, - "sort" integer NOT NULL, - "status" tinyint NOT NULL, - "remark" varchar(500) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT 'å²—ä½ä¿¡æ¯è¡¨'; - -CREATE TABLE IF NOT EXISTS `system_user_post`( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint DEFAULT NULL, - "post_id" bigint DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY (`id`) -) COMMENT ='用户岗ä½è¡¨'; - -CREATE TABLE IF NOT EXISTS "system_notice" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "title" varchar(50) NOT NULL COMMENT '公告标题', - "content" text NOT NULL COMMENT '公告内容', - "type" tinyint NOT NULL COMMENT '公告类型(1通知 2公告)', - "status" tinyint NOT NULL DEFAULT '0' COMMENT '公告状æ€ï¼ˆ0正常 1关闭)', - "creator" varchar(64) DEFAULT '' COMMENT '创建者', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - "updater" varchar(64) DEFAULT '' COMMENT '更新者', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', - "deleted" bit NOT NULL DEFAULT 0 COMMENT '是å¦åˆ é™¤', - "tenant_id" bigint not null default '0', - PRIMARY KEY("id") -) COMMENT '通知公告表'; - -CREATE TABLE IF NOT EXISTS `system_login_log` ( - `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, - `log_type` bigint(4) NOT NULL, - "user_id" bigint not null default '0', - "user_type" tinyint NOT NULL, - `trace_id` varchar(64) NOT NULL DEFAULT '', - `username` varchar(50) NOT NULL DEFAULT '', - `result` tinyint(4) NOT NULL, - `user_ip` varchar(50) NOT NULL, - `user_agent` varchar(512) NOT NULL, - `creator` varchar(64) DEFAULT '', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` bit(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) COMMENT ='系统访问记录'; - -CREATE TABLE IF NOT EXISTS `system_operate_log` ( - `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, - `trace_id` varchar(64) NOT NULL DEFAULT '', - `user_id` bigint(20) NOT NULL, - "user_type" tinyint not null default '0', - `type` varchar(50) NOT NULL, - `sub_type` varchar(50) NOT NULL, - `biz_id` bigint(20) NOT NULL, - `action` varchar(2000) NOT NULL DEFAULT '', - `extra` varchar(512) NOT NULL DEFAULT '', - `request_method` varchar(16) DEFAULT '', - `request_url` varchar(255) DEFAULT '', - `user_ip` varchar(50) DEFAULT NULL, - `user_agent` varchar(200) DEFAULT NULL, - `creator` varchar(64) DEFAULT '', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` varchar(64) DEFAULT '', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` bit(1) NOT NULL DEFAULT '0', - "tenant_id" bigint not null default '0', - PRIMARY KEY (`id`) -) COMMENT ='æ“作日志记录'; - -CREATE TABLE IF NOT EXISTS "system_users" ( - "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, - "username" varchar(30) not null, - "password" varchar(100) not null default '', - "nickname" varchar(30) not null, - "remark" varchar(500) default null, - "dept_id" bigint default null, - "post_ids" varchar(255) default null, - "email" varchar(50) default '', - "mobile" varchar(11) default '', - "sex" tinyint default '0', - "avatar" varchar(100) default '', - "status" tinyint not null default '0', - "login_ip" varchar(50) default '', - "login_date" timestamp default null, - "creator" varchar(64) default '', - "create_time" timestamp not null default current_timestamp, - "updater" varchar(64) default '', - "update_time" timestamp not null default current_timestamp, - "deleted" bit not null default false, - "tenant_id" bigint not null default '0', - primary key ("id") -) comment '用户信æ¯è¡¨'; - -CREATE TABLE IF NOT EXISTS "system_sms_channel" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "signature" varchar(10) NOT NULL, - "code" varchar(63) NOT NULL, - "status" tinyint NOT NULL, - "remark" varchar(255) DEFAULT NULL, - "api_key" varchar(63) NOT NULL, - "api_secret" varchar(63) DEFAULT NULL, - "callback_url" varchar(255) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '短信渠é“'; - -CREATE TABLE IF NOT EXISTS "system_sms_template" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "type" tinyint NOT NULL, - "status" tinyint NOT NULL, - "code" varchar(63) NOT NULL, - "name" varchar(63) NOT NULL, - "content" varchar(255) NOT NULL, - "params" varchar(255) NOT NULL, - "remark" varchar(255) DEFAULT NULL, - "api_template_id" varchar(63) NOT NULL, - "channel_id" bigint NOT NULL, - "channel_code" varchar(63) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '短信模æ¿'; - -CREATE TABLE IF NOT EXISTS "system_sms_log" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "channel_id" bigint NOT NULL, - "channel_code" varchar(63) NOT NULL, - "template_id" bigint NOT NULL, - "template_code" varchar(63) NOT NULL, - "template_type" tinyint NOT NULL, - "template_content" varchar(255) NOT NULL, - "template_params" varchar(255) NOT NULL, - "api_template_id" varchar(63) NOT NULL, - "mobile" varchar(11) NOT NULL, - "user_id" bigint DEFAULT '0', - "user_type" tinyint DEFAULT '0', - "send_status" tinyint NOT NULL DEFAULT '0', - "send_time" timestamp DEFAULT NULL, - "send_code" int DEFAULT NULL, - "send_msg" varchar(255) DEFAULT NULL, - "api_send_code" varchar(63) DEFAULT NULL, - "api_send_msg" varchar(255) DEFAULT NULL, - "api_request_id" varchar(255) DEFAULT NULL, - "api_serial_no" varchar(255) DEFAULT NULL, - "receive_status" tinyint NOT NULL DEFAULT '0', - "receive_time" timestamp DEFAULT NULL, - "api_receive_code" varchar(63) DEFAULT NULL, - "api_receive_msg" varchar(255) DEFAULT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '短信日志'; - -CREATE TABLE IF NOT EXISTS "system_sms_code" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "mobile" varchar(11) NOT NULL, - "code" varchar(11) NOT NULL, - "scene" bigint NOT NULL, - "create_ip" varchar NOT NULL, - "today_index" int NOT NULL, - "used" bit NOT NULL DEFAULT FALSE, - "used_time" timestamp DEFAULT NULL, - "used_ip" varchar NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '短信日志'; - -CREATE TABLE IF NOT EXISTS "system_social_client" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(255) NOT NULL, - "social_type" int NOT NULL, - "user_type" int NOT NULL, - "client_id" varchar(255) NOT NULL, - "client_secret" varchar(255) NOT NULL, - "agent_id" varchar(255) NOT NULL, - "status" int NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '社交客户端表'; - -CREATE TABLE IF NOT EXISTS "system_social_user" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "type" tinyint NOT NULL, - "openid" varchar(64) NOT NULL, - "token" varchar(256) DEFAULT NULL, - "raw_token_info" varchar(1024) NOT NULL, - "nickname" varchar(32) NOT NULL, - "avatar" varchar(255) DEFAULT NULL, - "raw_user_info" varchar(1024) NOT NULL, - "code" varchar(64) NOT NULL, - "state" varchar(64), - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '社交用户'; - -CREATE TABLE IF NOT EXISTS "system_social_user_bind" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "user_type" tinyint NOT NULL, - "social_type" tinyint NOT NULL, - "social_user_id" number NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '社交用户的绑定'; - -CREATE TABLE IF NOT EXISTS "system_tenant" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(63) NOT NULL, - "contact_user_id" bigint NOT NULL DEFAULT '0', - "contact_name" varchar(255) NOT NULL, - "contact_mobile" varchar(255), - "status" tinyint NOT NULL, - "website" varchar(63) DEFAULT '', - "package_id" bigint NOT NULL, - "expire_time" timestamp NOT NULL, - "account_count" int NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '租户'; - -CREATE TABLE IF NOT EXISTS "system_tenant_package" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(30) NOT NULL, - "status" tinyint NOT NULL, - "remark" varchar(256), - "menu_ids" varchar(2048) NOT NULL, - "creator" varchar(64) DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar(64) DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '租户套é¤è¡¨'; - -CREATE TABLE IF NOT EXISTS "system_oauth2_client" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "client_id" varchar NOT NULL, - "secret" varchar NOT NULL, - "name" varchar NOT NULL, - "logo" varchar NOT NULL, - "description" varchar, - "status" int NOT NULL, - "access_token_validity_seconds" int NOT NULL, - "refresh_token_validity_seconds" int NOT NULL, - "redirect_uris" varchar NOT NULL, - "authorized_grant_types" varchar NOT NULL, - "scopes" varchar NOT NULL DEFAULT '', - "auto_approve_scopes" varchar NOT NULL DEFAULT '', - "authorities" varchar NOT NULL DEFAULT '', - "resource_ids" varchar NOT NULL DEFAULT '', - "additional_information" varchar NOT NULL DEFAULT '', - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT 'OAuth2 客户端表'; - -CREATE TABLE IF NOT EXISTS "system_oauth2_approve" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "user_type" tinyint NOT NULL, - "client_id" varchar NOT NULL, - "scope" varchar NOT NULL, - "approved" bit NOT NULL DEFAULT FALSE, - "expires_time" datetime NOT NULL, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT 'OAuth2 批准表'; - -CREATE TABLE IF NOT EXISTS "system_oauth2_access_token" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "user_type" tinyint NOT NULL, - "user_info" varchar NOT NULL, - "access_token" varchar NOT NULL, - "refresh_token" varchar NOT NULL, - "client_id" varchar NOT NULL, - "scopes" varchar NOT NULL, - "approved" bit NOT NULL DEFAULT FALSE, - "expires_time" datetime NOT NULL, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null, - PRIMARY KEY ("id") -) COMMENT 'OAuth2 访问令牌'; - -CREATE TABLE IF NOT EXISTS "system_oauth2_refresh_token" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "user_type" tinyint NOT NULL, - "refresh_token" varchar NOT NULL, - "client_id" varchar NOT NULL, - "scopes" varchar NOT NULL, - "approved" bit NOT NULL DEFAULT FALSE, - "expires_time" datetime NOT NULL, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT 'OAuth2 刷新令牌'; - -CREATE TABLE IF NOT EXISTS "system_oauth2_code" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "user_type" tinyint NOT NULL, - "code" varchar NOT NULL, - "client_id" varchar NOT NULL, - "scopes" varchar NOT NULL, - "expires_time" datetime NOT NULL, - "redirect_uri" varchar NOT NULL, - "state" varchar NOT NULL, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT 'OAuth2 刷新令牌'; - -CREATE TABLE IF NOT EXISTS "system_mail_account" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "mail" varchar NOT NULL, - "username" varchar NOT NULL, - "password" varchar NOT NULL, - "host" varchar NOT NULL, - "port" int NOT NULL, - "ssl_enable" bit NOT NULL, - "starttls_enable" bit NOT NULL, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '邮箱账å·è¡¨'; - -CREATE TABLE IF NOT EXISTS "system_mail_template" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "code" varchar NOT NULL, - "account_id" bigint NOT NULL, - "nickname" varchar, - "title" varchar NOT NULL, - "content" varchar NOT NULL, - "params" varchar NOT NULL, - "status" varchar NOT NULL, - "remark" varchar, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '邮件模版表'; - -CREATE TABLE IF NOT EXISTS "system_mail_log" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint, - "user_type" varchar, - "to_mail" varchar NOT NULL, - "account_id" bigint NOT NULL, - "from_mail" varchar NOT NULL, - "template_id" bigint NOT NULL, - "template_code" varchar NOT NULL, - "template_nickname" varchar, - "template_title" varchar NOT NULL, - "template_content" varchar NOT NULL, - "template_params" varchar NOT NULL, - "send_status" varchar NOT NULL, - "send_time" datetime, - "send_message_id" varchar, - "send_exception" varchar, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '邮件日志表'; - -CREATE TABLE IF NOT EXISTS "system_notify_template" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar NOT NULL, - "code" varchar NOT NULL, - "nickname" varchar NOT NULL, - "content" varchar NOT NULL, - "type" varchar NOT NULL, - "params" varchar, - "status" varchar NOT NULL, - "remark" varchar, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - PRIMARY KEY ("id") -) COMMENT '站内信模æ¿è¡¨'; - -CREATE TABLE IF NOT EXISTS "system_notify_message" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "user_id" bigint NOT NULL, - "user_type" varchar NOT NULL, - "template_id" bigint NOT NULL, - "template_code" varchar NOT NULL, - "template_nickname" varchar NOT NULL, - "template_content" varchar NOT NULL, - "template_type" int NOT NULL, - "template_params" varchar NOT NULL, - "read_status" bit NOT NULL, - "read_time" varchar, - "creator" varchar DEFAULT '', - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updater" varchar DEFAULT '', - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint not null default '0', - PRIMARY KEY ("id") -) COMMENT '站内信消æ¯è¡¨'; diff --git a/ruoyi-vue-pro-master-jdk17/yudao-server/pom.xml b/ruoyi-vue-pro-master-jdk17/yudao-server/pom.xml index bbdfeee..0d03f78 100644 --- a/ruoyi-vue-pro-master-jdk17/yudao-server/pom.xml +++ b/ruoyi-vue-pro-master-jdk17/yudao-server/pom.xml @@ -14,9 +14,10 @@ ${project.artifactId} - åŽç«¯ Server çš„ä¸»é¡¹ç›®ï¼Œé€šè¿‡å¼•å…¥éœ€è¦ yudao-module-xxx çš„ä¾èµ–, - 从而实现æä¾› RESTful API ç»™ yudao-ui-adminã€yudao-ui-user ç­‰å‰ç«¯é¡¹ç›®ã€‚ - 本质上æ¥è¯´ï¼Œå®ƒå°±æ˜¯ä¸ªç©ºå£³ï¼ˆå®¹å™¨ï¼‰ï¼ + 该包是 Server 主项目,包å«äº†æ‰€æœ‰çš„业务模å—。 + 业务模å—包括:系统ã€åŸºç¡€è®¾æ–½ã€å·¥ä½œæµã€æ•°æ®æŠ¥è¡¨ã€ç‰©è”网等。 + æ¯ä¸ªä¸šåŠ¡æ¨¡å—,都是一个 Maven å­æ¨¡å—。 + 该包的 pom.xml æ–‡ä»¶ï¼Œä¸»è¦æ˜¯å¼•å…¥å„个业务模å—çš„ä¾èµ–。 https://github.com/YunaiV/ruoyi-vue-pro diff --git a/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-uniapp/README.md b/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-uniapp/README.md deleted file mode 100644 index 9f72209..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-uniapp/README.md +++ /dev/null @@ -1,4 +0,0 @@ -基于 Vue + uni-app 实现的管ç†åŽå°ã€‚仓库地å€ï¼š - -* Gitee: -* GitHub: diff --git a/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vben/README.md b/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vben/README.md deleted file mode 100644 index c6a866c..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vben/README.md +++ /dev/null @@ -1,4 +0,0 @@ -基于 Vue3 + vben(ant-design-vue) 实现的管ç†åŽå°ã€‚仓库地å€ï¼š - -* Gitee: -* GitHub: diff --git a/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vue2/README.md b/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vue2/README.md deleted file mode 100644 index f1fbdad..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vue2/README.md +++ /dev/null @@ -1,4 +0,0 @@ -基于 Vue2 + element-ui 实现的管ç†åŽå°ã€‚仓库地å€ï¼š - -* Gitee: -* GitHub: diff --git a/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vue3/README.md b/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vue3/README.md deleted file mode 100644 index 6983c52..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-admin-vue3/README.md +++ /dev/null @@ -1,4 +0,0 @@ -基于 Vue3 + element-plus 实现的管ç†åŽå°ã€‚仓库地å€ï¼š - -* Gitee: -* GitHub: diff --git a/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-mall-uniapp/README.md b/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-mall-uniapp/README.md deleted file mode 100644 index 57b1868..0000000 --- a/ruoyi-vue-pro-master-jdk17/yudao-ui/yudao-ui-mall-uniapp/README.md +++ /dev/null @@ -1,8 +0,0 @@ -仓库地å€ï¼š - -* Gitee: -* GitHub: - -功能列表: -* 基于 uniapp å¼€å‘,支æŒå¾®ä¿¡å°ç¨‹åºã€å¾®ä¿¡å…¬ä¼—å·ã€H5 移动端,未æ¥ä¼šæ”¯æŒæ”¯ä»˜å®å°ç¨‹åºã€æŠ–音å°ç¨‹åºç­‰ -* æ”¯æŒ SaaS å¤šç§Ÿæˆ·ï¼Œå¯æ»¡è¶³å•†å“ã€è®¢å•ã€æ”¯ä»˜ã€ä¼šå‘˜ã€ä¼˜æƒ åˆ¸ã€ç§’æ€ã€æ‹¼å›¢ã€ç ä»·ã€åˆ†é”€ã€ç§¯åˆ†ç­‰å¤šç§ç»è¥éœ€æ±‚